passnoteLowLevel function

Future<Passnote> passnoteLowLevel({
  1. required PassnoteConfig config,
  2. required KeyStore keyStore,
  3. required Transport transport,
  4. required Future<List<int>> deriveKey(
    1. String passphrase,
    2. String salt
    ),
  5. required String roomTag(
    1. List<int> key
    ),
  6. required Cipher cipher(
    1. List<int> key
    ),
  7. required List<String> mnemonicGenerator(
    1. int words
    ),
  8. required bool validateMnemonic(
    1. String
    ),
  9. required FutureOr<CrdtTable> engine(
    1. String databaseId,
    2. String collection,
    3. List<int> key
    ),
  10. Identity? identity,
  11. Pake? pake,
  12. Future<Identity> recoveryIdentity(
    1. String phrase,
    2. String salt
    )?,
  13. List<int> wireVersions = supportedWireVersions,
  14. List<String> wireCapabilities = const [reconCapability],
})

Constructs and wires a Passnote instance with every dependency explicit.

Part of the advanced package:passnote/engine.dart surface, not the frozen app-facing library: pass adapters from the other packages or supply custom implementations that satisfy the port interfaces. Prefer Passnote.builder unless you need this level of control.

Implementation

Future<Passnote> passnoteLowLevel({
  required PassnoteConfig config,
  required KeyStore keyStore,
  required Transport transport,
  required Future<List<int>> Function(String passphrase, String salt) deriveKey,
  required String Function(List<int> key) roomTag,
  required Cipher Function(List<int> key) cipher,
  required List<String> Function(int words) mnemonicGenerator,
  required bool Function(String) validateMnemonic,
  required FutureOr<CrdtTable> Function(
          String databaseId, String collection, List<int> key)
      engine,
  Identity? identity,
  Pake? pake,
  Future<Identity> Function(String phrase, String salt)? recoveryIdentity,
  List<int> wireVersions = supportedWireVersions,
  List<String> wireCapabilities = const [reconCapability],
}) async {
  final nodeId = generateNodeId();

  final instance = Passnote._(
    config: config,
    keyStore: keyStore,
    transport: transport,
    nodeId: nodeId,
    deriveKey: deriveKey,
    roomTag: roomTag,
    cipherFactory: cipher,
    mnemonicGenerator: mnemonicGenerator,
    validateMnemonic: validateMnemonic,
    engineFactory: engine,
    pake: pake,
    identity: identity,
    recoveryIdentity: recoveryIdentity,
    wireVersions: wireVersions,
    wireCapabilities: wireCapabilities,
  );
  // Wire listeners BEFORE start so PeerConnected events emitted during
  // registration are not missed.
  instance._wireTransport();
  await transport.start(self: nodeId, appId: config.appId);
  return instance;
}