@yourself_id/siwys-react-native 0.33.2-update-workflows.13.0 → 0.34.1-reset-mnemonic-encryption.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  // src/index.ts
32
32
  var index_exports = {};
33
33
  __export(index_exports, {
34
+ CipherReactNative: () => CipherReactNative,
34
35
  GatekeeperReactNative: () => GatekeeperReactNative,
35
36
  GatekeeperTypes: () => GatekeeperTypes,
36
37
  KeymasterReactNative: () => KeymasterReactNative
@@ -40,6 +41,7 @@ module.exports = __toCommonJS(index_exports);
40
41
  // src/keymaster-react-native.ts
41
42
  var import_gatekeeper = require("@mdip/gatekeeper");
42
43
  var import_keymaster = __toESM(require("@mdip/keymaster"), 1);
44
+ var import_encryption = require("@mdip/keymaster/encryption");
43
45
  var Keymaster = import_keymaster.default?.default || import_keymaster.default;
44
46
  var KeymasterReactNative = class _KeymasterReactNative {
45
47
  static instance = null;
@@ -396,6 +398,21 @@ var KeymasterReactNative = class _KeymasterReactNative {
396
398
  _KeymasterReactNative.getInstance().ensureInitialized();
397
399
  return _KeymasterReactNative.getInstance().recoverWalletInternal(did);
398
400
  }
401
+ // Re-encrypt the wallet's stored mnemonic
402
+ /**
403
+ * Re-encrypts the wallet's `seed.mnemonicEnc` from a known-good mnemonic
404
+ * using the current passphrase, leaving the rest of the wallet (encrypted
405
+ * ids, counter, names) untouched. Used to recover from a corrupted or
406
+ * double-encrypted `mnemonicEnc` without destroying wallet contents.
407
+ * @param mnemonic The plaintext mnemonic to re-encrypt and store.
408
+ * @returns A promise with the updated wallet.
409
+ */
410
+ static async resetMnemonicEncryption(mnemonic) {
411
+ _KeymasterReactNative.getInstance().ensureInitialized();
412
+ return _KeymasterReactNative.getInstance().resetMnemonicEncryptionInternal(
413
+ mnemonic
414
+ );
415
+ }
399
416
  // Helper method to retrieve the instance
400
417
  static getInstance() {
401
418
  if (!_KeymasterReactNative.instance) {
@@ -531,6 +548,12 @@ var KeymasterReactNative = class _KeymasterReactNative {
531
548
  async recoverWalletInternal(...args) {
532
549
  return this.keymasterService.recoverWallet(...args);
533
550
  }
551
+ async resetMnemonicEncryptionInternal(mnemonic) {
552
+ const wallet = await this.keymasterService.loadWallet();
553
+ wallet.seed.mnemonicEnc = await (0, import_encryption.encMnemonic)(mnemonic, this.config.passphrase);
554
+ await this.keymasterService.saveWallet(wallet, true);
555
+ return wallet;
556
+ }
534
557
  validateConfig(config) {
535
558
  if (!config.gatekeeperConfig) {
536
559
  throw new Error("Missing Gatekeeper config");
@@ -663,11 +686,32 @@ var GatekeeperReactNative = class _GatekeeperReactNative {
663
686
  }
664
687
  };
665
688
 
689
+ // src/cipher-react-native.ts
690
+ var bip39 = __toESM(require("bip39"), 1);
691
+ var import_bip32 = require("@scure/bip32");
692
+ var import_base64 = require("multiformats/bases/base64");
693
+ var import_cipher_base = __toESM(require("@mdip/cipher/dist/esm/cipher-base.js"), 1);
694
+ var CipherReactNative = class extends import_cipher_base.default {
695
+ generateHDKey(mnemonic) {
696
+ const seed = bip39.mnemonicToSeedSync(mnemonic);
697
+ return import_bip32.HDKey.fromMasterSeed(seed);
698
+ }
699
+ generateHDKeyJSON(json) {
700
+ return import_bip32.HDKey.fromExtendedKey(json.xpriv);
701
+ }
702
+ generateRandomSalt() {
703
+ const array = new Uint8Array(32);
704
+ globalThis.crypto.getRandomValues(array);
705
+ return import_base64.base64url.encode(array);
706
+ }
707
+ };
708
+
666
709
  // src/index.ts
667
710
  __reExport(index_exports, require("@mdip/keymaster"), module.exports);
668
711
  var GatekeeperTypes = __toESM(require("@mdip/gatekeeper"), 1);
669
712
  // Annotate the CommonJS export names for ESM import in node:
670
713
  0 && (module.exports = {
714
+ CipherReactNative,
671
715
  GatekeeperReactNative,
672
716
  GatekeeperTypes,
673
717
  KeymasterReactNative,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/keymaster-react-native.ts","../src/gatekeeper-react-native.ts"],"sourcesContent":["export {\n KeymasterReactNative,\n KeymasterConfig as KeymasterReactNativeConfig,\n} from \"./keymaster-react-native.js\";\nexport { GatekeeperReactNative } from \"./gatekeeper-react-native.js\";\n\nexport {\n SdkConfig,\n WalletConfig,\n CreateChallengeResponse,\n CreateChallengeSpec,\n} from \"./types/index.js\";\n\nexport * from \"@mdip/keymaster\";\nimport * as GatekeeperTypes from \"@mdip/gatekeeper\";\n\nexport { GatekeeperTypes };\n","// Imports\nimport CipherNode from \"@mdip/cipher\";\nimport {\n ChallengeResponse,\n CreateAssetOptions,\n CreateResponseOptions,\n IssueCredentialsOptions,\n StoredWallet,\n VerifiableCredential,\n WalletBase,\n WalletFile,\n} from \"@mdip/keymaster\";\n\nimport {\n GatekeeperClient,\n MdipDocument,\n Operation,\n ResolveDIDOptions,\n} from \"@mdip/gatekeeper\";\nimport {\n CreateChallengeResponse,\n CreateChallengeSpec,\n SdkConfig,\n} from \"./types/index.js\";\nimport KeymasterModule from \"@mdip/keymaster\";\n\n// @ts-ignore\nconst Keymaster = KeymasterModule?.default || KeymasterModule;\n\n// Keymaster configuration interface\nexport interface KeymasterConfig {\n gatekeeperConfig?: SdkConfig;\n walletDb?: WalletBase;\n cipher?: CipherNode;\n passphrase: string;\n}\nexport class KeymasterReactNative {\n private static instance: KeymasterReactNative | null = null;\n private config: KeymasterConfig;\n private keymasterService!: typeof Keymaster;\n private gatekeeper: GatekeeperClient | null = null;\n\n private constructor(config: KeymasterConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n // Initializes the instance if not already initialized\n /**\n * Initializes the KeymasterReactNative instance.\n * @param config The configuration object for the Keymaster service.\n */\n public static initialize(config: KeymasterConfig): void {\n if (!KeymasterReactNative.instance) {\n KeymasterReactNative.instance = new KeymasterReactNative(config);\n } else {\n console.warn(\n \"KeymasterReactNative already initialized, ignoring re-initialization.\",\n );\n }\n }\n\n /**\n * Resets the KeymasterReactNative instance.\n * This clears the singleton instance, allowing for re-initialization.\n */\n public static resetInstance(): void {\n KeymasterReactNative.instance = null;\n console.log(\"✅ KeymasterReactNative instance reset\");\n }\n\n // Ensures the instance is initialized\n private ensureInitialized(): void {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n }\n\n /**\n * Starts the KeymasterReactNative service.\n * @returns A boolean indicating whether the service was started successfully.\n */\n public static async start(): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().startInternal();\n }\n\n // Method to create a challenge\n /**\n * Creates a challenge for the user to solve.\n * @param spec The challenge specifications.\n * @param options Additional options for creating the challenge (optional).\n * @returns A promise with the challenge response, including the challenge and its callback URL.\n */\n public static async createChallenge(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createChallengeInternal(\n spec,\n options,\n );\n }\n\n // Method to bind a credential to a user\n /**\n * Binds a credential to a subject.\n * @param schemaId The schema ID for the credential.\n * @param subjectId The subject's DID (Decentralized Identifier).\n * @param options Optional options, such as validity period and credential data.\n * @returns A promise with the verifiable credential that was bound.\n */\n public static async bindCredential(\n schemaId: string,\n subjectId: string,\n options?: {\n validFrom?: string;\n validUntil?: string;\n credential?: Record<string, unknown>;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().bindCredentialInternal(\n schemaId,\n subjectId,\n options,\n );\n }\n\n // Method to create a response\n /**\n * Creates a response for the challenge.\n * @param challengeDID The DID of the challenge to respond to.\n * @param options Optional options for creating the response (optional).\n * @returns A promise with the response string.\n */\n public static async createResponse(\n challengeDID: string,\n options?: CreateResponseOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createResponseInternal(\n challengeDID,\n options,\n );\n }\n\n // Backup wallet\n /**\n * Backups the wallet data.\n * @param registry Optional registry URL for the wallet backup.\n * @returns A promise with a backup string (e.g., backup URL).\n */\n public static async backupWallet(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().backupWalletInternal(\n registry,\n wallet,\n );\n }\n\n // Issue credential to a user\n /**\n * Issues a credential to the subject.\n * @param credential The credential to be issued.\n * @param options Optional parameters for issuing the credential.\n * @returns A promise with the credential ID or issuance result.\n */\n public static async issueCredential(\n credential: Partial<VerifiableCredential>,\n options?: IssueCredentialsOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().issueCredentialInternal(\n credential,\n options,\n );\n }\n\n // Publish a credential\n /**\n * Publishes a verifiable credential.\n * @param did The DID of the credential.\n * @param options Optional parameters, such as whether to reveal the credential.\n * @returns A promise with the published credential.\n */\n public static async publishCredential(\n did: string,\n options?: {\n reveal?: boolean;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().publishCredentialInternal(\n did,\n options,\n );\n }\n\n // Accept a credential\n /**\n * Accepts a credential.\n * @param did The DID of the credential to accept.\n * @returns A promise indicating whether the credential was successfully accepted.\n */\n public static async acceptCredential(did: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().acceptCredentialInternal(did);\n }\n\n // Show mnemonic\n /**\n * Shows the mnemonic for the wallet.\n * @returns A promise with the mnemonic string.\n */\n public static async showMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().showMnemonicInternal();\n }\n\n // Verify a challenge response\n /**\n * Verifies a response to a challenge.\n * @param did The DID to verify the response for.\n * @param options Optional options, such as retry behavior.\n * @returns A promise with the response verification result.\n */\n public static async verifyResponse(\n did: string,\n options?: { retries?: number; delay?: number },\n ): Promise<ChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().verifyResponseInternal(\n did,\n options,\n );\n }\n\n // Decrypt a message\n /**\n * Decrypts a message using the current key.\n * @param did The DID of the message to decrypt.\n * @returns A promise with the decrypted message.\n */\n public static async decryptMessage(did: string): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMessageInternal(did);\n }\n\n // Decrypt mnemonic\n /**\n * Decrypts the mnemonic for the wallet.\n * @returns A promise with the decrypted mnemonic.\n */\n public static async decryptMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMnemonicInternal();\n }\n\n // Get a credential\n /**\n * Retrieves a verifiable credential.\n * @param id The credential ID to retrieve.\n * @returns A promise with the credential data or null if not found.\n */\n public static async getCredential(\n id: string,\n ): Promise<VerifiableCredential | null> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().getCredentialInternal(id);\n }\n\n // Remove a credential\n /**\n * Removes a verifiable credential.\n * @param id The credential ID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeCredential(id: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeCredentialInternal(id);\n }\n\n // Update a credential\n /**\n * Updates a verifiable credential.\n * @param did The DID of the credential to update.\n * @param credential The new credential data.\n * @returns A promise indicating success or failure of the update operation.\n */\n public static async updateCredential(\n did: string,\n credential: VerifiableCredential,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().updateCredentialInternal(\n did,\n credential,\n );\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createId(\n name: string,\n options?: {\n registry?: string;\n },\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdInternal(name, options);\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createIdOperation(\n name: string,\n account: number,\n options?: {\n registry?: string;\n },\n ): Promise<Operation> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdOperationInternal(\n name,\n account,\n options,\n );\n }\n\n // Remove an ID\n /**\n * Removes an existing DID.\n * @param name The name of the DID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeIdInternal(name);\n }\n\n // Resolve a DID\n /**\n * Resolves a DID to fetch associated data.\n * @param did The DID to resolve.\n * @param options Optional parameters for resolving the DID.\n * @returns A promise with the resolved DID data.\n */\n public static async resolveDID(\n did: string,\n options?: ResolveDIDOptions,\n ): Promise<MdipDocument> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().resolveDIDInternal(did, options);\n }\n\n // Set the current DID\n /**\n * Sets the current DID in use.\n * @param name The DID name to set as the current one.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async setCurrentId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().setCurrentIdInternal(name);\n }\n\n // Create a schema\n /**\n * Creates a new schema for credentials.\n * @param schema The schema data to create.\n * @param options Optional options for creating the schema.\n * @returns A promise with the created schema data.\n */\n public static async createSchema(\n schema?: unknown,\n options?: CreateAssetOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createSchemaInternal(\n schema,\n options,\n );\n }\n\n // Load wallet\n /**\n * Loads the current wallet.\n * @returns A promise with the loaded wallet file.\n */\n public static async loadWallet(): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().loadWalletInternal();\n }\n\n // Save wallet\n /**\n * Saves the wallet.\n * @param wallet The wallet to save.\n * @param overwrite Optional flag to overwrite the existing wallet (default: true).\n * @returns A promise with a boolean indicating success.\n */\n public static async saveWallet(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().saveWalletInternal(\n wallet,\n overwrite,\n );\n }\n\n // Create a new wallet\n /**\n * Creates a new wallet.\n * @param mnemonic Optional mnemonic to initialize the wallet.\n * @param overwrite Optional flag to overwrite the existing wallet.\n * @returns A promise with the wallet creation result.\n */\n public static async newWallet(\n mnemonic?: string,\n overwrite?: boolean,\n ): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().newWalletInternal(\n mnemonic,\n overwrite,\n );\n }\n\n /**\n * Adds a custom header to the GatekeeperClient instance.\n * @param header Header name\n * @param value Header value\n */\n public static addCustomHeader(header: string, value: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.addCustomHeader(header, value);\n }\n\n /**\n * Removes a custom header from the GatekeeperClient instance.\n * @param header Header name\n */\n public static removeCustomHeader(header: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.removeCustomHeader(header);\n }\n\n // Recover an existing wallet\n /**\n * Recovers a wallet from a backup.\n * @param did The DID to use for recovery (optional).\n * @returns A promise with the wallet recovery result.\n */\n public static async recoverWallet(did?: string): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().recoverWalletInternal(did);\n }\n\n // Helper method to retrieve the instance\n private static getInstance(): KeymasterReactNative {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n return KeymasterReactNative.instance;\n }\n\n private getGatekeeper(): GatekeeperClient {\n if (!this.gatekeeper) {\n throw new Error(\"GatekeeperClient not initialized\");\n }\n return this.gatekeeper;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config.gatekeeperConfig) {\n return await this.startIntegratedKeymaster();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedKeymaster(): Promise<boolean> {\n try {\n if (this.config.walletDb && this.config.cipher) {\n if (!this.gatekeeper) {\n this.gatekeeper = new GatekeeperClient();\n }\n await this.gatekeeper.connect({\n url: this.config.gatekeeperConfig?.url,\n waitUntilReady: this.config.gatekeeperConfig?.waitUntilReady,\n intervalSeconds: this.config.gatekeeperConfig?.intervalSeconds,\n chatty: this.config.gatekeeperConfig?.chatty,\n });\n if (this.config.gatekeeperConfig?.token) {\n this.gatekeeper.addCustomHeader(\n \"authorization\",\n `Bearer ${this.config.gatekeeperConfig.token}`,\n );\n }\n this.keymasterService = new Keymaster({\n gatekeeper: this.gatekeeper,\n wallet: this.config.walletDb,\n cipher: this.config.cipher,\n passphrase: this.config.passphrase,\n });\n } else {\n return false;\n }\n } catch (e) {\n console.error(\"Error starting KeymasterReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async createChallengeInternal(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n const challenge: string = await this.keymasterService.createChallenge(\n spec,\n options,\n );\n return {\n challenge: challenge,\n challengeUrl: `${spec.callback}?challenge=${challenge}`,\n };\n }\n\n private async bindCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"bindCredential\"]>\n ) {\n return this.keymasterService.bindCredential(...args);\n }\n\n private async createResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"createResponse\"]>\n ) {\n return this.keymasterService.createResponse(...args);\n }\n\n private async backupWalletInternal(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n return this.keymasterService.backupWallet(registry, wallet);\n }\n\n private async issueCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"issueCredential\"]>\n ) {\n return this.keymasterService.issueCredential(...args);\n }\n\n private async publishCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"publishCredential\"]>\n ) {\n return this.keymasterService.publishCredential(...args);\n }\n\n private async acceptCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"acceptCredential\"]>\n ) {\n return this.keymasterService.acceptCredential(...args);\n }\n\n private async showMnemonicInternal(): Promise<string> {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async verifyResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"verifyResponse\"]>\n ) {\n return this.keymasterService.verifyResponse(...args);\n }\n\n private async decryptMessageInternal(\n ...args: Parameters<(typeof Keymaster)[\"decryptMessage\"]>\n ) {\n return this.keymasterService.decryptMessage(...args);\n }\n\n private async decryptMnemonicInternal() {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async getCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"getCredential\"]>\n ) {\n return this.keymasterService.getCredential(...args);\n }\n\n private async removeCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeCredential\"]>\n ) {\n return this.keymasterService.removeCredential(...args);\n }\n\n private async updateCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"updateCredential\"]>\n ) {\n return this.keymasterService.updateCredential(...args);\n }\n\n private async createIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"createId\"]>\n ) {\n return this.keymasterService.createId(...args);\n }\n\n private async createIdOperationInternal(\n ...args: Parameters<(typeof Keymaster)[\"createIdOperation\"]>\n ) {\n return this.keymasterService.createIdOperation(...args);\n }\n\n private async removeIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeId\"]>\n ) {\n return this.keymasterService.removeId(...args);\n }\n\n private async resolveDIDInternal(\n ...args: Parameters<(typeof Keymaster)[\"resolveDID\"]>\n ) {\n return this.keymasterService.resolveDID(...args);\n }\n\n private async setCurrentIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"setCurrentId\"]>\n ) {\n return this.keymasterService.setCurrentId(...args);\n }\n\n private async createSchemaInternal(\n ...args: Parameters<(typeof Keymaster)[\"createSchema\"]>\n ) {\n return this.keymasterService.createSchema(...args);\n }\n\n private async loadWalletInternal(): Promise<WalletFile> {\n return this.keymasterService.loadWallet();\n }\n\n private async saveWalletInternal(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n return this.keymasterService.saveWallet(wallet, overwrite);\n }\n\n private async newWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"newWallet\"]>\n ) {\n return this.keymasterService.newWallet(...args);\n }\n\n private async recoverWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"recoverWallet\"]>\n ) {\n return this.keymasterService.recoverWallet(...args);\n }\n\n private validateConfig(config: KeymasterConfig): void {\n if (!config.gatekeeperConfig) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n\n if (config.gatekeeperConfig) {\n if (!config.walletDb?.loadWallet) {\n throw new Error(\"Missing load wallet callback\");\n }\n if (!config.walletDb?.saveWallet) {\n throw new Error(\"Missing save wallet callback\");\n }\n if (!config.passphrase) {\n throw new Error(\"Missing passphrase\");\n }\n }\n }\n}\n","import { SdkConfig } from \"./types/index.js\";\nimport {\n GatekeeperClient,\n MdipDocument,\n GetDIDOptions,\n Operation,\n} from \"@mdip/gatekeeper\";\n\nexport class GatekeeperReactNative {\n private static instance: GatekeeperReactNative | null = null;\n\n private config: SdkConfig;\n private gatekeeperClient!: GatekeeperClient;\n\n private constructor(config: SdkConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n public static initialize(config: SdkConfig) {\n if (!GatekeeperReactNative.instance) {\n GatekeeperReactNative.instance = new GatekeeperReactNative(config);\n } else {\n console.warn(\n \"GatekeeperReactNative already initialized, ignoring re-initialization.\"\n );\n }\n }\n\n private ensureInitialized() {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n }\n\n // Delegated STATIC methods\n\n public static async start() {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().startInternal();\n }\n\n public static async getDIDs(\n ...args: Parameters<GatekeeperReactNative[\"getDIDsInternal\"]>\n ) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().getDIDsInternal(...args);\n }\n\n public static async addCustomHeader({\n header,\n value,\n }: {\n header: string;\n value: string;\n }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().addCustomHeaderInternal({\n header,\n value,\n });\n }\n\n public static async removeCustomHeader({ header }: { header: string }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().removeCustomHeaderInternal({\n header,\n });\n }\n\n public static async generateDID(operation: Operation): Promise<string> {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().generateDIDInternal(operation);\n }\n\n private static getInstance(): GatekeeperReactNative {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n return GatekeeperReactNative.instance;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config) {\n return await this.startIntegratedGatekeeper();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedGatekeeper(): Promise<boolean> {\n try {\n this.gatekeeperClient = new GatekeeperClient();\n await this.gatekeeperClient.connect({\n url: this.config?.url,\n waitUntilReady: this.config?.waitUntilReady,\n intervalSeconds: this.config?.intervalSeconds,\n chatty: this.config?.chatty,\n });\n } catch (e) {\n console.error(\"Error starting GatekeeperReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async getDIDsInternal({\n dids,\n resolve,\n }: GetDIDOptions): Promise<string[] | MdipDocument[]> {\n const response = await this.gatekeeperClient.getDIDs({ dids, resolve });\n return response;\n }\n\n private async addCustomHeaderInternal({\n header,\n value,\n }: {\n header: string;\n value: string;\n }): Promise<void> {\n await this.gatekeeperClient.addCustomHeader(header, value);\n }\n\n private async removeCustomHeaderInternal({\n header,\n }: {\n header: string;\n }): Promise<void> {\n await this.gatekeeperClient.removeCustomHeader(header);\n }\n\n private async generateDIDInternal(operation: Operation): Promise<string> {\n return await this.gatekeeperClient.generateDID(operation);\n }\n\n private validateConfig(config: SdkConfig): void {\n if (!config) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n }\n}\n"],"mappings":"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","names":["KeymasterModule","import_gatekeeper"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/keymaster-react-native.ts","../src/gatekeeper-react-native.ts","../src/cipher-react-native.ts"],"sourcesContent":["export {\n KeymasterReactNative,\n KeymasterConfig as KeymasterReactNativeConfig,\n} from \"./keymaster-react-native.js\";\nexport { GatekeeperReactNative } from \"./gatekeeper-react-native.js\";\nexport { default as CipherReactNative } from \"./cipher-react-native.js\";\n\nexport {\n SdkConfig,\n WalletConfig,\n CreateChallengeResponse,\n CreateChallengeSpec,\n} from \"./types/index.js\";\n\nexport * from \"@mdip/keymaster\";\nimport * as GatekeeperTypes from \"@mdip/gatekeeper\";\n\nexport { GatekeeperTypes };\n","// Imports\nimport CipherReactNative from \"./cipher-react-native.js\";\nimport {\n ChallengeResponse,\n CreateAssetOptions,\n CreateResponseOptions,\n IssueCredentialsOptions,\n StoredWallet,\n VerifiableCredential,\n WalletBase,\n WalletFile,\n} from \"@mdip/keymaster\";\n\nimport {\n GatekeeperClient,\n MdipDocument,\n Operation,\n ResolveDIDOptions,\n} from \"@mdip/gatekeeper\";\nimport {\n CreateChallengeResponse,\n CreateChallengeSpec,\n SdkConfig,\n} from \"./types/index.js\";\nimport KeymasterModule from \"@mdip/keymaster\";\nimport { encMnemonic } from \"@mdip/keymaster/encryption\";\n\n// @ts-ignore\nconst Keymaster = KeymasterModule?.default || KeymasterModule;\n\n// Keymaster configuration interface\nexport interface KeymasterConfig {\n gatekeeperConfig?: SdkConfig;\n walletDb?: WalletBase;\n cipher?: CipherReactNative;\n passphrase: string;\n}\nexport class KeymasterReactNative {\n private static instance: KeymasterReactNative | null = null;\n private config: KeymasterConfig;\n private keymasterService!: typeof Keymaster;\n private gatekeeper: GatekeeperClient | null = null;\n\n private constructor(config: KeymasterConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n // Initializes the instance if not already initialized\n /**\n * Initializes the KeymasterReactNative instance.\n * @param config The configuration object for the Keymaster service.\n */\n public static initialize(config: KeymasterConfig): void {\n if (!KeymasterReactNative.instance) {\n KeymasterReactNative.instance = new KeymasterReactNative(config);\n } else {\n console.warn(\n \"KeymasterReactNative already initialized, ignoring re-initialization.\",\n );\n }\n }\n\n /**\n * Resets the KeymasterReactNative instance.\n * This clears the singleton instance, allowing for re-initialization.\n */\n public static resetInstance(): void {\n KeymasterReactNative.instance = null;\n console.log(\"✅ KeymasterReactNative instance reset\");\n }\n\n // Ensures the instance is initialized\n private ensureInitialized(): void {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n }\n\n /**\n * Starts the KeymasterReactNative service.\n * @returns A boolean indicating whether the service was started successfully.\n */\n public static async start(): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().startInternal();\n }\n\n // Method to create a challenge\n /**\n * Creates a challenge for the user to solve.\n * @param spec The challenge specifications.\n * @param options Additional options for creating the challenge (optional).\n * @returns A promise with the challenge response, including the challenge and its callback URL.\n */\n public static async createChallenge(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createChallengeInternal(\n spec,\n options,\n );\n }\n\n // Method to bind a credential to a user\n /**\n * Binds a credential to a subject.\n * @param schemaId The schema ID for the credential.\n * @param subjectId The subject's DID (Decentralized Identifier).\n * @param options Optional options, such as validity period and credential data.\n * @returns A promise with the verifiable credential that was bound.\n */\n public static async bindCredential(\n schemaId: string,\n subjectId: string,\n options?: {\n validFrom?: string;\n validUntil?: string;\n credential?: Record<string, unknown>;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().bindCredentialInternal(\n schemaId,\n subjectId,\n options,\n );\n }\n\n // Method to create a response\n /**\n * Creates a response for the challenge.\n * @param challengeDID The DID of the challenge to respond to.\n * @param options Optional options for creating the response (optional).\n * @returns A promise with the response string.\n */\n public static async createResponse(\n challengeDID: string,\n options?: CreateResponseOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createResponseInternal(\n challengeDID,\n options,\n );\n }\n\n // Backup wallet\n /**\n * Backups the wallet data.\n * @param registry Optional registry URL for the wallet backup.\n * @returns A promise with a backup string (e.g., backup URL).\n */\n public static async backupWallet(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().backupWalletInternal(\n registry,\n wallet,\n );\n }\n\n // Issue credential to a user\n /**\n * Issues a credential to the subject.\n * @param credential The credential to be issued.\n * @param options Optional parameters for issuing the credential.\n * @returns A promise with the credential ID or issuance result.\n */\n public static async issueCredential(\n credential: Partial<VerifiableCredential>,\n options?: IssueCredentialsOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().issueCredentialInternal(\n credential,\n options,\n );\n }\n\n // Publish a credential\n /**\n * Publishes a verifiable credential.\n * @param did The DID of the credential.\n * @param options Optional parameters, such as whether to reveal the credential.\n * @returns A promise with the published credential.\n */\n public static async publishCredential(\n did: string,\n options?: {\n reveal?: boolean;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().publishCredentialInternal(\n did,\n options,\n );\n }\n\n // Accept a credential\n /**\n * Accepts a credential.\n * @param did The DID of the credential to accept.\n * @returns A promise indicating whether the credential was successfully accepted.\n */\n public static async acceptCredential(did: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().acceptCredentialInternal(did);\n }\n\n // Show mnemonic\n /**\n * Shows the mnemonic for the wallet.\n * @returns A promise with the mnemonic string.\n */\n public static async showMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().showMnemonicInternal();\n }\n\n // Verify a challenge response\n /**\n * Verifies a response to a challenge.\n * @param did The DID to verify the response for.\n * @param options Optional options, such as retry behavior.\n * @returns A promise with the response verification result.\n */\n public static async verifyResponse(\n did: string,\n options?: { retries?: number; delay?: number },\n ): Promise<ChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().verifyResponseInternal(\n did,\n options,\n );\n }\n\n // Decrypt a message\n /**\n * Decrypts a message using the current key.\n * @param did The DID of the message to decrypt.\n * @returns A promise with the decrypted message.\n */\n public static async decryptMessage(did: string): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMessageInternal(did);\n }\n\n // Decrypt mnemonic\n /**\n * Decrypts the mnemonic for the wallet.\n * @returns A promise with the decrypted mnemonic.\n */\n public static async decryptMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMnemonicInternal();\n }\n\n // Get a credential\n /**\n * Retrieves a verifiable credential.\n * @param id The credential ID to retrieve.\n * @returns A promise with the credential data or null if not found.\n */\n public static async getCredential(\n id: string,\n ): Promise<VerifiableCredential | null> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().getCredentialInternal(id);\n }\n\n // Remove a credential\n /**\n * Removes a verifiable credential.\n * @param id The credential ID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeCredential(id: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeCredentialInternal(id);\n }\n\n // Update a credential\n /**\n * Updates a verifiable credential.\n * @param did The DID of the credential to update.\n * @param credential The new credential data.\n * @returns A promise indicating success or failure of the update operation.\n */\n public static async updateCredential(\n did: string,\n credential: VerifiableCredential,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().updateCredentialInternal(\n did,\n credential,\n );\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createId(\n name: string,\n options?: {\n registry?: string;\n },\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdInternal(name, options);\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createIdOperation(\n name: string,\n account: number,\n options?: {\n registry?: string;\n },\n ): Promise<Operation> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdOperationInternal(\n name,\n account,\n options,\n );\n }\n\n // Remove an ID\n /**\n * Removes an existing DID.\n * @param name The name of the DID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeIdInternal(name);\n }\n\n // Resolve a DID\n /**\n * Resolves a DID to fetch associated data.\n * @param did The DID to resolve.\n * @param options Optional parameters for resolving the DID.\n * @returns A promise with the resolved DID data.\n */\n public static async resolveDID(\n did: string,\n options?: ResolveDIDOptions,\n ): Promise<MdipDocument> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().resolveDIDInternal(did, options);\n }\n\n // Set the current DID\n /**\n * Sets the current DID in use.\n * @param name The DID name to set as the current one.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async setCurrentId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().setCurrentIdInternal(name);\n }\n\n // Create a schema\n /**\n * Creates a new schema for credentials.\n * @param schema The schema data to create.\n * @param options Optional options for creating the schema.\n * @returns A promise with the created schema data.\n */\n public static async createSchema(\n schema?: unknown,\n options?: CreateAssetOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createSchemaInternal(\n schema,\n options,\n );\n }\n\n // Load wallet\n /**\n * Loads the current wallet.\n * @returns A promise with the loaded wallet file.\n */\n public static async loadWallet(): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().loadWalletInternal();\n }\n\n // Save wallet\n /**\n * Saves the wallet.\n * @param wallet The wallet to save.\n * @param overwrite Optional flag to overwrite the existing wallet (default: true).\n * @returns A promise with a boolean indicating success.\n */\n public static async saveWallet(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().saveWalletInternal(\n wallet,\n overwrite,\n );\n }\n\n // Create a new wallet\n /**\n * Creates a new wallet.\n * @param mnemonic Optional mnemonic to initialize the wallet.\n * @param overwrite Optional flag to overwrite the existing wallet.\n * @returns A promise with the wallet creation result.\n */\n public static async newWallet(\n mnemonic?: string,\n overwrite?: boolean,\n ): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().newWalletInternal(\n mnemonic,\n overwrite,\n );\n }\n\n /**\n * Adds a custom header to the GatekeeperClient instance.\n * @param header Header name\n * @param value Header value\n */\n public static addCustomHeader(header: string, value: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.addCustomHeader(header, value);\n }\n\n /**\n * Removes a custom header from the GatekeeperClient instance.\n * @param header Header name\n */\n public static removeCustomHeader(header: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.removeCustomHeader(header);\n }\n\n // Recover an existing wallet\n /**\n * Recovers a wallet from a backup.\n * @param did The DID to use for recovery (optional).\n * @returns A promise with the wallet recovery result.\n */\n public static async recoverWallet(did?: string): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().recoverWalletInternal(did);\n }\n\n // Re-encrypt the wallet's stored mnemonic\n /**\n * Re-encrypts the wallet's `seed.mnemonicEnc` from a known-good mnemonic\n * using the current passphrase, leaving the rest of the wallet (encrypted\n * ids, counter, names) untouched. Used to recover from a corrupted or\n * double-encrypted `mnemonicEnc` without destroying wallet contents.\n * @param mnemonic The plaintext mnemonic to re-encrypt and store.\n * @returns A promise with the updated wallet.\n */\n public static async resetMnemonicEncryption(\n mnemonic: string,\n ): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().resetMnemonicEncryptionInternal(\n mnemonic,\n );\n }\n\n // Helper method to retrieve the instance\n private static getInstance(): KeymasterReactNative {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n return KeymasterReactNative.instance;\n }\n\n private getGatekeeper(): GatekeeperClient {\n if (!this.gatekeeper) {\n throw new Error(\"GatekeeperClient not initialized\");\n }\n return this.gatekeeper;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config.gatekeeperConfig) {\n return await this.startIntegratedKeymaster();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedKeymaster(): Promise<boolean> {\n try {\n if (this.config.walletDb && this.config.cipher) {\n if (!this.gatekeeper) {\n this.gatekeeper = new GatekeeperClient();\n }\n await this.gatekeeper.connect({\n url: this.config.gatekeeperConfig?.url,\n waitUntilReady: this.config.gatekeeperConfig?.waitUntilReady,\n intervalSeconds: this.config.gatekeeperConfig?.intervalSeconds,\n chatty: this.config.gatekeeperConfig?.chatty,\n });\n if (this.config.gatekeeperConfig?.token) {\n this.gatekeeper.addCustomHeader(\n \"authorization\",\n `Bearer ${this.config.gatekeeperConfig.token}`,\n );\n }\n this.keymasterService = new Keymaster({\n gatekeeper: this.gatekeeper,\n wallet: this.config.walletDb,\n cipher: this.config.cipher,\n passphrase: this.config.passphrase,\n });\n } else {\n return false;\n }\n } catch (e) {\n console.error(\"Error starting KeymasterReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async createChallengeInternal(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n const challenge: string = await this.keymasterService.createChallenge(\n spec,\n options,\n );\n return {\n challenge: challenge,\n challengeUrl: `${spec.callback}?challenge=${challenge}`,\n };\n }\n\n private async bindCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"bindCredential\"]>\n ) {\n return this.keymasterService.bindCredential(...args);\n }\n\n private async createResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"createResponse\"]>\n ) {\n return this.keymasterService.createResponse(...args);\n }\n\n private async backupWalletInternal(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n return this.keymasterService.backupWallet(registry, wallet);\n }\n\n private async issueCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"issueCredential\"]>\n ) {\n return this.keymasterService.issueCredential(...args);\n }\n\n private async publishCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"publishCredential\"]>\n ) {\n return this.keymasterService.publishCredential(...args);\n }\n\n private async acceptCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"acceptCredential\"]>\n ) {\n return this.keymasterService.acceptCredential(...args);\n }\n\n private async showMnemonicInternal(): Promise<string> {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async verifyResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"verifyResponse\"]>\n ) {\n return this.keymasterService.verifyResponse(...args);\n }\n\n private async decryptMessageInternal(\n ...args: Parameters<(typeof Keymaster)[\"decryptMessage\"]>\n ) {\n return this.keymasterService.decryptMessage(...args);\n }\n\n private async decryptMnemonicInternal() {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async getCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"getCredential\"]>\n ) {\n return this.keymasterService.getCredential(...args);\n }\n\n private async removeCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeCredential\"]>\n ) {\n return this.keymasterService.removeCredential(...args);\n }\n\n private async updateCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"updateCredential\"]>\n ) {\n return this.keymasterService.updateCredential(...args);\n }\n\n private async createIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"createId\"]>\n ) {\n return this.keymasterService.createId(...args);\n }\n\n private async createIdOperationInternal(\n ...args: Parameters<(typeof Keymaster)[\"createIdOperation\"]>\n ) {\n return this.keymasterService.createIdOperation(...args);\n }\n\n private async removeIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeId\"]>\n ) {\n return this.keymasterService.removeId(...args);\n }\n\n private async resolveDIDInternal(\n ...args: Parameters<(typeof Keymaster)[\"resolveDID\"]>\n ) {\n return this.keymasterService.resolveDID(...args);\n }\n\n private async setCurrentIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"setCurrentId\"]>\n ) {\n return this.keymasterService.setCurrentId(...args);\n }\n\n private async createSchemaInternal(\n ...args: Parameters<(typeof Keymaster)[\"createSchema\"]>\n ) {\n return this.keymasterService.createSchema(...args);\n }\n\n private async loadWalletInternal(): Promise<WalletFile> {\n return this.keymasterService.loadWallet();\n }\n\n private async saveWalletInternal(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n return this.keymasterService.saveWallet(wallet, overwrite);\n }\n\n private async newWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"newWallet\"]>\n ) {\n return this.keymasterService.newWallet(...args);\n }\n\n private async recoverWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"recoverWallet\"]>\n ) {\n return this.keymasterService.recoverWallet(...args);\n }\n\n private async resetMnemonicEncryptionInternal(\n mnemonic: string,\n ): Promise<WalletFile> {\n const wallet: WalletFile = await this.keymasterService.loadWallet();\n wallet.seed.mnemonicEnc = await encMnemonic(mnemonic, this.config.passphrase);\n await this.keymasterService.saveWallet(wallet, true);\n return wallet;\n }\n\n private validateConfig(config: KeymasterConfig): void {\n if (!config.gatekeeperConfig) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n\n if (config.gatekeeperConfig) {\n if (!config.walletDb?.loadWallet) {\n throw new Error(\"Missing load wallet callback\");\n }\n if (!config.walletDb?.saveWallet) {\n throw new Error(\"Missing save wallet callback\");\n }\n if (!config.passphrase) {\n throw new Error(\"Missing passphrase\");\n }\n }\n }\n}\n","import { SdkConfig } from \"./types/index.js\";\nimport {\n GatekeeperClient,\n MdipDocument,\n GetDIDOptions,\n Operation,\n} from \"@mdip/gatekeeper\";\n\nexport class GatekeeperReactNative {\n private static instance: GatekeeperReactNative | null = null;\n\n private config: SdkConfig;\n private gatekeeperClient!: GatekeeperClient;\n\n private constructor(config: SdkConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n public static initialize(config: SdkConfig) {\n if (!GatekeeperReactNative.instance) {\n GatekeeperReactNative.instance = new GatekeeperReactNative(config);\n } else {\n console.warn(\n \"GatekeeperReactNative already initialized, ignoring re-initialization.\"\n );\n }\n }\n\n private ensureInitialized() {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n }\n\n // Delegated STATIC methods\n\n public static async start() {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().startInternal();\n }\n\n public static async getDIDs(\n ...args: Parameters<GatekeeperReactNative[\"getDIDsInternal\"]>\n ) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().getDIDsInternal(...args);\n }\n\n public static async addCustomHeader({\n header,\n value,\n }: {\n header: string;\n value: string;\n }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().addCustomHeaderInternal({\n header,\n value,\n });\n }\n\n public static async removeCustomHeader({ header }: { header: string }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().removeCustomHeaderInternal({\n header,\n });\n }\n\n public static async generateDID(operation: Operation): Promise<string> {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().generateDIDInternal(operation);\n }\n\n private static getInstance(): GatekeeperReactNative {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n return GatekeeperReactNative.instance;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config) {\n return await this.startIntegratedGatekeeper();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedGatekeeper(): Promise<boolean> {\n try {\n this.gatekeeperClient = new GatekeeperClient();\n await this.gatekeeperClient.connect({\n url: this.config?.url,\n waitUntilReady: this.config?.waitUntilReady,\n intervalSeconds: this.config?.intervalSeconds,\n chatty: this.config?.chatty,\n });\n } catch (e) {\n console.error(\"Error starting GatekeeperReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async getDIDsInternal({\n dids,\n resolve,\n }: GetDIDOptions): Promise<string[] | MdipDocument[]> {\n const response = await this.gatekeeperClient.getDIDs({ dids, resolve });\n return response;\n }\n\n private async addCustomHeaderInternal({\n header,\n value,\n }: {\n header: string;\n value: string;\n }): Promise<void> {\n await this.gatekeeperClient.addCustomHeader(header, value);\n }\n\n private async removeCustomHeaderInternal({\n header,\n }: {\n header: string;\n }): Promise<void> {\n await this.gatekeeperClient.removeCustomHeader(header);\n }\n\n private async generateDIDInternal(operation: Operation): Promise<string> {\n return await this.gatekeeperClient.generateDID(operation);\n }\n\n private validateConfig(config: SdkConfig): void {\n if (!config) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n }\n}\n","import * as bip39 from \"bip39\";\nimport { HDKey } from \"@scure/bip32\";\nimport { base64url } from \"multiformats/bases/base64\";\nimport CipherBase from \"@mdip/cipher/dist/esm/cipher-base.js\";\n\ninterface HDKeyJSON {\n xpriv: string;\n xpub: string;\n}\n\nexport default class CipherReactNative extends CipherBase {\n generateHDKey(mnemonic: string): HDKey {\n const seed = bip39.mnemonicToSeedSync(mnemonic);\n return HDKey.fromMasterSeed(seed);\n }\n\n generateHDKeyJSON(json: HDKeyJSON): HDKey {\n return HDKey.fromExtendedKey(json.xpriv);\n }\n\n generateRandomSalt(): string {\n const array = new Uint8Array(32);\n globalThis.crypto.getRandomValues(array);\n return base64url.encode(array);\n }\n}\n"],"mappings":"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","names":["KeymasterModule","import_gatekeeper","CipherBase"]}
package/dist/index.d.cts CHANGED
@@ -1,10 +1,21 @@
1
- import CipherNode from '@mdip/cipher';
1
+ import { HDKey } from '@scure/bip32';
2
+ import CipherBase from '@mdip/cipher/dist/esm/cipher-base.js';
2
3
  import { WalletBase, CreateAssetOptions, VerifiableCredential, CreateResponseOptions, WalletFile, IssueCredentialsOptions, ChallengeResponse, StoredWallet } from '@mdip/keymaster';
3
4
  export * from '@mdip/keymaster';
4
5
  import { Operation, ResolveDIDOptions, MdipDocument } from '@mdip/gatekeeper';
5
6
  import * as gatekeeper from '@mdip/gatekeeper';
6
7
  export { gatekeeper as GatekeeperTypes };
7
8
 
9
+ interface HDKeyJSON {
10
+ xpriv: string;
11
+ xpub: string;
12
+ }
13
+ declare class CipherReactNative extends CipherBase {
14
+ generateHDKey(mnemonic: string): HDKey;
15
+ generateHDKeyJSON(json: HDKeyJSON): HDKey;
16
+ generateRandomSalt(): string;
17
+ }
18
+
8
19
  interface CreateChallengeSpec {
9
20
  callback: string;
10
21
  credentials?: {
@@ -32,7 +43,7 @@ interface WalletConfig {
32
43
  interface KeymasterConfig {
33
44
  gatekeeperConfig?: SdkConfig;
34
45
  walletDb?: WalletBase;
35
- cipher?: CipherNode;
46
+ cipher?: CipherReactNative;
36
47
  passphrase: string;
37
48
  }
38
49
  declare class KeymasterReactNative {
@@ -236,6 +247,15 @@ declare class KeymasterReactNative {
236
247
  * @returns A promise with the wallet recovery result.
237
248
  */
238
249
  static recoverWallet(did?: string): Promise<WalletFile>;
250
+ /**
251
+ * Re-encrypts the wallet's `seed.mnemonicEnc` from a known-good mnemonic
252
+ * using the current passphrase, leaving the rest of the wallet (encrypted
253
+ * ids, counter, names) untouched. Used to recover from a corrupted or
254
+ * double-encrypted `mnemonicEnc` without destroying wallet contents.
255
+ * @param mnemonic The plaintext mnemonic to re-encrypt and store.
256
+ * @returns A promise with the updated wallet.
257
+ */
258
+ static resetMnemonicEncryption(mnemonic: string): Promise<WalletFile>;
239
259
  private static getInstance;
240
260
  private getGatekeeper;
241
261
  private startInternal;
@@ -264,6 +284,7 @@ declare class KeymasterReactNative {
264
284
  private saveWalletInternal;
265
285
  private newWalletInternal;
266
286
  private recoverWalletInternal;
287
+ private resetMnemonicEncryptionInternal;
267
288
  private validateConfig;
268
289
  }
269
290
 
@@ -294,4 +315,4 @@ declare class GatekeeperReactNative {
294
315
  private validateConfig;
295
316
  }
296
317
 
297
- export { type CreateChallengeResponse, type CreateChallengeSpec, GatekeeperReactNative, KeymasterReactNative, type KeymasterConfig as KeymasterReactNativeConfig, type SdkConfig, type WalletConfig };
318
+ export { CipherReactNative, type CreateChallengeResponse, type CreateChallengeSpec, GatekeeperReactNative, KeymasterReactNative, type KeymasterConfig as KeymasterReactNativeConfig, type SdkConfig, type WalletConfig };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,21 @@
1
- import CipherNode from '@mdip/cipher';
1
+ import { HDKey } from '@scure/bip32';
2
+ import CipherBase from '@mdip/cipher/dist/esm/cipher-base.js';
2
3
  import { WalletBase, CreateAssetOptions, VerifiableCredential, CreateResponseOptions, WalletFile, IssueCredentialsOptions, ChallengeResponse, StoredWallet } from '@mdip/keymaster';
3
4
  export * from '@mdip/keymaster';
4
5
  import { Operation, ResolveDIDOptions, MdipDocument } from '@mdip/gatekeeper';
5
6
  import * as gatekeeper from '@mdip/gatekeeper';
6
7
  export { gatekeeper as GatekeeperTypes };
7
8
 
9
+ interface HDKeyJSON {
10
+ xpriv: string;
11
+ xpub: string;
12
+ }
13
+ declare class CipherReactNative extends CipherBase {
14
+ generateHDKey(mnemonic: string): HDKey;
15
+ generateHDKeyJSON(json: HDKeyJSON): HDKey;
16
+ generateRandomSalt(): string;
17
+ }
18
+
8
19
  interface CreateChallengeSpec {
9
20
  callback: string;
10
21
  credentials?: {
@@ -32,7 +43,7 @@ interface WalletConfig {
32
43
  interface KeymasterConfig {
33
44
  gatekeeperConfig?: SdkConfig;
34
45
  walletDb?: WalletBase;
35
- cipher?: CipherNode;
46
+ cipher?: CipherReactNative;
36
47
  passphrase: string;
37
48
  }
38
49
  declare class KeymasterReactNative {
@@ -236,6 +247,15 @@ declare class KeymasterReactNative {
236
247
  * @returns A promise with the wallet recovery result.
237
248
  */
238
249
  static recoverWallet(did?: string): Promise<WalletFile>;
250
+ /**
251
+ * Re-encrypts the wallet's `seed.mnemonicEnc` from a known-good mnemonic
252
+ * using the current passphrase, leaving the rest of the wallet (encrypted
253
+ * ids, counter, names) untouched. Used to recover from a corrupted or
254
+ * double-encrypted `mnemonicEnc` without destroying wallet contents.
255
+ * @param mnemonic The plaintext mnemonic to re-encrypt and store.
256
+ * @returns A promise with the updated wallet.
257
+ */
258
+ static resetMnemonicEncryption(mnemonic: string): Promise<WalletFile>;
239
259
  private static getInstance;
240
260
  private getGatekeeper;
241
261
  private startInternal;
@@ -264,6 +284,7 @@ declare class KeymasterReactNative {
264
284
  private saveWalletInternal;
265
285
  private newWalletInternal;
266
286
  private recoverWalletInternal;
287
+ private resetMnemonicEncryptionInternal;
267
288
  private validateConfig;
268
289
  }
269
290
 
@@ -294,4 +315,4 @@ declare class GatekeeperReactNative {
294
315
  private validateConfig;
295
316
  }
296
317
 
297
- export { type CreateChallengeResponse, type CreateChallengeSpec, GatekeeperReactNative, KeymasterReactNative, type KeymasterConfig as KeymasterReactNativeConfig, type SdkConfig, type WalletConfig };
318
+ export { CipherReactNative, type CreateChallengeResponse, type CreateChallengeSpec, GatekeeperReactNative, KeymasterReactNative, type KeymasterConfig as KeymasterReactNativeConfig, type SdkConfig, type WalletConfig };
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import {
3
3
  GatekeeperClient
4
4
  } from "@mdip/gatekeeper";
5
5
  import KeymasterModule from "@mdip/keymaster";
6
+ import { encMnemonic } from "@mdip/keymaster/encryption";
6
7
  var Keymaster = KeymasterModule?.default || KeymasterModule;
7
8
  var KeymasterReactNative = class _KeymasterReactNative {
8
9
  static instance = null;
@@ -359,6 +360,21 @@ var KeymasterReactNative = class _KeymasterReactNative {
359
360
  _KeymasterReactNative.getInstance().ensureInitialized();
360
361
  return _KeymasterReactNative.getInstance().recoverWalletInternal(did);
361
362
  }
363
+ // Re-encrypt the wallet's stored mnemonic
364
+ /**
365
+ * Re-encrypts the wallet's `seed.mnemonicEnc` from a known-good mnemonic
366
+ * using the current passphrase, leaving the rest of the wallet (encrypted
367
+ * ids, counter, names) untouched. Used to recover from a corrupted or
368
+ * double-encrypted `mnemonicEnc` without destroying wallet contents.
369
+ * @param mnemonic The plaintext mnemonic to re-encrypt and store.
370
+ * @returns A promise with the updated wallet.
371
+ */
372
+ static async resetMnemonicEncryption(mnemonic) {
373
+ _KeymasterReactNative.getInstance().ensureInitialized();
374
+ return _KeymasterReactNative.getInstance().resetMnemonicEncryptionInternal(
375
+ mnemonic
376
+ );
377
+ }
362
378
  // Helper method to retrieve the instance
363
379
  static getInstance() {
364
380
  if (!_KeymasterReactNative.instance) {
@@ -494,6 +510,12 @@ var KeymasterReactNative = class _KeymasterReactNative {
494
510
  async recoverWalletInternal(...args) {
495
511
  return this.keymasterService.recoverWallet(...args);
496
512
  }
513
+ async resetMnemonicEncryptionInternal(mnemonic) {
514
+ const wallet = await this.keymasterService.loadWallet();
515
+ wallet.seed.mnemonicEnc = await encMnemonic(mnemonic, this.config.passphrase);
516
+ await this.keymasterService.saveWallet(wallet, true);
517
+ return wallet;
518
+ }
497
519
  validateConfig(config) {
498
520
  if (!config.gatekeeperConfig) {
499
521
  throw new Error("Missing Gatekeeper config");
@@ -628,10 +650,31 @@ var GatekeeperReactNative = class _GatekeeperReactNative {
628
650
  }
629
651
  };
630
652
 
653
+ // src/cipher-react-native.ts
654
+ import * as bip39 from "bip39";
655
+ import { HDKey } from "@scure/bip32";
656
+ import { base64url } from "multiformats/bases/base64";
657
+ import CipherBase from "@mdip/cipher/dist/esm/cipher-base.js";
658
+ var CipherReactNative = class extends CipherBase {
659
+ generateHDKey(mnemonic) {
660
+ const seed = bip39.mnemonicToSeedSync(mnemonic);
661
+ return HDKey.fromMasterSeed(seed);
662
+ }
663
+ generateHDKeyJSON(json) {
664
+ return HDKey.fromExtendedKey(json.xpriv);
665
+ }
666
+ generateRandomSalt() {
667
+ const array = new Uint8Array(32);
668
+ globalThis.crypto.getRandomValues(array);
669
+ return base64url.encode(array);
670
+ }
671
+ };
672
+
631
673
  // src/index.ts
632
674
  export * from "@mdip/keymaster";
633
675
  import * as GatekeeperTypes from "@mdip/gatekeeper";
634
676
  export {
677
+ CipherReactNative,
635
678
  GatekeeperReactNative,
636
679
  GatekeeperTypes,
637
680
  KeymasterReactNative
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/keymaster-react-native.ts","../src/gatekeeper-react-native.ts","../src/index.ts"],"sourcesContent":["// Imports\nimport CipherNode from \"@mdip/cipher\";\nimport {\n ChallengeResponse,\n CreateAssetOptions,\n CreateResponseOptions,\n IssueCredentialsOptions,\n StoredWallet,\n VerifiableCredential,\n WalletBase,\n WalletFile,\n} from \"@mdip/keymaster\";\n\nimport {\n GatekeeperClient,\n MdipDocument,\n Operation,\n ResolveDIDOptions,\n} from \"@mdip/gatekeeper\";\nimport {\n CreateChallengeResponse,\n CreateChallengeSpec,\n SdkConfig,\n} from \"./types/index.js\";\nimport KeymasterModule from \"@mdip/keymaster\";\n\n// @ts-ignore\nconst Keymaster = KeymasterModule?.default || KeymasterModule;\n\n// Keymaster configuration interface\nexport interface KeymasterConfig {\n gatekeeperConfig?: SdkConfig;\n walletDb?: WalletBase;\n cipher?: CipherNode;\n passphrase: string;\n}\nexport class KeymasterReactNative {\n private static instance: KeymasterReactNative | null = null;\n private config: KeymasterConfig;\n private keymasterService!: typeof Keymaster;\n private gatekeeper: GatekeeperClient | null = null;\n\n private constructor(config: KeymasterConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n // Initializes the instance if not already initialized\n /**\n * Initializes the KeymasterReactNative instance.\n * @param config The configuration object for the Keymaster service.\n */\n public static initialize(config: KeymasterConfig): void {\n if (!KeymasterReactNative.instance) {\n KeymasterReactNative.instance = new KeymasterReactNative(config);\n } else {\n console.warn(\n \"KeymasterReactNative already initialized, ignoring re-initialization.\",\n );\n }\n }\n\n /**\n * Resets the KeymasterReactNative instance.\n * This clears the singleton instance, allowing for re-initialization.\n */\n public static resetInstance(): void {\n KeymasterReactNative.instance = null;\n console.log(\"✅ KeymasterReactNative instance reset\");\n }\n\n // Ensures the instance is initialized\n private ensureInitialized(): void {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n }\n\n /**\n * Starts the KeymasterReactNative service.\n * @returns A boolean indicating whether the service was started successfully.\n */\n public static async start(): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().startInternal();\n }\n\n // Method to create a challenge\n /**\n * Creates a challenge for the user to solve.\n * @param spec The challenge specifications.\n * @param options Additional options for creating the challenge (optional).\n * @returns A promise with the challenge response, including the challenge and its callback URL.\n */\n public static async createChallenge(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createChallengeInternal(\n spec,\n options,\n );\n }\n\n // Method to bind a credential to a user\n /**\n * Binds a credential to a subject.\n * @param schemaId The schema ID for the credential.\n * @param subjectId The subject's DID (Decentralized Identifier).\n * @param options Optional options, such as validity period and credential data.\n * @returns A promise with the verifiable credential that was bound.\n */\n public static async bindCredential(\n schemaId: string,\n subjectId: string,\n options?: {\n validFrom?: string;\n validUntil?: string;\n credential?: Record<string, unknown>;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().bindCredentialInternal(\n schemaId,\n subjectId,\n options,\n );\n }\n\n // Method to create a response\n /**\n * Creates a response for the challenge.\n * @param challengeDID The DID of the challenge to respond to.\n * @param options Optional options for creating the response (optional).\n * @returns A promise with the response string.\n */\n public static async createResponse(\n challengeDID: string,\n options?: CreateResponseOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createResponseInternal(\n challengeDID,\n options,\n );\n }\n\n // Backup wallet\n /**\n * Backups the wallet data.\n * @param registry Optional registry URL for the wallet backup.\n * @returns A promise with a backup string (e.g., backup URL).\n */\n public static async backupWallet(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().backupWalletInternal(\n registry,\n wallet,\n );\n }\n\n // Issue credential to a user\n /**\n * Issues a credential to the subject.\n * @param credential The credential to be issued.\n * @param options Optional parameters for issuing the credential.\n * @returns A promise with the credential ID or issuance result.\n */\n public static async issueCredential(\n credential: Partial<VerifiableCredential>,\n options?: IssueCredentialsOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().issueCredentialInternal(\n credential,\n options,\n );\n }\n\n // Publish a credential\n /**\n * Publishes a verifiable credential.\n * @param did The DID of the credential.\n * @param options Optional parameters, such as whether to reveal the credential.\n * @returns A promise with the published credential.\n */\n public static async publishCredential(\n did: string,\n options?: {\n reveal?: boolean;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().publishCredentialInternal(\n did,\n options,\n );\n }\n\n // Accept a credential\n /**\n * Accepts a credential.\n * @param did The DID of the credential to accept.\n * @returns A promise indicating whether the credential was successfully accepted.\n */\n public static async acceptCredential(did: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().acceptCredentialInternal(did);\n }\n\n // Show mnemonic\n /**\n * Shows the mnemonic for the wallet.\n * @returns A promise with the mnemonic string.\n */\n public static async showMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().showMnemonicInternal();\n }\n\n // Verify a challenge response\n /**\n * Verifies a response to a challenge.\n * @param did The DID to verify the response for.\n * @param options Optional options, such as retry behavior.\n * @returns A promise with the response verification result.\n */\n public static async verifyResponse(\n did: string,\n options?: { retries?: number; delay?: number },\n ): Promise<ChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().verifyResponseInternal(\n did,\n options,\n );\n }\n\n // Decrypt a message\n /**\n * Decrypts a message using the current key.\n * @param did The DID of the message to decrypt.\n * @returns A promise with the decrypted message.\n */\n public static async decryptMessage(did: string): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMessageInternal(did);\n }\n\n // Decrypt mnemonic\n /**\n * Decrypts the mnemonic for the wallet.\n * @returns A promise with the decrypted mnemonic.\n */\n public static async decryptMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMnemonicInternal();\n }\n\n // Get a credential\n /**\n * Retrieves a verifiable credential.\n * @param id The credential ID to retrieve.\n * @returns A promise with the credential data or null if not found.\n */\n public static async getCredential(\n id: string,\n ): Promise<VerifiableCredential | null> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().getCredentialInternal(id);\n }\n\n // Remove a credential\n /**\n * Removes a verifiable credential.\n * @param id The credential ID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeCredential(id: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeCredentialInternal(id);\n }\n\n // Update a credential\n /**\n * Updates a verifiable credential.\n * @param did The DID of the credential to update.\n * @param credential The new credential data.\n * @returns A promise indicating success or failure of the update operation.\n */\n public static async updateCredential(\n did: string,\n credential: VerifiableCredential,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().updateCredentialInternal(\n did,\n credential,\n );\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createId(\n name: string,\n options?: {\n registry?: string;\n },\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdInternal(name, options);\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createIdOperation(\n name: string,\n account: number,\n options?: {\n registry?: string;\n },\n ): Promise<Operation> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdOperationInternal(\n name,\n account,\n options,\n );\n }\n\n // Remove an ID\n /**\n * Removes an existing DID.\n * @param name The name of the DID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeIdInternal(name);\n }\n\n // Resolve a DID\n /**\n * Resolves a DID to fetch associated data.\n * @param did The DID to resolve.\n * @param options Optional parameters for resolving the DID.\n * @returns A promise with the resolved DID data.\n */\n public static async resolveDID(\n did: string,\n options?: ResolveDIDOptions,\n ): Promise<MdipDocument> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().resolveDIDInternal(did, options);\n }\n\n // Set the current DID\n /**\n * Sets the current DID in use.\n * @param name The DID name to set as the current one.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async setCurrentId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().setCurrentIdInternal(name);\n }\n\n // Create a schema\n /**\n * Creates a new schema for credentials.\n * @param schema The schema data to create.\n * @param options Optional options for creating the schema.\n * @returns A promise with the created schema data.\n */\n public static async createSchema(\n schema?: unknown,\n options?: CreateAssetOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createSchemaInternal(\n schema,\n options,\n );\n }\n\n // Load wallet\n /**\n * Loads the current wallet.\n * @returns A promise with the loaded wallet file.\n */\n public static async loadWallet(): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().loadWalletInternal();\n }\n\n // Save wallet\n /**\n * Saves the wallet.\n * @param wallet The wallet to save.\n * @param overwrite Optional flag to overwrite the existing wallet (default: true).\n * @returns A promise with a boolean indicating success.\n */\n public static async saveWallet(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().saveWalletInternal(\n wallet,\n overwrite,\n );\n }\n\n // Create a new wallet\n /**\n * Creates a new wallet.\n * @param mnemonic Optional mnemonic to initialize the wallet.\n * @param overwrite Optional flag to overwrite the existing wallet.\n * @returns A promise with the wallet creation result.\n */\n public static async newWallet(\n mnemonic?: string,\n overwrite?: boolean,\n ): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().newWalletInternal(\n mnemonic,\n overwrite,\n );\n }\n\n /**\n * Adds a custom header to the GatekeeperClient instance.\n * @param header Header name\n * @param value Header value\n */\n public static addCustomHeader(header: string, value: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.addCustomHeader(header, value);\n }\n\n /**\n * Removes a custom header from the GatekeeperClient instance.\n * @param header Header name\n */\n public static removeCustomHeader(header: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.removeCustomHeader(header);\n }\n\n // Recover an existing wallet\n /**\n * Recovers a wallet from a backup.\n * @param did The DID to use for recovery (optional).\n * @returns A promise with the wallet recovery result.\n */\n public static async recoverWallet(did?: string): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().recoverWalletInternal(did);\n }\n\n // Helper method to retrieve the instance\n private static getInstance(): KeymasterReactNative {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n return KeymasterReactNative.instance;\n }\n\n private getGatekeeper(): GatekeeperClient {\n if (!this.gatekeeper) {\n throw new Error(\"GatekeeperClient not initialized\");\n }\n return this.gatekeeper;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config.gatekeeperConfig) {\n return await this.startIntegratedKeymaster();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedKeymaster(): Promise<boolean> {\n try {\n if (this.config.walletDb && this.config.cipher) {\n if (!this.gatekeeper) {\n this.gatekeeper = new GatekeeperClient();\n }\n await this.gatekeeper.connect({\n url: this.config.gatekeeperConfig?.url,\n waitUntilReady: this.config.gatekeeperConfig?.waitUntilReady,\n intervalSeconds: this.config.gatekeeperConfig?.intervalSeconds,\n chatty: this.config.gatekeeperConfig?.chatty,\n });\n if (this.config.gatekeeperConfig?.token) {\n this.gatekeeper.addCustomHeader(\n \"authorization\",\n `Bearer ${this.config.gatekeeperConfig.token}`,\n );\n }\n this.keymasterService = new Keymaster({\n gatekeeper: this.gatekeeper,\n wallet: this.config.walletDb,\n cipher: this.config.cipher,\n passphrase: this.config.passphrase,\n });\n } else {\n return false;\n }\n } catch (e) {\n console.error(\"Error starting KeymasterReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async createChallengeInternal(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n const challenge: string = await this.keymasterService.createChallenge(\n spec,\n options,\n );\n return {\n challenge: challenge,\n challengeUrl: `${spec.callback}?challenge=${challenge}`,\n };\n }\n\n private async bindCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"bindCredential\"]>\n ) {\n return this.keymasterService.bindCredential(...args);\n }\n\n private async createResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"createResponse\"]>\n ) {\n return this.keymasterService.createResponse(...args);\n }\n\n private async backupWalletInternal(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n return this.keymasterService.backupWallet(registry, wallet);\n }\n\n private async issueCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"issueCredential\"]>\n ) {\n return this.keymasterService.issueCredential(...args);\n }\n\n private async publishCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"publishCredential\"]>\n ) {\n return this.keymasterService.publishCredential(...args);\n }\n\n private async acceptCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"acceptCredential\"]>\n ) {\n return this.keymasterService.acceptCredential(...args);\n }\n\n private async showMnemonicInternal(): Promise<string> {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async verifyResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"verifyResponse\"]>\n ) {\n return this.keymasterService.verifyResponse(...args);\n }\n\n private async decryptMessageInternal(\n ...args: Parameters<(typeof Keymaster)[\"decryptMessage\"]>\n ) {\n return this.keymasterService.decryptMessage(...args);\n }\n\n private async decryptMnemonicInternal() {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async getCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"getCredential\"]>\n ) {\n return this.keymasterService.getCredential(...args);\n }\n\n private async removeCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeCredential\"]>\n ) {\n return this.keymasterService.removeCredential(...args);\n }\n\n private async updateCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"updateCredential\"]>\n ) {\n return this.keymasterService.updateCredential(...args);\n }\n\n private async createIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"createId\"]>\n ) {\n return this.keymasterService.createId(...args);\n }\n\n private async createIdOperationInternal(\n ...args: Parameters<(typeof Keymaster)[\"createIdOperation\"]>\n ) {\n return this.keymasterService.createIdOperation(...args);\n }\n\n private async removeIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeId\"]>\n ) {\n return this.keymasterService.removeId(...args);\n }\n\n private async resolveDIDInternal(\n ...args: Parameters<(typeof Keymaster)[\"resolveDID\"]>\n ) {\n return this.keymasterService.resolveDID(...args);\n }\n\n private async setCurrentIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"setCurrentId\"]>\n ) {\n return this.keymasterService.setCurrentId(...args);\n }\n\n private async createSchemaInternal(\n ...args: Parameters<(typeof Keymaster)[\"createSchema\"]>\n ) {\n return this.keymasterService.createSchema(...args);\n }\n\n private async loadWalletInternal(): Promise<WalletFile> {\n return this.keymasterService.loadWallet();\n }\n\n private async saveWalletInternal(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n return this.keymasterService.saveWallet(wallet, overwrite);\n }\n\n private async newWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"newWallet\"]>\n ) {\n return this.keymasterService.newWallet(...args);\n }\n\n private async recoverWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"recoverWallet\"]>\n ) {\n return this.keymasterService.recoverWallet(...args);\n }\n\n private validateConfig(config: KeymasterConfig): void {\n if (!config.gatekeeperConfig) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n\n if (config.gatekeeperConfig) {\n if (!config.walletDb?.loadWallet) {\n throw new Error(\"Missing load wallet callback\");\n }\n if (!config.walletDb?.saveWallet) {\n throw new Error(\"Missing save wallet callback\");\n }\n if (!config.passphrase) {\n throw new Error(\"Missing passphrase\");\n }\n }\n }\n}\n","import { SdkConfig } from \"./types/index.js\";\nimport {\n GatekeeperClient,\n MdipDocument,\n GetDIDOptions,\n Operation,\n} from \"@mdip/gatekeeper\";\n\nexport class GatekeeperReactNative {\n private static instance: GatekeeperReactNative | null = null;\n\n private config: SdkConfig;\n private gatekeeperClient!: GatekeeperClient;\n\n private constructor(config: SdkConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n public static initialize(config: SdkConfig) {\n if (!GatekeeperReactNative.instance) {\n GatekeeperReactNative.instance = new GatekeeperReactNative(config);\n } else {\n console.warn(\n \"GatekeeperReactNative already initialized, ignoring re-initialization.\"\n );\n }\n }\n\n private ensureInitialized() {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n }\n\n // Delegated STATIC methods\n\n public static async start() {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().startInternal();\n }\n\n public static async getDIDs(\n ...args: Parameters<GatekeeperReactNative[\"getDIDsInternal\"]>\n ) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().getDIDsInternal(...args);\n }\n\n public static async addCustomHeader({\n header,\n value,\n }: {\n header: string;\n value: string;\n }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().addCustomHeaderInternal({\n header,\n value,\n });\n }\n\n public static async removeCustomHeader({ header }: { header: string }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().removeCustomHeaderInternal({\n header,\n });\n }\n\n public static async generateDID(operation: Operation): Promise<string> {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().generateDIDInternal(operation);\n }\n\n private static getInstance(): GatekeeperReactNative {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n return GatekeeperReactNative.instance;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config) {\n return await this.startIntegratedGatekeeper();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedGatekeeper(): Promise<boolean> {\n try {\n this.gatekeeperClient = new GatekeeperClient();\n await this.gatekeeperClient.connect({\n url: this.config?.url,\n waitUntilReady: this.config?.waitUntilReady,\n intervalSeconds: this.config?.intervalSeconds,\n chatty: this.config?.chatty,\n });\n } catch (e) {\n console.error(\"Error starting GatekeeperReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async getDIDsInternal({\n dids,\n resolve,\n }: GetDIDOptions): Promise<string[] | MdipDocument[]> {\n const response = await this.gatekeeperClient.getDIDs({ dids, resolve });\n return response;\n }\n\n private async addCustomHeaderInternal({\n header,\n value,\n }: {\n header: string;\n value: string;\n }): Promise<void> {\n await this.gatekeeperClient.addCustomHeader(header, value);\n }\n\n private async removeCustomHeaderInternal({\n header,\n }: {\n header: string;\n }): Promise<void> {\n await this.gatekeeperClient.removeCustomHeader(header);\n }\n\n private async generateDIDInternal(operation: Operation): Promise<string> {\n return await this.gatekeeperClient.generateDID(operation);\n }\n\n private validateConfig(config: SdkConfig): void {\n if (!config) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n }\n}\n","export {\n KeymasterReactNative,\n KeymasterConfig as KeymasterReactNativeConfig,\n} from \"./keymaster-react-native.js\";\nexport { GatekeeperReactNative } from \"./gatekeeper-react-native.js\";\n\nexport {\n SdkConfig,\n WalletConfig,\n CreateChallengeResponse,\n CreateChallengeSpec,\n} from \"./types/index.js\";\n\nexport * from \"@mdip/keymaster\";\nimport * as GatekeeperTypes from \"@mdip/gatekeeper\";\n\nexport { GatekeeperTypes };\n"],"mappings":"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","names":["GatekeeperClient"]}
1
+ {"version":3,"sources":["../src/keymaster-react-native.ts","../src/gatekeeper-react-native.ts","../src/cipher-react-native.ts","../src/index.ts"],"sourcesContent":["// Imports\nimport CipherReactNative from \"./cipher-react-native.js\";\nimport {\n ChallengeResponse,\n CreateAssetOptions,\n CreateResponseOptions,\n IssueCredentialsOptions,\n StoredWallet,\n VerifiableCredential,\n WalletBase,\n WalletFile,\n} from \"@mdip/keymaster\";\n\nimport {\n GatekeeperClient,\n MdipDocument,\n Operation,\n ResolveDIDOptions,\n} from \"@mdip/gatekeeper\";\nimport {\n CreateChallengeResponse,\n CreateChallengeSpec,\n SdkConfig,\n} from \"./types/index.js\";\nimport KeymasterModule from \"@mdip/keymaster\";\nimport { encMnemonic } from \"@mdip/keymaster/encryption\";\n\n// @ts-ignore\nconst Keymaster = KeymasterModule?.default || KeymasterModule;\n\n// Keymaster configuration interface\nexport interface KeymasterConfig {\n gatekeeperConfig?: SdkConfig;\n walletDb?: WalletBase;\n cipher?: CipherReactNative;\n passphrase: string;\n}\nexport class KeymasterReactNative {\n private static instance: KeymasterReactNative | null = null;\n private config: KeymasterConfig;\n private keymasterService!: typeof Keymaster;\n private gatekeeper: GatekeeperClient | null = null;\n\n private constructor(config: KeymasterConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n // Initializes the instance if not already initialized\n /**\n * Initializes the KeymasterReactNative instance.\n * @param config The configuration object for the Keymaster service.\n */\n public static initialize(config: KeymasterConfig): void {\n if (!KeymasterReactNative.instance) {\n KeymasterReactNative.instance = new KeymasterReactNative(config);\n } else {\n console.warn(\n \"KeymasterReactNative already initialized, ignoring re-initialization.\",\n );\n }\n }\n\n /**\n * Resets the KeymasterReactNative instance.\n * This clears the singleton instance, allowing for re-initialization.\n */\n public static resetInstance(): void {\n KeymasterReactNative.instance = null;\n console.log(\"✅ KeymasterReactNative instance reset\");\n }\n\n // Ensures the instance is initialized\n private ensureInitialized(): void {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n }\n\n /**\n * Starts the KeymasterReactNative service.\n * @returns A boolean indicating whether the service was started successfully.\n */\n public static async start(): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().startInternal();\n }\n\n // Method to create a challenge\n /**\n * Creates a challenge for the user to solve.\n * @param spec The challenge specifications.\n * @param options Additional options for creating the challenge (optional).\n * @returns A promise with the challenge response, including the challenge and its callback URL.\n */\n public static async createChallenge(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createChallengeInternal(\n spec,\n options,\n );\n }\n\n // Method to bind a credential to a user\n /**\n * Binds a credential to a subject.\n * @param schemaId The schema ID for the credential.\n * @param subjectId The subject's DID (Decentralized Identifier).\n * @param options Optional options, such as validity period and credential data.\n * @returns A promise with the verifiable credential that was bound.\n */\n public static async bindCredential(\n schemaId: string,\n subjectId: string,\n options?: {\n validFrom?: string;\n validUntil?: string;\n credential?: Record<string, unknown>;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().bindCredentialInternal(\n schemaId,\n subjectId,\n options,\n );\n }\n\n // Method to create a response\n /**\n * Creates a response for the challenge.\n * @param challengeDID The DID of the challenge to respond to.\n * @param options Optional options for creating the response (optional).\n * @returns A promise with the response string.\n */\n public static async createResponse(\n challengeDID: string,\n options?: CreateResponseOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createResponseInternal(\n challengeDID,\n options,\n );\n }\n\n // Backup wallet\n /**\n * Backups the wallet data.\n * @param registry Optional registry URL for the wallet backup.\n * @returns A promise with a backup string (e.g., backup URL).\n */\n public static async backupWallet(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().backupWalletInternal(\n registry,\n wallet,\n );\n }\n\n // Issue credential to a user\n /**\n * Issues a credential to the subject.\n * @param credential The credential to be issued.\n * @param options Optional parameters for issuing the credential.\n * @returns A promise with the credential ID or issuance result.\n */\n public static async issueCredential(\n credential: Partial<VerifiableCredential>,\n options?: IssueCredentialsOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().issueCredentialInternal(\n credential,\n options,\n );\n }\n\n // Publish a credential\n /**\n * Publishes a verifiable credential.\n * @param did The DID of the credential.\n * @param options Optional parameters, such as whether to reveal the credential.\n * @returns A promise with the published credential.\n */\n public static async publishCredential(\n did: string,\n options?: {\n reveal?: boolean;\n },\n ): Promise<VerifiableCredential> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().publishCredentialInternal(\n did,\n options,\n );\n }\n\n // Accept a credential\n /**\n * Accepts a credential.\n * @param did The DID of the credential to accept.\n * @returns A promise indicating whether the credential was successfully accepted.\n */\n public static async acceptCredential(did: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().acceptCredentialInternal(did);\n }\n\n // Show mnemonic\n /**\n * Shows the mnemonic for the wallet.\n * @returns A promise with the mnemonic string.\n */\n public static async showMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().showMnemonicInternal();\n }\n\n // Verify a challenge response\n /**\n * Verifies a response to a challenge.\n * @param did The DID to verify the response for.\n * @param options Optional options, such as retry behavior.\n * @returns A promise with the response verification result.\n */\n public static async verifyResponse(\n did: string,\n options?: { retries?: number; delay?: number },\n ): Promise<ChallengeResponse> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().verifyResponseInternal(\n did,\n options,\n );\n }\n\n // Decrypt a message\n /**\n * Decrypts a message using the current key.\n * @param did The DID of the message to decrypt.\n * @returns A promise with the decrypted message.\n */\n public static async decryptMessage(did: string): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMessageInternal(did);\n }\n\n // Decrypt mnemonic\n /**\n * Decrypts the mnemonic for the wallet.\n * @returns A promise with the decrypted mnemonic.\n */\n public static async decryptMnemonic(): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().decryptMnemonicInternal();\n }\n\n // Get a credential\n /**\n * Retrieves a verifiable credential.\n * @param id The credential ID to retrieve.\n * @returns A promise with the credential data or null if not found.\n */\n public static async getCredential(\n id: string,\n ): Promise<VerifiableCredential | null> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().getCredentialInternal(id);\n }\n\n // Remove a credential\n /**\n * Removes a verifiable credential.\n * @param id The credential ID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeCredential(id: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeCredentialInternal(id);\n }\n\n // Update a credential\n /**\n * Updates a verifiable credential.\n * @param did The DID of the credential to update.\n * @param credential The new credential data.\n * @returns A promise indicating success or failure of the update operation.\n */\n public static async updateCredential(\n did: string,\n credential: VerifiableCredential,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().updateCredentialInternal(\n did,\n credential,\n );\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createId(\n name: string,\n options?: {\n registry?: string;\n },\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdInternal(name, options);\n }\n\n // Method to create an ID\n /**\n * Creates a new DID (Decentralized Identifier).\n * @param name The name for the DID.\n * @param options Optional options, such as registry URL.\n * @returns A promise with the newly created DID.\n */\n public static async createIdOperation(\n name: string,\n account: number,\n options?: {\n registry?: string;\n },\n ): Promise<Operation> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createIdOperationInternal(\n name,\n account,\n options,\n );\n }\n\n // Remove an ID\n /**\n * Removes an existing DID.\n * @param name The name of the DID to remove.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async removeId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().removeIdInternal(name);\n }\n\n // Resolve a DID\n /**\n * Resolves a DID to fetch associated data.\n * @param did The DID to resolve.\n * @param options Optional parameters for resolving the DID.\n * @returns A promise with the resolved DID data.\n */\n public static async resolveDID(\n did: string,\n options?: ResolveDIDOptions,\n ): Promise<MdipDocument> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().resolveDIDInternal(did, options);\n }\n\n // Set the current DID\n /**\n * Sets the current DID in use.\n * @param name The DID name to set as the current one.\n * @returns A promise indicating success or failure of the operation.\n */\n public static async setCurrentId(name: string): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().setCurrentIdInternal(name);\n }\n\n // Create a schema\n /**\n * Creates a new schema for credentials.\n * @param schema The schema data to create.\n * @param options Optional options for creating the schema.\n * @returns A promise with the created schema data.\n */\n public static async createSchema(\n schema?: unknown,\n options?: CreateAssetOptions,\n ): Promise<string> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().createSchemaInternal(\n schema,\n options,\n );\n }\n\n // Load wallet\n /**\n * Loads the current wallet.\n * @returns A promise with the loaded wallet file.\n */\n public static async loadWallet(): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().loadWalletInternal();\n }\n\n // Save wallet\n /**\n * Saves the wallet.\n * @param wallet The wallet to save.\n * @param overwrite Optional flag to overwrite the existing wallet (default: true).\n * @returns A promise with a boolean indicating success.\n */\n public static async saveWallet(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().saveWalletInternal(\n wallet,\n overwrite,\n );\n }\n\n // Create a new wallet\n /**\n * Creates a new wallet.\n * @param mnemonic Optional mnemonic to initialize the wallet.\n * @param overwrite Optional flag to overwrite the existing wallet.\n * @returns A promise with the wallet creation result.\n */\n public static async newWallet(\n mnemonic?: string,\n overwrite?: boolean,\n ): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().newWalletInternal(\n mnemonic,\n overwrite,\n );\n }\n\n /**\n * Adds a custom header to the GatekeeperClient instance.\n * @param header Header name\n * @param value Header value\n */\n public static addCustomHeader(header: string, value: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.addCustomHeader(header, value);\n }\n\n /**\n * Removes a custom header from the GatekeeperClient instance.\n * @param header Header name\n */\n public static removeCustomHeader(header: string): void {\n KeymasterReactNative.getInstance().ensureInitialized();\n const gatekeeper = KeymasterReactNative.getInstance().getGatekeeper();\n return gatekeeper.removeCustomHeader(header);\n }\n\n // Recover an existing wallet\n /**\n * Recovers a wallet from a backup.\n * @param did The DID to use for recovery (optional).\n * @returns A promise with the wallet recovery result.\n */\n public static async recoverWallet(did?: string): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().recoverWalletInternal(did);\n }\n\n // Re-encrypt the wallet's stored mnemonic\n /**\n * Re-encrypts the wallet's `seed.mnemonicEnc` from a known-good mnemonic\n * using the current passphrase, leaving the rest of the wallet (encrypted\n * ids, counter, names) untouched. Used to recover from a corrupted or\n * double-encrypted `mnemonicEnc` without destroying wallet contents.\n * @param mnemonic The plaintext mnemonic to re-encrypt and store.\n * @returns A promise with the updated wallet.\n */\n public static async resetMnemonicEncryption(\n mnemonic: string,\n ): Promise<WalletFile> {\n KeymasterReactNative.getInstance().ensureInitialized();\n return KeymasterReactNative.getInstance().resetMnemonicEncryptionInternal(\n mnemonic,\n );\n }\n\n // Helper method to retrieve the instance\n private static getInstance(): KeymasterReactNative {\n if (!KeymasterReactNative.instance) {\n throw new Error(\n \"KeymasterReactNative not initialized. Call KeymasterReactNative.initialize() first.\",\n );\n }\n return KeymasterReactNative.instance;\n }\n\n private getGatekeeper(): GatekeeperClient {\n if (!this.gatekeeper) {\n throw new Error(\"GatekeeperClient not initialized\");\n }\n return this.gatekeeper;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config.gatekeeperConfig) {\n return await this.startIntegratedKeymaster();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedKeymaster(): Promise<boolean> {\n try {\n if (this.config.walletDb && this.config.cipher) {\n if (!this.gatekeeper) {\n this.gatekeeper = new GatekeeperClient();\n }\n await this.gatekeeper.connect({\n url: this.config.gatekeeperConfig?.url,\n waitUntilReady: this.config.gatekeeperConfig?.waitUntilReady,\n intervalSeconds: this.config.gatekeeperConfig?.intervalSeconds,\n chatty: this.config.gatekeeperConfig?.chatty,\n });\n if (this.config.gatekeeperConfig?.token) {\n this.gatekeeper.addCustomHeader(\n \"authorization\",\n `Bearer ${this.config.gatekeeperConfig.token}`,\n );\n }\n this.keymasterService = new Keymaster({\n gatekeeper: this.gatekeeper,\n wallet: this.config.walletDb,\n cipher: this.config.cipher,\n passphrase: this.config.passphrase,\n });\n } else {\n return false;\n }\n } catch (e) {\n console.error(\"Error starting KeymasterReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async createChallengeInternal(\n spec: CreateChallengeSpec,\n options?: CreateAssetOptions,\n ): Promise<CreateChallengeResponse> {\n const challenge: string = await this.keymasterService.createChallenge(\n spec,\n options,\n );\n return {\n challenge: challenge,\n challengeUrl: `${spec.callback}?challenge=${challenge}`,\n };\n }\n\n private async bindCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"bindCredential\"]>\n ) {\n return this.keymasterService.bindCredential(...args);\n }\n\n private async createResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"createResponse\"]>\n ) {\n return this.keymasterService.createResponse(...args);\n }\n\n private async backupWalletInternal(\n registry?: string,\n wallet?: WalletFile,\n ): Promise<string> {\n return this.keymasterService.backupWallet(registry, wallet);\n }\n\n private async issueCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"issueCredential\"]>\n ) {\n return this.keymasterService.issueCredential(...args);\n }\n\n private async publishCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"publishCredential\"]>\n ) {\n return this.keymasterService.publishCredential(...args);\n }\n\n private async acceptCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"acceptCredential\"]>\n ) {\n return this.keymasterService.acceptCredential(...args);\n }\n\n private async showMnemonicInternal(): Promise<string> {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async verifyResponseInternal(\n ...args: Parameters<(typeof Keymaster)[\"verifyResponse\"]>\n ) {\n return this.keymasterService.verifyResponse(...args);\n }\n\n private async decryptMessageInternal(\n ...args: Parameters<(typeof Keymaster)[\"decryptMessage\"]>\n ) {\n return this.keymasterService.decryptMessage(...args);\n }\n\n private async decryptMnemonicInternal() {\n return this.keymasterService.decryptMnemonic();\n }\n\n private async getCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"getCredential\"]>\n ) {\n return this.keymasterService.getCredential(...args);\n }\n\n private async removeCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeCredential\"]>\n ) {\n return this.keymasterService.removeCredential(...args);\n }\n\n private async updateCredentialInternal(\n ...args: Parameters<(typeof Keymaster)[\"updateCredential\"]>\n ) {\n return this.keymasterService.updateCredential(...args);\n }\n\n private async createIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"createId\"]>\n ) {\n return this.keymasterService.createId(...args);\n }\n\n private async createIdOperationInternal(\n ...args: Parameters<(typeof Keymaster)[\"createIdOperation\"]>\n ) {\n return this.keymasterService.createIdOperation(...args);\n }\n\n private async removeIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"removeId\"]>\n ) {\n return this.keymasterService.removeId(...args);\n }\n\n private async resolveDIDInternal(\n ...args: Parameters<(typeof Keymaster)[\"resolveDID\"]>\n ) {\n return this.keymasterService.resolveDID(...args);\n }\n\n private async setCurrentIdInternal(\n ...args: Parameters<(typeof Keymaster)[\"setCurrentId\"]>\n ) {\n return this.keymasterService.setCurrentId(...args);\n }\n\n private async createSchemaInternal(\n ...args: Parameters<(typeof Keymaster)[\"createSchema\"]>\n ) {\n return this.keymasterService.createSchema(...args);\n }\n\n private async loadWalletInternal(): Promise<WalletFile> {\n return this.keymasterService.loadWallet();\n }\n\n private async saveWalletInternal(\n wallet: StoredWallet,\n overwrite = true,\n ): Promise<boolean> {\n return this.keymasterService.saveWallet(wallet, overwrite);\n }\n\n private async newWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"newWallet\"]>\n ) {\n return this.keymasterService.newWallet(...args);\n }\n\n private async recoverWalletInternal(\n ...args: Parameters<(typeof Keymaster)[\"recoverWallet\"]>\n ) {\n return this.keymasterService.recoverWallet(...args);\n }\n\n private async resetMnemonicEncryptionInternal(\n mnemonic: string,\n ): Promise<WalletFile> {\n const wallet: WalletFile = await this.keymasterService.loadWallet();\n wallet.seed.mnemonicEnc = await encMnemonic(mnemonic, this.config.passphrase);\n await this.keymasterService.saveWallet(wallet, true);\n return wallet;\n }\n\n private validateConfig(config: KeymasterConfig): void {\n if (!config.gatekeeperConfig) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n\n if (config.gatekeeperConfig) {\n if (!config.walletDb?.loadWallet) {\n throw new Error(\"Missing load wallet callback\");\n }\n if (!config.walletDb?.saveWallet) {\n throw new Error(\"Missing save wallet callback\");\n }\n if (!config.passphrase) {\n throw new Error(\"Missing passphrase\");\n }\n }\n }\n}\n","import { SdkConfig } from \"./types/index.js\";\nimport {\n GatekeeperClient,\n MdipDocument,\n GetDIDOptions,\n Operation,\n} from \"@mdip/gatekeeper\";\n\nexport class GatekeeperReactNative {\n private static instance: GatekeeperReactNative | null = null;\n\n private config: SdkConfig;\n private gatekeeperClient!: GatekeeperClient;\n\n private constructor(config: SdkConfig) {\n this.validateConfig(config);\n this.config = config;\n }\n\n public static initialize(config: SdkConfig) {\n if (!GatekeeperReactNative.instance) {\n GatekeeperReactNative.instance = new GatekeeperReactNative(config);\n } else {\n console.warn(\n \"GatekeeperReactNative already initialized, ignoring re-initialization.\"\n );\n }\n }\n\n private ensureInitialized() {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n }\n\n // Delegated STATIC methods\n\n public static async start() {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().startInternal();\n }\n\n public static async getDIDs(\n ...args: Parameters<GatekeeperReactNative[\"getDIDsInternal\"]>\n ) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().getDIDsInternal(...args);\n }\n\n public static async addCustomHeader({\n header,\n value,\n }: {\n header: string;\n value: string;\n }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().addCustomHeaderInternal({\n header,\n value,\n });\n }\n\n public static async removeCustomHeader({ header }: { header: string }) {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().removeCustomHeaderInternal({\n header,\n });\n }\n\n public static async generateDID(operation: Operation): Promise<string> {\n GatekeeperReactNative.getInstance().ensureInitialized();\n return GatekeeperReactNative.getInstance().generateDIDInternal(operation);\n }\n\n private static getInstance(): GatekeeperReactNative {\n if (!GatekeeperReactNative.instance) {\n throw new Error(\n \"GatekeeperReactNative not initialized. Call GatekeeperReactNative.initialize() first.\"\n );\n }\n return GatekeeperReactNative.instance;\n }\n\n // -------- Internal instance methods (originals renamed with Internal) -------\n\n private async startInternal(): Promise<boolean> {\n if (this.config) {\n return await this.startIntegratedGatekeeper();\n } else {\n throw \"Missing Gatekeeper config\";\n }\n }\n\n private async startIntegratedGatekeeper(): Promise<boolean> {\n try {\n this.gatekeeperClient = new GatekeeperClient();\n await this.gatekeeperClient.connect({\n url: this.config?.url,\n waitUntilReady: this.config?.waitUntilReady,\n intervalSeconds: this.config?.intervalSeconds,\n chatty: this.config?.chatty,\n });\n } catch (e) {\n console.error(\"Error starting GatekeeperReactNative service:\", e);\n return false;\n }\n return true;\n }\n\n private async getDIDsInternal({\n dids,\n resolve,\n }: GetDIDOptions): Promise<string[] | MdipDocument[]> {\n const response = await this.gatekeeperClient.getDIDs({ dids, resolve });\n return response;\n }\n\n private async addCustomHeaderInternal({\n header,\n value,\n }: {\n header: string;\n value: string;\n }): Promise<void> {\n await this.gatekeeperClient.addCustomHeader(header, value);\n }\n\n private async removeCustomHeaderInternal({\n header,\n }: {\n header: string;\n }): Promise<void> {\n await this.gatekeeperClient.removeCustomHeader(header);\n }\n\n private async generateDIDInternal(operation: Operation): Promise<string> {\n return await this.gatekeeperClient.generateDID(operation);\n }\n\n private validateConfig(config: SdkConfig): void {\n if (!config) {\n throw new Error(\"Missing Gatekeeper config\");\n }\n }\n}\n","import * as bip39 from \"bip39\";\nimport { HDKey } from \"@scure/bip32\";\nimport { base64url } from \"multiformats/bases/base64\";\nimport CipherBase from \"@mdip/cipher/dist/esm/cipher-base.js\";\n\ninterface HDKeyJSON {\n xpriv: string;\n xpub: string;\n}\n\nexport default class CipherReactNative extends CipherBase {\n generateHDKey(mnemonic: string): HDKey {\n const seed = bip39.mnemonicToSeedSync(mnemonic);\n return HDKey.fromMasterSeed(seed);\n }\n\n generateHDKeyJSON(json: HDKeyJSON): HDKey {\n return HDKey.fromExtendedKey(json.xpriv);\n }\n\n generateRandomSalt(): string {\n const array = new Uint8Array(32);\n globalThis.crypto.getRandomValues(array);\n return base64url.encode(array);\n }\n}\n","export {\n KeymasterReactNative,\n KeymasterConfig as KeymasterReactNativeConfig,\n} from \"./keymaster-react-native.js\";\nexport { GatekeeperReactNative } from \"./gatekeeper-react-native.js\";\nexport { default as CipherReactNative } from \"./cipher-react-native.js\";\n\nexport {\n SdkConfig,\n WalletConfig,\n CreateChallengeResponse,\n CreateChallengeSpec,\n} from \"./types/index.js\";\n\nexport * from \"@mdip/keymaster\";\nimport * as GatekeeperTypes from \"@mdip/gatekeeper\";\n\nexport { GatekeeperTypes };\n"],"mappings":"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","names":["GatekeeperClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yourself_id/siwys-react-native",
3
- "version": "0.33.2-update-workflows.13.0",
3
+ "version": "0.34.1-reset-mnemonic-encryption.19.0",
4
4
  "description": "A React Native component library",
5
5
  "repository": {
6
6
  "type": "git",
@@ -32,7 +32,14 @@
32
32
  "dependencies": {
33
33
  "@mdip/cipher": "^1.4.1",
34
34
  "@mdip/gatekeeper": "^1.4.1",
35
- "@mdip/keymaster": "^1.4.1"
35
+ "@mdip/keymaster": "^1.4.1",
36
+ "@noble/ciphers": "^0.4.1",
37
+ "@noble/hashes": "^1.8.0",
38
+ "@noble/secp256k1": "^2.2.3",
39
+ "@scure/bip32": "^1.6.2",
40
+ "bip39": "^3.1.0",
41
+ "canonicalize": "^2.1.0",
42
+ "multiformats": "^13.3.4"
36
43
  },
37
44
  "devDependencies": {
38
45
  "@babel/preset-env": "^7.25.8",
@@ -46,5 +53,5 @@
46
53
  "tsup": "^8.3.0",
47
54
  "typescript": "4.9.4"
48
55
  },
49
- "gitHead": "2590937ec1dde07887b457a4f45e7cadc89de7f5"
56
+ "gitHead": "a5ab6d637fb87fb6a6beca86dfdee4a3ea44ba41"
50
57
  }