@fingerprint79/sdk-snippets 0.0.1

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.
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # @fingerprint79/sdk-snippets
2
+
3
+ Idiomatic init-snippet generators for the **Fingerprint Platform SDK** (`fingerprint-platform-sdk`) across the eight frontend frameworks we support:
4
+
5
+ - React · Next.js · Vue.js · Angular · Svelte · Preact · Vanilla JS · JavaScript SPA
6
+
7
+ Plus the «Copy prompt» markdown builder that drops a self-contained integration brief into Cursor / Claude / Copilot Chat.
8
+
9
+ The functions are pure (no React, no DOM, no `fs`) — the same module powers both the admin dashboard's Install Fingerprint wizard and the [`fingerprint-platform-mcp`](https://www.npmjs.com/package/fingerprint-platform-mcp) AI-assistant tool.
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ npm install @fingerprint79/sdk-snippets
15
+ # or
16
+ pnpm add @fingerprint79/sdk-snippets
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```ts
22
+ import { initSnippet, buildAiPrompt, FRAMEWORKS } from '@fingerprint79/sdk-snippets';
23
+
24
+ // 1) Per-framework init code (npm or CDN flavour)
25
+ const code = initSnippet({
26
+ framework: 'react',
27
+ source: 'npm',
28
+ apiKey: 'wxyz...',
29
+ collectorUrl: 'https://yoursite.com/fpjs',
30
+ });
31
+
32
+ // 2) Self-contained markdown brief for an AI assistant
33
+ const md = buildAiPrompt({
34
+ framework: 'react',
35
+ source: 'npm',
36
+ apiKey: 'wxyz...',
37
+ collectorUrl: 'https://yoursite.com/fpjs',
38
+ docsUrl: 'https://docs.yoursite.com',
39
+ });
40
+
41
+ // 3) Browse the supported-framework metadata
42
+ for (const fw of FRAMEWORKS) {
43
+ console.log(fw.id, fw.label);
44
+ }
45
+ ```
46
+
47
+ ## License
48
+
49
+ MIT
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/snippet-for-framework.ts","../src/ai-prompt.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/index.d.ts"],"fileIdsList":[[66,109,112],[66,111,112],[112],[66,112,117,145],[66,112,113,118,123,131,142,153],[66,112,113,114,123,131],[66,112],[61,62,63,66,112],[66,112,115,154],[66,112,116,117,124,132],[66,112,117,142,150],[66,112,118,120,123,131],[66,111,112,119],[66,112,120,121],[66,112,122,123],[66,111,112,123],[66,112,123,124,125,142,153],[66,112,123,124,125,138,142,145],[66,112,120,123,126,131,142,153],[66,112,123,124,126,127,131,142,150,153],[66,112,126,128,142,150,153],[64,65,66,67,68,69,70,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159],[66,112,123,129],[66,112,130,153,158],[66,112,120,123,131,142],[66,112,132],[66,112,133],[66,111,112,134],[66,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159],[66,112,136],[66,112,137],[66,112,123,138,139],[66,112,138,140,154,156],[66,112,123,142,143,145],[66,112,144,145],[66,112,142,143],[66,112,145],[66,112,146],[66,109,112,142,147],[66,112,123,148,149],[66,112,148,149],[66,112,117,131,142,150],[66,112,151],[66,112,131,152],[66,112,126,137,153],[66,112,117,154],[66,112,142,155],[66,112,130,156],[66,112,157],[66,107,112],[66,107,112,123,125,134,142,145,153,156,158],[66,112,142,159],[66,79,83,112,153],[66,79,112,142,153],[66,74,112],[66,76,79,112,150,153],[66,112,131,150],[66,112,160],[66,74,112,160],[66,76,79,112,131,153],[66,71,72,75,78,112,123,142,153],[66,79,86,112],[66,71,77,112],[66,79,100,101,112],[66,75,79,112,145,153,160],[66,100,112,160],[66,73,74,112,160],[66,79,112],[66,73,74,75,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,112],[66,79,94,112],[66,79,86,87,112],[66,77,79,87,88,112],[66,78,112],[66,71,74,79,112],[66,79,83,87,88,112],[66,83,112],[66,77,79,82,112,153],[66,71,76,79,86,112],[66,112,142],[66,74,79,100,112,158,160],[58,66,112],[58,59,66,112]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"6797453c23a8c2fa0013abe38ebc237ab76faf2d474d509fa5dea7a2f6ec4a3a","signature":"051a71b413fdcbff411a8a4cb465b9a7a63102dd63542b2e69906589bd9ecc0f","impliedFormat":99},{"version":"da6928daeeefb666e3f7663dc5d97b9cf5afebac2b3da30f6d1acd41c93198c6","signature":"3b455f91cd13ccd959541bf7d7daf2bc7c125e194ff519aa12684fdfe1c138c8","impliedFormat":99},{"version":"2ad92d4664cf4a8e58206ad7c66e61b577bfc07f77ecb11d50ca33f3f339e1fe","signature":"2dfe5b9293d5fe29824bd89b72e091f9a2943f1ecfce2f42d1af15e6a294e749","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[[58,60]],"options":{"allowSyntheticDefaultImports":true,"alwaysStrict":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","removeComments":false,"rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[109,1],[110,1],[111,2],[66,3],[112,4],[113,5],[114,6],[61,7],[64,8],[62,7],[63,7],[115,9],[116,10],[117,11],[118,12],[119,13],[120,14],[121,14],[122,15],[123,16],[124,17],[125,18],[67,7],[65,7],[126,19],[127,20],[128,21],[160,22],[129,23],[130,24],[131,25],[132,26],[133,27],[134,28],[135,29],[136,30],[137,31],[138,32],[139,32],[140,33],[141,7],[142,34],[144,35],[143,36],[145,37],[146,38],[147,39],[148,40],[149,41],[150,42],[151,43],[152,44],[153,45],[154,46],[155,47],[156,48],[157,49],[68,7],[69,7],[70,7],[108,50],[158,51],[159,52],[56,7],[57,7],[11,7],[10,7],[2,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[3,7],[20,7],[21,7],[4,7],[22,7],[26,7],[23,7],[24,7],[25,7],[27,7],[28,7],[29,7],[5,7],[30,7],[31,7],[32,7],[33,7],[6,7],[37,7],[34,7],[35,7],[36,7],[38,7],[7,7],[39,7],[44,7],[45,7],[40,7],[41,7],[42,7],[43,7],[8,7],[49,7],[46,7],[47,7],[48,7],[50,7],[9,7],[51,7],[52,7],[53,7],[55,7],[54,7],[1,7],[86,53],[96,54],[85,53],[106,55],[77,56],[76,57],[105,58],[99,59],[104,60],[79,61],[93,62],[78,63],[102,64],[74,65],[73,58],[103,66],[75,67],[80,68],[81,7],[84,68],[71,7],[107,69],[97,70],[88,71],[89,72],[91,73],[87,74],[90,75],[100,58],[82,76],[83,77],[92,78],[72,79],[95,70],[94,68],[98,7],[101,80],[59,81],[60,82],[58,7]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.3"}
@@ -0,0 +1,24 @@
1
+ import type { Framework, SnippetSource } from './snippet-for-framework.js';
2
+ /**
3
+ * Builds the "Copy prompt" markdown that drops into Cursor / Claude
4
+ * / Copilot Chat — gives the integrator's coding assistant a
5
+ * self-contained brief on how to wire up Fingerprint on their stack.
6
+ *
7
+ * The template mirrors the FingerprintJS Pro version (boss showed us
8
+ * the screenshot in the planning call) but inlines OUR collector URL,
9
+ * the project's actual public key, the chosen framework, AND both
10
+ * install variants so the AI doesn't have to guess which install
11
+ * path the integrator prefers.
12
+ *
13
+ * Keep this self-contained — no React imports, no DOM access. The
14
+ * caller hands it to `navigator.clipboard.writeText` from a button
15
+ * click handler.
16
+ */
17
+ export declare function buildAiPrompt(opts: {
18
+ readonly framework: Framework;
19
+ readonly source: SnippetSource;
20
+ readonly apiKey: string;
21
+ readonly collectorUrl: string;
22
+ readonly docsUrl: string;
23
+ }): string;
24
+ //# sourceMappingURL=ai-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-prompt.d.ts","sourceRoot":"","sources":["../src/ai-prompt.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CAoFT"}
@@ -0,0 +1,101 @@
1
+ import { cdnInstallSnippet, frameworkLabel, initSnippet, npmInstallSnippet, } from './snippet-for-framework.js';
2
+ /**
3
+ * Builds the "Copy prompt" markdown that drops into Cursor / Claude
4
+ * / Copilot Chat — gives the integrator's coding assistant a
5
+ * self-contained brief on how to wire up Fingerprint on their stack.
6
+ *
7
+ * The template mirrors the FingerprintJS Pro version (boss showed us
8
+ * the screenshot in the planning call) but inlines OUR collector URL,
9
+ * the project's actual public key, the chosen framework, AND both
10
+ * install variants so the AI doesn't have to guess which install
11
+ * path the integrator prefers.
12
+ *
13
+ * Keep this self-contained — no React imports, no DOM access. The
14
+ * caller hands it to `navigator.clipboard.writeText` from a button
15
+ * click handler.
16
+ */
17
+ export function buildAiPrompt(opts) {
18
+ const fwLabel = frameworkLabel(opts.framework);
19
+ const snippet = initSnippet(opts);
20
+ const cdn = cdnInstallSnippet();
21
+ const npm = npmInstallSnippet();
22
+ return `# ${fwLabel} Integration Guide
23
+
24
+ Explain how to implement this installation step-by-step and verify
25
+ that it works.
26
+
27
+ Documentation: ${opts.docsUrl}
28
+
29
+ Add our snippet to each page you want to use Fingerprint on. You can
30
+ import the script directly from a CDN or include it as an NPM package.
31
+
32
+ Please disable your ad blocker when testing locally. For production
33
+ apps, the recommended pattern is a Cloudflare Worker on the
34
+ integrator's CF account, attached to a same-origin route pattern
35
+ like \`yoursite.com/fpjs/*\`. The Worker proxies BOTH the SDK
36
+ bundle (served on \`/fpjs/agent.js\`) AND the collector API
37
+ (\`/fpjs/ingest\`, \`/fpjs/result/<id>\`, \`/fpjs/comparison\`).
38
+ Cookies stay first-party, ad-blockers cannot pattern-match a path
39
+ on the integrator's own domain, and the integrator's app backend
40
+ is NEVER in the fingerprint request path — that would couple
41
+ uptime and add latency.
42
+
43
+ The code snippet below already includes the project's public API
44
+ key. Replace the \`yoursite.com/fpjs\` placeholder in
45
+ \`collectorUrl\` with the route the integrator wires in their
46
+ Cloudflare account.
47
+
48
+ ## Option A — CDN
49
+
50
+ \`\`\`html
51
+ ${cdn}
52
+ \`\`\`
53
+
54
+ ## Option B — NPM
55
+
56
+ \`\`\`bash
57
+ ${npm}
58
+ \`\`\`
59
+
60
+ ## Initialise and identify (${fwLabel})
61
+
62
+ \`\`\`${opts.source === 'cdn' ? 'html' : 'ts'}
63
+ ${snippet}
64
+ \`\`\`
65
+
66
+ ## Production proxy — Cloudflare Worker
67
+
68
+ Before shipping, deploy a Cloudflare Worker on the integrator's CF
69
+ account, attached to a route pattern like \`yoursite.com/fpjs/*\`.
70
+ The Worker proxies the SDK bundle on \`/fpjs/agent.js\` and the
71
+ collector endpoints under \`/fpjs/\` (ingest, result, comparison).
72
+ Result: every fingerprint request is same-origin, cookies stay
73
+ first-party, ad-blockers blind to the path. Same pattern as FP
74
+ Pro's Cloudflare integration.
75
+
76
+ The dashboard's Get Started → Install → Step 3 panel shows a
77
+ ready-to-paste Worker script; copy it into the integrator's CF
78
+ Workers dashboard, attach the route, done. NEVER reverse-proxy
79
+ \`/v1/ingest\` through the integrator's app backend — it puts
80
+ the hot path on their server and ties fingerprinting to their
81
+ app uptime.
82
+
83
+ Fallback: if Cloudflare isn't an option, point a DNS CNAME from
84
+ \`fp.yoursite.com\` to the collector directly. Less adblock-proof
85
+ than the Worker route (a dedicated subdomain is easier for filter
86
+ rules to catch than a same-origin path), but still keeps cookies
87
+ first-party.
88
+
89
+ Then add the site's primary origin (\`https://yoursite.com\`) to
90
+ allowedHosts on the dashboard's Security page so the collector
91
+ rejects requests from other domains.
92
+
93
+ ## Verify
94
+
95
+ Open the page where you mounted the SDK. The agent runs on load and
96
+ calls \`/v1/ingest\` on \`${opts.collectorUrl}\`. Then open the
97
+ Fingerprint dashboard's Identification view and confirm the event
98
+ appears within a couple of seconds.
99
+ `;
100
+ }
101
+ //# sourceMappingURL=ai-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-prompt.js","sourceRoot":"","sources":["../src/ai-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAIpC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAAC,IAM7B;IACC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAEhC,OAAO,KAAK,OAAO;;;;;iBAKJ,IAAI,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;EAwB3B,GAAG;;;;;;EAMH,GAAG;;;8BAGyB,OAAO;;QAE7B,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;EAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAiCmB,IAAI,CAAC,YAAY;;;CAG5C,CAAC;AACF,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `@fingerprint79/sdk-snippets` — idiomatic init-snippet generators
3
+ * for the Fingerprint Platform SDK across the eight frontend
4
+ * frameworks we support, plus the «Copy prompt» markdown builder.
5
+ *
6
+ * The functions here are pure — no React, no DOM, no fs. That's
7
+ * deliberate: the same code is consumed by (a) the admin dashboard
8
+ * (Vite + React bundle) to render install snippets in Get Started
9
+ * and Libraries, AND (b) the `fingerprint-platform-mcp` Node CLI
10
+ * which spits diffs back to AI assistants. Keeping the surface
11
+ * runtime-agnostic is what lets both consume it.
12
+ */
13
+ export { FRAMEWORKS, frameworkLabel, cdnInstallSnippet, npmInstallSnippet, initSnippet, } from './snippet-for-framework.js';
14
+ export type { Framework, SnippetSource, SnippetInput } from './snippet-for-framework.js';
15
+ export { buildAiPrompt } from './ai-prompt.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `@fingerprint79/sdk-snippets` — idiomatic init-snippet generators
3
+ * for the Fingerprint Platform SDK across the eight frontend
4
+ * frameworks we support, plus the «Copy prompt» markdown builder.
5
+ *
6
+ * The functions here are pure — no React, no DOM, no fs. That's
7
+ * deliberate: the same code is consumed by (a) the admin dashboard
8
+ * (Vite + React bundle) to render install snippets in Get Started
9
+ * and Libraries, AND (b) the `fingerprint-platform-mcp` Node CLI
10
+ * which spits diffs back to AI assistants. Keeping the surface
11
+ * runtime-agnostic is what lets both consume it.
12
+ */
13
+ export { FRAMEWORKS, frameworkLabel, cdnInstallSnippet, npmInstallSnippet, initSnippet, } from './snippet-for-framework.js';
14
+ export { buildAiPrompt } from './ai-prompt.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Code-snippet builder for the Install Fingerprint wizard.
3
+ *
4
+ * The SDK API is identical across frameworks (`init({collectorUrl,
5
+ * projectKey})` then `fp.identify(...)`), but how an integrator
6
+ * usually mounts it differs — Next.js needs `'use client'` + a
7
+ * client-only dynamic import, React needs a `useEffect`, Angular a
8
+ * service, etc. We hand out the smallest snippet that still feels
9
+ * idiomatic for each framework so a copy-paste lands in roughly the
10
+ * right place.
11
+ *
12
+ * `apiKey` is substituted into the snippet when revealed on the
13
+ * Get-Started page; otherwise the placeholder string from the i18n
14
+ * dictionary takes its place.
15
+ */
16
+ export type Framework = 'javascript' | 'javascript-spa' | 'nextjs' | 'react' | 'vue' | 'angular' | 'svelte' | 'preact';
17
+ export type SnippetSource = 'cdn' | 'npm';
18
+ export interface SnippetInput {
19
+ readonly framework: Framework;
20
+ readonly source: SnippetSource;
21
+ /** Plain-text public api key, or the i18n placeholder when masked. */
22
+ readonly apiKey: string;
23
+ /** The customer's custom subdomain pointing at our collector, e.g.
24
+ * `https://fp.theirsite.com`. Always shown — encourages the
25
+ * production pattern over leaking our raw IP in browser source.
26
+ * See `InstallFlow.tsx::Step 3` for the DNS-setup explanation. */
27
+ readonly collectorUrl: string;
28
+ }
29
+ /** All 8 framework ids in display order. Mobile is intentionally
30
+ * absent from this enum — that picker lives on the platform step. */
31
+ export declare const FRAMEWORKS: ReadonlyArray<{
32
+ id: Framework;
33
+ label: string;
34
+ }>;
35
+ export declare function frameworkLabel(id: Framework): string;
36
+ /** CDN install line — same across frameworks (the bundle is plain
37
+ * IIFE either way). Always links the obfuscated build; never link
38
+ * `dist/fp.js` from a production page — DevTools → Sources reads it
39
+ * in the clear and undoes the obfuscator pipeline.
40
+ *
41
+ * The primary line is the same-origin path served by the Cloudflare
42
+ * Worker the integrator deploys in Step 3 («Production proxy»). The
43
+ * unpkg URL stays as a commented-out fallback for quick dev/staging
44
+ * — adblockers' default lists ship a rule for `unpkg.com`, so in
45
+ * production this URL is one of the first to disappear from
46
+ * document.scripts. */
47
+ export declare function cdnInstallSnippet(): string;
48
+ /** NPM install line — same across frameworks. */
49
+ export declare function npmInstallSnippet(): string;
50
+ /** Initialise-and-identify snippet, framework-specific. The
51
+ * framework parameter only changes the WRAPPER code — the
52
+ * Fingerprint API calls inside it are identical. */
53
+ export declare function initSnippet(input: SnippetInput): string;
54
+ //# sourceMappingURL=snippet-for-framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-for-framework.d.ts","sourceRoot":"","sources":["../src/snippet-for-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,gBAAgB,GAChB,QAAQ,GACR,OAAO,GACP,KAAK,GACL,SAAS,GACT,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;uEAGmE;IACnE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;sEACsE;AACtE,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAStE,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;wBAUwB;AACxB,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAED;;qDAEqD;AACrD,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA+JvD"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Code-snippet builder for the Install Fingerprint wizard.
3
+ *
4
+ * The SDK API is identical across frameworks (`init({collectorUrl,
5
+ * projectKey})` then `fp.identify(...)`), but how an integrator
6
+ * usually mounts it differs — Next.js needs `'use client'` + a
7
+ * client-only dynamic import, React needs a `useEffect`, Angular a
8
+ * service, etc. We hand out the smallest snippet that still feels
9
+ * idiomatic for each framework so a copy-paste lands in roughly the
10
+ * right place.
11
+ *
12
+ * `apiKey` is substituted into the snippet when revealed on the
13
+ * Get-Started page; otherwise the placeholder string from the i18n
14
+ * dictionary takes its place.
15
+ */
16
+ /** All 8 framework ids in display order. Mobile is intentionally
17
+ * absent from this enum — that picker lives on the platform step. */
18
+ export const FRAMEWORKS = [
19
+ { id: 'javascript', label: 'JavaScript' },
20
+ { id: 'javascript-spa', label: 'JavaScript SPA' },
21
+ { id: 'nextjs', label: 'Next.js' },
22
+ { id: 'react', label: 'React' },
23
+ { id: 'angular', label: 'Angular' },
24
+ { id: 'vue', label: 'Vue.js' },
25
+ { id: 'preact', label: 'Preact' },
26
+ { id: 'svelte', label: 'Svelte' },
27
+ ];
28
+ export function frameworkLabel(id) {
29
+ return FRAMEWORKS.find((f) => f.id === id)?.label ?? id;
30
+ }
31
+ /** CDN install line — same across frameworks (the bundle is plain
32
+ * IIFE either way). Always links the obfuscated build; never link
33
+ * `dist/fp.js` from a production page — DevTools → Sources reads it
34
+ * in the clear and undoes the obfuscator pipeline.
35
+ *
36
+ * The primary line is the same-origin path served by the Cloudflare
37
+ * Worker the integrator deploys in Step 3 («Production proxy»). The
38
+ * unpkg URL stays as a commented-out fallback for quick dev/staging
39
+ * — adblockers' default lists ship a rule for `unpkg.com`, so in
40
+ * production this URL is one of the first to disappear from
41
+ * document.scripts. */
42
+ export function cdnInstallSnippet() {
43
+ return `<!-- Production: self-hosted through the Cloudflare Worker (Step 3 below) -->
44
+ <script src="/fpjs/agent.js" async></script>
45
+
46
+ <!-- Dev / staging only — unpkg URL is on every ad-block list -->
47
+ <!-- <script src="https://unpkg.com/fingerprint-platform-sdk/dist/fp.obf.js" async></script> -->`;
48
+ }
49
+ /** NPM install line — same across frameworks. */
50
+ export function npmInstallSnippet() {
51
+ return `npm install fingerprint-platform-sdk
52
+ # or pnpm add fingerprint-platform-sdk
53
+ # or yarn add fingerprint-platform-sdk`;
54
+ }
55
+ /** Initialise-and-identify snippet, framework-specific. The
56
+ * framework parameter only changes the WRAPPER code — the
57
+ * Fingerprint API calls inside it are identical. */
58
+ export function initSnippet(input) {
59
+ const { framework, source, apiKey, collectorUrl } = input;
60
+ const config = ` collectorUrl: '${collectorUrl}',
61
+ projectKey: '${apiKey}',`;
62
+ // CDN init — global `window.FP` from the IIFE. The init call is
63
+ // identical across frameworks (same global, same shape); what
64
+ // differs is WHERE the integrator drops the <script> tag. The
65
+ // framework-specific lead comment surfaces that decision so an
66
+ // operator switching frameworks while parked on the CDN tab sees
67
+ // their picked framework's mounting convention spelled out.
68
+ if (source === 'cdn') {
69
+ return `${cdnPlacementComment(framework)}
70
+ <script>
71
+ // Initialize the agent at application startup.
72
+ const fp = window.FP.init({
73
+ ${config}
74
+ });
75
+
76
+ // Get the visitor and event identifier when you need it.
77
+ fp.identify({ event: 'pageview' }).then((r) => {
78
+ if (r.visitorId) console.log(r.eventId, r.visitorId, r.suspectScore);
79
+ else console.log('event queued:', r.eventId);
80
+ });
81
+ </script>`;
82
+ }
83
+ // NPM / bundler path — framework-specific wrapper.
84
+ switch (framework) {
85
+ case 'nextjs':
86
+ return `// app/_components/FpClient.tsx — client component
87
+ 'use client';
88
+ import { useEffect } from 'react';
89
+
90
+ export function FpClient() {
91
+ useEffect(() => {
92
+ let cancelled = false;
93
+ // Dynamic import keeps the SDK out of the server bundle — Next.js
94
+ // SSR has no Window, the SDK throws on the canvas calls there.
95
+ import('fingerprint-platform-sdk').then(({ init }) => {
96
+ if (cancelled) return;
97
+ const fp = init({
98
+ ${config.replace(/^/gm, ' ')}
99
+ });
100
+ void fp.identify({ event: 'pageview' });
101
+ });
102
+ return () => { cancelled = true; };
103
+ }, []);
104
+ return null;
105
+ }
106
+
107
+ // Then mount <FpClient /> in your root layout.`;
108
+ case 'react':
109
+ return `import { useEffect } from 'react';
110
+ import { init } from 'fingerprint-platform-sdk';
111
+
112
+ export function useFingerprint() {
113
+ useEffect(() => {
114
+ const fp = init({
115
+ ${config.replace(/^/gm, ' ')}
116
+ });
117
+ fp.identify({ event: 'pageview' }).then((r) => {
118
+ if (r.visitorId) console.log(r.eventId, r.visitorId, r.suspectScore);
119
+ else console.log('event queued:', r.eventId);
120
+ });
121
+ }, []);
122
+ }
123
+
124
+ // Call useFingerprint() once in your root component.`;
125
+ case 'vue':
126
+ return `// plugins/fingerprint.ts
127
+ import { init } from 'fingerprint-platform-sdk';
128
+
129
+ const fp = init({
130
+ ${config}
131
+ });
132
+
133
+ export default {
134
+ install(app) {
135
+ app.config.globalProperties.$fp = fp;
136
+ },
137
+ };
138
+
139
+ // Then in main.ts:
140
+ // app.use(fpPlugin);
141
+ // And from any component:
142
+ // this.$fp.identify({ event: 'pageview' });`;
143
+ case 'angular':
144
+ return `// fingerprint.service.ts
145
+ import { Injectable } from '@angular/core';
146
+ import { init, type FpSdk } from 'fingerprint-platform-sdk';
147
+
148
+ @Injectable({ providedIn: 'root' })
149
+ export class FingerprintService {
150
+ readonly fp: FpSdk = init({
151
+ ${config.replace(/^/gm, ' ')}
152
+ });
153
+ }
154
+
155
+ // Inject in components and call: this.fp.fp.identify({ event: 'pageview' });`;
156
+ case 'svelte':
157
+ return `// src/lib/fingerprint.ts
158
+ import { init } from 'fingerprint-platform-sdk';
159
+
160
+ export const fp = init({
161
+ ${config}
162
+ });
163
+
164
+ // In any +page.svelte:
165
+ // <script lang="ts">
166
+ // import { onMount } from 'svelte';
167
+ // import { fp } from '$lib/fingerprint';
168
+ // onMount(() => { void fp.identify({ event: 'pageview' }); });
169
+ // </script>`;
170
+ case 'preact':
171
+ return `import { useEffect } from 'preact/hooks';
172
+ import { init } from 'fingerprint-platform-sdk';
173
+
174
+ export function useFingerprint() {
175
+ useEffect(() => {
176
+ const fp = init({
177
+ ${config.replace(/^/gm, ' ')}
178
+ });
179
+ void fp.identify({ event: 'pageview' });
180
+ }, []);
181
+ }
182
+
183
+ // Call useFingerprint() once in your root component.`;
184
+ case 'javascript-spa':
185
+ return `// src/fingerprint.js
186
+ // Single-page app pattern: init once, identify() on each route change.
187
+ import { init } from 'fingerprint-platform-sdk';
188
+
189
+ export const fp = init({
190
+ ${config}
191
+ });
192
+
193
+ // In your router's onNavigate hook:
194
+ // fp.identify({ event: 'route:' + path });`;
195
+ case 'javascript':
196
+ default:
197
+ return `import { init } from 'fingerprint-platform-sdk';
198
+
199
+ const fp = init({
200
+ ${config}
201
+ });
202
+
203
+ fp.identify({ event: 'pageview' }).then((r) => {
204
+ if (r.visitorId) console.log(r.eventId, r.visitorId, r.suspectScore);
205
+ else console.log('event queued:', r.eventId);
206
+ });`;
207
+ }
208
+ }
209
+ /** Framework-specific lead-comment for the CDN snippet. The init
210
+ * body itself is identical across frameworks (the IIFE exposes the
211
+ * same `window.FP.init` global), but mounting conventions differ —
212
+ * React puts the <script> in `public/index.html`, Next.js prefers
213
+ * `<Script>` from `next/script` in the root layout, etc. Surfacing
214
+ * the placement decision per-framework makes flipping the framework
215
+ * picker visibly do something even when the CDN tab is parked. */
216
+ function cdnPlacementComment(framework) {
217
+ switch (framework) {
218
+ case 'nextjs':
219
+ return `<!-- Next.js: prefer next/script with strategy="afterInteractive" in app/layout.tsx
220
+ rather than a raw <script>. The agent attaches to window.FP on first paint. -->`;
221
+ case 'react':
222
+ return `<!-- React: drop <script> in public/index.html (CRA / Vite-React).
223
+ Access window.FP from any component after first paint. -->`;
224
+ case 'vue':
225
+ return `<!-- Vue.js: place <script> in public/index.html.
226
+ Read window.FP inside onMounted / mounted hooks. -->`;
227
+ case 'angular':
228
+ return `<!-- Angular: add <script> to src/index.html.
229
+ Wrap window.FP in an Injectable service for DI ergonomics. -->`;
230
+ case 'svelte':
231
+ return `<!-- Svelte / SvelteKit: add <script> to app.html (SvelteKit) or
232
+ public/index.html. Use onMount() to read window.FP. -->`;
233
+ case 'preact':
234
+ return `<!-- Preact: drop <script> in your root index.html.
235
+ Read window.FP from any component after mount. -->`;
236
+ case 'javascript-spa':
237
+ return `<!-- SPA: include once in your shell HTML. Call fp.identify()
238
+ from your router's per-route hook to track navigation. -->`;
239
+ case 'javascript':
240
+ default:
241
+ return `<!-- Vanilla JS: paste anywhere in <body>. The SDK fires
242
+ identify() on its own once init() resolves. -->`;
243
+ }
244
+ }
245
+ //# sourceMappingURL=snippet-for-framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-for-framework.js","sourceRoot":"","sources":["../src/snippet-for-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0BH;sEACsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAoD;IACzE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;IACzC,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACjD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;IAClC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/B,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACnC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC9B,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACjC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;CAClC,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,EAAa;IAC1C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;wBAUwB;AACxB,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;iGAIwF,CAAC;AAClG,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;uCAE8B,CAAC;AACxC,CAAC;AAED;;qDAEqD;AACrD,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC1D,MAAM,MAAM,GAAG,oBAAoB,YAAY;mBAC9B,MAAM,IAAI,CAAC;IAE5B,gEAAgE;IAChE,8DAA8D;IAC9D,8DAA8D;IAC9D,+DAA+D;IAC/D,iEAAiE;IACjE,4DAA4D;IAC5D,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC;;;;EAI1C,MAAM;;;;;;;;UAQE,CAAC;IACT,CAAC;IAED,mDAAmD;IACnD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO;;;;;;;;;;;;EAYX,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;;;;;;;;;gDASmB,CAAC;QAE7C,KAAK,OAAO;YACV,OAAO;;;;;;EAMX,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;;;;;;;;sDASuB,CAAC;QAEnD,KAAK,KAAK;YACR,OAAO;;;;EAIX,MAAM;;;;;;;;;;;;+CAYuC,CAAC;QAE5C,KAAK,SAAS;YACZ,OAAO;;;;;;;EAOX,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;;;8EAI+C,CAAC;QAE3E,KAAK,QAAQ;YACX,OAAO;;;;EAIX,MAAM;;;;;;;;eAQO,CAAC;QAEZ,KAAK,QAAQ;YACX,OAAO;;;;;;EAMX,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;;;;;sDAMuB,CAAC;QAEnD,KAAK,gBAAgB;YACnB,OAAO;;;;;EAKX,MAAM;;;;8CAIsC,CAAC;QAE3C,KAAK,YAAY,CAAC;QAClB;YACE,OAAO;;;EAGX,MAAM;;;;;;IAMJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;mEAMmE;AACnE,SAAS,mBAAmB,CAAC,SAAoB;IAC/C,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO;qFACwE,CAAC;QAClF,KAAK,OAAO;YACV,OAAO;gEACmD,CAAC;QAC7D,KAAK,KAAK;YACR,OAAO;0DAC6C,CAAC;QACvD,KAAK,SAAS;YACZ,OAAO;oEACuD,CAAC;QACjE,KAAK,QAAQ;YACX,OAAO;6DACgD,CAAC;QAC1D,KAAK,QAAQ;YACX,OAAO;wDAC2C,CAAC;QACrD,KAAK,gBAAgB;YACnB,OAAO;gEACmD,CAAC;QAC7D,KAAK,YAAY,CAAC;QAClB;YACE,OAAO;qDACwC,CAAC;IACpD,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@fingerprint79/sdk-snippets",
3
+ "version": "0.0.1",
4
+ "description": "Idiomatic init-snippet generators for the Fingerprint Platform SDK across React, Next.js, Vue, Angular, Svelte, Preact, vanilla and SPA — plus the «Copy prompt» markdown builder. Shared between the admin dashboard and the MCP server.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "keywords": [
23
+ "fingerprint",
24
+ "device-id",
25
+ "sdk",
26
+ "snippets",
27
+ "react",
28
+ "nextjs",
29
+ "vue",
30
+ "angular",
31
+ "svelte",
32
+ "preact",
33
+ "mcp"
34
+ ],
35
+ "license": "MIT",
36
+ "scripts": {
37
+ "build": "tsc -b",
38
+ "typecheck": "tsc -b --noEmit",
39
+ "lint": "eslint src",
40
+ "test": "vitest run --passWithNoTests",
41
+ "clean": "rimraf dist .turbo *.tsbuildinfo"
42
+ }
43
+ }