{"_id":"@cap-kit/tls-fingerprint","_rev":"3-60fa72c46733a8ec00cd0acd41e82f75","name":"@cap-kit/tls-fingerprint","dist-tags":{"latest":"8.1.0"},"versions":{"8.0.0":{"name":"@cap-kit/tls-fingerprint","version":"8.0.0","keywords":["capacitor","capacitor-plugin","mobile","native","cap-kit","ios","android","tls","https","certificate","certificate-fingerprint","tls-fingerprint","sha256","leaf-certificate","security"],"author":{"name":"CapKit Team"},"license":"MIT","_id":"@cap-kit/tls-fingerprint@8.0.0","maintainers":[{"name":"fabiomartino","email":"martino.f1975@gmail.com"},{"name":"martinofabio","email":"martinofabio@libero.it"}],"homepage":"https://github.com/cap-kit/capacitor-plugins/tree/main/packages/tls-fingerprint#readme","bugs":{"url":"https://github.com/cap-kit/capacitor-plugins/issues"},"bin":{"cap-kit-tls-fingerprint":"dist/cli/fingerprint.js"},"dist":{"shasum":"ea64220275c2b9e15ecc404f9f0dd67c31c2e128","tarball":"https://registry.npmjs.org/@cap-kit/tls-fingerprint/-/tls-fingerprint-8.0.0.tgz","fileCount":51,"integrity":"sha512-mnE2QCXUVVGBUbORKa+xk3VEsYw06mWM8DepappCheNlSD9hrCG1xr4x3XxbmHROr+D19glOaHw5IEbCFqRO7A==","signatures":[{"sig":"MEQCIDL9il4Ee+sNWKNYeAg8ckwrFa/HWJWvtTDsGdTNIW8kAiB6LWUhq5FJabFWKZl8NlrxFdUpGuMU/LxEJ546WQ0ZTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186197},"main":"dist/plugin.cjs","type":"module","_from":"file:cap-kit-tls-fingerprint-8.0.0.tgz","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=24.0.0","pnpm":">=10.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/plugin.cjs"},"./package.json":"./package.json"},"funding":{"url":"https://github.com/sponsors/cap-kit","type":"github"},"private":false,"scripts":{"lint":"pnpm run eslint . && pnpm run swiftlint lint --strict || true && pnpm run lint:android || true","test":"pnpm run verify","build":"node ./scripts/sync-version.mjs && pnpm run clean && pnpm run docgen && tsc && rollup -c rollup.config.mjs && node scripts/chmod.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api TLSFingerprintPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint","format":"eslint --fix . && prettier --write \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java && pnpm run swiftlint --fix --format && pnpm run fmt:android","verify":"pnpm run verify:ios && pnpm run verify:android && pnpm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint lint ios/Sources","verify:ios":"node ./scripts/sync-version.mjs && xcodebuild -scheme CapKitTlsFingerprint -destination generic/platform=iOS","verify:web":"pnpm run build","fmt:android":"cd android && ./gradlew ktlintFormat","format:check":"prettier --check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","lint:android":"cd android && ./gradlew ktlintCheck","removePacked":"rimraf -g cap-kit-tls-fingerprint-*.tgz","verify:android":"cd android && ./gradlew clean build && cd ..","publish:locally":"pnpm run removePacked && pnpm run build && pnpm pack"},"_npmUser":{"name":"martinofabio","email":"martinofabio@libero.it"},"_resolved":"/tmp/5e7ad4cf9e3a5a6314618b4cf2dac87c/cap-kit-tls-fingerprint-8.0.0.tgz","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_integrity":"sha512-mnE2QCXUVVGBUbORKa+xk3VEsYw06mWM8DepappCheNlSD9hrCG1xr4x3XxbmHROr+D19glOaHw5IEbCFqRO7A==","repository":{"url":"git+https://github.com/cap-kit/capacitor-plugins.git","type":"git","directory":"packages/tls-fingerprint"},"_npmVersion":"11.8.0","description":"Runtime TLS leaf certificate SHA-256 fingerprint validation plugin for Capacitor (iOS & Android)","directories":{},"sideEffects":false,"_nodeVersion":"24.13.1","dependencies":{"yargs":"^18.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","rimraf":"^6.1.3","rollup":"^4.57.1","globals":"^17.3.0","prettier":"^3.8.1","swiftlint":"^2.0.0","@eslint/js":"^9.39.2","typescript":"~5.9.3","@types/node":"^25.3.0","@types/yargs":"^17.0.35","@capacitor/cli":"^8.1.0","@capacitor/ios":"^8.1.0","@capacitor/core":"^8.1.0","@eslint/eslintrc":"^3.3.3","@capacitor/docgen":"^0.3.1","typescript-eslint":"^8.56.0","@capacitor/android":"^8.1.0","eslint-plugin-import":"^2.32.0","prettier-plugin-java":"^2.8.1"},"peerDependencies":{"@capacitor/core":"^8.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tls-fingerprint_8.0.0_1772057542301_0.8955378788399364","host":"s3://npm-registry-packages-npm-production"}},"8.0.1":{"name":"@cap-kit/tls-fingerprint","version":"8.0.1","keywords":["capacitor","capacitor-plugin","mobile","native","cap-kit","ios","android","tls","https","certificate","certificate-fingerprint","tls-fingerprint","sha256","leaf-certificate","security"],"author":{"name":"CapKit Team"},"license":"MIT","_id":"@cap-kit/tls-fingerprint@8.0.1","maintainers":[{"name":"fabiomartino","email":"martino.f1975@gmail.com"},{"name":"martinofabio","email":"martinofabio@libero.it"}],"homepage":"https://github.com/cap-kit/capacitor-plugins/tree/main/packages/tls-fingerprint#readme","bugs":{"url":"https://github.com/cap-kit/capacitor-plugins/issues"},"bin":{"cap-kit-tls-fingerprint":"dist/cli/fingerprint.js"},"dist":{"shasum":"a50bfeac084d1da849b04167e4e776936b326402","tarball":"https://registry.npmjs.org/@cap-kit/tls-fingerprint/-/tls-fingerprint-8.0.1.tgz","fileCount":51,"integrity":"sha512-lKW4SQ0o3qZ2hAz+nb2UkgaEhI/EDnDoc7cOGcciSaCKBv3mpBSoY7gY0QmD95FQBLC5NuD+OcRaVqe3A8PFzg==","signatures":[{"sig":"MEUCIQDtUG5fgvJZ5N4DUMfbM2qGeqIlRhKE8YeXMUjOk30anwIgb4z7mXMlgzJHrkDni0Z9apq8VsB0fJ5IbBVpxQqUhN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186197},"main":"dist/plugin.cjs","type":"module","_from":"file:cap-kit-tls-fingerprint-8.0.1.tgz","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=24.0.0","pnpm":">=10.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/plugin.cjs"},"./package.json":"./package.json"},"funding":{"url":"https://github.com/sponsors/cap-kit","type":"github"},"private":false,"scripts":{"lint":"pnpm run eslint . && pnpm run swiftlint lint --strict || true && pnpm run lint:android || true","test":"pnpm run verify","build":"node ./scripts/sync-version.mjs && pnpm run clean && pnpm run docgen && tsc && rollup -c rollup.config.mjs && node scripts/chmod.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api TLSFingerprintPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint","format":"eslint --fix . && prettier --write \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java && pnpm run swiftlint --fix --format && pnpm run fmt:android","verify":"pnpm run verify:ios && pnpm run verify:android && pnpm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint lint ios/Sources","verify:ios":"node ./scripts/sync-version.mjs && xcodebuild -scheme CapKitTlsFingerprint -destination generic/platform=iOS","verify:web":"pnpm run build","fmt:android":"cd android && ./gradlew ktlintFormat","format:check":"prettier --check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","lint:android":"cd android && ./gradlew ktlintCheck","removePacked":"rimraf -g cap-kit-tls-fingerprint-*.tgz","verify:android":"cd android && ./gradlew clean build && cd ..","publish:locally":"pnpm run removePacked && pnpm run build && pnpm pack"},"_npmUser":{"name":"martinofabio","email":"martinofabio@libero.it"},"_resolved":"/tmp/41b6cba530555a020088e7ffaeb804b2/cap-kit-tls-fingerprint-8.0.1.tgz","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_integrity":"sha512-lKW4SQ0o3qZ2hAz+nb2UkgaEhI/EDnDoc7cOGcciSaCKBv3mpBSoY7gY0QmD95FQBLC5NuD+OcRaVqe3A8PFzg==","repository":{"url":"git+https://github.com/cap-kit/capacitor-plugins.git","type":"git","directory":"packages/tls-fingerprint"},"_npmVersion":"11.8.0","description":"Runtime TLS leaf certificate SHA-256 fingerprint validation plugin for Capacitor (iOS & Android)","directories":{},"sideEffects":false,"_nodeVersion":"24.13.1","dependencies":{"yargs":"^18.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","rimraf":"^6.1.3","rollup":"^4.59.0","globals":"^17.3.0","prettier":"^3.8.1","swiftlint":"^2.0.0","@eslint/js":"^9.39.2","typescript":"~5.9.3","@types/node":"^25.3.0","@types/yargs":"^17.0.35","@capacitor/cli":"^8.1.0","@capacitor/ios":"^8.1.0","@capacitor/core":"^8.1.0","@eslint/eslintrc":"^3.3.4","@capacitor/docgen":"^0.3.1","typescript-eslint":"^8.56.1","@capacitor/android":"^8.1.0","eslint-plugin-import":"^2.32.0","prettier-plugin-java":"^2.8.1"},"peerDependencies":{"@capacitor/core":"^8.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tls-fingerprint_8.0.1_1772064126297_0.6437986570247796","host":"s3://npm-registry-packages-npm-production"}},"8.1.0":{"_id":"@cap-kit/tls-fingerprint@8.1.0","bin":{"cap-kit-tls-fingerprint":"./dist/cli/fingerprint.js"},"bugs":{"url":"https://github.com/cap-kit/capacitor-plugins/issues"},"dist":{"shasum":"57153c3c0abc4c03651a577633707ebc2d4c505d","tarball":"https://registry.npmjs.org/@cap-kit/tls-fingerprint/-/tls-fingerprint-8.1.0.tgz","fileCount":53,"integrity":"sha512-w6BrF3Nuzd1488fJroxR62rqEeZ64p6VP3l9bZdHBYM2Ncm50GUiyiaP6k+cCA8q6lH1vvbB3OymctmYDQMsRg==","signatures":[{"sig":"MEYCIQCOQf+dgifw7aB3pc/xR2YB7EfM4gMb0BElhS0PA3M0jgIhAPUxbS/bnWUH2j1cZ9qj3QukN8uRC1w/xMhSyiUoXz9k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCnjlZwwiO5/ngR+EJmTHLQRJT5ZrT3LPZ7p1BJZ/z0+AIhANH/u9uWQ2xAUYzDNyb/YwO41aOwQ0NAGF3iuKRi2cyx"}],"unpackedSize":187855},"main":"dist/plugin.cjs","name":"@cap-kit/tls-fingerprint","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","author":"CapKit Team","module":"dist/esm/index.js","engines":{"node":">=24.0.0","pnpm":">=12.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/plugin.cjs"},"./package.json":"./package.json"},"funding":{"url":"https://github.com/sponsors/cap-kit","type":"github"},"license":"MIT","private":false,"scripts":{"lint":"pnpm run eslint . && pnpm run swiftlint lint --strict || true && pnpm run lint:android || true","test":"pnpm run verify","build":"node ./scripts/sync-version.mjs && pnpm run clean && pnpm run docgen && tsc && rollup -c rollup.config.mjs && node scripts/chmod.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api TLSFingerprintPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint","format":"eslint --fix . && prettier --write \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java && pnpm run swiftlint --fix --format && pnpm run fmt:android","verify":"pnpm run verify:ios && pnpm run verify:android && pnpm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint lint ios/Sources","verify:ios":"node ./scripts/sync-version.mjs && xcodebuild -scheme CapKitTlsFingerprint -destination generic/platform=iOS","verify:web":"pnpm run build","fmt:android":"cd android && ./gradlew ktlintFormat","format:check":"prettier --check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","lint:android":"cd android && ./gradlew ktlintCheck","removePacked":"rimraf -g cap-kit-tls-fingerprint-*.tgz","verify:android":"cd android && ./gradlew clean build && cd ..","publish:locally":"pnpm run removePacked && pnpm run build && pnpm pack","app:demo:cleanup":"tsx ../../scripts/prepare-demo.ts --cleanup","app:demo:prepare":"tsx ../../scripts/prepare-demo.ts"},"version":"8.1.0","_npmUser":{"name":"fabiomartino","email":"martino.f1975@gmail.com"},"homepage":"https://github.com/cap-kit/capacitor-plugins/tree/main/packages/tls-fingerprint#readme","keywords":["capacitor","capacitor-plugin","mobile","native","cap-kit","ios","android","tls","https","certificate","certificate-fingerprint","tls-fingerprint","sha256","leaf-certificate","security"],"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/cap-kit/capacitor-plugins.git","type":"git","directory":"packages/tls-fingerprint"},"description":"Runtime TLS leaf certificate SHA-256 fingerprint validation plugin for Capacitor (iOS & Android)","directories":{},"maintainers":[{"name":"fabiomartino","email":"martino.f1975@gmail.com"},{"name":"martinofabio","email":"martinofabio@libero.it"}],"sideEffects":false,"dependencies":{"yargs":"^18.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.11.0","rimraf":"^6.1.3","rollup":"^4.63.4","globals":"^17.12.0","prettier":"^3.9.8","swiftlint":"^2.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.9.2","@types/yargs":"^17.0.35","@capacitor/cli":"^8.5.2","@capacitor/ios":"^8.5.2","@capkit/docgen":"file:./../../local_lib/cap-kit-docgen-0.3.1.tgz","@capacitor/core":"^8.5.2","@eslint/eslintrc":"^3.3.7","typescript-eslint":"^8.70.1","@capacitor/android":"^8.5.2","prettier-plugin-java":"^2.10.4","eslint-plugin-import-x":"^4.17.1"},"peerDependencies":{"@capacitor/core":"^8.5.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tls-fingerprint_8.1.0_1790033477232_0.800357560504164"}}},"time":{"created":"2026-02-25T22:12:22.214Z","modified":"2026-09-21T23:31:17.516Z","8.0.0":"2026-02-25T22:12:22.447Z","8.0.1":"2026-02-26T00:02:06.495Z","8.1.0":"2026-09-21T23:31:17.310Z"},"bugs":{"url":"https://github.com/cap-kit/capacitor-plugins/issues"},"author":"CapKit Team","license":"MIT","homepage":"https://github.com/cap-kit/capacitor-plugins/tree/main/packages/tls-fingerprint#readme","keywords":["capacitor","capacitor-plugin","mobile","native","cap-kit","ios","android","tls","https","certificate","certificate-fingerprint","tls-fingerprint","sha256","leaf-certificate","security"],"repository":{"url":"git+https://github.com/cap-kit/capacitor-plugins.git","type":"git","directory":"packages/tls-fingerprint"},"description":"Runtime TLS leaf certificate SHA-256 fingerprint validation plugin for Capacitor (iOS & Android)","maintainers":[{"name":"fabiomartino","email":"martino.f1975@gmail.com"},{"name":"martinofabio","email":"martinofabio@libero.it"}],"readme":"<p align=\"center\">\n  <img\n    src=\"https://raw.githubusercontent.com/cap-kit/capacitor-plugins/main/assets/logo.png\"\n    alt=\"CapKit Logo\"\n    width=\"128\"\n  />\n</p>\n\n<h3 align=\"center\">TLS Fingerprinting</h3>\n<p align=\"center\">\n  <strong>\n    <code>@cap-kit/tls-fingerprint</code>\n  </strong>\n</p>\n\n<p align=\"center\">\n  Runtime TLS leaf certificate SHA-256 fingerprint validation for Capacitor applications. This plugin establishes a TLS\n  connection to a remote HTTPS endpoint, extracts the server’s leaf certificate, computes its SHA-256 fingerprint, and\n  compares it against one or more expected fingerprints defined at runtime or via static configuration. It performs\n  fingerprint equality validation only and does not override or modify the system trust store.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@cap-kit/tls-fingerprint\">\n    <img src=\"https://img.shields.io/npm/v/@cap-kit/tls-fingerprint?color=blue&label=npm&logo=npm&style=flat-square\" alt=\"npm version\">\n  </a>\n  <a href=\"https://github.com/cap-kit/capacitor-plugins/actions\">\n    <img src=\"https://img.shields.io/github/actions/workflow/status/cap-kit/capacitor-plugins/ci.yml?branch=main&label=CI&logo=github&style=flat-square\" alt=\"CI Status\" />\n  </a>\n  <a href=\"https://capacitorjs.com/\">\n    <img src=\"https://img.shields.io/badge/Capacitor-Plugin-blue?logo=capacitor&style=flat-square\" alt=\"Capacitor Plugin\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/@cap-kit/tls-fingerprint\">\n    <img src=\"https://img.shields.io/npm/dm/@cap-kit/tls-fingerprint?style=flat-square\" alt=\"Downloads\" />\n  </a>\n  <a href=\"./LICENSE\">\n    <img src=\"https://img.shields.io/npm/l/@cap-kit/tls-fingerprint?style=flat-square&logo=open-source-initiative&logoColor=white&color=green\" alt=\"License\" />\n  </a>\n  <img src=\"https://img.shields.io/maintenance/yes/2026?style=flat-square\" alt=\"Maintained\" />\n</p>\n<br>\n\n## Overview\n\nThis Capacitor plugin validates the SHA-256 fingerprint of a server's TLS leaf certificate at runtime.\n\n- Extracts the leaf certificate from an HTTPS connection, computes its SHA-256 fingerprint, and compares it against expected fingerprints provided at runtime or in static configuration.\n- It does NOT perform anchor-based certificate pinning, load local certificate files, override the system trust store, or validate the certificate chain.\n\n### Platform Support\n\n| Platform | Status                                              |\n| -------- | --------------------------------------------------- |\n| iOS      | Supported                                           |\n| Android  | Supported                                           |\n| Web      | Unsupported - methods reject with `unimplemented()` |\n\n## Documentation\n\n- [Usage guide](docs/guide.md) — obtaining fingerprints and usage examples\n- [Security considerations](docs/security.md)\n- [Contributing](CONTRIBUTING.md)\n\n---\n\n## Install\n\n```bash\npnpm add @cap-kit/tls-fingerprint\n# or\nnpm install @cap-kit/tls-fingerprint\n# or\nyarn add @cap-kit/tls-fingerprint\n# then run:\nnpx cap sync\n```\n\n---\n\n## Configuration\n\n<docgen-config>\n<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->\n\nConfiguration options for the TLSFingerprint plugin.\n\n| Prop                  | Type                  | Description                                                                                                                                                                                                                              | Default            | Since |\n| --------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----- |\n| **`verboseLogging`**  | <code>boolean</code>  | Enables verbose native logging. When enabled, additional debug information is printed to the native console (Logcat on Android, Xcode on iOS). This option affects native logging behavior only and has no impact on the JavaScript API. | <code>false</code> | 8.0.0 |\n| **`fingerprint`**     | <code>string</code>   | Default fingerprint used by `checkCertificate()` when `options.fingerprint` is not provided at runtime.                                                                                                                                  |                    | 8.0.0 |\n| **`fingerprints`**    | <code>string[]</code> | Default fingerprints used by `checkCertificates()` when `options.fingerprints` is not provided at runtime.                                                                                                                               |                    | 8.0.0 |\n| **`excludedDomains`** | <code>string[]</code> | Domains to bypass. Matches exact domain or subdomains. Do not include schemes or paths.                                                                                                                                                  |                    | 8.0.0 |\n\n### Examples\n\nIn `capacitor.config.json`:\n\n```json\n{\n  \"plugins\": {\n    \"TLSFingerprint\": {\n      \"verboseLogging\": true,\n      \"fingerprint\": \"50:4B:A1:B5:48:96:71:F3:9F:87:7E:0A:09:FD:3E:1B:C0:4F:AA:9F:FC:83:3E:A9:3A:00:78:88:F8:BA:60:26\",\n      \"fingerprints\": [\n        \"50:4B:A1:B5:48:96:71:F3:9F:87:7E:0A:09:FD:3E:1B:C0:4F:AA:9F:FC:83:3E:A9:3A:00:78:88:F8:BA:60:26\"\n      ]\n    }\n  }\n}\n```\n\nIn `capacitor.config.ts`:\n\n```ts\n/// <reference types=\"@cap-kit/tls-fingerprint\" />\n\nimport { CapacitorConfig } from '@capacitor/cli';\n\nconst config: CapacitorConfig = {\n  plugins: {\n    TLSFingerprint: {\n      verboseLogging: true,\n      fingerprint: '50:4B:A1:B5:48:96:71:F3:9F:87:7E:0A:09:FD:3E:1B:C0:4F:AA:9F:FC:83:3E:A9:3A:00:78:88:F8:BA:60:26',\n      fingerprints: [\"50:4B:A1:B5:48:96:71:F3:9F:87:7E:0A:09:FD:3E:1B:C0:4F:AA:9F:FC:83:3E:A9:3A:00:78:88:F8:BA:60:26\"],\n    },\n  },\n};\n\nexport default config;\n```\n\n</docgen-config>\n\n---\n\n## API\n\n<docgen-index>\n\n* [`checkCertificate(...)`](#checkcertificate)\n* [`checkCertificates(...)`](#checkcertificates)\n* [`getPluginVersion()`](#getpluginversion)\n* [Interfaces](#interfaces)\n* [Enums](#enums)\n\n</docgen-index>\n\n<docgen-api>\n<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->\n\nTLS Fingerprint Capacitor Plugin interface.\n\n### checkCertificate(...)\n\n```typescript\ncheckCertificate(options: TLSFingerprintOptions) => Promise<TLSFingerprintResult>\n```\n\nChecks the SSL certificate of a server using a single fingerprint.\n\n| Param         | Type                                                                    |\n| ------------- | ----------------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#tlsfingerprintoptions\">TLSFingerprintOptions</a></code> |\n\n**Returns:** <code>Promise&lt;<a href=\"#tlsfingerprintresult\">TLSFingerprintResult</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### checkCertificates(...)\n\n```typescript\ncheckCertificates(options: TLSFingerprintMultiOptions) => Promise<TLSFingerprintResult>\n```\n\nChecks the SSL certificate of a server using multiple allowed fingerprints.\n\n| Param         | Type                                                                              |\n| ------------- | --------------------------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#tlsfingerprintmultioptions\">TLSFingerprintMultiOptions</a></code> |\n\n**Returns:** <code>Promise&lt;<a href=\"#tlsfingerprintresult\">TLSFingerprintResult</a>&gt;</code>\n\n**Since:** 8.0.0\n\n--------------------\n\n\n### getPluginVersion()\n\n```typescript\ngetPluginVersion() => Promise<PluginVersionResult>\n```\n\nReturns the native plugin version.\n\nThe returned version corresponds to the native implementation\nbundled with the application.\n\n**Returns:** <code>Promise&lt;<a href=\"#pluginversionresult\">PluginVersionResult</a>&gt;</code>\n\n**Since:** 8.0.0\n\n#### Example\n\n```ts\nconst { version } = await TLSFingerprint.getPluginVersion();\n```\n\n--------------------\n\n\n### Interfaces\n\n\n#### TLSFingerprintResult\n\nResult returned by an TLS fingerprint operation.\n\nThis object is returned for ALL outcomes:\n- Success: `fingerprintMatched: true`\n- Mismatch: `fingerprintMatched: false` with error info (RESOLVED, not rejected)\n\nOnly operation failures (invalid input, config missing, network errors,\ntimeout, internal errors) reject the Promise.\n\n| Prop                     | Type                                                                        | Description                                                                                              |\n| ------------------------ | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |\n| **`actualFingerprint`**  | <code>string</code>                                                         | The actual SHA-256 fingerprint of the server certificate. Present in fingerprint and excluded modes.     |\n| **`fingerprintMatched`** | <code>boolean</code>                                                        | Indicates whether the certificate validation succeeded. - true → Pinning passed - false → Pinning failed |\n| **`matchedFingerprint`** | <code>string</code>                                                         | The fingerprint that successfully matched, if any.                                                       |\n| **`excludedDomain`**     | <code>boolean</code>                                                        | Indicates that TLS fingerprint was skipped because the request host matched an excluded domain.          |\n| **`mode`**               | <code>'fingerprint' \\| 'excluded'</code>                                    | Indicates which pinning mode was used. - \"fingerprint\" - \"excluded\"                                      |\n| **`error`**              | <code>string</code>                                                         | Human-readable error message when pinning fails. Present when `fingerprintMatched: false`.               |\n| **`errorCode`**          | <code><a href=\"#tlsfingerprinterrorcode\">TLSFingerprintErrorCode</a></code> | Standardized error code aligned with <a href=\"#tlsfingerprinterrorcode\">TLSFingerprintErrorCode</a>.     |\n\n\n#### TLSFingerprintOptions\n\nOptions for checking a single SSL certificate.\n\n| Prop              | Type                | Description                                                                                                                                                                                                                                        |\n| ----------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`url`**         | <code>string</code> | HTTPS URL of the server whose SSL certificate must be checked. This value is REQUIRED and cannot be provided via configuration.                                                                                                                    |\n| **`fingerprint`** | <code>string</code> | Expected SHA-256 fingerprint of the certificate. Resolution order: 1. `options.fingerprint` (runtime) 2. `plugins.TLSFingerprint.fingerprint` (config) If neither is provided, the Promise is rejected with `TLSFingerprintErrorCode.UNAVAILABLE`. |\n\n\n#### TLSFingerprintMultiOptions\n\nOptions for checking an SSL certificate using multiple allowed fingerprints.\n\n| Prop               | Type                  | Description                                                                                                                                                                                                                                           |\n| ------------------ | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`url`**          | <code>string</code>   | HTTPS URL of the server whose SSL certificate must be checked. This value is REQUIRED and cannot be provided via configuration.                                                                                                                       |\n| **`fingerprints`** | <code>string[]</code> | Expected SHA-256 fingerprints of the certificate. Resolution order: 1. `options.fingerprints` (runtime) 2. `plugins.TLSFingerprint.fingerprints` (config) If neither is provided, the Promise is rejected with `TLSFingerprintErrorCode.UNAVAILABLE`. |\n\n\n#### PluginVersionResult\n\nResult returned by the getPluginVersion method.\n\n| Prop          | Type                | Description                              |\n| ------------- | ------------------- | ---------------------------------------- |\n| **`version`** | <code>string</code> | The native version string of the plugin. |\n\n\n### Enums\n\n\n#### TLSFingerprintErrorCode\n\n| Members                 | Value                            | Description                                                                    |\n| ----------------------- | -------------------------------- | ------------------------------------------------------------------------------ |\n| **`UNAVAILABLE`**       | <code>'UNAVAILABLE'</code>       | Required data is missing or the feature is not available.                      |\n| **`CANCELLED`**         | <code>'CANCELLED'</code>         | The user cancelled an interactive flow.                                        |\n| **`PERMISSION_DENIED`** | <code>'PERMISSION_DENIED'</code> | The user denied a required permission or the feature is disabled.              |\n| **`INIT_FAILED`**       | <code>'INIT_FAILED'</code>       | The TLS fingerprint operation failed due to a runtime or initialization error. |\n| **`INVALID_INPUT`**     | <code>'INVALID_INPUT'</code>     | The input provided to the plugin method is invalid, missing, or malformed.     |\n| **`UNKNOWN_TYPE`**      | <code>'UNKNOWN_TYPE'</code>      | Invalid or unsupported input was provided.                                     |\n| **`NOT_FOUND`**         | <code>'NOT_FOUND'</code>         | The requested resource does not exist.                                         |\n| **`CONFLICT`**          | <code>'CONFLICT'</code>          | The operation conflicts with the current state.                                |\n| **`TIMEOUT`**           | <code>'TIMEOUT'</code>           | The operation did not complete within the expected time.                       |\n| **`PINNING_FAILED`**    | <code>'PINNING_FAILED'</code>    | The server certificate fingerprint did not match any expected fingerprint.     |\n| **`EXCLUDED_DOMAIN`**   | <code>'EXCLUDED_DOMAIN'</code>   | The request host matched an excluded domain.                                   |\n| **`NETWORK_ERROR`**     | <code>'NETWORK_ERROR'</code>     | Network connectivity or TLS handshake error.                                   |\n| **`SSL_ERROR`**         | <code>'SSL_ERROR'</code>         | SSL/TLS specific error (certificate expired, handshake failure, etc.).         |\n\n</docgen-api>\n\n---\n\n## Contributing\n\nContributions are welcome. Please read the [contributing guide](CONTRIBUTING.md) before submitting a pull request.\n\n---\n\n## Credits\n\nThis plugin is based on prior work from the community and has been refactored for Capacitor v8 and Swift Package Manager compatibility.\n\nOriginal inspiration:\n\n- [https://github.com/mchl18/Capacitor-SSL-Pinning](https://github.com/mchl18/Capacitor-SSL-Pinning)\n\n---\n\n## License\n\nMIT\n","readmeFilename":""}