Ruka hadi maudhui makuu

SDK ya TypeScript

Kifurushi kimoja chenye vituo sita vya kuingilia. Ingiza kile kinacholingana na mazingira yako, na ujenzi wa kutikisa mti utaacha vingine nje ya kifurushi chako.

Ilipochapishwa

@prodantix/sdk on npm.

Sakinisha

Bash
bun add @prodantix/sdk

Vituo vya kuingilia

Kila njia ndogo huja na ujenzi wake wa ESM na CommonJS pamoja na aina zake. Kiini hakitegemei mazingira ya utekelezaji, na vingine huongeza kile ambacho mazingira mahususi yanahitaji.

SubpathWhat it exports
@prodantix/sdkProdantixClient, createClient, evaluateFlag, FlagsClient, MessagesClient
@prodantix/sdk/webcreateWebClient, installAutocapture, installLinkCarry, installSessionReplay, WebTransport
@prodantix/sdk/nodecreateNodeClient, readSharedIdentity
@prodantix/sdk/cspprodantixConnectSrc, prodantixImgSrc, prodantixScriptSrc
@prodantix/sdk/chatmountChat, ChatClient, ChatPanel, resolveAppearance
@prodantix/sdk/messengerfetchMessengerConfig, cachedMessengerConfig, MESSENGER_CACHE_KEY

@prodantix/sdk

Mteja, kipima bendera, na violesura vya hifadhi na usafirishaji. Hakuna kitu hapa kinachogusa DOM, hivyo unaweza kutoa hifadhi, usafirishaji, saa au kiwanda chako cha vitambulisho na kukiendesha popote.

TypeScript
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

Uunganishaji wa kivinjari juu ya mteja yule yule: kuhifadhi katika hifadhi ya ndani, kuwasilisha kwa kinara wakati ukurasa unapofichwa, na kunasa kiotomatiki mionekano ya kurasa na mibofyo. Urudiaji wa kipindi hubaki umezimwa hadi umpe mwenyeji wa urudiaji.

TypeScript
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>'] })) {
  // ...
}

Kwenye wavuti, kitambulisho kisichojulikana cha mgeni na kipindi chake huhifadhiwa katika kidakuzi kimoja cha mhusika wa kwanza kwenye kikoa chako kinachoweza kusajiliwa, hivyo xyz.com, app.xyz.com na console.xyz.com huona mtu mmoja: ziara ya masoko, usajili na kipindi cha kwanza ndani ya programu hutua kwenye ratiba moja ya matukio mara programu inapomtambua. Kitambulisho kilichotambuliwa hubaki kwa kila asili katika hifadhi ya ndani na kamwe hakiingii kwenye kidakuzi, kwa sababu kila mwenyeji chini ya kikoa hicho anaweza kukisoma. Kikoa hupatikana kwa kuuliza kivinjari, au huwekwa kwa cookieDomain; tovuti ambayo vikoa vyake vidogo ni vya wapangaji tofauti lazima ikiweke kwenye mwenyeji wake yenyewe. Pitisha sharedStorage ili kutoandika kidakuzi chochote, kwa mfano hadi idhini itolewe, na hifadhi ya ndani hubaki kuwa mbadala vidakuzi vinapokataliwa. Kitambulisho cha kipindi hutolewa kwa kila ziara, hubadilishwa baada ya dakika thelathini bila shughuli au saa ishirini na nne, huwekwa kwenye kila tukio na hushirikiwa na urudiaji wa kipindi.

Kuki haiwezi kuvuka kikoa kinachosajilika, hivyo mgeni anayefuata kiungo kutoka tovuti moja kwenda nyingine angekuwa wageni wawili. Pitisha linkedDomains, ambayo ni tupu kwa chaguo-msingi, na mteja atapamba viungo vinavyotoka kwenda vikoa hivyo, wakati wa click na auxclick, kwa kigezo _pdx kinachobeba vitu vitatu: kitambulisho kisichojulikana, kitambulisho cha kipindi, na wakati kipindi kilipoanza, ili dirisha la dakika thelathini na kikomo cha saa ishirini na nne viendelee baada ya kuruka. Kinachosafiri ni kitambulisho kisichojulikana pekee, kamwe si kile kilichotambuliwa, kwa sababu mahali kinakoenda hutambua mtu kwa nafsi yake. Kiungo kinachoelekea kikoa kilekile kinachosajilika, kiungo kinachobeba _pdx tayari, pamoja na viungo vya mailto, tel, javascript na vya alama ya reli, vyote huachwa kama vilivyo. Kinapofika, createWebClient husoma _pdx kabla utambulisho haujajengwa, huandika kitambulisho na kipindi kilichobebwa katika hifadhi ya pamoja, na huondoa kigezo kwa history.replaceState, hivyo hakionekani katika $current_url wala hakiendelei mbele; kigezo ambacho sehemu zake tatu hazisomeki hupuuzwa na anwani huachwa ilivyokuwa. Ikiwa mwenyeji huyu tayari alikuwa na kitambulisho kingine kisichojulikana, mteja hutuma $create_alias, hivyo kilichorekodiwa awali hukunjwa ndani ya kitambulisho kilichobebwa; na mwenyeji aliyekwisha mtambua mtu humhifadhi mtu huyo: kitambulisho kilichobebwa huwa kitambulisho chake kisichojulikana, kamwe si distinct id yake.

