addDevice method

Future<void> addDevice({
  1. required String authKey,
  2. required String peerKey,
  3. required String adminPublicKey,
  4. required String peerMnemonic,
  5. String? deviceName,
})

Implementation

Future<void> addDevice({
  required String authKey,
  required String peerKey,
  required String adminPublicKey,
  required String peerMnemonic,
  String? deviceName,
}) async {
  final mnemonicPeerKey = await signing.getPeerPublicKey(peerMnemonic);
  if (mnemonicPeerKey != peerKey) {
    throw StateError('Add-device link peer key does not match mnemonic');
  }

  await TailscaleAdmin.instance.setAdminPeer(adminPublicKey);
  await setPeer(peerKey);
  await connect(authKey: authKey);

  final nodeId = await getCurrentNodeId();
  if (nodeId == null) {
    throw StateError('Missing Tailscale node ID');
  }

  await events.publish(
    await DeviceAuthEventBodyModel.create(
      mnemonic: peerMnemonic,
      nodeId: nodeId,
    ),
  );

  if (deviceName != null) {
    await events.publish(
      DeviceIdentityEventBodyModel(
        name: deviceName,
        updatedDeviceKey: signing.publicKey,
      ),
    );
  }
}