@fingerly/vue installs the JavaScript SDK as a Vue plugin. Composables read one shared identification as readonly refs.
Requirements
- Vue 3.3 or newer.
- A public key with your site in its allowed origins.
Install
npm install @fingerly/vue
Install the plugin
import { createApp } from 'vue'
import { createFingerly } from '@fingerly/vue'
import App from './App.vue'
createApp(App)
// consent: 'granted' only once you have consent (or another lawful basis)
.use(createFingerly({ apiKey: 'fly_pk_production_…', consent: 'granted' }))
.mount('#app')
Installing collects nothing. createFingerly accepts apiKey, endpoint, endpoints, fallbackToDefaultEndpoint, submit and consent. consent defaults to pending, which collects nothing until you grant it. Change consent at runtime with useFingerly().setConsent().
Identify on an action
<script setup lang="ts">
import { useIdentify } from '@fingerly/vue'
const props = defineProps<{ orderId: string }>()
const { identify, isLoading, error } = useIdentify({ tag: () => 'checkout:' + props.orderId })
async function onSubmit() {
const { requestId } = await identify()
await submitOrder({ orderId: props.orderId, requestId })
}
</script>
<template>
<form @submit.prevent="onSubmit">
<button :disabled="isLoading">{{ isLoading ? 'Checking…' : 'Pay now' }}</button>
<p v-if="error">{{ error.message }}</p>
</form>
</template>
useIdentify
Options
immediatebooleanDefaultfalseIdentify inonMounted.tagMaybeRefOrGetter<string | undefined>The tag to send, read at the moment of submission.
Returns the same state as the React hook, with every field a readonly ref and isReady and isSuspicious as computed refs, plus identify({ tag?, force? }) and refresh({ tag? }).
A call while an identification is in flight gets that identification, and a finished result is reused until you call refresh(). A failure is not cached.
useVerdict
<script setup lang="ts">
import { useVerdict } from '@fingerly/vue'
const { matched, confidence } = useVerdict('automation', { min: 'high' })
</script>
<template>
<aside v-if="matched">Automated access suspected ({{ confidence }})</aside>
</template>
Both arguments accept refs and getters. Verdict names are incognito, shields, tor, emulator, automation and farm.
Options API
<script lang="ts">
export default {
async mounted() {
const { requestId } = await this.$fingerly.identify()
},
}
</script>
Server rendering
immediate runs in onMounted, which never runs on the server. Calling identify() during server rendering rejects with FingerlyServerError. In a custom SSR setup, create the plugin per app instance rather than at module scope.