{
  "name": "unified-ble-manager",
  "version": "4.0.28",
  "description": "Unified Bluetooth Low Energy manager for React Native, Electron, Tauri, Web, and desktop",
  "packageManager": "pnpm@10.14.0",
  "main": "lib/commonjs/index.js",
  "module": "lib/module/index.js",
  "types": "lib/typescript/commonjs/src/index.d.ts",
  "source": "src/index",
  "files": [
    "lib",
    "src",
    "bin",
    "android",
    "ios",
    "native",
    "docs",
    "CHANGELOG.md",
    "CONTRIBUTING.md",
    "GOVERNANCE.md",
    "ROADMAP.md",
    "ROADMAP.4.0.md",
    "RELEASE.md",
    "SECURITY.md",
    "SUPPORT.md",
    "SBOM.cdx.json",
    "THIRD_PARTY_LICENSES.json",
    "plugin/build",
    "app.plugin.js",
    "*.podspec",
    "!docs/superpowers",
    "!docs/audits",
    "!docs/review",
    "!docs/evidence/g0/**",
    "!docs/README_V1.md",
    "!docs/MIGRATION_V1.md",
    "!docs/index.html",
    "!docs/assets",
    "!lib/typescript/example",
    "!lib/typescript/example-expo",
    "!ios/build",
    "!android/build",
    "!android/gradle",
    "!android/gradlew",
    "!android/gradlew.bat",
    "!android/local.properties",
    "!native/**/build",
    "!native/**/target",
    "!native/**/obj.target",
    "!native/protocol/tests/**",
    "!**/__tests__",
    "!**/__fixtures__",
    "!**/__mocks__",
    "!**/.*",
    "MIGRATION_4.0.md"
  ],
  "scripts": {
    "build": "pnpm prepack",
    "test": "pnpm test:package",
    "pretest:package": "pnpm prepack",
    "test:package": "jest --config jest.config.js",
    "native-protocol:generate": "node scripts/native-protocol/generate-native-protocol.js",
    "native-protocol:check": "node scripts/native-protocol/generate-native-protocol.js --check",
    "test:native-protocol": "node scripts/native-protocol/test-native-protocol.js",
    "test:native-protocol:android": "cd example/android && ./gradlew :unified-ble-manager:testDebugUnitTest --tests 'com.sfourdrinier.unifiedblemanager.protocol.UnifiedBleProtocolAndroidDispatcher*' --no-daemon --console=plain",
    "test:native-protocol:apple": "node scripts/native-protocol/test-apple-native-protocol.js",
    "test:native-protocol:winrt": "node scripts/native-protocol/test-winrt-connection-ownership.js",
    "performance:native-host": "node scripts/performance/run-native-host-benchmark.js",
    "performance:js": "node scripts/performance/run-performance-suite.js",
    "performance:benchmark": "node scripts/performance/run-complete-performance-suite.js --samples 9 --target-ms 25",
    "performance:check": "node scripts/performance/run-complete-performance-suite.js --samples 5 --target-ms 10 --quiet",
    "release:artifacts": "node scripts/release/generate-dependency-artifacts.js",
    "release:artifacts:check": "node scripts/release/generate-dependency-artifacts.js --check",
    "validate:evidence": "node scripts/evidence/validate-current-evidence.js",
    "docs:backend-sdk": "node scripts/docs/generate-backend-sdk-reference.js && node scripts/docs/generate-platform-support.js",
    "docs:check": "node scripts/docs/generate-backend-sdk-reference.js --check && node scripts/docs/generate-platform-support.js --check && node scripts/docs/check-api-reports.js && node scripts/docs/check-generated-html.js && node scripts/docs/check-docs-index.js",
    "cli": "node bin/ubm.js",
    "docs": "pnpm prepack && documentation build lib/module/index.js -o docs --config documentation.yml -f html --shallow && prettier --write docs/index.html docs/assets/anchor.js docs/assets/site.js",
    "typecheck": "tsc --noEmit -p tsconfig.build.json",
    "lint": "eslint \"src/**/*.{ts,tsx}\" \"plugin/src/**/*.{ts,tsx}\" --max-warnings 0 && pnpm typecheck",
    "prepack": "node scripts/ci/build-package.js",
    "test:g6a": "pnpm prepack && node scripts/ci/g6a-packed-consumer-proof.js",
    "verify:release": "bash scripts/verify-release.sh",
    "release": "release-it",
    "example": "pnpm --dir example",
    "build:android": "cd example/android && ./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a",
    "test:android": "cd example/android && ./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a",
    "build:ios": "cd example/ios && xcodebuild -workspace BlePlxExample.xcworkspace -scheme BlePlxExample -configuration Debug -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO",
    "test:ios": "cd example/ios && xcodebuild -workspace BlePlxExample.xcworkspace -scheme BlePlxExample -configuration Debug -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO",
    "test:tvos:library": "bash scripts/ci/check-tvos-library.sh",
    "test:expo": "pnpm --dir example-expo install --no-frozen-lockfile && pnpm --dir example-expo exec expo install --fix && pnpm --dir example-expo exec tsc --noEmit -p tsconfig.json && cd example-expo && NODE_ENV=development npx expo-doctor && NODE_ENV=development npx expo prebuild --clean --no-install",
    "build:expo:android": "pnpm --dir example-expo install --force --no-frozen-lockfile && cd example-expo && NODE_ENV=development npx expo prebuild --clean --no-install && cd android && NODE_ENV=development ./gradlew :app:assembleDebug --no-daemon --console=plain",
    "bootstrap": "pnpm --dir example install && pnpm install && pnpm --dir example pods",
    "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build plugin/build lib",
    "build:plugin": "tsc --build plugin",
    "clean:plugin": "del-cli plugin/build",
    "test:plugin": "jest --config plugin/jest.config.js",
    "build:electron:macos": "cd native/electron/corebluetooth && node-gyp rebuild --release",
    "build:electron:winrt": "cd native/electron/winrt && node-gyp rebuild --release",
    "native-prebuild:build": "node scripts/native-prebuilds/build.js",
    "native-prebuild:verify": "node scripts/native-prebuilds/verify.js",
    "example:electron": "pnpm prepack && node example-electron/smoke.js",
    "build:example:web": "tsc --noEmit -p example-web/tsconfig.json && vite build --config example-web/vite.config.mts",
    "example:web": "pnpm prepack && vite --config example-web/vite.config.mts",
    "prepare": "pnpm clean:plugin && pnpm build:plugin && pnpm exec bob build",
    "lint:plugin": "eslint plugin/src/*"
  },
  "keywords": [
    "bluetooth",
    "ble",
    "unified-ble-manager",
    "react-native",
    "electron",
    "tauri",
    "web",
    "corebluetooth",
    "gatt",
    "central"
  ],
  "bin": {
    "ubm": "bin/ubm.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/sfourdrinier/unified-ble-manager.git"
  },
  "author": "sfourdrinier",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/sfourdrinier/unified-ble-manager/issues"
  },
  "homepage": "https://github.com/sfourdrinier/unified-ble-manager#readme",
  "publishConfig": {
    "registry": "https://registry.npmjs.org/",
    "access": "public",
    "provenance": true
  },
  "devDependencies": {
    "@babel/cli": "^7.25.9",
    "@babel/core": "^7.25.2",
    "@babel/preset-typescript": "^7.25.2",
    "@commitlint/config-conventional": "^17.0.2",
    "@eslint/eslintrc": "^3.3.5",
    "@eslint/js": "^9.39.4",
    "@evilmartians/lefthook": "^1.5.0",
    "@react-native/eslint-config": "~0.86.0",
    "@react-native/jest-preset": "~0.86.0",
    "@react-native/metro-config": "~0.86.0",
    "@react-native/typescript-config": "~0.86.0",
    "@react-navigation/native": "^7.0.0",
    "@react-navigation/native-stack": "^7.0.0",
    "@release-it/conventional-changelog": "^11.0.1",
    "@tauri-apps/api": "2.11.1",
    "@types/jest": "^29.5.5",
    "@types/node": "^24.10.0",
    "@types/react": "^19.2.2",
    "@types/web-bluetooth": "0.0.21",
    "@typescript-eslint/eslint-plugin": "^8.47.0",
    "@typescript-eslint/parser": "^8.47.0",
    "babel-plugin-syntax-hermes-parser": "^0.15.1",
    "commitlint": "^17.0.2",
    "dbus-next": "^0.10.2",
    "del-cli": "^5.1.0",
    "documentation": "14.0.3",
    "electron": "43.2.0",
    "eslint": "^9.39.1",
    "eslint-config-prettier": "^9.0.0",
    "eslint-plugin-import": "^2.28.1",
    "eslint-plugin-jsx-a11y": "^6.7.1",
    "eslint-plugin-prettier": "^5.0.1",
    "eslint-plugin-react": "^7.37.5",
    "eslint-plugin-react-hooks": "^7.1.1",
    "eslint-plugin-react-native": "^5.0.0",
    "eslint-plugin-react-refresh": "^0.4.3",
    "expo": "^57.0.0",
    "expo-module-scripts": "^5.0.0",
    "globals": "^17.7.0",
    "hermes-eslint": "^0.15.1",
    "jest": "^29.7.0",
    "prettier": "^3.0.3",
    "react": "~19.2.0",
    "react-native": "~0.86.0",
    "react-native-builder-bob": "^0.43.0",
    "react-native-safe-area-context": "^5.0.0",
    "react-native-toast-message": "^2.1.6",
    "release-it": "^20.2.1",
    "semver": "^7.8.5",
    "styled-components": "^6.1.11",
    "turbo": "^1.10.7",
    "typescript": "^5.2.2",
    "vite": "^8.2.2",
    "webpack": "5.109.2",
    "yaml": "2.9.0"
  },
  "resolutions": {
    "@types/react": "^19.0.0"
  },
  "peerDependencies": {
    "@tauri-apps/api": "^2.0.0",
    "dbus-next": "^0.10.2",
    "expo": "^57.0.0",
    "react": "*",
    "react-native": ">=0.86.0"
  },
  "peerDependenciesMeta": {
    "expo": {
      "optional": true
    },
    "dbus-next": {
      "optional": true
    },
    "react": {
      "optional": true
    },
    "react-native": {
      "optional": true
    },
    "@tauri-apps/api": {
      "optional": true
    }
  },
  "engines": {
    "node": "^22.13.0 || ^24.3.0 || >=25.0.0"
  },
  "codegenConfig": {
    "name": "UnifiedBleProtocolSpec",
    "type": "modules",
    "jsSrcsDir": "src",
    "android": {
      "javaPackageName": "com.sfourdrinier.unifiedblemanager"
    },
    "ios": {
      "modulesProvider": {
        "UnifiedBleProtocolControl": "UnifiedBleProtocolControl",
        "UnifiedBleExpoRuntime": "UnifiedBleExpoRuntime"
      }
    }
  },
  "jest": {
    "preset": "@react-native/jest-preset",
    "modulePathIgnorePatterns": [
      "<rootDir>/integration-tests",
      "<rootDir>/example/node_modules",
      "<rootDir>/example-expo/node_modules",
      "<rootDir>/lib/"
    ]
  },
  "commitlint": {
    "extends": [
      "@commitlint/config-conventional"
    ]
  },
  "release-it": {
    "git": {
      "commitMessage": "chore: release ${version}",
      "tagName": "v${version}"
    },
    "npm": {
      "publish": true
    },
    "github": {
      "release": true
    },
    "plugins": {
      "@release-it/conventional-changelog": {
        "preset": "angular"
      }
    }
  },
  "react-native-builder-bob": {
    "source": "src",
    "output": "lib",
    "exclude": "**/{__tests__,__fixtures__,__mocks__}/**",
    "targets": [
      [
        "commonjs",
        {
          "esm": true
        }
      ],
      [
        "module",
        {
          "esm": true
        }
      ],
      [
        "typescript",
        {
          "project": "tsconfig.build.json",
          "tsc": "./node_modules/.bin/tsc"
        }
      ]
    ]
  },
  "exports": {
    ".": {
      "import": {
        "types": "./lib/typescript/module/src/index.d.ts",
        "default": "./lib/module/index.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/index.d.ts",
        "default": "./lib/commonjs/index.js"
      },
      "default": "./lib/commonjs/index.js"
    },
    "./app.plugin.js": "./app.plugin.js",
    "./package.json": "./package.json",
    "./backend-sdk": {
      "import": {
        "types": "./lib/typescript/module/src/backend-sdk.d.ts",
        "default": "./lib/module/backend-sdk.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/backend-sdk.d.ts",
        "default": "./lib/commonjs/backend-sdk.js"
      },
      "default": "./lib/commonjs/backend-sdk.js"
    },
    "./cli": {
      "import": {
        "types": "./lib/typescript/module/src/cli.d.ts",
        "default": "./lib/module/cli.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/cli.d.ts",
        "default": "./lib/commonjs/cli.js"
      },
      "default": "./lib/commonjs/cli.js"
    },
    "./testing": {
      "import": {
        "types": "./lib/typescript/module/src/testing.d.ts",
        "default": "./lib/module/testing.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/testing.d.ts",
        "default": "./lib/commonjs/testing.js"
      },
      "default": "./lib/commonjs/testing.js"
    },
    "./codecs": {
      "import": {
        "types": "./lib/typescript/module/src/codecs.d.ts",
        "default": "./lib/module/codecs.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/codecs.d.ts",
        "default": "./lib/commonjs/codecs.js"
      },
      "default": "./lib/commonjs/codecs.js"
    },
    "./profiles/commands": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/commands.d.ts",
        "default": "./lib/module/profiles/commands.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/commands.d.ts",
        "default": "./lib/commonjs/profiles/commands.js"
      },
      "default": "./lib/commonjs/profiles/commands.js"
    },
    "./profiles/standard-commands": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/standard-commands.d.ts",
        "default": "./lib/module/profiles/standard-commands.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/standard-commands.d.ts",
        "default": "./lib/commonjs/profiles/standard-commands.js"
      },
      "default": "./lib/commonjs/profiles/standard-commands.js"
    },
    "./profiles/heart-rate": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/heart-rate.d.ts",
        "default": "./lib/module/profiles/heart-rate.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/heart-rate.d.ts",
        "default": "./lib/commonjs/profiles/heart-rate.js"
      },
      "default": "./lib/commonjs/profiles/heart-rate.js"
    },
    "./profiles/battery-service": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/battery-service.d.ts",
        "default": "./lib/module/profiles/battery-service.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/battery-service.d.ts",
        "default": "./lib/commonjs/profiles/battery-service.js"
      },
      "default": "./lib/commonjs/profiles/battery-service.js"
    },
    "./profiles/device-information": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/device-information.d.ts",
        "default": "./lib/module/profiles/device-information.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/device-information.d.ts",
        "default": "./lib/commonjs/profiles/device-information.js"
      },
      "default": "./lib/commonjs/profiles/device-information.js"
    },
    "./profiles/health-thermometer": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/health-thermometer.d.ts",
        "default": "./lib/module/profiles/health-thermometer.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/health-thermometer.d.ts",
        "default": "./lib/commonjs/profiles/health-thermometer.js"
      },
      "default": "./lib/commonjs/profiles/health-thermometer.js"
    },
    "./profiles/blood-pressure": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/blood-pressure.d.ts",
        "default": "./lib/module/profiles/blood-pressure.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/blood-pressure.d.ts",
        "default": "./lib/commonjs/profiles/blood-pressure.js"
      },
      "default": "./lib/commonjs/profiles/blood-pressure.js"
    },
    "./profiles/ieee-11073": {
      "import": {
        "types": "./lib/typescript/module/src/profiles/ieee-11073.d.ts",
        "default": "./lib/module/profiles/ieee-11073.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/profiles/ieee-11073.d.ts",
        "default": "./lib/commonjs/profiles/ieee-11073.js"
      },
      "default": "./lib/commonjs/profiles/ieee-11073.js"
    },
    "./web": {
      "import": {
        "types": "./lib/typescript/module/src/web.d.ts",
        "default": "./lib/module/web.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/web.d.ts",
        "default": "./lib/commonjs/web.js"
      },
      "default": "./lib/commonjs/web.js"
    },
    "./react-native": {
      "import": {
        "types": "./lib/typescript/module/src/react-native.d.ts",
        "default": "./lib/module/react-native.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/react-native.d.ts",
        "default": "./lib/commonjs/react-native.js"
      },
      "default": "./lib/commonjs/react-native.js"
    },
    "./react": {
      "import": {
        "types": "./lib/typescript/module/src/react.d.ts",
        "default": "./lib/module/react.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/react.d.ts",
        "default": "./lib/commonjs/react.js"
      },
      "default": "./lib/commonjs/react.js"
    },
    "./node/bluez": {
      "import": {
        "types": "./lib/typescript/module/src/node-bluez.d.ts",
        "default": "./lib/module/node-bluez.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/node-bluez.d.ts",
        "default": "./lib/commonjs/node-bluez.js"
      },
      "default": "./lib/commonjs/node-bluez.js"
    },
    "./node/corebluetooth": {
      "import": {
        "types": "./lib/typescript/module/src/node-corebluetooth.d.ts",
        "default": "./lib/module/node-corebluetooth.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/node-corebluetooth.d.ts",
        "default": "./lib/commonjs/node-corebluetooth.js"
      },
      "default": "./lib/commonjs/node-corebluetooth.js"
    },
    "./node/winrt": {
      "import": {
        "types": "./lib/typescript/module/src/node-winrt.d.ts",
        "default": "./lib/module/node-winrt.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/node-winrt.d.ts",
        "default": "./lib/commonjs/node-winrt.js"
      },
      "default": "./lib/commonjs/node-winrt.js"
    },
    "./electron/main": {
      "import": {
        "types": "./lib/typescript/module/src/electron-main.d.ts",
        "default": "./lib/module/electron-main.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/electron-main.d.ts",
        "default": "./lib/commonjs/electron-main.js"
      },
      "default": "./lib/commonjs/electron-main.js"
    },
    "./electron/renderer": {
      "import": {
        "types": "./lib/typescript/module/src/electron-renderer.d.ts",
        "default": "./lib/module/electron-renderer.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/electron-renderer.d.ts",
        "default": "./lib/commonjs/electron-renderer.js"
      },
      "default": "./lib/commonjs/electron-renderer.js"
    },
    "./tauri": {
      "import": {
        "types": "./lib/typescript/module/src/tauri.d.ts",
        "default": "./lib/module/tauri.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/tauri.d.ts",
        "default": "./lib/commonjs/tauri.js"
      },
      "default": "./lib/commonjs/tauri.js"
    },
    "./advanced": {
      "import": {
        "types": "./lib/typescript/module/src/advanced.d.ts",
        "default": "./lib/module/advanced.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/advanced.d.ts",
        "default": "./lib/commonjs/advanced.js"
      },
      "default": "./lib/commonjs/advanced.js"
    },
    "./expo": {
      "import": {
        "types": "./lib/typescript/module/src/expo.d.ts",
        "default": "./lib/module/expo.js"
      },
      "require": {
        "types": "./lib/typescript/commonjs/src/expo.d.ts",
        "default": "./lib/commonjs/expo.js"
      },
      "default": "./lib/commonjs/expo.js"
    }
  },
  "optionalDependencies": {
    "node-addon-api": "8.9.0",
    "node-gyp": "12.4.0"
  },
  "dependencies": {
    "@babel/runtime": "^7.29.7"
  }
}