TypeScript
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 }

Jibu la mgeni mwenyewe kuhusu muunganiko huo hupanda hifadhi ileile ya pamoja, chini ya pdx..consent, hivyo kila kikoa kidogo na seva inayosoma kuki huona jibu moja. Liandike kwa setConsent({ identityLink: false }), lisome tena kwa consent(), na lipande kwa chaguo consent pale programu yako inaposhikilia jibu tayari: bango la ridhaa ni lako kulijenga, na prodantix huheshimu kile linalokusanya. Wakati identityLink ni false, identify hautumi kitambulisho chochote kisichojulikana ili kuunganishwa na mtu huyo, na kiungo kinachoelekea kikoa kilichoorodheshwa huachwa bila kupambwa, kwa kuwa kubeba kitambulisho hadi upande wa pili ni muunganiko uleule kwa njia nyingine. Ambacho hakijawekwa au ni true huruhusu vyote viwili, kwa kufuata mpangilio wa mradi wenyewe katika koni, ambao hutekelezwa na mfanyakazi wa hali, siyo chochote kinachotumwa na kivinjari. Kubadili jibu huanza kufanya kazi kwenye identify inayofuata na bofya linalofuata; hakuna kilichokwisha unganishwa kinachotenganishwa.

@prodantix/sdk/node

Mteja yule yule mwenye chaguo-msingi za seva. Matukio huhifadhiwa kwenye bafa na kutumwa chinichini, hivyo ita shutdown kabla mchakato haujaisha, la sivyo fungu la mwisho halitatoka kamwe.

TypeScript
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();

Kuingia kunakokamilika kwa uelekezaji wa seva hakuchori ukurasa wowote, hivyo identify ya kivinjari chenyewe haifanyi kazi hapo kamwe. readSharedIdentity(cookieHeader, apiKey) husoma kuki iliyoandikwa na mteja wa wavuti na hujibu kitambulisho kisichojulikana, kipindi kilichomo, na ridhaa ya mgeni, au null pale kuki haipo au si ya SDK hii. Kisha link(distinctId, anonymousId, traits) hutuma ile $identify moja ambayo kivinjari kingetuma, kwa vitambulisho vilivyotolewa, na huacha utambulisho wa mteja huyu bila kuguswa. Kuingia kwa Bomdisoft huita zote mbili wakati kuingia kunakamilika, ndani ya kazi ile moja ambayo maeneo yake nane ya kuingia tayari huiita: hapo ndipo subject ya mtu hujulikana kwanza kwenye seva wakati kuki bado iko kwenye ombi. Sita kati ya maeneo hayo ni vitendo vya seva visivyo na kitu cha ombi, na ndiyo maana kazi hii huchukua mfuatano wa kichwa cha kuki badala ya ombi. Ruka link pale jibu lililosomwa ni identityLink false.

TypeScript
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

Vyanzo vya sera ya usalama wa maudhui ambavyo programu inahitaji ili kufikia Prodantix. Haileti chochote kutoka React wala kivinjari, hivyo faili la usanidi wa ujenzi linaweza kuisoma moja kwa moja.

TypeScript
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('; ');

Kidirisha cha msaada huonyesha picha za timu yako kutoka edge na huchora faili ambazo wageni hutuma kutoka anwani za blob:, kwa hivyo img-src ya sera inahitaji vyote viwili. prodantixImgSrc huviongeza kwenye vyanzo vya picha unavyoruhusu tayari. Bila hivyo, kivinjari huzuia picha hizo na husema hivyo kwenye konsoli yake pekee.

@prodantix/sdk/chat

Kidirisha cha msaada. Kikiweke na utapata kishikizo kinachofungua, kinachofunga, kinachoharibu na kinachotambulisha mtumiaji. Huchorwa ndani ya kiini kivuli kilichofungwa, hivyo mitindo ya ukurasa mwenyeji haifiki kamwe.

TypeScript
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());

Kila ujumbe wa mgeni hubeba mahali ulipoandikwa. Kidirisha husoma location na document.title wakati wa kutuma na hutuma host, path na title, ambapo path ni jina la njia pekee: kamwe si hoja wala kipande, kwa sababu kiungo cha kuweka upya, kiungo cha kichawi au kurudi kutoka malipo hubeba tokeni yake pale, na kikasha cha wakala si mahali pake. Kidirisha hakichori chochote kati ya hivyo, hivyo mazungumzo ya mgeni hubaki maneno yake mwenyewe, na jibu la ukingo kurudi kwa SDK pia huiacha, hivyo ukurasa unaosoma mazungumzo yake wenyewe hauwezi kuona kile koni inachokiona. Panapoonekana ni katika kikasha, kama mstari hafifu chini ya ujumbe unaoingia.

@prodantix/sdk/messenger

Msomaji wa mipangilio nyuma ya kidirisha: huleta usanidi wa mjumbe wa mradi, huuhifadhi katika akiba, na hueleza kama mradi umewasha mjumbe. Kipande kinachojiendesha hujengwa kando na hakifikiki kupitia njia hii ndogo.

TypeScript
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
}