@wekivo/core
v0.1.1
Published
Noyau partagé Kivo : types, ApiClient, Storage interface — runtime-agnostic (web, RN, Node).
Downloads
88
Readme
@wekivo/core
Noyau partagé Kivo. Tu n'as probablement pas besoin de ce package
directement — utilise plutôt @wekivo/react, @wekivo/next, @wekivo/vue
ou @wekivo/react-native qui s'en servent en interne.
Ce que @wekivo/core expose :
- Types publics :
KivoConfig,IdentifyPayload,StreamEvent,ProactiveSignal,ClientContext,KivoInstance, etc. ApiClient: couche transport vers l'API Kivo, sans logique session/UI. Streams SSE inclus.KivoStorage: interface de stockage clé/valeur avec implémentations web (WebLocalStorage,WebSessionStorage) et test (InMemoryStorage).
Quand l'utiliser directement
- Tu construis un SDK pour une plateforme non couverte (Solid, Svelte, Angular, Flutter web, etc.).
- Tu veux contrôler entièrement le transport HTTP sans charger le widget UI.
import { ApiClient, webLanguage } from '@wekivo/core';
const client = new ApiClient({
apiKey: 'kv_...',
host: 'https://api.wekivo.com',
detectLanguage: webLanguage,
});
await client.identify({ externalId: 'usr_42', email: '[email protected]' });
await client.ingestEvents([
{
type: 'custom',
name: 'checkout_completed',
payload: { plan: 'growth' },
occurredAt: new Date().toISOString(),
},
]);Runtime-agnostique
Aucun appel à window, document, navigator dans le code de ce
package. Les composants qui en avaient besoin (langue navigateur, par
exemple) sont injectés par le consommateur :
// Web :
new ApiClient({ ..., detectLanguage: webLanguage });
// React Native :
import * as Localization from 'expo-localization';
new ApiClient({
...,
detectLanguage: () => Localization.locale?.split('-')[0] ?? null,
});
// Node / tests : laisse le défaut (noLanguage).
new ApiClient({ ... });Voir aussi
@wekivo/widget— consomme@wekivo/corecôté web@wekivo/react,@wekivo/next,@wekivo/vue— exposent les types via leur propre surface API
