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 +12 -0
- package/lib/module/Flowboard.js +47 -9
- package/lib/module/Flowboard.js.map +1 -1
- package/lib/module/core/resolverService.js +31 -1
- package/lib/module/core/resolverService.js.map +1 -1
- package/lib/typescript/src/Flowboard.d.ts +5 -1
- package/lib/typescript/src/Flowboard.d.ts.map +1 -1
- package/lib/typescript/src/core/resolverService.d.ts +6 -0
- package/lib/typescript/src/core/resolverService.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/flowboard.d.ts +3 -0
- package/lib/typescript/src/types/flowboard.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Flowboard.ts +81 -14
- package/src/core/resolverService.ts +42 -2
- package/src/index.tsx +1 -0
- package/src/types/flowboard.ts +4 -0
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
|
|
package/lib/module/Flowboard.js
CHANGED
|
@@ -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
|
-
|
|
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","
|
|
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,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;
|
|
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,
|
|
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;
|
|
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"}
|
|
@@ -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
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 {
|
|
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
|
-
|
|
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