TypeScripti SDK
Üks pakett kuue sisenemispunktiga. Impordi see, mis sinu käituskeskkonnaga sobib, ja puuraputusega ehitus jätab ülejäänu sinu kimbust välja.
Kus see on avaldatud
@prodantix/sdk on npm.
Paigaldus
bun add @prodantix/sdkSisenemispunktid
Iga alamtee tarnib oma ESM- ja CommonJS-ehituse koos oma tüüpidega. Juur on käituskeskkonnast sõltumatu ja ülejäänud lisavad selle, mida üks keskkond vajab.
| Subpath | What it exports |
|---|---|
| @prodantix/sdk | ProdantixClient, createClient, evaluateFlag, FlagsClient, MessagesClient |
| @prodantix/sdk/web | createWebClient, installAutocapture, installLinkCarry, installSessionReplay, WebTransport |
| @prodantix/sdk/node | createNodeClient, readSharedIdentity |
| @prodantix/sdk/csp | prodantixConnectSrc, prodantixImgSrc, prodantixScriptSrc |
| @prodantix/sdk/chat | mountChat, ChatClient, ChatPanel, resolveAppearance |
| @prodantix/sdk/messenger | fetchMessengerConfig, cachedMessengerConfig, MESSENGER_CACHE_KEY |
@prodantix/sdk
Klient, lipuhindaja ning salvestus- ja transpordiliidesed. Miski siin ei puuduta DOM-i, seega võid anda oma salvestuse, transpordi, kella või id-tehase ja käivitada selle kus tahes.
import { createClient, MemoryStorage } from '@prodantix/sdk';
const prodantix = createClient({
apiKey: PRODANTIX_PUBLIC_KEY,
host: 'https://eu.api.prodantix.com',
storage: new MemoryStorage(),
});
prodantix.capture('order.completed', { properties: { amount: 4200, currency: 'XAF' } });
await prodantix.flush();@prodantix/sdk/web
Brauseriühendused sama kliendi peal: säilitamine kohalikus salvestuses, saatmine majakaga, kui leht peidetakse, ning lehevaatamiste ja klikkide automaatpüüdmine. Seansi taasesitus püsib väljas, kuni annad sellele taasesituse hosti.
import { createWebClient } from '@prodantix/sdk/web';
const prodantix = createWebClient({
apiKey: PRODANTIX_PUBLIC_KEY,
host: 'https://eu.api.prodantix.com',
flagsHost: 'https://api.prodantix.com',
cookieDomain: 'example.com',
autocaptureOptions: { clicks: true, pageviews: true },
});
prodantix.identify('user-42', { set: { plan: 'pro' } });
if (await prodantix.isFeatureEnabled('new-checkout')) {
// ...
}
// Every per-flag read records one $feature_flag_called exposure.
const variant = await prodantix.getVariant('new-checkout');
if (variant?.key === 'treatment') {
// ...
}
// A flag targeting a cohort reads this user's memberships from the store;
// pass them yourself to skip the lookup.
if (await prodantix.isFeatureEnabledLocal('members', { cohorts: ['<cohort id>'] })) {
// ...
}Veebis elavad külastaja anonüümne id ja seanss ühes esimese osapoole küpsises sinu registreeritaval domeenil, nii et xyz.com, app.xyz.com ja console.xyz.com näevad üht inimest: turundusvisiit, registreerumine ja esimene seanss rakenduses maanduvad samale ajajoonele niipea, kui rakendus inimese tuvastab. Tuvastatud id jääb päritolu kaupa kohalikku salvestusse ega satu kunagi küpsisesse, sest iga host selle domeeni all saab seda lugeda. Domeen leitakse brauserilt küsides või määratakse cookieDomain kaudu; sait, mille alamdomeenid kuuluvad eri rentnikele, peab selle määrama omaenda hostiks. Anna sharedStorage, et küpsist üldse mitte kirjutada, näiteks kuni nõusolek on antud, ja kui küpsised keelatakse, jääb kohalik salvestus varuvariandiks. Seansi id luuakse iga visiidi kohta, roteeritakse pärast kolmekümmet minutit jõudeolekut või kahtkümmet nelja tundi, lisatakse igale sündmusele ja jagatakse seansi taasesitusega.
Küpsis ei saa ületada registreeritavat domeeni, nii et külastaja, kes järgib linki ühelt saidilt teisele, oleks kaks külastajat. Anna linkedDomains, mis on vaikimisi tühi, ja klient kaunistab neile domeenidele suunduvad lingid sündmustel click ja auxclick parameetriga _pdx, mis kannab kolme asja: anonüümset id-d, seansi id-d ja hetke, mil seanss algas, nii et kolmekümne minuti aken ja kahekümne nelja tunni ülempiir jätkuvad üle hüppe. Rändab ainult anonüümne id, mitte kunagi tuvastatud id, sest sihtkoht tuvastab inimese ise. Link samale registreeritavale domeenile, link, mis juba kannab _pdx-i, ning mailto-, tel-, javascript- ja ankrulingid jäetakse kõik puutumata. Saabudes loeb createWebClient _pdx-i enne identiteedi ehitamist, kirjutab kaasa toodud id ja seansi jagatud salvestusse ning eemaldab parameetri käsuga history.replaceState, nii et see ei ilmu $current_url-i ega sõida edasi; parameeter, mille kolm osa ei loe, jäetakse tähelepanuta ja aadress endiseks. Kui sellel hostil oli juba teine anonüümne id, saadab klient $create_alias-e, nii et varem salvestatu voltub kaasa toodud id sisse; host, kes on inimese juba tuvastanud, hoiab selle inimese alles: kaasa toodud id-st saab tema anonüümne id, mitte kunagi tema distinct id.
import { createWebClient } from '@prodantix/sdk/web';
const prodantix = createWebClient({
apiKey: PRODANTIX_PUBLIC_KEY,
host: 'https://eu.api.prodantix.com',
linkedDomains: ['example.com', 'example-app.com'],
});
// A link to example-app.com now leaves as
// https://example-app.com/pricing?_pdx=<anonymousId>~<sessionId>~<startedAt>
// and the arriving page adopts it before it builds an identity of its own.
// The visitor's answer, from your own consent banner.
prodantix.setConsent({ identityLink: false });
prodantix.consent(); // { identityLink: false }Külastaja enda vastus selle liitmise kohta sõidab samas jagatud salvestuses, võtme pdx..consent all, nii et iga alamdomeen ja küpsist lugev server näevad üht vastust. Salvesta see käsuga setConsent({ identityLink: false }), loe tagasi käsuga consent() ja külva valikuga consent, kui sinu rakendus vastust juba hoiab: nõusolekuriba on sinu ehitada ja prodantix austab seda, mida see kogub. Kuni identityLink on false, ei saada identify ühtki anonüümset id-d inimesega liitmiseks ja link seotud domeenile jäetakse kaunistamata, sest id kaasa viimine on seesama liitmine teist teed. Määramata või true lubab mõlemat, sõltuvalt projekti enda seadest konsoolis, mida jõustab olekutööline, mitte miski, mida brauser saadab. Vastuse muutmine hakkab kehtima järgmisel identify-l ja järgmisel klikil; midagi juba liidetut lahti ei võeta.
@prodantix/sdk/node
Sama klient serveri vaikeväärtustega. Sündmused puhverdatakse ja saadetakse taustal, seega kutsu enne protsessi lõppu shutdown, muidu ei lahku viimane partii kunagi.
import { createNodeClient } from '@prodantix/sdk/node';
// A node client streams flag changes over Socket.IO by default and refetches
// the snapshot on push; streamFlags: false leaves only the 30s poll.
const prodantix = createNodeClient({
apiKey: process.env.PRODANTIX_PUBLIC_KEY,
host: 'https://eu.api.prodantix.com',
streamFlags: true,
});
prodantix.capture('job.completed', { properties: { queue: 'emails' } });
await prodantix.shutdown();Sisselogimine, mis lõpeb serveri ümbersuunamisega, ei joonista ühtki lehte, nii et brauseri enda identify seal kunagi ei jookse. readSharedIdentity(cookieHeader, apiKey) loeb küpsist, mille veebiklient kirjutas, ja vastab anonüümse id, seansi, milles see on, ning külastaja nõusolekuga, või null-i, kui küpsist pole või see pole selle SDK oma. Seejärel saadab link(distinctId, anonymousId, traits) selle ainsa $identify, mille brauser oleks saatnud, antud id-de kohta, ja jätab selle kliendi enda identiteedi puutumata. Bomdisofti sisselogimine kutsub mõlemat sisselogimise lõpetamisel, ainsa funktsiooni sees, mida kõik selle kaheksa sisselogimiskohta juba kutsuvad: seal saab inimese subject serveris esimest korda teatavaks, samal ajal kui küpsis on veel päringu küljes. Kuus neist kohtadest on serveritoimingud, millel pole päringuobjekti, ja seepärast võtab funktsioon küpsisepäise stringi, mitte päringu. Jäta link vahele, kui tagasi loetud vastus on identityLink false.
import { createNodeClient, readSharedIdentity } from '@prodantix/sdk/node';
const prodantix = createNodeClient({
apiKey: PRODANTIX_PUBLIC_KEY,
host: 'https://eu.api.prodantix.com',
});
// At sign-in completion, where the person is known and the browser's
// cookie is still on the request.
export const completeSignIn = (sub: string, cookieHeader: string): void => {
const shared = readSharedIdentity(cookieHeader, PRODANTIX_PUBLIC_KEY);
if (shared !== null && shared.consent?.identityLink !== false) {
prodantix.link(sub, shared.anonymousId);
}
};@prodantix/sdk/csp
Sisuturbepoliitika allikad, mida rakendus vajab Prodantixini jõudmiseks. See ei impordi midagi Reactist ega brauserist, seega saab ehitusseadistuse fail seda otse lugeda.
import { prodantixConnectSrc, prodantixImgSrc, prodantixScriptSrc } from '@prodantix/sdk/csp';
const hosts = {
ingest: 'https://eu.api.prodantix.com',
edge: 'https://eu.edge.prodantix.com',
replay: 'https://eu.replay.prodantix.com',
};
const policy = [
`connect-src ${prodantixConnectSrc(hosts)}`,
`script-src ${prodantixScriptSrc(hosts)}`,
`img-src ${prodantixImgSrc(hosts, ["'self'", 'data:'])}`,
].join('; ');Tugividin näitab sinu meeskonna pilte edge’ist ja joonistab külastajate saadetud failid blob:-aadressidelt, seega vajab poliitika img-src mõlemat. prodantixImgSrc lisab need piltide allikatele, mida sa juba lubad. Ilma nendeta blokeerib brauser need pildid ja ütleb seda ainult oma konsoolis.
@prodantix/sdk/chat
Tugividin. Paigalda see ja saad pideme, mis avab, sulgeb, hävitab ja tuvastab kasutaja. See renderdub suletud varijuure sees, nii et host-lehe stiilid sinna kunagi ei ulatu.
import { mountChat } from '@prodantix/sdk/chat';
const messenger = mountChat({
apiKey: PRODANTIX_PUBLIC_KEY,
host: 'https://eu.edge.prodantix.com',
distinctId: prodantix.distinctId,
});
document.querySelector('#help')?.addEventListener('click', () => messenger.open());Iga külastaja sõnum kannab kaasas kohta, kus see kirjutati. Paneel loeb saatmise hetkel location-i ja document.title-i ning saadab host-i, path-i ja title-i, kus path on üksnes teenimi: mitte kunagi päring ega fragment, sest lähtestuslink, võlulink või ostu tagasitulek kannab oma loa just seal ja agendi postkast pole selle koht. Paneel ei joonista sellest midagi, nii et külastaja lõim jääb tema enda sõnadeks, ja serva vastus SDK-le jätab selle samuti välja, nii et oma lõime lugev leht ei näe seda, mida näeb konsool. Näha on see postkastis, vaikse reana saabunud kirje all.
@prodantix/sdk/messenger
Vidina taga olev seadistuste lugeja: see tõmbab projekti sõnumitooja seadistuse, puhverdab selle ja ütleb, kas projektil on sõnumitooja sisse lülitatud. Ise käivituv koodijupp ehitatakse eraldi ega ole selle alamtee kaudu kättesaadav.
import { fetchMessengerConfig } from '@prodantix/sdk/messenger';
const config = await fetchMessengerConfig({
apiKey: PRODANTIX_PUBLIC_KEY,
host: 'https://eu.edge.prodantix.com',
});
if (config?.enabled) {
// the project has the messenger switched on
}