@fingerru/vue 1.0.0-next.1 → 1.0.0-next.3

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 (2) hide show
  1. package/README.md +72 -66
  2. package/package.json +17 -2
package/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # @fingerru/vue
2
2
 
3
- Vue 3-обёртка над `@fingerru/agent`. Подключите плагин один раз при создании
4
- приложения и получайте данные visitor через Composition API или Options API.
3
+ Vue 3 SDK для идентификации посетителей сайта.
5
4
 
6
5
  ## Установка
7
6
 
@@ -9,9 +8,12 @@ Vue 3-обёртка над `@fingerru/agent`. Подключите плагин
9
8
  pnpm add @fingerru/vue @fingerru/agent
10
9
  ```
11
10
 
12
- ## Подключение плагина
11
+ ## Быстрый старт
13
12
 
14
- Создайте Fingprint-плагин при инициализации приложения:
13
+ ### 1. Подключите плагин
14
+
15
+ Зарегистрируйте `createFingprint()` при создании приложения. Передайте публичный
16
+ ключ проекта в `apiKey`:
15
17
 
16
18
  ```ts
17
19
  import { createApp } from 'vue'
@@ -27,84 +29,74 @@ createApp(App)
27
29
  .mount('#app')
28
30
  ```
29
31
 
30
- `endpoint` — полный абсолютный URL API или proxy. Если его не передавать,
31
- `@fingerru/agent` использует URL по умолчанию, встроенный в bundle.
32
+ При необходимости укажите `endpoint` для своего API или proxy, `runtimeUrl` для
33
+ своего CDN и `loadTimeout` для времени загрузки runtime.
32
34
 
33
- ```ts
34
- createFingprint({
35
- apiKey: 'pk_live_example',
36
- endpoint: 'https://api.example.com/api/visit',
37
- runtimeUrl: 'https://cdn.example.com/agent.min.js',
38
- loadTimeout: 10_000,
39
- cache: {
40
- storage: 'sessionStorage',
41
- duration: 3600,
42
- },
43
- })
35
+ ### 2. Используйте `useVisitorData`
36
+
37
+ Composable возвращает visitor-данные и состояние запроса:
38
+
39
+ ```vue
40
+ <script setup lang="ts">
41
+ import { useVisitorData } from '@fingerru/vue'
42
+
43
+ const { data, error, isLoading } = useVisitorData({ immediate: true })
44
+ </script>
45
+
46
+ <template>
47
+ <p v-if="isLoading">Получаем данные…</p>
48
+ <p v-else-if="error">Не удалось получить данные: {{ error.message }}</p>
49
+ <p v-else>Visitor: {{ data?.user }}</p>
50
+ </template>
44
51
  ```
45
52
 
46
- ## Composition API
53
+ Передайте `{ immediate: true }`, чтобы выполнить запрос после монтирования
54
+ компонента. По умолчанию запрос запускается только после вызова `getData()`.
55
+
56
+ ## Запрос по действию пользователя
47
57
 
48
- `useVisitorData()` доступен в компонентах, которые находятся внутри приложения
49
- с подключённым `createFingprint()`. Он возвращает реактивные refs `data`,
50
- `error`, `isLoading` и `isFetched`, а также метод `getData()`.
58
+ Используйте `getData()`, когда идентификатор нужен при конкретном действии,
59
+ например при отправке формы:
51
60
 
52
61
  ```vue
53
62
  <script setup lang="ts">
54
63
  import { useVisitorData } from '@fingerru/vue'
55
- import { watch } from 'vue'
56
64
 
57
- const { data, error, isFetched, isLoading, getData } = useVisitorData({
58
- // Укажите true, если идентификация нужна сразу после mount.
59
- immediate: false,
60
- })
65
+ const { getData, isLoading } = useVisitorData()
61
66
 
62
- watch(data, (visitor) => {
63
- if (visitor) {
64
- console.log(visitor.user)
65
- }
66
- })
67
+ async function handleSubmit() {
68
+ const visitor = await getData()
69
+ console.log(visitor.user)
70
+ }
67
71
  </script>
68
72
 
69
73
  <template>
70
- <button type="button" :disabled="isLoading" @click="getData()">Получить visitor</button>
71
-
72
- <p v-if="isLoading">Получаем visitor…</p>
73
- <p v-else-if="error">{{ error.message }}</p>
74
- <p v-else-if="isFetched">Visitor: {{ data?.user }}</p>
74
+ <button :disabled="isLoading" @click="handleSubmit">Отправить</button>
75
75
  </template>
76
76
  ```
77
77
 
78
- В `<template>` Vue автоматически разворачивает refs. В обычном TypeScript-коде
79
- используйте `.value`, например `data.value?.user`.
80
-
81
- По умолчанию запрос не запускается автоматически. Передайте
82
- `{ immediate: true }`, чтобы выполнить его после монтирования компонента.
83
- Повторные вызовы `getData()` одного composable во время активного запроса
84
- получают один и тот же `Promise`.
78
+ Для `useVisitorData()` можно задать `timeout` и `ignoreCache`; эти же параметры
79
+ можно передать непосредственно в `getData()`.
85
80
 
