flowboard-react 0.3.0 → 0.4.0

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
@@ -74,6 +74,17 @@ await Flowboard.launchOnboarding({
74
74
  });
75
75
  ```
76
76
 
77
+ Launch a specific onboarding by ID (without replacing default cached onboarding used by `launchOnboarding`):
78
+
79
+ ```tsx
80
+ await Flowboard.launchOnboardingById('YOUR_ONBOARDING_ID', {
81
+ locale: 'fr_FR',
82
+ onOnboardEnd: (formData) => {
83
+ console.log('Specific flow completed:', formData);
84
+ },
85
+ });
86
+ ```
87
+
77
88
  Re-initialize:
78
89
 
79
90
  ```tsx
@@ -84,6 +95,7 @@ await Flowboard.reinit();
84
95
 
85
96
  - `Flowboard.init({ appId, bundleId, debug, enableAnalytics })`
86
97
  - `Flowboard.launchOnboarding({ customScreenBuilder, customActionBuilder, onOnboardEnd, onStepChange, enableAnalytics, alwaysRestart, resumeProgress })`
98
+ - `Flowboard.launchOnboardingById(onboardingId, { locale, customScreenBuilder, customActionBuilder, onOnboardEnd, onStepChange, enableAnalytics, alwaysRestart, resumeProgress })`
87
99
  - `Flowboard.reinit()`
88
100
  - `FlowboardProvider` (required to host modal flow)
89
101
 
