@cap-kit/tls-fingerprint 8.0.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.
Files changed (51) hide show
  1. package/CapKitTlsFingerprint.podspec +17 -0
  2. package/LICENSE +21 -0
  3. package/Package.swift +25 -0
  4. package/README.md +427 -0
  5. package/android/build.gradle +103 -0
  6. package/android/src/main/AndroidManifest.xml +3 -0
  7. package/android/src/main/java/io/capkit/settings/TLSFingerprintImpl.kt +333 -0
  8. package/android/src/main/java/io/capkit/settings/TLSFingerprintPlugin.kt +342 -0
  9. package/android/src/main/java/io/capkit/settings/config/TLSFingerprintConfig.kt +102 -0
  10. package/android/src/main/java/io/capkit/settings/error/TLSFingerprintError.kt +114 -0
  11. package/android/src/main/java/io/capkit/settings/error/TLSFingerprintErrorMessages.kt +27 -0
  12. package/android/src/main/java/io/capkit/settings/logger/TLSFingerprintLogger.kt +85 -0
  13. package/android/src/main/java/io/capkit/settings/model/TLSFingerprintResultModel.kt +32 -0
  14. package/android/src/main/java/io/capkit/settings/utils/TLSFingerprintUtils.kt +91 -0
  15. package/android/src/main/res/.gitkeep +0 -0
  16. package/dist/cli/fingerprint.js +163 -0
  17. package/dist/cli/fingerprint.js.map +1 -0
  18. package/dist/docs.json +386 -0
  19. package/dist/esm/cli/fingerprint.d.ts +1 -0
  20. package/dist/esm/cli/fingerprint.js +161 -0
  21. package/dist/esm/cli/fingerprint.js.map +1 -0
  22. package/dist/esm/definitions.d.ts +244 -0
  23. package/dist/esm/definitions.js +42 -0
  24. package/dist/esm/definitions.js.map +1 -0
  25. package/dist/esm/index.d.ts +13 -0
  26. package/dist/esm/index.js +11 -0
  27. package/dist/esm/index.js.map +1 -0
  28. package/dist/esm/version.d.ts +1 -0
  29. package/dist/esm/version.js +3 -0
  30. package/dist/esm/version.js.map +1 -0
  31. package/dist/esm/web.d.ts +33 -0
  32. package/dist/esm/web.js +47 -0
  33. package/dist/esm/web.js.map +1 -0
  34. package/dist/plugin.cjs +107 -0
  35. package/dist/plugin.cjs.map +1 -0
  36. package/dist/plugin.js +110 -0
  37. package/dist/plugin.js.map +1 -0
  38. package/ios/Sources/TLSFingerprintPlugin/TLSFingerprintDelegate.swift +365 -0
  39. package/ios/Sources/TLSFingerprintPlugin/TLSFingerprintImpl.swift +275 -0
  40. package/ios/Sources/TLSFingerprintPlugin/TLSFingerprintPlugin.swift +219 -0
  41. package/ios/Sources/TLSFingerprintPlugin/Version.swift +16 -0
  42. package/ios/Sources/TLSFingerprintPlugin/config/TLSFingerprintConfig.swift +114 -0
  43. package/ios/Sources/TLSFingerprintPlugin/error/TLSFingerprintError.swift +107 -0
  44. package/ios/Sources/TLSFingerprintPlugin/error/TLSFingerprintErrorMessages.swift +30 -0
  45. package/ios/Sources/TLSFingerprintPlugin/logger/TLSFingerprintLogger.swift +69 -0
  46. package/ios/Sources/TLSFingerprintPlugin/model/TLSFingerprintResult.swift +76 -0
  47. package/ios/Sources/TLSFingerprintPlugin/utils/TLSFingerprintUtils.swift +79 -0
  48. package/ios/Tests/TLSFingerprintPluginTests/TLSFingerprintPluginTests.swift +15 -0
  49. package/package.json +131 -0
  50. package/scripts/chmod.mjs +34 -0
  51. package/scripts/sync-version.mjs +68 -0