86
- ### Параметры запроса
81
+ ## Кеширование
87
82
 
88
- Параметры можно указать при создании composable или передать в конкретный
89
- вызов. Параметры вызова имеют приоритет:
83
+ Кеширование выключено по умолчанию. Чтобы включить его, добавьте `cache` в
84
+ настройки плагина:
90
85
 
91
86
  ```ts
92
- const { getData } = useVisitorData({ timeout: 5_000 })
93
-
94
- // Запрашивает новые данные, игнорируя cache.
95
- const visitor = await getData({ ignoreCache: true })
87
+ createFingprint({
88
+ apiKey: 'pk_live_example',
89
+ cache: {
90
+ storage: 'sessionStorage',
91
+ duration: 3600,
92
+ },
93
+ })
96
94
  ```
97
95
 
98
- | Параметр | Описание |
99
- | ------------- | ------------------------------------------------------- |
100
- | `immediate` | Выполнить запрос после mount. По умолчанию — `false`. |
101
- | `timeout` | Максимальное время API-запроса в миллисекундах. |
102
- | `ignoreCache` | Не использовать сохранённый результат для этого вызова. |
103
-
104
96
  ## Options API
105
97
 
106
- После подключения плагин добавляет типизированный `$fingprint` во все
107
- компоненты. Через него доступен `getVisitorData()`:
98
+ Плагин добавляет `$fingprint` в компоненты. Для получения данных вызовите
99
+ `this.$fingprint.getVisitorData()`:
108
100
 
109
101
  ```vue
110
102
  <script lang="ts">
@@ -112,23 +104,19 @@ import { defineComponent } from 'vue'
112
104
 
113
105
  export default defineComponent({
114
106
  methods: {
115
- async getVisitorData(): Promise<void> {
107
+ async getVisitorData() {
116
108
  const visitor = await this.$fingprint.getVisitorData()
117
109
  console.log(visitor.user)
118
110
  },
119
111
  },
120
112
  })
121
113
  </script>
122
-
123
- <template>
124
- <button type="button" @click="getVisitorData">Получить visitor</button>
125
- </template>
126
114
  ```
127
115
 
128
116
  ## Nuxt
129
117
 
130
- Fingerprinting использует browser runtime, поэтому подключайте плагин только
131
- на клиенте. Создайте `plugins/fingprint.client.ts`:
118
+ Fingerprinting работает только в браузере. Зарегистрируйте SDK в клиентском
119
+ плагине `plugins/fingprint.client.ts`:
132
120
 
133
121
  ```ts
134
122
  import { createFingprint } from '@fingerru/vue'
@@ -144,7 +132,7 @@ export default defineNuxtPlugin((nuxtApp) => {
144
132
  })
145
133
  ```
146
134
 
147
- Публичный ключ передавайте через публичную runtime-конфигурацию:
135
+ Передайте публичный ключ через runtime-конфигурацию:
148
136
 
149
137
  ```ts
150
138
  export default defineNuxtConfig({
@@ -155,3 +143,21 @@ export default defineNuxtConfig({
155
143
  },
156
144
  })
157
145
  ```
146
+
147
+ Используйте `useVisitorData()` в клиентском компоненте, например в
148
+ `components/VisitorData.client.vue`:
149
+
150
+ ```vue
151
+ <script setup lang="ts">
152
+ import { useVisitorData } from '@fingerru/vue'
153
+
154
+ const { data, getData, isLoading } = useVisitorData()
155
+ </script>
156
+
157
+ <template>
158
+ <button :disabled="isLoading" @click="getData()">
159
+ Получить visitor
160
+ </button>
161
+ <p v-if="data">Visitor: {{ data.user }}</p>
162
+ </template>
163
+ ```
package/package.json CHANGED
@@ -1,7 +1,22 @@
1
1
  {
2
2
  "name": "@fingerru/vue",
3
- "version": "1.0.0-next.1",
3
+ "version": "1.0.0-next.3",
4
4
  "description": "Vue SDK for the Fingprint service.",
5
+ "keywords": [
6
+ "browser",
7
+ "fingerprint",
8
+ "fingerprinting",
9
+ "browser fingerprint",
10
+ "visitor identification",
11
+ "identification",
12
+ "device fingerprint",
13
+ "fraud",
14
+ "fraud detection",
15
+ "fraud prevention",
16
+ "privacy",
17
+ "vue",
18
+ "vue 3"
19
+ ],
5
20
  "type": "module",
6
21
  "module": "./dist/index.js",
7
22
  "types": "./dist/types/index.d.ts",
@@ -16,7 +31,7 @@
16
31
  "dist"
17
32
  ],
18
33
  "dependencies": {
19
- "@fingerru/agent": "1.0.0-next.1"
34
+ "@fingerru/agent": "1.0.0-next.3"
20
35
  },
21
36
  "devDependencies": {
22
37
  "vue": "^3.0.0",