@@ -44,15 +44,7 @@ export class Flowboard {
44
44
  if (!Flowboard.appId) {
45
45
  throw new Error('Flowboard.init() must be called before launchOnboarding');
46
46
  }
47
- try {
48
- const context = AnalyticsManager.instance.clientContextSnapshot ?? (await ClientContext.create());
49
- AnalyticsManager.instance.configure({
50
- enabled: options.enableAnalytics ?? true,
51
- context
52
- });
53
- } catch (error) {
54
- Flowboard.log(`Failed to configure analytics for launch: ${String(error)}`);
55
- }
47
+ await Flowboard.configureAnalyticsForLaunch(options.enableAnalytics);
56
48
  let data = await Flowboard.repository.getOnboardingJson();
57
49
  if (!data) {
58
50
  Flowboard.log('Data not in cache. Waiting for initialization...');
@@ -80,6 +72,33 @@ export class Flowboard {
80
72
  Flowboard.log('Failed to launch: Data is null.');
81
73
  return;
82
74
  }
75
+ await Flowboard.launchResolvedOnboarding(data, options);
76
+ }
77
+ static async launchOnboardingById(onboardingId, options = {}) {
78
+ Flowboard.log(`Attempting to launch onboarding by id: ${onboardingId}`);
79
+ if (!Flowboard.appId) {
80
+ throw new Error('Flowboard.init() must be called before launchOnboardingById');
81
+ }
82
+ const normalizedOnboardingId = onboardingId.trim();
83
+ if (!normalizedOnboardingId) {
84
+ throw new Error('onboardingId must be a non-empty string');
85
+ }
86
+ await Flowboard.configureAnalyticsForLaunch(options.enableAnalytics);
87
+ const locale = await Flowboard.resolveLocale(options.locale);
88
+ let data;
89
+ try {
90
+ data = await Flowboard.service.fetchOnboardingById({
91
+ onboardingId: normalizedOnboardingId,
92
+ locale
93
+ });
94
+ } catch (error) {
95
+ Flowboard.log(`Failed to load onboarding by id: ${String(error)}`);
96
+ Alert.alert('Failed to load onboarding', String(error));
97
+ return;
98
+ }
99
+ await Flowboard.launchResolvedOnboarding(data, options);
100
+ }
101
+ static async launchResolvedOnboarding(data, options) {
83
102
  const shouldResumeProgress = options.resumeProgress === true && options.alwaysRestart !== true;
84
103
  if (options.alwaysRestart || !shouldResumeProgress) {
85
104
  await Flowboard.repository.clearProgress();
@@ -113,6 +132,25 @@ export class Flowboard {
113
132
  initialFormData
114
133
  });
115
134
  }
135
+ static async configureAnalyticsForLaunch(enableAnalytics) {
136
+ try {
137
+ const context = AnalyticsManager.instance.clientContextSnapshot ?? (await ClientContext.create());
138
+ AnalyticsManager.instance.configure({
139
+ enabled: enableAnalytics ?? true,
140
+ context
141
+ });
142
+ } catch (error) {
143
+ Flowboard.log(`Failed to configure analytics for launch: ${String(error)}`);
144
+ }
145
+ }
146
+ static async resolveLocale(requestedLocale) {
147
+ const normalized = requestedLocale?.trim();
148
+ if (normalized) {
149
+ return normalized;
150
+ }
151
+ const context = AnalyticsManager.instance.clientContextSnapshot ?? (await ClientContext.create());
152
+ return context.locale || 'en_US';
153
+ }
116
154
  static async initialize() {
117
155
  Flowboard.log('Checking local cache...');
118
156
  const cached = await Flowboard.repository.getOnboardingJson();
@@ -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","clientContextSnapshot","data","getOnboardingJson","alert","shouldResumeProgress","resumeProgress","alwaysRestart","clearProgress","initialStep","initialFormData","flowId","flow_id","savedStep","getProgressStepForFlow","savedFormData","getProgressFormDataForFlow","undefined","screens","Array","isArray","length","maxIndex","Object","keys","emitLaunch","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","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":";;AAAA,SAASA,KAAK,QAAQ,cAAc;AACpC,SAASC,aAAa,QAAQ,yBAAsB;AACpD,SAASC,eAAe,QAAQ,2BAAwB;AACxD,SAASC,oBAAoB,QAAQ,gCAA6B;AAClE,SAASC,gBAAgB,QAAQ,4BAAyB;AAgB1D,OAAO,MAAMC,SAAS,CAAC;EACrB,OAAeC,KAAK,GAAkB,IAAI;EAC1C,OAAeC,QAAQ,GAAkB,IAAI;EAC7C,OAAeC,KAAK,GAAG,KAAK;EAC5B,OAAeC,UAAU,GAAG,IAAIN,oBAAoB,CAAC,CAAC;EACtD,OAAeO,OAAO,GAAG,IAAIR,eAAe,CAAC,CAAC;EAC9C,OAAeS,WAAW,GAAyB,IAAI;EACvD,OAAeC,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAEpD,OAAOC,SAASA,CAACC,QAAwB,EAAc;IACrDV,SAAS,CAACO,SAAS,CAACI,GAAG,CAACD,QAAQ,CAAC;IACjC,OAAO,MAAMV,SAAS,CAACO,SAAS,CAACK,MAAM,CAACF,QAAQ,CAAC;EACnD;EAEA,aAAaG,IAAIA,CAACC,MAKjB,EAAiB;IAChBd,SAAS,CAACC,KAAK,GAAGa,MAAM,CAACb,KAAK;IAC9BD,SAAS,CAACE,QAAQ,GAAGY,MAAM,CAACZ,QAAQ;IACpCF,SAAS,CAACG,KAAK,GAAGW,MAAM,CAACX,KAAK,IAAI,KAAK;IAEvCH,SAAS,CAACe,GAAG,CACX,2BAA2Bf,SAAS,CAACC,KAAK,eAAeD,SAAS,CAACE,QAAQ,EAC7E,CAAC;IAED,IAAI;MACF,MAAMc,aAAa,GAAG,MAAMpB,aAAa,CAACqB,MAAM,CAAC,CAAC;MAClDlB,gBAAgB,CAACmB,QAAQ,CAACC,SAAS,CAAC;QAClCC,OAAO,EAAEN,MAAM,CAACO,eAAe,IAAI,IAAI;QACvCC,OAAO,EAAEN;MACX,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOO,KAAK,EAAE;MACdvB,SAAS,CAACe,GAAG,CAAC,kCAAkCS,MAAM,CAACD,KAAK,CAAC,EAAE,CAAC;IAClE;IAEAvB,SAAS,CAACM,WAAW,GAAGN,SAAS,CAACyB,UAAU,CAAC,CAAC;EAChD;EAEA,aAAaC,MAAMA,CAAA,EAAkB;IACnC1B,SAAS,CAACe,GAAG,CAAC,oCAAoC,CAAC;IACnD,MAAMf,SAAS,CAAC2B,gBAAgB,CAAC,CAAC;IAClC3B,SAAS,CAACM,WAAW,GAAGN,SAAS,CAAC4B,YAAY,CAAC,CAAC;IAChD,MAAM5B,SAAS,CAACM,WAAW;EAC7B;EAEA,aAAauB,gBAAgBA,CAC3BC,OAA+B,GAAG,CAAC,CAAC,EACrB;IACf9B,SAAS,CAACe,GAAG,CAAC,oCAAoC,CAAC;IACnD,IAAI,CAACf,SAAS,CAACC,KAAK,EAAE;MACpB,MAAM,IAAI8B,KAAK,CACb,yDACF,CAAC;IACH;IAEA,MAAM/B,SAAS,CAACgC,2BAA2B,CAACF,OAAO,CAACT,eAAe,CAAC;IAEpE,IAAIY,IAAI,GAAG,MAAMjC,SAAS,CAACI,UAAU,CAAC8B,iBAAiB,CAAC,CAAC;IAEzD,IAAI,CAACD,IAAI,EAAE;MACTjC,SAAS,CAACe,GAAG,CAAC,kDAAkD,CAAC;MACjE,IAAIf,SAAS,CAACM,WAAW,EAAE;QACzB,IAAI;UACF,MAAMN,SAAS,CAACM,WAAW;QAC7B,CAAC,CAAC,OAAOiB,KAAK,EAAE;UACdvB,SAAS,CAACe,GAAG,CAAC,sCAAsCS,MAAM,CAACD,KAAK,CAAC,EAAE,CAAC;QACtE;MACF;MACAU,IAAI,GAAG,MAAMjC,SAAS,CAACI,UAAU,CAAC8B,iBAAiB,CAAC,CAAC;MAErD,IAAI,CAACD,IAAI,EAAE;QACTjC,SAAS,CAACe,GAAG,CAAC,+CAA+C,CAAC;QAC9D,IAAI;UACF,MAAMf,SAAS,CAAC4B,YAAY,CAAC,CAAC;UAC9BK,IAAI,GAAG,MAAMjC,SAAS,CAACI,UAAU,CAAC8B,iBAAiB,CAAC,CAAC;QACvD,CAAC,CAAC,OAAOX,KAAK,EAAE;UACdvB,SAAS,CAACe,GAAG,CAAC,uBAAuBS,MAAM,CAACD,KAAK,CAAC,EAAE,CAAC;UACrD5B,KAAK,CAACwC,KAAK,CAAC,2BAA2B,EAAEX,MAAM,CAACD,KAAK,CAAC,CAAC;UACvD;QACF;MACF;IACF;IAEA,IAAI,CAACU,IAAI,EAAE;MACTjC,SAAS,CAACe,GAAG,CAAC,iCAAiC,CAAC;MAChD;IACF;IAEA,MAAMf,SAAS,CAACoC,wBAAwB,CAACH,IAAI,EAAEH,OAAO,CAAC;EACzD;EAEA,aAAaO,oBAAoBA,CAC/BC,YAAoB,EACpBR,OAAmC,GAAG,CAAC,CAAC,EACzB;IACf9B,SAAS,CAACe,GAAG,CAAC,0CAA0CuB,YAAY,EAAE,CAAC;IACvE,IAAI,CAACtC,SAAS,CAACC,KAAK,EAAE;MACpB,MAAM,IAAI8B,KAAK,CACb,6DACF,CAAC;IACH;IAEA,MAAMQ,sBAAsB,GAAGD,YAAY,CAACE,IAAI,CAAC,CAAC;IAClD,IAAI,CAACD,sBAAsB,EAAE;MAC3B,MAAM,IAAIR,KAAK,CAAC,yCAAyC,CAAC;IAC5D;IAEA,MAAM/B,SAAS,CAACgC,2BAA2B,CAACF,OAAO,CAACT,eAAe,CAAC;IAEpE,MAAMoB,MAAM,GAAG,MAAMzC,SAAS,CAAC0C,aAAa,CAACZ,OAAO,CAACW,MAAM,CAAC;IAE5D,IAAIR,IAAmB;IACvB,IAAI;MACFA,IAAI,GAAG,MAAMjC,SAAS,CAACK,OAAO,CAACsC,mBAAmB,CAAC;QACjDL,YAAY,EAAEC,sBAAsB;QACpCE;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOlB,KAAK,EAAE;MACdvB,SAAS,CAACe,GAAG,CAAC,oCAAoCS,MAAM,CAACD,KAAK,CAAC,EAAE,CAAC;MAClE5B,KAAK,CAACwC,KAAK,CAAC,2BAA2B,EAAEX,MAAM,CAACD,KAAK,CAAC,CAAC;MACvD;IACF;IAEA,MAAMvB,SAAS,CAACoC,wBAAwB,CAACH,IAAI,EAAEH,OAAO,CAAC;EACzD;EAEA,aAAqBM,wBAAwBA,CAC3CH,IAAmB,EACnBH,OAA+B,EAChB;IACf,MAAMc,oBAAoB,GACxBd,OAAO,CAACe,cAAc,KAAK,IAAI,IAAIf,OAAO,CAACgB,aAAa,KAAK,IAAI;IAEnE,IAAIhB,OAAO,CAACgB,aAAa,IAAI,CAACF,oBAAoB,EAAE;MAClD,MAAM5C,SAAS,CAACI,UAAU,CAAC2C,aAAa,CAAC,CAAC;IAC5C;IAEA,IAAIC,WAAW,GAAG,CAAC;IACnB,IAAIC,eAAoC,GAAG,CAAC,CAAC;IAE7C,IAAIL,oBAAoB,EAAE;MACxB,MAAMM,MAAM,GAAGjB,IAAI,CAACkB,OAA6B;MACjD,IAAID,MAAM,EAAE;QACV,MAAME,SAAS,GAAG,MAAMpD,SAAS,CAACI,UAAU,CAACiD,sBAAsB,CACjEH,MACF,CAAC;QACD,MAAMI,aAAa,GACjB,MAAMtD,SAAS,CAACI,UAAU,CAACmD,0BAA0B,CAACL,MAAM,CAAC;QAC/D,IAAIE,SAAS,KAAK,IAAI,IAAIA,SAAS,KAAKI,SAAS,EAAE;UACjD,MAAMC,OAAO,GAAGC,KAAK,CAACC,OAAO,CAAC1B,IAAI,CAACwB,OAAO,CAAC,GAAGxB,IAAI,CAACwB,OAAO,GAAG,EAAE;UAC/D,IAAIA,OAAO,CAACG,MAAM,GAAG,CAAC,EAAE;YACtB,MAAMC,QAAQ,GAAGJ,OAAO,CAACG,MAAM,GAAG,CAAC;YACnC,IAAIR,SAAS,IAAI,CAAC,EAAEJ,WAAW,GAAG,CAAC,CAAC,KAC/B,IAAII,SAAS,IAAIK,OAAO,CAACG,MAAM,EAAEZ,WAAW,GAAGa,QAAQ,CAAC,KACxDb,WAAW,GAAGI,SAAS;UAC9B;QACF;QACA,IAAIE,aAAa,IAAIQ,MAAM,CAACC,IAAI,CAACT,aAAa,CAAC,CAACM,MAAM,GAAG,CAAC,EAAE;UAC1DX,eAAe,GAAG;YAAE,GAAGK;UAAc,CAAC;QACxC;MACF;IACF;IAEAtD,SAAS,CAACe,GAAG,CAAC,8BAA8BkB,IAAI,CAACkB,OAAO,IAAI,EAAE,EAAE,CAAC;IACjEnD,SAAS,CAACgE,UAAU,CAAC;MACnB/B,IAAI;MACJH,OAAO;MACPkB,WAAW;MACXC;IACF,CAAC,CAAC;EACJ;EAEA,aAAqBjB,2BAA2BA,CAC9CX,eAAoC,EACrB;IACf,IAAI;MACF,MAAMC,OAAO,GACXvB,gBAAgB,CAACmB,QAAQ,CAAC+C,qBAAqB,KAC9C,MAAMrE,aAAa,CAACqB,MAAM,CAAC,CAAC,CAAC;MAChClB,gBAAgB,CAACmB,QAAQ,CAACC,SAAS,CAAC;QAClCC,OAAO,EAAEC,eAAe,IAAI,IAAI;QAChCC;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdvB,SAAS,CAACe,GAAG,CACX,6CAA6CS,MAAM,CAACD,KAAK,CAAC,EAC5D,CAAC;IACH;EACF;EAEA,aAAqBmB,aAAaA,CAChCwB,eAAmC,EAClB;IACjB,MAAMC,UAAU,GAAGD,eAAe,EAAE1B,IAAI,CAAC,CAAC;IAC1C,IAAI2B,UAAU,EAAE;MACd,OAAOA,UAAU;IACnB;IAEA,MAAM7C,OAAO,GACXvB,gBAAgB,CAACmB,QAAQ,CAAC+C,qBAAqB,KAC9C,MAAMrE,aAAa,CAACqB,MAAM,CAAC,CAAC,CAAC;IAEhC,OAAOK,OAAO,CAACmB,MAAM,IAAI,OAAO;EAClC;EAEA,aAAqBhB,UAAUA,CAAA,EAAkB;IAC/CzB,SAAS,CAACe,GAAG,CAAC,yBAAyB,CAAC;IACxC,MAAMqD,MAAM,GAAG,MAAMpE,SAAS,CAACI,UAAU,CAAC8B,iBAAiB,CAAC,CAAC;IAC7D,IAAIkC,MAAM,EAAE;MACVpE,SAAS,CAACe,GAAG,CAAC,iCAAiC,CAAC;MAChDhB,gBAAgB,CAACmB,QAAQ,CAACmD,YAAY,CAAC;QAAEC,QAAQ,EAAEF;MAAO,CAAC,CAAC;MAC5D;IACF;IAEApE,SAAS,CAACe,GAAG,CAAC,+CAA+C,CAAC;IAC9D,MAAMf,SAAS,CAAC4B,YAAY,CAAC,CAAC;EAChC;EAEA,aAAqBA,YAAYA,CAAA,EAAkB;IACjD,MAAM2C,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAACzE,SAAS,CAACC,KAAK,IAAI,CAACD,SAAS,CAACE,QAAQ,EAAE;MAC3C,MAAM,IAAI6B,KAAK,CACb,yDACF,CAAC;IACH;IAEA,IAAI;MACF,MAAMT,OAAO,GAAG,MAAM1B,aAAa,CAACqB,MAAM,CAAC,CAAC;MAC5CjB,SAAS,CAACe,GAAG,CACX,2CAA2CO,OAAO,CAACoD,SAAS,aAAa1E,SAAS,CAACC,KAAK,gBAAgBD,SAAS,CAACE,QAAQ,EAC5H,CAAC;MAED,MAAMyE,IAAI,GAAG,MAAM3E,SAAS,CAACK,OAAO,CAACuE,mBAAmB,CAAC;QACvDtD,OAAO;QACPrB,KAAK,EAAED,SAAS,CAACC;MACnB,CAAC,CAAC;MAEFD,SAAS,CAACe,GAAG,CAAC,oCAAoC,CAAC;MACnD,MAAMf,SAAS,CAACI,UAAU,CAACyE,kBAAkB,CAACF,IAAI,CAAC;MAEnD5E,gBAAgB,CAACmB,QAAQ,CAACmD,YAAY,CAAC;QAAEC,QAAQ,EAAEK;MAAK,CAAC,CAAC;MAE1D,MAAMG,QAAQ,GAAGN,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,SAAS;MACvCxE,gBAAgB,CAACmB,QAAQ,CAAC6D,kBAAkB,CAAC;QAC3CC,UAAU,EAAEF,QAAQ;QACpBV,MAAM,EAAE;MACV,CAAC,CAAC;IACJ,CAAC,CAAC,OAAO7C,KAAK,EAAE;MACdvB,SAAS,CAACe,GAAG,CAAC,mCAAmCS,MAAM,CAACD,KAAK,CAAC,EAAE,CAAC;MACjE,MAAMA,KAAK;IACb;EACF;EAEA,aAAqBI,gBAAgBA,CAAA,EAAkB;IACrD,MAAMsD,OAAO,CAACC,GAAG,CAAC,CAChBlF,SAAS,CAACI,UAAU,CAAC2C,aAAa,CAAC,CAAC,EACpC/C,SAAS,CAACI,UAAU,CAAC+E,mBAAmB,CAAC,CAAC,CAC3C,CAAC;EACJ;EAEA,OAAenB,UAAUA,CAACoB,OAAsB,EAAQ;IACtDpF,SAAS,CAACO,SAAS,CAAC8E,OAAO,CAAE3E,QAAQ,IAAKA,QAAQ,CAAC0E,OAAO,CAAC,CAAC;EAC9D;EAEA,OAAerE,GAAGA,CAACuE,OAAe,EAAQ;IACxC,IAAItF,SAAS,CAACG,KAAK,EAAE;MACnBoF,OAAO,CAACxE,GAAG,CAAC,yBAAyBuE,OAAO,EAAE,CAAC;IACjD;EACF;AACF","ignoreList":[]}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  const DEFAULT_ENDPOINT = 'https://test-638704832888.europe-west1.run.app';
4
+ const SPECIFIC_ONBOARDING_ENDPOINT = 'https://onboardsolo-638704832888.europe-west1.run.app';
4
5
  export class ResolverService {
5
6
  constructor(endpoint) {
6
7
  this.endpoint = endpoint ?? DEFAULT_ENDPOINT;
8
+ this.specificOnboardingEndpoint = SPECIFIC_ONBOARDING_ENDPOINT;
7
9
  }
8
10
  async fetchOnboardingJson(params) {
9
11
  const {
@@ -42,6 +44,35 @@ export class ResolverService {
42
44
  throw new Error(`Failed to load onboarding config: ${response.status} ${body}`);
43
45
  }
44
46
  const body = await response.json();
47
+ this.applyHeaderMetadata(response, body);
48
+ return body;
49
+ }
50
+ async fetchOnboardingById(params) {
51
+ const payload = {
52
+ onboardingId: params.onboardingId,
53
+ locale: params.locale
54
+ };
55
+ let response;
56
+ try {
57
+ response = await fetch(this.specificOnboardingEndpoint, {
58
+ method: 'POST',
59
+ headers: {
60
+ 'Content-Type': 'application/json'
61
+ },
62
+ body: JSON.stringify(payload)
63
+ });
64
+ } catch (error) {
65
+ throw new Error(`Failed to connect to resolver: ${String(error)}`);
66
+ }
67
+ if (!response.ok) {
68
+ const body = await response.text();
69
+ throw new Error(`Failed to load onboarding config: ${response.status} ${body}`);
70
+ }
71
+ const body = await response.json();
72
+ this.applyHeaderMetadata(response, body);
73
+ return body;
74
+ }
75
+ applyHeaderMetadata(response, body) {
45
76
  const flowId = response.headers.get('x-flowboard-flow-id');
46
77
  if (flowId) body.flow_id = flowId;
47
78
  const variantId = response.headers.get('x-flowboard-variant-id');
@@ -52,7 +83,6 @@ export class ResolverService {
52
83
  if (bucket) body.bucket = bucket;
53
84
  const experimentId = response.headers.get('x-flowboard-experiment-id');
54
85
  if (experimentId) body.experiment_id = experimentId;
55
- return body;
56
86
  }
57
87
  }
58
88
  //# sourceMappingURL=resolverService.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_ENDPOINT","ResolverService","constructor","endpoint","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","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;AAEzE,OAAO,MAAMC,eAAe,CAAC;EAG3BC,WAAWA,CAACC,QAAiB,EAAE;IAC7B,IAAI,CAACA,QAAQ,GAAGA,QAAQ,IAAIH,gBAAgB;EAC9C;EAEA,MAAMI,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,CAACpB,QAAQ,EAAE;QACpCqB,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;IAErD,MAAMC,MAAM,GAAGd,QAAQ,CAACG,OAAO,CAACY,GAAG,CAAC,qBAAqB,CAAC;IAC1D,IAAID,MAAM,EAAEV,IAAI,CAACY,OAAO,GAAGF,MAAM;IACjC,MAAMG,SAAS,GAAGjB,QAAQ,CAACG,OAAO,CAACY,GAAG,CAAC,wBAAwB,CAAC;IAChE,IAAIE,SAAS,EAAEb,IAAI,CAACc,UAAU,GAAGD,SAAS;IAC1C,MAAME,UAAU,GAAGnB,QAAQ,CAACG,OAAO,CAACY,GAAG,CAAC,yBAAyB,CAAC;IAClE,IAAII,UAAU,EAAEf,IAAI,CAACgB,WAAW,GAAGD,UAAU;IAC7C,MAAME,MAAM,GAAGrB,QAAQ,CAACG,OAAO,CAACY,GAAG,CAAC,oBAAoB,CAAC;IACzD,IAAIM,MAAM,EAAEjB,IAAI,CAACiB,MAAM,GAAGA,MAAM;IAChC,MAAMC,YAAY,GAAGtB,QAAQ,CAACG,OAAO,CAACY,GAAG,CAAC,2BAA2B,CAAC;IACtE,IAAIO,YAAY,EAAElB,IAAI,CAACmB,aAAa,GAAGD,YAAY;IAEnD,OAAOlB,IAAI;EACb;AACF","ignoreList":[]}
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":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { FlowboardData, FlowboardLaunchOptions } from './types/flowboard';
1
+ import type { FlowboardData, FlowboardLaunchByIdOptions, FlowboardLaunchOptions } from './types/flowboard';
2
2
  export type LaunchPayload = {
3
3
  data: FlowboardData;
4
4
  options: FlowboardLaunchOptions;
@@ -23,6 +23,10 @@ export declare class Flowboard {
23
23
  }): Promise<void>;
24
24
  static reinit(): Promise<void>;
25
25
  static launchOnboarding(options?: FlowboardLaunchOptions): Promise<void>;
26
+ static launchOnboardingById(onboardingId: string, options?: FlowboardLaunchByIdOptions): Promise<void>;
27
+ private static launchResolvedOnboarding;
28
+ private static configureAnalyticsForLaunch;
29
+ private static resolveLocale;
26
30
  private static initialize;
27
31
  private static fetchAndSave;
28
32
  private static clearLocalCaches;
@@ -1 +1 @@
1
- {"version":3,"file":"Flowboard.d.ts","sourceRoot":"","sources":["../../../src/Flowboard.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,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;mBA+FK,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,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"}
@@ -2,10 +2,16 @@ import type { ClientContext } from './clientContext';
2
2
  import type { FlowboardData } from '../types/flowboard';
3
3
  export declare class ResolverService {
4
4
  private endpoint;
5
+ private specificOnboardingEndpoint;
5
6
  constructor(endpoint?: string);
6
7
  fetchOnboardingJson(params: {
7
8
  context: ClientContext;
8
9
  appId: string;
9
10
  }): Promise<FlowboardData>;
11
+ fetchOnboardingById(params: {
12
+ onboardingId: string;
13
+ locale: string;
14
+ }): Promise<FlowboardData>;
15
+ private applyHeaderMetadata;
10
16
  }
11
17
  //# 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;AAIxD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAIvB,mBAAmB,CAAC,MAAM,EAAE;QAChC,OAAO,EAAE,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,aAAa,CAAC;CAqD3B"}
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,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, FlowboardData, } from './types/flowboard';
4
+ export type { FlowboardContext, CustomScreenBuilder, CustomActionBuilder, OnboardingEndCallback, OnStepChangeCallback, FlowboardLaunchOptions, FlowboardLaunchByIdOptions, 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,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,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -32,4 +32,7 @@ export type FlowboardLaunchOptions = {
32
32
  alwaysRestart?: boolean;
33
33
  resumeProgress?: boolean;
34
34
  };
35
+ export type FlowboardLaunchByIdOptions = FlowboardLaunchOptions & {
36
+ locale?: string;
37
+ };
35
38
  //# 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;CACtB,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"}
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;CACtB,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flowboard-react",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
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
@@ -3,7 +3,11 @@ import { ClientContext } from './core/clientContext';
3
3
  import { ResolverService } from './core/resolverService';
4
4
  import { OnboardingRepository } from './core/onboardingRepository';
5
5
  import { AnalyticsManager } from './core/analyticsManager';
6
- import type { FlowboardData, FlowboardLaunchOptions } from './types/flowboard';
6
+ import type {
7
+ FlowboardData,
8
+ FlowboardLaunchByIdOptions,
9
+ FlowboardLaunchOptions,
10
+ } from './types/flowboard';
7
11
 
8
12
  export type LaunchPayload = {
9
13
  data: FlowboardData;
@@ -72,19 +76,7 @@ export class Flowboard {
72
76
  );
73
77
  }
74
78
 
75
- try {
76
- const context =
77
- AnalyticsManager.instance.clientContextSnapshot ??
78
- (await ClientContext.create());
79
- AnalyticsManager.instance.configure({
80
- enabled: options.enableAnalytics ?? true,
81
- context,
82
- });
83
- } catch (error) {
84
- Flowboard.log(
85
- `Failed to configure analytics for launch: ${String(error)}`
86
- );
87
- }
79
+ await Flowboard.configureAnalyticsForLaunch(options.enableAnalytics);
88
80
 
89
81
  let data = await Flowboard.repository.getOnboardingJson();
90
82
 
@@ -117,6 +109,48 @@ export class Flowboard {
117
109
  return;
118
110
  }
119
111
 
112
+ await Flowboard.launchResolvedOnboarding(data, options);
113
+ }
114
+
115
+ static async launchOnboardingById(
116
+ onboardingId: string,
117
+ options: FlowboardLaunchByIdOptions = {}
118
+ ): Promise<void> {
119
+ Flowboard.log(`Attempting to launch onboarding by id: ${onboardingId}`);
120
+ if (!Flowboard.appId) {
121
+ throw new Error(
122
+ 'Flowboard.init() must be called before launchOnboardingById'
123
+ );
124
+ }
125
+
126
+ const normalizedOnboardingId = onboardingId.trim();
127
+ if (!normalizedOnboardingId) {
128
+ throw new Error('onboardingId must be a non-empty string');
129
+ }
130
+
131
+ await Flowboard.configureAnalyticsForLaunch(options.enableAnalytics);
132
+
133
+ const locale = await Flowboard.resolveLocale(options.locale);
134
+
135
+ let data: FlowboardData;
136
+ try {
137
+ data = await Flowboard.service.fetchOnboardingById({
138
+ onboardingId: normalizedOnboardingId,
139
+ locale,
140
+ });
141
+ } catch (error) {
142
+ Flowboard.log(`Failed to load onboarding by id: ${String(error)}`);
143
+ Alert.alert('Failed to load onboarding', String(error));
144
+ return;
145
+ }
146
+
147
+ await Flowboard.launchResolvedOnboarding(data, options);
148
+ }
149
+
150
+ private static async launchResolvedOnboarding(
151
+ data: FlowboardData,
152
+ options: FlowboardLaunchOptions
153
+ ): Promise<void> {
120
154
  const shouldResumeProgress =
121
155
  options.resumeProgress === true && options.alwaysRestart !== true;
122
156
 
@@ -159,6 +193,39 @@ export class Flowboard {
159
193
  });
160
194
  }
161
195
 
196
+ private static async configureAnalyticsForLaunch(
197
+ enableAnalytics: boolean | undefined
198
+ ): Promise<void> {
199
+ try {
200
+ const context =
201
+ AnalyticsManager.instance.clientContextSnapshot ??
202
+ (await ClientContext.create());
203
+ AnalyticsManager.instance.configure({
204
+ enabled: enableAnalytics ?? true,
205
+ context,
206
+ });
207
+ } catch (error) {
208
+ Flowboard.log(
209
+ `Failed to configure analytics for launch: ${String(error)}`
210
+ );
211
+ }
212
+ }
213
+
214
+ private static async resolveLocale(
215
+ requestedLocale: string | undefined
216
+ ): Promise<string> {
217
+ const normalized = requestedLocale?.trim();
218
+ if (normalized) {
219
+ return normalized;
220
+ }
221
+
222
+ const context =
223
+ AnalyticsManager.instance.clientContextSnapshot ??
224
+ (await ClientContext.create());
225
+
226
+ return context.locale || 'en_US';
227
+ }
228
+
162
229
  private static async initialize(): Promise<void> {
163
230
  Flowboard.log('Checking local cache...');
164
231
  const cached = await Flowboard.repository.getOnboardingJson();
@@ -2,12 +2,16 @@ import type { ClientContext } from './clientContext';
2
2
  import type { FlowboardData } from '../types/flowboard';
3
3
 
4
4
  const DEFAULT_ENDPOINT = 'https://test-638704832888.europe-west1.run.app';
5
+ const SPECIFIC_ONBOARDING_ENDPOINT =
6
+ 'https://onboardsolo-638704832888.europe-west1.run.app';
5
7
 
6
8
  export class ResolverService {
7
9
  private endpoint: string;
10
+ private specificOnboardingEndpoint: string;
8
11
 
9
12
  constructor(endpoint?: string) {
10
13
  this.endpoint = endpoint ?? DEFAULT_ENDPOINT;
14
+ this.specificOnboardingEndpoint = SPECIFIC_ONBOARDING_ENDPOINT;
11
15
  }
12
16
 
13
17
  async fetchOnboardingJson(params: {
@@ -52,7 +56,45 @@ export class ResolverService {
52
56
  }
53
57
 
54
58
  const body = (await response.json()) as FlowboardData;
59
+ this.applyHeaderMetadata(response, body);
55
60
 
61
+ return body;
62
+ }
63
+
64
+ async fetchOnboardingById(params: {
65
+ onboardingId: string;
66
+ locale: string;
67
+ }): Promise<FlowboardData> {
68
+ const payload = {
69
+ onboardingId: params.onboardingId,
70
+ locale: params.locale,
71
+ };
72
+
73
+ let response: Response;
74
+ try {
75
+ response = await fetch(this.specificOnboardingEndpoint, {
76
+ method: 'POST',
77
+ headers: { 'Content-Type': 'application/json' },
78
+ body: JSON.stringify(payload),
79
+ });
80
+ } catch (error) {
81
+ throw new Error(`Failed to connect to resolver: ${String(error)}`);
82
+ }
83
+
84
+ if (!response.ok) {
85
+ const body = await response.text();
86
+ throw new Error(
87
+ `Failed to load onboarding config: ${response.status} ${body}`
88
+ );
89
+ }
90
+
91
+ const body = (await response.json()) as FlowboardData;
92
+ this.applyHeaderMetadata(response, body);
93
+
94
+ return body;
95
+ }
96
+
97
+ private applyHeaderMetadata(response: Response, body: FlowboardData): void {
56
98
  const flowId = response.headers.get('x-flowboard-flow-id');
57
99
  if (flowId) body.flow_id = flowId;
58
100
  const variantId = response.headers.get('x-flowboard-variant-id');
@@ -63,7 +105,5 @@ export class ResolverService {
63
105
  if (bucket) body.bucket = bucket;
64
106
  const experimentId = response.headers.get('x-flowboard-experiment-id');
65
107
  if (experimentId) body.experiment_id = experimentId;
66
-
67
- return body;
68
108
  }
69
109
  }
package/src/index.tsx CHANGED
@@ -8,6 +8,7 @@ export type {
8
8
  OnboardingEndCallback,
9
9
  OnStepChangeCallback,
10
10
  FlowboardLaunchOptions,
11
+ FlowboardLaunchByIdOptions,
11
12
  FlowboardData,
12
13
  } from './types/flowboard';
13
14
  export type { FlowboardFlowProps } from './components/FlowboardFlow';
@@ -49,3 +49,7 @@ export type FlowboardLaunchOptions = {
49
49
  alwaysRestart?: boolean;
50
50
  resumeProgress?: boolean;
51
51
  };
52
+
53
+ export type FlowboardLaunchByIdOptions = FlowboardLaunchOptions & {
54
+ locale?: string;
55
+ };