flowboard-react 0.6.0 → 0.6.1

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.
package/README.md CHANGED
@@ -44,8 +44,7 @@ import { Flowboard, FlowboardProvider } from 'flowboard-react';
44
44
  export default function App() {
45
45
  React.useEffect(() => {
46
46
  Flowboard.init({
47
- appId: 'YOUR_APP_ID',
48
- bundleId: 'com.your.app',
47
+ apiToken: 'YOUR_BEARER_TOKEN',
49
48
  debug: true,
50
49
  });
51
50
  }, []);
@@ -75,6 +74,7 @@ Launch a specific onboarding by ID (without replacing default cached onboarding
75
74
  ```tsx
76
75
  await Flowboard.launchOnboardingById('YOUR_ONBOARDING_ID', {
77
76
  locale: 'fr_FR',
77
+ version: 'draft',
78
78
  onOnboardEnd: (formData) => {
79
79
  console.log('Specific flow completed:', formData);
80
80
  },
@@ -89,9 +89,9 @@ await Flowboard.reinit();
89
89
 
90
90
  ## API
91
91
 
92
- - `Flowboard.init({ appId, bundleId, debug, enableAnalytics })`
92
+ - `Flowboard.init({ apiToken, debug, enableAnalytics })`
93
93
  - `Flowboard.launchOnboarding({ customScreenBuilder, customActionBuilder, onOnboardEnd, onStepChange, enableAnalytics, alwaysRestart, resumeProgress })`
94
- - `Flowboard.launchOnboardingById(onboardingId, { locale, customScreenBuilder, customActionBuilder, onOnboardEnd, onStepChange, enableAnalytics, alwaysRestart, resumeProgress })`
94
+ - `Flowboard.launchOnboardingById(onboardingId, { locale, version, customScreenBuilder, customActionBuilder, onOnboardEnd, onStepChange, enableAnalytics, alwaysRestart, resumeProgress })`
95
95
  - `Flowboard.reinit()`
96
96
  - `FlowboardProvider` (required to host modal flow)
97
97
 
@@ -6,8 +6,7 @@ import { ResolverService } from "./core/resolverService.js";
6
6
  import { OnboardingRepository } from "./core/onboardingRepository.js";
7
7
  import { AnalyticsManager } from "./core/analyticsManager.js";
8
8
  export class Flowboard {
9
- static appId = null;
10
- static bundleId = null;
9
+ static apiToken = null;
11
10
  static debug = false;
12
11
  static repository = new OnboardingRepository();
13
12
  static service = new ResolverService();
@@ -18,10 +17,13 @@ export class Flowboard {
18
17
  return () => Flowboard.listeners.delete(listener);
19
18
  }
20
19
  static async init(params) {
21
- Flowboard.appId = params.appId;
22
- Flowboard.bundleId = params.bundleId;
20
+ const apiToken = params.apiToken.trim();
21
+ if (!apiToken) {
22
+ throw new Error('apiToken must be a non-empty string');
23
+ }
24
+ Flowboard.apiToken = apiToken;
23
25
  Flowboard.debug = params.debug ?? false;
24
- Flowboard.log(`Initialized with appId: ${Flowboard.appId}, bundleId: ${Flowboard.bundleId}`);
26
+ Flowboard.log('Initialized with API token.');
25
27
  try {
26
28
  const clientContext = await ClientContext.create();
27
29
  AnalyticsManager.instance.configure({
@@ -41,7 +43,7 @@ export class Flowboard {
41
43
  }
42
44
  static async launchOnboarding(options = {}) {
43
45
  Flowboard.log('Attempting to launch onboarding...');
44
- if (!Flowboard.appId) {
46
+ if (!Flowboard.apiToken) {
45
47
  throw new Error('Flowboard.init() must be called before launchOnboarding');
46
48
  }
47
49
  await Flowboard.configureAnalyticsForLaunch(options.enableAnalytics);
@@ -76,7 +78,7 @@ export class Flowboard {
76
78
  }
77
79
  static async launchOnboardingById(onboardingId, options = {}) {
78
80
  Flowboard.log(`Attempting to launch onboarding by id: ${onboardingId}`);
79
- if (!Flowboard.appId) {
81
+ if (!Flowboard.apiToken) {
80
82
  throw new Error('Flowboard.init() must be called before launchOnboardingById');
81
83
  }
82
84
  const normalizedOnboardingId = onboardingId.trim();
@@ -89,7 +91,9 @@ export class Flowboard {
89
91
  try {
90
92
  data = await Flowboard.service.fetchOnboardingById({
91
93
  onboardingId: normalizedOnboardingId,
92
- locale
94
+ locale,
95
+ apiToken: Flowboard.apiToken,
96
+ version: options.version ?? 'live'
93
97
  });
94
98
  } catch (error) {
95
99
  Flowboard.log(`Failed to load onboarding by id: ${String(error)}`);
@@ -166,15 +170,15 @@ export class Flowboard {
166
170
  }
167
171
  static async fetchAndSave() {
168
172
  const startTime = Date.now();
169
- if (!Flowboard.appId || !Flowboard.bundleId) {
173
+ if (!Flowboard.apiToken) {
170
174
  throw new Error('Flowboard not initialized. Call Flowboard.init() first.');
171
175
  }
172
176
  try {
173
177
  const context = await ClientContext.create();
174
- Flowboard.log(`Fetching onboarding JSON for installId: ${context.installId} | appId: ${Flowboard.appId} | bundleId: ${Flowboard.bundleId}`);
178
+ Flowboard.log(`Fetching onboarding JSON for installId: ${context.installId} | bundleId: ${context.bundleId}`);
175
179
  const json = await Flowboard.service.fetchOnboardingJson({
176
180
  context,
177
- appId: Flowboard.appId
181
+ apiToken: Flowboard.apiToken
178
182
  });
179
183
  Flowboard.log('Fetch successful. Saving to cache.');
180
184
  await Flowboard.repository.saveOnboardingJson(json);
@@ -1 +1 @@
1
- {"version":3,"names":["Alert","ClientContext","ResolverService","OnboardingRepository","AnalyticsManager","Flowboard","appId","bundleId","debug","repository","service","initPromise","listeners","Set","subscribe","listener","add","delete","init","params","log","clientContext","create","instance","configure","enabled","enableAnalytics","context","error","String","initialize","reinit","clearLocalCaches","fetchAndSave","launchOnboarding","options","Error","configureAnalyticsForLaunch","data","getOnboardingJson","alert","launchResolvedOnboarding","launchOnboardingById","onboardingId","normalizedOnboardingId","trim","locale","resolveLocale","fetchOnboardingById","shouldResumeProgress","resumeProgress","alwaysRestart","clearProgress","initialStep","initialFormData","flowId","flow_id","savedStep","getProgressStepForFlow","savedFormData","getProgressFormDataForFlow","undefined","screens","Array","isArray","length","maxIndex","Object","keys","emitLaunch","clientContextSnapshot","requestedLocale","normalized","cached","startSession","flowData","startTime","Date","now","installId","json","fetchOnboardingJson","saveOnboardingJson","duration","trackOnboardLoaded","durationMs","Promise","all","clearOnboardingJson","payload","forEach","message","console"],"sourceRoot":"../../src","sources":["Flowboard.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Alert","ClientContext","ResolverService","OnboardingRepository","AnalyticsManager","Flowboard","apiToken","debug","repository","service","initPromise","listeners","Set","subscribe","listener","add","delete","init","params","trim","Error","log","clientContext","create","instance","configure","enabled","enableAnalytics","context","error","String","initialize","reinit","clearLocalCaches","fetchAndSave","launchOnboarding","options","configureAnalyticsForLaunch","data","getOnboardingJson","alert","launchResolvedOnboarding","launchOnboardingById","onboardingId","normalizedOnboardingId","locale","resolveLocale","fetchOnboardingById","version","shouldResumeProgress","resumeProgress","alwaysRestart","clearProgress","initialStep","initialFormData","flowId","flow_id","savedStep","getProgressStepForFlow","savedFormData","getProgressFormDataForFlow","undefined","screens","Array","isArray","length","maxIndex","Object","keys","emitLaunch","clientContextSnapshot","requestedLocale","normalized","cached","startSession","flowData","startTime","Date","now","installId","bundleId","json","fetchOnboardingJson","saveOnboardingJson","duration","trackOnboardLoaded","durationMs","Promise","all","clearOnboardingJson","payload","forEach","message","console"],"sourceRoot":"../../src","sources":["Flowboard.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ const DEFAULT_API_BASE_URL = 'api.flow-board.co';
4
+ const DEFAULT_API_VERSION = 'v0';
5
+ function trimTrailingSlashes(value) {
6
+ return value.replace(/\/+$/, '');
7
+ }
8
+ function trimSurroundingSlashes(value) {
9
+ return value.replace(/^\/+|\/+$/g, '');
10
+ }
11
+ function normalizeApiBaseUrl(value) {
12
+ const trimmed = trimTrailingSlashes(String(value || '').trim());
13
+ if (!trimmed) {
14
+ throw new Error('Flowboard API base URL must be a non-empty string.');
15
+ }
16
+ if (/^https?:\/\//i.test(trimmed)) {
17
+ return trimmed;
18
+ }
19
+ return `https://${trimmed}`;
20
+ }
21
+ function normalizeApiVersion(value) {
22
+ const trimmed = trimSurroundingSlashes(String(value || '').trim());
23
+ if (!trimmed) {
24
+ throw new Error('Flowboard API version must be a non-empty string.');
25
+ }
26
+ return `/${trimmed}`;
27
+ }
28
+ export function getFlowboardApiBaseUrl() {
29
+ return normalizeApiBaseUrl(DEFAULT_API_BASE_URL);
30
+ }
31
+ export function getFlowboardApiVersion() {
32
+ return normalizeApiVersion(DEFAULT_API_VERSION);
33
+ }
34
+ export function getFlowboardRuntimeBaseUrl() {
35
+ return `${getFlowboardApiBaseUrl()}${getFlowboardApiVersion()}`;
36
+ }
37
+ export function getResolveFlowUrl() {
38
+ return `${getFlowboardRuntimeBaseUrl()}/flows`;
39
+ }
40
+ export function getFlowByIdUrl(flowId) {
41
+ const normalizedFlowId = String(flowId || '').trim();
42
+ if (!normalizedFlowId) {
43
+ throw new Error('flowId must be a non-empty string.');
44
+ }
45
+ return `${getFlowboardRuntimeBaseUrl()}/flows/${encodeURIComponent(normalizedFlowId)}`;
46
+ }
47
+ //# sourceMappingURL=apiConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_API_BASE_URL","DEFAULT_API_VERSION","trimTrailingSlashes","value","replace","trimSurroundingSlashes","normalizeApiBaseUrl","trimmed","String","trim","Error","test","normalizeApiVersion","getFlowboardApiBaseUrl","getFlowboardApiVersion","getFlowboardRuntimeBaseUrl","getResolveFlowUrl","getFlowByIdUrl","flowId","normalizedFlowId","encodeURIComponent"],"sourceRoot":"../../../src","sources":["core/apiConfig.ts"],"mappings":";;AAAA,MAAMA,oBAAoB,GAAG,mBAAmB;AAChD,MAAMC,mBAAmB,GAAG,IAAI;AAEhC,SAASC,mBAAmBA,CAACC,KAAa,EAAU;EAClD,OAAOA,KAAK,CAACC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAClC;AAEA,SAASC,sBAAsBA,CAACF,KAAa,EAAU;EACrD,OAAOA,KAAK,CAACC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACxC;AAEA,SAASE,mBAAmBA,CAACH,KAAa,EAAU;EAClD,MAAMI,OAAO,GAAGL,mBAAmB,CAACM,MAAM,CAACL,KAAK,IAAI,EAAE,CAAC,CAACM,IAAI,CAAC,CAAC,CAAC;EAC/D,IAAI,CAACF,OAAO,EAAE;IACZ,MAAM,IAAIG,KAAK,CAAC,oDAAoD,CAAC;EACvE;EAEA,IAAI,eAAe,CAACC,IAAI,CAACJ,OAAO,CAAC,EAAE;IACjC,OAAOA,OAAO;EAChB;EAEA,OAAO,WAAWA,OAAO,EAAE;AAC7B;AAEA,SAASK,mBAAmBA,CAACT,KAAa,EAAU;EAClD,MAAMI,OAAO,GAAGF,sBAAsB,CAACG,MAAM,CAACL,KAAK,IAAI,EAAE,CAAC,CAACM,IAAI,CAAC,CAAC,CAAC;EAClE,IAAI,CAACF,OAAO,EAAE;IACZ,MAAM,IAAIG,KAAK,CAAC,mDAAmD,CAAC;EACtE;EAEA,OAAO,IAAIH,OAAO,EAAE;AACtB;AAEA,OAAO,SAASM,sBAAsBA,CAAA,EAAW;EAC/C,OAAOP,mBAAmB,CAACN,oBAAoB,CAAC;AAClD;AAEA,OAAO,SAASc,sBAAsBA,CAAA,EAAW;EAC/C,OAAOF,mBAAmB,CAACX,mBAAmB,CAAC;AACjD;AAEA,OAAO,SAASc,0BAA0BA,CAAA,EAAW;EACnD,OAAO,GAAGF,sBAAsB,CAAC,CAAC,GAAGC,sBAAsB,CAAC,CAAC,EAAE;AACjE;AAEA,OAAO,SAASE,iBAAiBA,CAAA,EAAW;EAC1C,OAAO,GAAGD,0BAA0B,CAAC,CAAC,QAAQ;AAChD;AAEA,OAAO,SAASE,cAAcA,CAACC,MAAc,EAAU;EACrD,MAAMC,gBAAgB,GAAGX,MAAM,CAACU,MAAM,IAAI,EAAE,CAAC,CAACT,IAAI,CAAC,CAAC;EACpD,IAAI,CAACU,gBAAgB,EAAE;IACrB,MAAM,IAAIT,KAAK,CAAC,oCAAoC,CAAC;EACvD;EAEA,OAAO,GAAGK,0BAA0B,CAAC,CAAC,UAAUK,kBAAkB,CAChED,gBACF,CAAC,EAAE;AACL","ignoreList":[]}
@@ -1,40 +1,26 @@
1
1
  "use strict";
2
2
 
3
- const DEFAULT_ENDPOINT = 'https://test-638704832888.europe-west1.run.app';
4
- const SPECIFIC_ONBOARDING_ENDPOINT = 'https://onboardsolo-638704832888.europe-west1.run.app';
3
+ import { getFlowByIdUrl, getResolveFlowUrl } from "./apiConfig.js";
5
4
  export class ResolverService {
6
- constructor(endpoint) {
7
- this.endpoint = endpoint ?? DEFAULT_ENDPOINT;
8
- this.specificOnboardingEndpoint = SPECIFIC_ONBOARDING_ENDPOINT;
5
+ constructor(fetchImpl = fetch) {
6
+ this.fetchImpl = fetchImpl;
9
7
  }
10
8
  async fetchOnboardingJson(params) {
11
9
  const {
12
10
  context,
13
- appId
11
+ apiToken
14
12
  } = params;
15
- const payload = context.toJson();
16
- payload.appId = appId;
17
- payload.installId = context.installId;
18
- payload.bundleId = context.bundleId;
19
- payload.appVersion = context.appVersion;
20
- payload.buildNumber = context.buildNumber;
21
- payload.os = context.os;
22
- payload.osVersion = context.osVersion;
23
- payload.deviceType = context.deviceType;
24
- payload.locale = context.locale;
25
- payload.country = context.country;
26
- payload.sdk = {
27
- name: 'flowboard',
28
- version: '1.0.0'
29
- };
13
+ const url = new URL(getResolveFlowUrl());
14
+ url.searchParams.set('installId', context.installId);
15
+ url.searchParams.set('appVersion', context.appVersion);
16
+ url.searchParams.set('locale', context.locale);
17
+ url.searchParams.set('country', context.country);
18
+ url.searchParams.set('os', context.os);
30
19
  let response;
31
20
  try {
32
- response = await fetch(this.endpoint, {
33
- method: 'POST',
34
- headers: {
35
- 'Content-Type': 'application/json'
36
- },
37
- body: JSON.stringify(payload)
21
+ response = await this.fetchImpl(url.toString(), {
22
+ method: 'GET',
23
+ headers: this.createHeaders(apiToken)
38
24
  });
39
25
  } catch (error) {
40
26
  throw new Error(`Failed to connect to resolver: ${String(error)}`);
@@ -44,22 +30,19 @@ export class ResolverService {
44
30
  throw new Error(`Failed to load onboarding config: ${response.status} ${body}`);
45
31
  }
46
32
  const body = await response.json();
33
+ this.normalizeFlowIdentifier(body);
47
34
  this.applyHeaderMetadata(response, body);
48
35
  return body;
49
36
  }
50
37
  async fetchOnboardingById(params) {
51
- const payload = {
52
- onboardingId: params.onboardingId,
53
- locale: params.locale
54
- };
38
+ const url = new URL(getFlowByIdUrl(params.onboardingId));
39
+ url.searchParams.set('locale', params.locale);
40
+ url.searchParams.set('version', params.version ?? 'live');
55
41
  let response;
56
42
  try {
57
- response = await fetch(this.specificOnboardingEndpoint, {
58
- method: 'POST',
59
- headers: {
60
- 'Content-Type': 'application/json'
61
- },
62
- body: JSON.stringify(payload)
43
+ response = await this.fetchImpl(url.toString(), {
44
+ method: 'GET',
45
+ headers: this.createHeaders(params.apiToken)
63
46
  });
64
47
  } catch (error) {
65
48
  throw new Error(`Failed to connect to resolver: ${String(error)}`);
@@ -69,9 +52,22 @@ export class ResolverService {
69
52
  throw new Error(`Failed to load onboarding config: ${response.status} ${body}`);
70
53
  }
71
54
  const body = await response.json();
55
+ this.normalizeFlowIdentifier(body);
72
56
  this.applyHeaderMetadata(response, body);
73
57
  return body;
74
58
  }
59
+ createHeaders(apiToken) {
60
+ return {
61
+ Accept: '*/*',
62
+ Authorization: `Bearer ${apiToken}`
63
+ };
64
+ }
65
+ normalizeFlowIdentifier(body) {
66
+ const legacyFlowId = body.flowId;
67
+ if (!body.flow_id && typeof legacyFlowId === 'string' && legacyFlowId) {
68
+ body.flow_id = legacyFlowId;
69
+ }
70
+ }
75
71
  applyHeaderMetadata(response, body) {
76
72
  const flowId = response.headers.get('x-flowboard-flow-id');
77
73
  if (flowId) body.flow_id = flowId;
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_ENDPOINT","SPECIFIC_ONBOARDING_ENDPOINT","ResolverService","constructor","endpoint","specificOnboardingEndpoint","fetchOnboardingJson","params","context","appId","payload","toJson","installId","bundleId","appVersion","buildNumber","os","osVersion","deviceType","locale","country","sdk","name","version","response","fetch","method","headers","body","JSON","stringify","error","Error","String","ok","text","status","json","applyHeaderMetadata","fetchOnboardingById","onboardingId","flowId","get","flow_id","variantId","variant_id","audienceId","audience_id","bucket","experimentId","experiment_id"],"sourceRoot":"../../../src","sources":["core/resolverService.ts"],"mappings":";;AAGA,MAAMA,gBAAgB,GAAG,gDAAgD;AACzE,MAAMC,4BAA4B,GAChC,uDAAuD;AAEzD,OAAO,MAAMC,eAAe,CAAC;EAI3BC,WAAWA,CAACC,QAAiB,EAAE;IAC7B,IAAI,CAACA,QAAQ,GAAGA,QAAQ,IAAIJ,gBAAgB;IAC5C,IAAI,CAACK,0BAA0B,GAAGJ,4BAA4B;EAChE;EAEA,MAAMK,mBAAmBA,CAACC,MAGzB,EAA0B;IACzB,MAAM;MAAEC,OAAO;MAAEC;IAAM,CAAC,GAAGF,MAAM;IACjC,MAAMG,OAAO,GAAGF,OAAO,CAACG,MAAM,CAAC,CAAC;IAChCD,OAAO,CAACD,KAAK,GAAGA,KAAK;IACrBC,OAAO,CAACE,SAAS,GAAGJ,OAAO,CAACI,SAAS;IACrCF,OAAO,CAACG,QAAQ,GAAGL,OAAO,CAACK,QAAQ;IAEnCH,OAAO,CAACI,UAAU,GAAGN,OAAO,CAACM,UAAU;IACvCJ,OAAO,CAACK,WAAW,GAAGP,OAAO,CAACO,WAAW;IACzCL,OAAO,CAACM,EAAE,GAAGR,OAAO,CAACQ,EAAE;IACvBN,OAAO,CAACO,SAAS,GAAGT,OAAO,CAACS,SAAS;IACrCP,OAAO,CAACQ,UAAU,GAAGV,OAAO,CAACU,UAAU;IACvCR,OAAO,CAACS,MAAM,GAAGX,OAAO,CAACW,MAAM;IAC/BT,OAAO,CAACU,OAAO,GAAGZ,OAAO,CAACY,OAAO;IAEjCV,OAAO,CAACW,GAAG,GAAG;MACZC,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAE;IACX,CAAC;IAED,IAAIC,QAAkB;IACtB,IAAI;MACFA,QAAQ,GAAG,MAAMC,KAAK,CAAC,IAAI,CAACrB,QAAQ,EAAE;QACpCsB,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE;UAAE,cAAc,EAAE;QAAmB,CAAC;QAC/CC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACpB,OAAO;MAC9B,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOqB,KAAK,EAAE;MACd,MAAM,IAAIC,KAAK,CAAC,kCAAkCC,MAAM,CAACF,KAAK,CAAC,EAAE,CAAC;IACpE;IAEA,IAAI,CAACP,QAAQ,CAACU,EAAE,EAAE;MAChB,MAAMN,IAAI,GAAG,MAAMJ,QAAQ,CAACW,IAAI,CAAC,CAAC;MAClC,MAAM,IAAIH,KAAK,CACb,qCAAqCR,QAAQ,CAACY,MAAM,IAAIR,IAAI,EAC9D,CAAC;IACH;IAEA,MAAMA,IAAI,GAAI,MAAMJ,QAAQ,CAACa,IAAI,CAAC,CAAmB;IACrD,IAAI,CAACC,mBAAmB,CAACd,QAAQ,EAAEI,IAAI,CAAC;IAExC,OAAOA,IAAI;EACb;EAEA,MAAMW,mBAAmBA,CAAChC,MAGzB,EAA0B;IACzB,MAAMG,OAAO,GAAG;MACd8B,YAAY,EAAEjC,MAAM,CAACiC,YAAY;MACjCrB,MAAM,EAAEZ,MAAM,CAACY;IACjB,CAAC;IAED,IAAIK,QAAkB;IACtB,IAAI;MACFA,QAAQ,GAAG,MAAMC,KAAK,CAAC,IAAI,CAACpB,0BAA0B,EAAE;QACtDqB,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE;UAAE,cAAc,EAAE;QAAmB,CAAC;QAC/CC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACpB,OAAO;MAC9B,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOqB,KAAK,EAAE;MACd,MAAM,IAAIC,KAAK,CAAC,kCAAkCC,MAAM,CAACF,KAAK,CAAC,EAAE,CAAC;IACpE;IAEA,IAAI,CAACP,QAAQ,CAACU,EAAE,EAAE;MAChB,MAAMN,IAAI,GAAG,MAAMJ,QAAQ,CAACW,IAAI,CAAC,CAAC;MAClC,MAAM,IAAIH,KAAK,CACb,qCAAqCR,QAAQ,CAACY,MAAM,IAAIR,IAAI,EAC9D,CAAC;IACH;IAEA,MAAMA,IAAI,GAAI,MAAMJ,QAAQ,CAACa,IAAI,CAAC,CAAmB;IACrD,IAAI,CAACC,mBAAmB,CAACd,QAAQ,EAAEI,IAAI,CAAC;IAExC,OAAOA,IAAI;EACb;EAEQU,mBAAmBA,CAACd,QAAkB,EAAEI,IAAmB,EAAQ;IACzE,MAAMa,MAAM,GAAGjB,QAAQ,CAACG,OAAO,CAACe,GAAG,CAAC,qBAAqB,CAAC;IAC1D,IAAID,MAAM,EAAEb,IAAI,CAACe,OAAO,GAAGF,MAAM;IACjC,MAAMG,SAAS,GAAGpB,QAAQ,CAACG,OAAO,CAACe,GAAG,CAAC,wBAAwB,CAAC;IAChE,IAAIE,SAAS,EAAEhB,IAAI,CAACiB,UAAU,GAAGD,SAAS;IAC1C,MAAME,UAAU,GAAGtB,QAAQ,CAACG,OAAO,CAACe,GAAG,CAAC,yBAAyB,CAAC;IAClE,IAAII,UAAU,EAAElB,IAAI,CAACmB,WAAW,GAAGD,UAAU;IAC7C,MAAME,MAAM,GAAGxB,QAAQ,CAACG,OAAO,CAACe,GAAG,CAAC,oBAAoB,CAAC;IACzD,IAAIM,MAAM,EAAEpB,IAAI,CAACoB,MAAM,GAAGA,MAAM;IAChC,MAAMC,YAAY,GAAGzB,QAAQ,CAACG,OAAO,CAACe,GAAG,CAAC,2BAA2B,CAAC;IACtE,IAAIO,YAAY,EAAErB,IAAI,CAACsB,aAAa,GAAGD,YAAY;EACrD;AACF","ignoreList":[]}
1
+ {"version":3,"names":["getFlowByIdUrl","getResolveFlowUrl","ResolverService","constructor","fetchImpl","fetch","fetchOnboardingJson","params","context","apiToken","url","URL","searchParams","set","installId","appVersion","locale","country","os","response","toString","method","headers","createHeaders","error","Error","String","ok","body","text","status","json","normalizeFlowIdentifier","applyHeaderMetadata","fetchOnboardingById","onboardingId","version","Accept","Authorization","legacyFlowId","flowId","flow_id","get","variantId","variant_id","audienceId","audience_id","bucket","experimentId","experiment_id"],"sourceRoot":"../../../src","sources":["core/resolverService.ts"],"mappings":"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","ignoreList":[]}
@@ -7,8 +7,7 @@ export type LaunchPayload = {
7
7
  };
8
8
  type LaunchListener = (payload: LaunchPayload) => void;
9
9
  export declare class Flowboard {
10
- private static appId;
11
- private static bundleId;
10
+ private static apiToken;
12
11
  private static debug;
13
12
  private static repository;
14
13
  private static service;
@@ -16,8 +15,7 @@ export declare class Flowboard {
16
15
  private static listeners;
17
16
  static subscribe(listener: LaunchListener): () => void;
18
17
  static init(params: {
19
- appId: string;
20
- bundleId: string;
18
+ apiToken: string;
21
19
  debug?: boolean;
22
20
  enableAnalytics?: boolean;
23
21
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Flowboard.d.ts","sourceRoot":"","sources":["../../../src/Flowboard.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,sBAAsB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC,CAAC;AAEF,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;AAEvD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAA8B;IACvD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAyB;IAC/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAA8B;IACxD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6B;IAErD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI;WAKzC,IAAI,CAAC,MAAM,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,OAAO,CAAC,IAAI,CAAC;WAsBJ,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;WAOvB,gBAAgB,CAC3B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC;WA4CH,oBAAoB,CAC/B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC;mBAgCK,wBAAwB;mBA8CxB,2BAA2B;mBAkB3B,aAAa;mBAeb,UAAU;mBAaV,YAAY;mBAmCZ,gBAAgB;IAOrC,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,GAAG;CAKnB"}
1
+ {"version":3,"file":"Flowboard.d.ts","sourceRoot":"","sources":["../../../src/Flowboard.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,sBAAsB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC,CAAC;AAEF,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;AAEvD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAA8B;IACvD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAyB;IAC/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAA8B;IACxD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6B;IAErD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI;WAKzC,IAAI,CAAC,MAAM,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,OAAO,CAAC,IAAI,CAAC;WAwBJ,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;WAOvB,gBAAgB,CAC3B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC;WA4CH,oBAAoB,CAC/B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC;mBAkCK,wBAAwB;mBA8CxB,2BAA2B;mBAkB3B,aAAa;mBAeb,UAAU;mBAaV,YAAY;mBAmCZ,gBAAgB;IAOrC,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,GAAG;CAKnB"}
@@ -0,0 +1,6 @@
1
+ export declare function getFlowboardApiBaseUrl(): string;
2
+ export declare function getFlowboardApiVersion(): string;
3
+ export declare function getFlowboardRuntimeBaseUrl(): string;
4
+ export declare function getResolveFlowUrl(): string;
5
+ export declare function getFlowByIdUrl(flowId: string): string;
6
+ //# sourceMappingURL=apiConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiConfig.d.ts","sourceRoot":"","sources":["../../../../src/core/apiConfig.ts"],"names":[],"mappings":"AAiCA,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASrD"}
@@ -1,17 +1,20 @@
1
1
  import type { ClientContext } from './clientContext';
2
- import type { FlowboardData } from '../types/flowboard';
2
+ import type { FlowboardData, FlowboardFlowVersion } from '../types/flowboard';
3
3
  export declare class ResolverService {
4
- private endpoint;
5
- private specificOnboardingEndpoint;
6
- constructor(endpoint?: string);
4
+ private fetchImpl;
5
+ constructor(fetchImpl?: typeof fetch);
7
6
  fetchOnboardingJson(params: {
8
7
  context: ClientContext;
9
- appId: string;
8
+ apiToken: string;
10
9
  }): Promise<FlowboardData>;
11
10
  fetchOnboardingById(params: {
12
11
  onboardingId: string;
13
12
  locale: string;
13
+ apiToken: string;
14
+ version?: FlowboardFlowVersion;
14
15
  }): Promise<FlowboardData>;
16
+ private createHeaders;
17
+ private normalizeFlowIdentifier;
15
18
  private applyHeaderMetadata;
16
19
  }
17
20
  //# sourceMappingURL=resolverService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolverService.d.ts","sourceRoot":"","sources":["../../../../src/core/resolverService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,0BAA0B,CAAS;gBAE/B,QAAQ,CAAC,EAAE,MAAM;IAKvB,mBAAmB,CAAC,MAAM,EAAE;QAChC,OAAO,EAAE,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,aAAa,CAAC;IA4CpB,mBAAmB,CAAC,MAAM,EAAE;QAChC,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,aAAa,CAAC;IA8B1B,OAAO,CAAC,mBAAmB;CAY5B"}
1
+ {"version":3,"file":"resolverService.d.ts","sourceRoot":"","sources":["../../../../src/core/resolverService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAe;gBAEpB,SAAS,GAAE,OAAO,KAAa;IAIrC,mBAAmB,CAAC,MAAM,EAAE;QAChC,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCpB,mBAAmB,CAAC,MAAM,EAAE;QAChC,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,oBAAoB,CAAC;KAChC,GAAG,OAAO,CAAC,aAAa,CAAC;IA6B1B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -1,6 +1,6 @@
1
1
  export { Flowboard } from './Flowboard';
2
2
  export { default as FlowboardProvider } from './FlowboardProvider';
3
3
  export { default as FlowboardFlow } from './components/FlowboardFlow';
4
- export type { FlowboardContext, CustomScreenBuilder, CustomActionBuilder, OnboardingEndCallback, OnStepChangeCallback, FlowboardLaunchOptions, FlowboardLaunchByIdOptions, FlowboardData, } from './types/flowboard';
4
+ export type { FlowboardContext, CustomScreenBuilder, CustomActionBuilder, OnboardingEndCallback, OnStepChangeCallback, FlowboardLaunchOptions, FlowboardLaunchByIdOptions, FlowboardFlowVersion, FlowboardData, } from './types/flowboard';
5
5
  export type { FlowboardFlowProps } from './components/FlowboardFlow';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -9,6 +9,7 @@ export type FlowboardData = {
9
9
  bucket?: string;
10
10
  experiment_id?: string;
11
11
  } & JsonMap;
12
+ export type FlowboardFlowVersion = 'live' | 'draft';
12
13
  export type FlowboardContext = {
13
14
  context?: any;
14
15
  currentIndex: number;
@@ -35,5 +36,6 @@ export type FlowboardLaunchOptions = {
35
36
  };
36
37
  export type FlowboardLaunchByIdOptions = FlowboardLaunchOptions & {
37
38
  locale?: string;
39
+ version?: FlowboardFlowVersion;
38
40
  };
39
41
  //# sourceMappingURL=flowboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flowboard.d.ts","sourceRoot":"","sources":["../../../../src/types/flowboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,gBAAgB,EACrB,IAAI,CAAC,EAAE,OAAO,KACX,IAAI,CAAC;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,CACjC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,KACd,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,GAAG;IACnC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,sBAAsB,GAAG;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
1
+ {"version":3,"file":"flowboard.d.ts","sourceRoot":"","sources":["../../../../src/types/flowboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,gBAAgB,EACrB,IAAI,CAAC,EAAE,OAAO,KACX,IAAI,CAAC;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,CACjC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,KACd,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,GAAG;IACnC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,sBAAsB,GAAG;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flowboard-react",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Onboard your users with one click",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
package/src/Flowboard.ts CHANGED
@@ -19,8 +19,7 @@ export type LaunchPayload = {
19
19
  type LaunchListener = (payload: LaunchPayload) => void;
20
20
 
21
21
  export class Flowboard {
22
- private static appId: string | null = null;
23
- private static bundleId: string | null = null;
22
+ private static apiToken: string | null = null;
24
23
  private static debug = false;
25
24
  private static repository = new OnboardingRepository();
26
25
  private static service = new ResolverService();
@@ -33,18 +32,19 @@ export class Flowboard {
33
32
  }
34
33
 
35
34
  static async init(params: {
36
- appId: string;
37
- bundleId: string;
35
+ apiToken: string;
38
36
  debug?: boolean;
39
37
  enableAnalytics?: boolean;
40
38
  }): Promise<void> {
41
- Flowboard.appId = params.appId;
42
- Flowboard.bundleId = params.bundleId;
39
+ const apiToken = params.apiToken.trim();
40
+ if (!apiToken) {
41
+ throw new Error('apiToken must be a non-empty string');
42
+ }
43
+
44
+ Flowboard.apiToken = apiToken;
43
45
  Flowboard.debug = params.debug ?? false;
44
46
 
45
- Flowboard.log(
46
- `Initialized with appId: ${Flowboard.appId}, bundleId: ${Flowboard.bundleId}`
47
- );
47
+ Flowboard.log('Initialized with API token.');
48
48
 
49
49
  try {
50
50
  const clientContext = await ClientContext.create();
@@ -70,7 +70,7 @@ export class Flowboard {
70
70
  options: FlowboardLaunchOptions = {}
71
71
  ): Promise<void> {
72
72
  Flowboard.log('Attempting to launch onboarding...');
73
- if (!Flowboard.appId) {
73
+ if (!Flowboard.apiToken) {
74
74
  throw new Error(
75
75
  'Flowboard.init() must be called before launchOnboarding'
76
76
  );
@@ -117,7 +117,7 @@ export class Flowboard {
117
117
  options: FlowboardLaunchByIdOptions = {}
118
118
  ): Promise<void> {
119
119
  Flowboard.log(`Attempting to launch onboarding by id: ${onboardingId}`);
120
- if (!Flowboard.appId) {
120
+ if (!Flowboard.apiToken) {
121
121
  throw new Error(
122
122
  'Flowboard.init() must be called before launchOnboardingById'
123
123
  );
@@ -137,6 +137,8 @@ export class Flowboard {
137
137
  data = await Flowboard.service.fetchOnboardingById({
138
138
  onboardingId: normalizedOnboardingId,
139
139
  locale,
140
+ apiToken: Flowboard.apiToken,
141
+ version: options.version ?? 'live',
140
142
  });
141
143
  } catch (error) {
142
144
  Flowboard.log(`Failed to load onboarding by id: ${String(error)}`);
@@ -241,7 +243,7 @@ export class Flowboard {
241
243
 
242
244
  private static async fetchAndSave(): Promise<void> {
243
245
  const startTime = Date.now();
244
- if (!Flowboard.appId || !Flowboard.bundleId) {
246
+ if (!Flowboard.apiToken) {
245
247
  throw new Error(
246
248
  'Flowboard not initialized. Call Flowboard.init() first.'
247
249
  );
@@ -250,12 +252,12 @@ export class Flowboard {
250
252
  try {
251
253
  const context = await ClientContext.create();
252
254
  Flowboard.log(
253
- `Fetching onboarding JSON for installId: ${context.installId} | appId: ${Flowboard.appId} | bundleId: ${Flowboard.bundleId}`
255
+ `Fetching onboarding JSON for installId: ${context.installId} | bundleId: ${context.bundleId}`
254
256
  );
255
257
 
256
258
  const json = await Flowboard.service.fetchOnboardingJson({
257
259
  context,
258
- appId: Flowboard.appId,
260
+ apiToken: Flowboard.apiToken,
259
261
  });
260
262
 
261
263
  Flowboard.log('Fetch successful. Saving to cache.');
@@ -0,0 +1,59 @@
1
+ const DEFAULT_API_BASE_URL = 'api.flow-board.co';
2
+ const DEFAULT_API_VERSION = 'v0';
3
+
4
+ function trimTrailingSlashes(value: string): string {
5
+ return value.replace(/\/+$/, '');
6
+ }
7
+
8
+ function trimSurroundingSlashes(value: string): string {
9
+ return value.replace(/^\/+|\/+$/g, '');
10
+ }
11
+
12
+ function normalizeApiBaseUrl(value: string): string {
13
+ const trimmed = trimTrailingSlashes(String(value || '').trim());
14
+ if (!trimmed) {
15
+ throw new Error('Flowboard API base URL must be a non-empty string.');
16
+ }
17
+
18
+ if (/^https?:\/\//i.test(trimmed)) {
19
+ return trimmed;
20
+ }
21
+
22
+ return `https://${trimmed}`;
23
+ }
24
+
25
+ function normalizeApiVersion(value: string): string {
26
+ const trimmed = trimSurroundingSlashes(String(value || '').trim());
27
+ if (!trimmed) {
28
+ throw new Error('Flowboard API version must be a non-empty string.');
29
+ }
30
+
31
+ return `/${trimmed}`;
32
+ }
33
+
34
+ export function getFlowboardApiBaseUrl(): string {
35
+ return normalizeApiBaseUrl(DEFAULT_API_BASE_URL);
36
+ }
37
+
38
+ export function getFlowboardApiVersion(): string {
39
+ return normalizeApiVersion(DEFAULT_API_VERSION);
40
+ }
41
+
42
+ export function getFlowboardRuntimeBaseUrl(): string {
43
+ return `${getFlowboardApiBaseUrl()}${getFlowboardApiVersion()}`;
44
+ }
45
+
46
+ export function getResolveFlowUrl(): string {
47
+ return `${getFlowboardRuntimeBaseUrl()}/flows`;
48
+ }
49
+
50
+ export function getFlowByIdUrl(flowId: string): string {
51
+ const normalizedFlowId = String(flowId || '').trim();
52
+ if (!normalizedFlowId) {
53
+ throw new Error('flowId must be a non-empty string.');
54
+ }
55
+
56
+ return `${getFlowboardRuntimeBaseUrl()}/flows/${encodeURIComponent(
57
+ normalizedFlowId
58
+ )}`;
59
+ }
@@ -1,48 +1,31 @@
1
1
  import type { ClientContext } from './clientContext';
2
- import type { FlowboardData } from '../types/flowboard';
3
-
4
- const DEFAULT_ENDPOINT = 'https://test-638704832888.europe-west1.run.app';
5
- const SPECIFIC_ONBOARDING_ENDPOINT =
6
- 'https://onboardsolo-638704832888.europe-west1.run.app';
2
+ import type { FlowboardData, FlowboardFlowVersion } from '../types/flowboard';
3
+ import { getFlowByIdUrl, getResolveFlowUrl } from './apiConfig';
7
4
 
8
5
  export class ResolverService {
9
- private endpoint: string;
10
- private specificOnboardingEndpoint: string;
6
+ private fetchImpl: typeof fetch;
11
7
 
12
- constructor(endpoint?: string) {
13
- this.endpoint = endpoint ?? DEFAULT_ENDPOINT;
14
- this.specificOnboardingEndpoint = SPECIFIC_ONBOARDING_ENDPOINT;
8
+ constructor(fetchImpl: typeof fetch = fetch) {
9
+ this.fetchImpl = fetchImpl;
15
10
  }
16
11
 
17
12
  async fetchOnboardingJson(params: {
18
13
  context: ClientContext;
19
- appId: string;
14
+ apiToken: string;
20
15
  }): Promise<FlowboardData> {
21
- const { context, appId } = params;
22
- const payload = context.toJson();
23
- payload.appId = appId;
24
- payload.installId = context.installId;
25
- payload.bundleId = context.bundleId;
26
-
27
- payload.appVersion = context.appVersion;
28
- payload.buildNumber = context.buildNumber;
29
- payload.os = context.os;
30
- payload.osVersion = context.osVersion;
31
- payload.deviceType = context.deviceType;
32
- payload.locale = context.locale;
33
- payload.country = context.country;
34
-
35
- payload.sdk = {
36
- name: 'flowboard',
37
- version: '1.0.0',
38
- };
16
+ const { context, apiToken } = params;
17
+ const url = new URL(getResolveFlowUrl());
18
+ url.searchParams.set('installId', context.installId);
19
+ url.searchParams.set('appVersion', context.appVersion);
20
+ url.searchParams.set('locale', context.locale);
21
+ url.searchParams.set('country', context.country);
22
+ url.searchParams.set('os', context.os);
39
23
 
40
24
  let response: Response;
41
25
  try {
42
- response = await fetch(this.endpoint, {
43
- method: 'POST',
44
- headers: { 'Content-Type': 'application/json' },
45
- body: JSON.stringify(payload),
26
+ response = await this.fetchImpl(url.toString(), {
27
+ method: 'GET',
28
+ headers: this.createHeaders(apiToken),
46
29
  });
47
30
  } catch (error) {
48
31
  throw new Error(`Failed to connect to resolver: ${String(error)}`);
@@ -56,6 +39,7 @@ export class ResolverService {
56
39
  }
57
40
 
58
41
  const body = (await response.json()) as FlowboardData;
42
+ this.normalizeFlowIdentifier(body);
59
43
  this.applyHeaderMetadata(response, body);
60
44
 
61
45
  return body;
@@ -64,18 +48,18 @@ export class ResolverService {
64
48
  async fetchOnboardingById(params: {
65
49
  onboardingId: string;
66
50
  locale: string;
51
+ apiToken: string;
52
+ version?: FlowboardFlowVersion;
67
53
  }): Promise<FlowboardData> {
68
- const payload = {
69
- onboardingId: params.onboardingId,
70
- locale: params.locale,
71
- };
54
+ const url = new URL(getFlowByIdUrl(params.onboardingId));
55
+ url.searchParams.set('locale', params.locale);
56
+ url.searchParams.set('version', params.version ?? 'live');
72
57
 
73
58
  let response: Response;
74
59
  try {
75
- response = await fetch(this.specificOnboardingEndpoint, {
76
- method: 'POST',
77
- headers: { 'Content-Type': 'application/json' },
78
- body: JSON.stringify(payload),
60
+ response = await this.fetchImpl(url.toString(), {
61
+ method: 'GET',
62
+ headers: this.createHeaders(params.apiToken),
79
63
  });
80
64
  } catch (error) {
81
65
  throw new Error(`Failed to connect to resolver: ${String(error)}`);
@@ -89,11 +73,26 @@ export class ResolverService {
89
73
  }
90
74
 
91
75
  const body = (await response.json()) as FlowboardData;
76
+ this.normalizeFlowIdentifier(body);
92
77
  this.applyHeaderMetadata(response, body);
93
78
 
94
79
  return body;
95
80
  }
96
81
 
82
+ private createHeaders(apiToken: string): Record<string, string> {
83
+ return {
84
+ Accept: '*/*',
85
+ Authorization: `Bearer ${apiToken}`,
86
+ };
87
+ }
88
+
89
+ private normalizeFlowIdentifier(body: FlowboardData): void {
90
+ const legacyFlowId = (body as FlowboardData & { flowId?: unknown }).flowId;
91
+ if (!body.flow_id && typeof legacyFlowId === 'string' && legacyFlowId) {
92
+ body.flow_id = legacyFlowId;
93
+ }
94
+ }
95
+
97
96
  private applyHeaderMetadata(response: Response, body: FlowboardData): void {
98
97
  const flowId = response.headers.get('x-flowboard-flow-id');
99
98
  if (flowId) body.flow_id = flowId;
package/src/index.tsx CHANGED
@@ -9,6 +9,7 @@ export type {
9
9
  OnStepChangeCallback,
10
10
  FlowboardLaunchOptions,
11
11
  FlowboardLaunchByIdOptions,
12
+ FlowboardFlowVersion,
12
13
  FlowboardData,
13
14
  } from './types/flowboard';
14
15
  export type { FlowboardFlowProps } from './components/FlowboardFlow';
@@ -13,6 +13,8 @@ export type FlowboardData = {
13
13
  experiment_id?: string;
14
14
  } & JsonMap;
15
15
 
16
+ export type FlowboardFlowVersion = 'live' | 'draft';
17
+
16
18
  export type FlowboardContext = {
17
19
  context?: any;
18
20
  currentIndex: number;
@@ -53,4 +55,5 @@ export type FlowboardLaunchOptions = {
53
55
 
54
56
  export type FlowboardLaunchByIdOptions = FlowboardLaunchOptions & {
55
57
  locale?: string;
58
+ version?: FlowboardFlowVersion;
56
59
  };