package/dist/docs.json ADDED
@@ -0,0 +1,386 @@
1
+ {
2
+ "api": {
3
+ "name": "TLSFingerprintPlugin",
4
+ "slug": "tlsfingerprintplugin",
5
+ "docs": "TLS Fingerprint Capacitor Plugin interface.",
6
+ "tags": [],
7
+ "methods": [
8
+ {
9
+ "name": "checkCertificate",
10
+ "signature": "(options: TLSFingerprintOptions) => Promise<TLSFingerprintResult>",
11
+ "parameters": [
12
+ {
13
+ "name": "options",
14
+ "docs": "",
15
+ "type": "TLSFingerprintOptions"
16
+ }
17
+ ],
18
+ "returns": "Promise<TLSFingerprintResult>",
19
+ "tags": [
20
+ {
21
+ "name": "throws",
22
+ "text": "CapacitorException with code `TLSFingerprintErrorCode`"
23
+ },
24
+ {
25
+ "name": "since",
26
+ "text": "8.0.0"
27
+ }
28
+ ],
29
+ "docs": "Checks the SSL certificate of a server using a single fingerprint.",
30
+ "complexTypes": [
31
+ "TLSFingerprintResult",
32
+ "TLSFingerprintOptions"
33
+ ],
34
+ "slug": "checkcertificate"
35
+ },
36
+ {
37
+ "name": "checkCertificates",
38
+ "signature": "(options: TLSFingerprintMultiOptions) => Promise<TLSFingerprintResult>",
39
+ "parameters": [
40
+ {
41
+ "name": "options",
42
+ "docs": "",
43
+ "type": "TLSFingerprintMultiOptions"
44
+ }
45
+ ],
46
+ "returns": "Promise<TLSFingerprintResult>",
47
+ "tags": [
48
+ {
49
+ "name": "throws",
50
+ "text": "CapacitorException with code `TLSFingerprintErrorCode`"
51
+ },
52
+ {
53
+ "name": "since",
54
+ "text": "8.0.0"
55
+ }
56
+ ],
57
+ "docs": "Checks the SSL certificate of a server using multiple allowed fingerprints.",
58
+ "complexTypes": [
59
+ "TLSFingerprintResult",
60
+ "TLSFingerprintMultiOptions"
61
+ ],
62
+ "slug": "checkcertificates"
63
+ },
64
+ {
65
+ "name": "getPluginVersion",
66
+ "signature": "() => Promise<PluginVersionResult>",
67
+ "parameters": [],
68
+ "returns": "Promise<PluginVersionResult>",
69
+ "tags": [
70
+ {
71
+ "name": "returns",
72
+ "text": "A promise resolving to the plugin version."
73
+ },
74
+ {
75
+ "name": "example",
76
+ "text": "```ts\nconst { version } = await TLSFingerprint.getPluginVersion();\n```"
77
+ },
78
+ {
79
+ "name": "since",
80
+ "text": "8.0.0"
81
+ }
82
+ ],
83
+ "docs": "Returns the native plugin version.\n\nThe returned version corresponds to the native implementation\nbundled with the application.",
84
+ "complexTypes": [
85
+ "PluginVersionResult"
86
+ ],
87
+ "slug": "getpluginversion"
88
+ }
89
+ ],
90
+ "properties": []
91
+ },
92
+ "interfaces": [
93
+ {
94
+ "name": "TLSFingerprintResult",
95
+ "slug": "tlsfingerprintresult",
96
+ "docs": "Result 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.",
97
+ "tags": [],
98
+ "methods": [],
99
+ "properties": [
100
+ {
101
+ "name": "actualFingerprint",
102
+ "tags": [],
103
+ "docs": "The actual SHA-256 fingerprint of the server certificate.\n\nPresent in fingerprint and excluded modes.",
104
+ "complexTypes": [],
105
+ "type": "string | undefined"
106
+ },
107
+ {
108
+ "name": "fingerprintMatched",
109
+ "tags": [],
110
+ "docs": "Indicates whether the certificate validation succeeded.\n\n- true → Pinning passed\n- false → Pinning failed",
111
+ "complexTypes": [],
112
+ "type": "boolean"
113
+ },
114
+ {
115
+ "name": "matchedFingerprint",
116
+ "tags": [],
117
+ "docs": "The fingerprint that successfully matched, if any.",
118
+ "complexTypes": [],
119
+ "type": "string | undefined"
120
+ },
121
+ {
122
+ "name": "excludedDomain",
123
+ "tags": [],
124
+ "docs": "Indicates that TLS fingerprint was skipped because\nthe request host matched an excluded domain.",
125
+ "complexTypes": [],
126
+ "type": "boolean | undefined"
127
+ },
128
+ {
129
+ "name": "mode",
130
+ "tags": [],
131
+ "docs": "Indicates which pinning mode was used.\n\n- \"fingerprint\"\n- \"excluded\"",
132
+ "complexTypes": [],
133
+ "type": "'fingerprint' | 'excluded' | undefined"
134
+ },
135
+ {
136
+ "name": "error",
137
+ "tags": [],
138
+ "docs": "Human-readable error message when pinning fails.\nPresent when `fingerprintMatched: false`.",
139
+ "complexTypes": [],
140
+ "type": "string | undefined"
141
+ },
142
+ {
143
+ "name": "errorCode",
144
+ "tags": [],
145
+ "docs": "Standardized error code aligned with TLSFingerprintErrorCode.",
146
+ "complexTypes": [
147
+ "TLSFingerprintErrorCode"
148
+ ],
149
+ "type": "TLSFingerprintErrorCode"
150
+ }
151
+ ]
152
+ },
153
+ {
154
+ "name": "TLSFingerprintOptions",
155
+ "slug": "tlsfingerprintoptions",
156
+ "docs": "Options for checking a single SSL certificate.",
157
+ "tags": [],
158
+ "methods": [],
159
+ "properties": [
160
+ {
161
+ "name": "url",
162
+ "tags": [
163
+ {
164
+ "text": "\"https://example.com\"",
165
+ "name": "example"
166
+ }
167
+ ],
168
+ "docs": "HTTPS URL of the server whose SSL certificate must be checked.\n\nThis value is REQUIRED and cannot be provided via configuration.",
169
+ "complexTypes": [],
170
+ "type": "string"
171
+ },
172
+ {
173
+ "name": "fingerprint",
174
+ "tags": [],
175
+ "docs": "Expected SHA-256 fingerprint of the certificate.\n\nResolution order:\n1. `options.fingerprint` (runtime)\n2. `plugins.TLSFingerprint.fingerprint` (config)\n\nIf neither is provided, the Promise is rejected with\n`TLSFingerprintErrorCode.UNAVAILABLE`.",
176
+ "complexTypes": [],
177
+ "type": "string | undefined"
178
+ }
179
+ ]
180
+ },
181
+ {
182
+ "name": "TLSFingerprintMultiOptions",
183
+ "slug": "tlsfingerprintmultioptions",
184
+ "docs": "Options for checking an SSL certificate using multiple allowed fingerprints.",
185
+ "tags": [],
186
+ "methods": [],
187
+ "properties": [
188
+ {
189
+ "name": "url",
190
+ "tags": [
191
+ {
192
+ "text": "\"https://example.com\"",
193
+ "name": "example"
194
+ }
195
+ ],
196
+ "docs": "HTTPS URL of the server whose SSL certificate must be checked.\n\nThis value is REQUIRED and cannot be provided via configuration.",
197
+ "complexTypes": [],
198
+ "type": "string"
199
+ },
200
+ {
201
+ "name": "fingerprints",
202
+ "tags": [],
203
+ "docs": "Expected SHA-256 fingerprints of the certificate.\n\nResolution order:\n1. `options.fingerprints` (runtime)\n2. `plugins.TLSFingerprint.fingerprints` (config)\n\nIf neither is provided, the Promise is rejected with\n`TLSFingerprintErrorCode.UNAVAILABLE`.",
204
+ "complexTypes": [],
205
+ "type": "string[] | undefined"
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "name": "PluginVersionResult",
211
+ "slug": "pluginversionresult",
212
+ "docs": "Result returned by the getPluginVersion method.",
213
+ "tags": [],
214
+ "methods": [],
215
+ "properties": [
216
+ {
217
+ "name": "version",
218
+ "tags": [],
219
+ "docs": "The native version string of the plugin.",
220
+ "complexTypes": [],
221
+ "type": "string"
222
+ }
223
+ ]
224
+ }
225
+ ],
226
+ "enums": [
227
+ {
228
+ "name": "TLSFingerprintErrorCode",
229
+ "slug": "tlsfingerprinterrorcode",
230
+ "members": [
231
+ {
232
+ "name": "UNAVAILABLE",
233
+ "value": "'UNAVAILABLE'",
234
+ "tags": [],
235
+ "docs": "Required data is missing or the feature is not available."
236
+ },
237
+ {
238
+ "name": "CANCELLED",
239
+ "value": "'CANCELLED'",
240
+ "tags": [],
241
+ "docs": "The user cancelled an interactive flow."
242
+ },
243
+ {
244
+ "name": "PERMISSION_DENIED",
245
+ "value": "'PERMISSION_DENIED'",
246
+ "tags": [],
247
+ "docs": "The user denied a required permission or the feature is disabled."
248
+ },
249
+ {
250
+ "name": "INIT_FAILED",
251
+ "value": "'INIT_FAILED'",
252
+ "tags": [],
253
+ "docs": "The TLS fingerprint operation failed due to a runtime or initialization error."
254
+ },
255
+ {
256
+ "name": "INVALID_INPUT",
257
+ "value": "'INVALID_INPUT'",
258
+ "tags": [],
259
+ "docs": "The input provided to the plugin method is invalid, missing, or malformed."
260
+ },
261
+ {
262
+ "name": "UNKNOWN_TYPE",
263
+ "value": "'UNKNOWN_TYPE'",
264
+ "tags": [],
265
+ "docs": "Invalid or unsupported input was provided."
266
+ },
267
+ {
268
+ "name": "NOT_FOUND",
269
+ "value": "'NOT_FOUND'",
270
+ "tags": [],
271
+ "docs": "The requested resource does not exist."
272
+ },
273
+ {
274
+ "name": "CONFLICT",
275
+ "value": "'CONFLICT'",
276
+ "tags": [],
277
+ "docs": "The operation conflicts with the current state."
278
+ },
279
+ {
280
+ "name": "TIMEOUT",
281
+ "value": "'TIMEOUT'",
282
+ "tags": [],
283
+ "docs": "The operation did not complete within the expected time."
284
+ },
285
+ {
286
+ "name": "PINNING_FAILED",
287
+ "value": "'PINNING_FAILED'",
288
+ "tags": [],
289
+ "docs": "The server certificate fingerprint did not match any expected fingerprint."
290
+ },
291
+ {
292
+ "name": "EXCLUDED_DOMAIN",
293
+ "value": "'EXCLUDED_DOMAIN'",
294
+ "tags": [],
295
+ "docs": "The request host matched an excluded domain."
296
+ },
297
+ {
298
+ "name": "NETWORK_ERROR",
299
+ "value": "'NETWORK_ERROR'",
300
+ "tags": [],
301
+ "docs": "Network connectivity or TLS handshake error."
302
+ },
303
+ {
304
+ "name": "SSL_ERROR",
305
+ "value": "'SSL_ERROR'",
306
+ "tags": [],
307
+ "docs": "SSL/TLS specific error (certificate expired, handshake failure, etc.)."
308
+ }
309
+ ]
310
+ }
311
+ ],
312
+ "typeAliases": [],
313
+ "pluginConfigs": [
314
+ {
315
+ "name": "TLSFingerprint",
316
+ "slug": "tlsfingerprint",
317
+ "properties": [
318
+ {
319
+ "name": "verboseLogging",
320
+ "tags": [
321
+ {
322
+ "text": "false",
323
+ "name": "default"
324
+ },
325
+ {
326
+ "text": "true",
327
+ "name": "example"
328
+ },
329
+ {
330
+ "text": "8.0.0",
331
+ "name": "since"
332
+ }
333
+ ],
334
+ "docs": "Enables verbose native logging.\n\nWhen enabled, additional debug information is printed\nto the native console (Logcat on Android, Xcode on iOS).\n\nThis option affects native logging behavior only and\nhas no impact on the JavaScript API.",
335
+ "complexTypes": [],
336
+ "type": "boolean | undefined"
337
+ },
338
+ {
339
+ "name": "fingerprint",
340
+ "tags": [
341
+ {
342
+ "text": "\"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\"",
343
+ "name": "example"
344
+ },
345
+ {
346
+ "text": "8.0.0",
347
+ "name": "since"
348
+ }
349
+ ],
350
+ "docs": "Default fingerprint used by `checkCertificate()` when\n`options.fingerprint` is not provided at runtime.",
351
+ "complexTypes": [],
352
+ "type": "string | undefined"
353
+ },
354
+ {
355
+ "name": "fingerprints",
356
+ "tags": [
357
+ {
358
+ "text": "[\"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\"]",
359
+ "name": "example"
360
+ },
361
+ {
362
+ "text": "8.0.0",
363
+ "name": "since"
364
+ }
365
+ ],
366
+ "docs": "Default fingerprints used by `checkCertificates()` when\n`options.fingerprints` is not provided at runtime.",
367
+ "complexTypes": [],
368
+ "type": "string[] | undefined"
369
+ },
370
+ {
371
+ "name": "excludedDomains",
372
+ "tags": [
373
+ {
374
+ "text": "8.0.0",
375
+ "name": "since"
376
+ }
377
+ ],
378
+ "docs": "Domains to bypass. Matches exact domain or subdomains.\nDo not include schemes or paths.",
379
+ "complexTypes": [],
380
+ "type": "string[] | undefined"
381
+ }
382
+ ],
383
+ "docs": "Configuration options for the TLSFingerprint plugin."
384
+ }
385
+ ]
386
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,161 @@
1
+ import crypto from 'crypto';
2
+ import fs from 'fs/promises';
3
+ import https from 'https';
4
+ import { createRequire } from 'module';
5
+ import yargs from 'yargs';
6
+ import { hideBin } from 'yargs/helpers';
7
+ const require = createRequire(import.meta.url);
8
+ const pkg = require('../../package.json');
9
+ async function getCertificate(domain, insecure) {
10
+ return new Promise((resolve, reject) => {
11
+ const options = {
12
+ host: domain,
13
+ port: 443,
14
+ method: 'GET',
15
+ rejectUnauthorized: !insecure,
16
+ };
17
+ const req = https.request(options, (res) => {
18
+ var _a, _b, _c;
19
+ const socket = res.socket;
20
+ const cert = (_a = socket === null || socket === void 0 ? void 0 : socket.getPeerCertificate) === null || _a === void 0 ? void 0 : _a.call(socket, true);
21
+ if (!(cert === null || cert === void 0 ? void 0 : cert.raw)) {
22
+ reject(new Error('Unable to retrieve peer certificate'));
23
+ return;
24
+ }
25
+ const fingerprint = crypto
26
+ .createHash('sha256')
27
+ .update(cert.raw)
28
+ .digest('hex')
29
+ .match(/.{2}/g)
30
+ .join(':')
31
+ .toUpperCase();
32
+ resolve({
33
+ domain,
34
+ subject: (_b = cert.subject) !== null && _b !== void 0 ? _b : {},
35
+ issuer: (_c = cert.issuer) !== null && _c !== void 0 ? _c : {},
36
+ validFrom: cert.valid_from,
37
+ validTo: cert.valid_to,
38
+ fingerprint,
39
+ });
40
+ });
41
+ req.on('error', reject);
42
+ req.end();
43
+ });
44
+ }
45
+ function formatOutput(results, mode, format) {
46
+ const fingerprints = results.map((r) => r.fingerprint);
47
+ switch (format) {
48
+ case 'fingerprints':
49
+ return `export const fingerprints = ${JSON.stringify(fingerprints, null, 2)};`;
50
+ case 'capacitor': {
51
+ if (mode === 'single') {
52
+ return `plugins: {
53
+ TLSFingerprint: {
54
+ fingerprint: "${fingerprints[0]}"
55
+ }
56
+ }`;
57
+ }
58
+ return `plugins: {
59
+ TLSFingerprint: {
60
+ fingerprints: ${JSON.stringify(fingerprints, null, 4)}
61
+ }
62
+ }`;
63
+ }
64
+ case 'capacitor-plugin': {
65
+ if (mode === 'single') {
66
+ return `TLSFingerprint: {
67
+ fingerprint: "${fingerprints[0]}"
68
+ }`;
69
+ }
70
+ return `TLSFingerprint: {
71
+ fingerprints: ${JSON.stringify(fingerprints, null, 4)}
72
+ }`;
73
+ }
74
+ case 'capacitor-json': {
75
+ if (mode === 'single') {
76
+ return JSON.stringify({
77
+ plugins: {
78
+ TLSFingerprint: {
79
+ fingerprint: fingerprints[0],
80
+ },
81
+ },
82
+ }, null, 2);
83
+ }
84
+ return JSON.stringify({
85
+ plugins: {
86
+ TLSFingerprint: {
87
+ fingerprints,
88
+ },
89
+ },
90
+ }, null, 2);
91
+ }
92
+ case 'json':
93
+ default:
94
+ return JSON.stringify(results, null, 2);
95
+ }
96
+ }
97
+ async function main() {
98
+ var _a, _b, _c;
99
+ const argv = await yargs(hideBin(process.argv))
100
+ .usage('Usage: $0 <domains...> [options]')
101
+ .version(pkg.version)
102
+ .option('out', {
103
+ alias: 'o',
104
+ type: 'string',
105
+ description: 'Output file path',
106
+ })
107
+ .option('format', {
108
+ alias: 'f',
109
+ type: 'string',
110
+ choices: ['json', 'fingerprints', 'capacitor', 'capacitor-plugin', 'capacitor-json'],
111
+ default: 'json',
112
+ description: 'Output format',
113
+ })
114
+ .option('mode', {
115
+ type: 'string',
116
+ choices: ['single', 'multi'],
117
+ default: 'single',
118
+ description: 'Fingerprint mode (single or multi)',
119
+ })
120
+ .option('insecure', {
121
+ type: 'boolean',
122
+ default: true,
123
+ description: 'Allow insecure TLS connections (disables certificate validation)',
124
+ })
125
+ .demandCommand(1, 'At least one domain is required')
126
+ .help().argv;
127
+ const domains = argv._;
128
+ const results = [];
129
+ console.log('Fetching certificates...\n');
130
+ for (const domain of domains) {
131
+ try {
132
+ const certInfo = await getCertificate(domain, argv.insecure);
133
+ results.push(certInfo);
134
+ console.log(`Domain: ${certInfo.domain}`);
135
+ console.log(`Subject: ${(_a = certInfo.subject.CN) !== null && _a !== void 0 ? _a : '-'}`);
136
+ console.log(`Issuer: ${(_b = certInfo.issuer.CN) !== null && _b !== void 0 ? _b : '-'}`);
137
+ console.log(`Valid From: ${certInfo.validFrom}`);
138
+ console.log(`Valid To: ${certInfo.validTo}`);
139
+ console.log(`SHA256 Fingerprint: ${certInfo.fingerprint}`);
140
+ console.log('-------------------\n');
141
+ }
142
+ catch (err) {
143
+ console.error(`Error fetching cert for ${domain}: ${(_c = err === null || err === void 0 ? void 0 : err.message) !== null && _c !== void 0 ? _c : err}`);
144
+ console.log('-------------------\n');
145
+ }
146
+ }
147
+ const output = formatOutput(results, argv.mode, argv.format);
148
+ if (argv.out) {
149
+ await fs.writeFile(argv.out, output);
150
+ console.log(`Results written to ${argv.out}`);
151
+ }
152
+ else {
153
+ console.log(output);
154
+ }
155
+ process.exit(0);
156
+ }
157
+ main().catch((err) => {
158
+ console.error(err);
159
+ process.exit(1);
160
+ });
161
+ //# sourceMappingURL=fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../src/cli/fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAc1C,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,QAAiB;IAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAyB;YACpC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,KAAK;YACb,kBAAkB,EAAE,CAAC,QAAQ;SAC9B,CAAC;QAEF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;;YACzC,MAAM,MAAM,GAAQ,GAAG,CAAC,MAAM,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB,uDAAG,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAA,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,MAAM;iBACvB,UAAU,CAAC,QAAQ,CAAC;iBACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;iBAChB,MAAM,CAAC,KAAK,CAAC;iBACb,KAAK,CAAC,OAAO,CAAE;iBACf,IAAI,CAAC,GAAG,CAAC;iBACT,WAAW,EAAE,CAAC;YAEjB,OAAO,CAAC;gBACN,MAAM;gBACN,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,EAAE;gBAC3B,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,EAAE;gBACzB,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,WAAW;aACZ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,OAA0B,EAAE,IAAU,EAAE,MAAc;IAC1E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAEvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,+BAA+B,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;QAEjF,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO;;oBAEK,YAAY,CAAC,CAAC,CAAC;;EAEjC,CAAC;YACG,CAAC;YACD,OAAO;;oBAEO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;;EAEvD,CAAC;QACC,CAAC;QAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO;kBACG,YAAY,CAAC,CAAC,CAAC;EAC/B,CAAC;YACG,CAAC;YACD,OAAO;kBACK,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;EACrD,CAAC;QACC,CAAC;QAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,SAAS,CACnB;oBACE,OAAO,EAAE;wBACP,cAAc,EAAE;4BACd,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;yBAC7B;qBACF;iBACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CACnB;gBACE,OAAO,EAAE;oBACP,cAAc,EAAE;wBACd,YAAY;qBACb;iBACF;aACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;;IACjB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5C,KAAK,CAAC,kCAAkC,CAAC;SACzC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,KAAK,EAAE;QACb,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kBAAkB;KAChC,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;QACpF,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,eAAe;KAC7B,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC5B,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,oCAAoC;KAClD,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,kEAAkE;KAChF,CAAC;SACD,aAAa,CAAC,CAAC,EAAE,iCAAiC,CAAC;SACnD,IAAI,EAAE,CAAC,IAAI,CAAC;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,CAAa,CAAC;IACnC,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvB,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,mCAAI,GAAG,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,mCAAI,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,MAAM,KAAK,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,mCAAI,GAAG,EAAE,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAY,EAAE,IAAI,CAAC,MAAgB,CAAC,CAAC;IAE/E,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}