react-native-usesense 2.1.1 → 2.3.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
@@ -1,9 +1,9 @@
1
- # UseSense React Native
1
+ # Sense React Native
2
2
 
3
3
  React Native plugin for human presence verification. Wraps the native
4
- UseSense iOS and Android SDKs into a single cross-platform package.
4
+ Sense iOS and Android SDKs into a single cross-platform package.
5
5
 
6
- UseSense verifies that a real human — not a bot, deepfake, or replay
6
+ Sense verifies that a real human — not a bot, deepfake, or replay
7
7
  attack — is behind the camera during identity verification sessions.
8
8
  Three independent pillars run in parallel on every session:
9
9
 
@@ -47,22 +47,22 @@ yarn add react-native-usesense
47
47
  cd ios && pod install
48
48
  ```
49
49
 
50
- The native UseSense iOS SDK is installed automatically as a CocoaPod
50
+ The native Sense iOS SDK is installed automatically as a CocoaPod
51
51
  dependency from the public CocoaPods trunk (`UseSenseSDK`, pinned to
52
52
  `~> 4.2`). Add required permissions to your `Info.plist`:
53
53
 
54
54
  ```xml
55
55
  <key>NSCameraUsageDescription</key>
56
- <string>UseSense needs camera access to verify your identity.</string>
56
+ <string>Sense needs camera access to verify your identity.</string>
57
57
 
58
58
  <!-- Only if your verification flow includes audio challenges -->
59
59
  <key>NSMicrophoneUsageDescription</key>
60
- <string>UseSense needs microphone access for voice verification.</string>
60
+ <string>Sense needs microphone access for voice verification.</string>
61
61
  ```
62
62
 
63
63
  ### Android setup
64
64
 
65
- The native UseSense Android SDK is pulled automatically from Maven
65
+ The native Sense Android SDK is pulled automatically from Maven
66
66
  Central (`ai.usesense:sdk:4.2.1`). `mavenCentral()` is in every
67
67
  Android project by default, so no custom repository declaration is
68
68
  needed.
@@ -120,6 +120,37 @@ try {
120
120
  // That's where you read pillar scores and make access decisions.
121
121
  ```
122
122
 
123
+ ## White-labeling (Appearance & Copy)
124
+
125
+ The verification flow UI is fully customizable through two optional inputs you pass
126
+ on a flow run: `appearance` (`FlowAppearance`) and `copy` (`FlowCopy`). Values are
127
+ merged **SDK-init > dashboard (org settings) > built-in default**. Every field is
128
+ optional; anything you omit keeps the Sense default.
129
+
130
+ You can set this two ways: in code (below), or no-code via the dashboard's
131
+ **Flows → Appearance** tab (saved on your org, delivered to every SDK and the hosted
132
+ pages, no redeploy).
133
+
134
+ Customizable surfaces: colors (plus dark-mode overrides), typography, shape and
135
+ button style, logo, background, icons/illustrations, the loader, and every
136
+ subject-facing string plus privacy copy.
137
+
138
+ ```typescript
139
+ import { UseSenseFlows, FlowAppearance, FlowCopy } from 'react-native-usesense';
140
+
141
+ const appearance: FlowAppearance = {
142
+ colors: { primary: '#E4002B' },
143
+ shape: { buttonStyle: 'outline' },
144
+ };
145
+ const copy: FlowCopy = {
146
+ result: { successTitle: "You're verified" },
147
+ };
148
+
149
+ await UseSenseFlows.runFlow({ flowRunId, sdkToken, appearance, copy });
150
+ ```
151
+
152
+ Full reference: [`docs/WHITE_LABEL.md` in the web SDK](https://github.com/qudusadeyemi/usesense-web-sdk/blob/main/docs/WHITE_LABEL.md).
153
+
123
154
  ## Configuration
124
155
 
125
156
  ```typescript
@@ -41,7 +41,7 @@ dependencies {
41
41
  // the iOS SDK 4.3.0 the plugin's podspec depends on). mavenCentral()
42
42
  // is already in the `repositories` block above, so no custom
43
43
  // repository declaration is needed.
44
- implementation "ai.usesense:sdk:4.4.0"
44
+ implementation "ai.usesense:sdk:4.5.0"
45
45
 
46
46
  implementation "org.jetbrains.kotlin:kotlin-stdlib:${safeExtGet('kotlinVersion', '2.0.0')}"
47
47
  }
@@ -5,12 +5,16 @@ import com.facebook.react.bridge.Promise
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.bridge.ReactContextBaseJavaModule
7
7
  import com.facebook.react.bridge.ReactMethod
8
+ import com.facebook.react.bridge.ReadableMap
9
+ import com.usesense.sdk.flows.FlowAppearance
10
+ import com.usesense.sdk.flows.FlowCopy
8
11
  import com.usesense.sdk.flows.FlowError
9
12
  import com.usesense.sdk.flows.FlowOutcome
10
13
  import com.usesense.sdk.flows.FlowRunResult
11
14
  import com.usesense.sdk.flows.FlowRunState
12
15
  import com.usesense.sdk.flows.FlowsCallback
13
16
  import com.usesense.sdk.flows.UseSenseFlows
17
+ import org.json.JSONObject
14
18
 
15
19
  /**
16
20
  * React Native bridge for the UseSense Android Flows runner.
@@ -30,7 +34,14 @@ class UseSenseFlowsModule(private val reactContext: ReactApplicationContext) :
30
34
  override fun getName(): String = "UseSenseFlowsModule"
31
35
 
32
36
  @ReactMethod
33
- fun runFlow(flowRunId: String?, sdkToken: String?, apiBaseUrl: String?, promise: Promise) {
37
+ fun runFlow(
38
+ flowRunId: String?,
39
+ sdkToken: String?,
40
+ apiBaseUrl: String?,
41
+ appearance: ReadableMap?,
42
+ copy: ReadableMap?,
43
+ promise: Promise,
44
+ ) {
34
45
  if (flowRunId.isNullOrEmpty() || sdkToken.isNullOrEmpty()) {
35
46
  promise.reject("unknown", "flowRunId and sdkToken are required")
36
47
  return
@@ -41,6 +52,12 @@ class UseSenseFlowsModule(private val reactContext: ReactApplicationContext) :
41
52
  }
42
53
  val baseUrl = apiBaseUrl ?: "https://api.usesense.ai"
43
54
 
55
+ // White-label maps are forwarded raw from JS (camelCase, matching the
56
+ // web contract). Decode them via the SDK; a malformed payload degrades
57
+ // to null (built-in tokens) rather than failing the run.
58
+ val resolvedAppearance = appearance?.let { runCatching { FlowAppearance.decode(it.toJSONObject()) }.getOrNull() }
59
+ val resolvedCopy = copy?.let { runCatching { FlowCopy.decode(it.toJSONObject()) }.getOrNull() }
60
+
44
61
  val callback = object : FlowsCallback {
45
62
  override fun onResult(result: FlowRunResult) {
46
63
  val map = Arguments.createMap().apply {
@@ -64,9 +81,18 @@ class UseSenseFlowsModule(private val reactContext: ReactApplicationContext) :
64
81
  sdkToken = sdkToken,
65
82
  callback = callback,
66
83
  apiBaseUrl = baseUrl,
84
+ appearance = resolvedAppearance,
85
+ copy = resolvedCopy,
67
86
  )
68
87
  }
69
88
 
70
89
  private fun stateWire(state: FlowRunState): String = state.wire
71
90
  private fun outcomeWire(outcome: FlowOutcome): String = outcome.wire
91
+
92
+ /**
93
+ * Convert a React Native [ReadableMap] to an [org.json.JSONObject] so the
94
+ * SDK's `decode(JSONObject)` can read it. `toHashMap()` yields nested
95
+ * HashMap / ArrayList values, which `JSONObject(Map)` walks recursively.
96
+ */
97
+ private fun ReadableMap.toJSONObject(): JSONObject = JSONObject(this.toHashMap() as Map<*, *>)
72
98
  }
@@ -1,14 +1,18 @@
1
1
  #import <React/RCTBridgeModule.h>
2
2
 
3
3
  // Bridging header for the Flows runner module. Single JS-callable method:
4
- // runFlow(flowRunId, sdkToken, apiBaseUrl?). The apiBaseUrl parameter is
5
- // nullable from JS — pass `null` (or omit, since the JS wrapper supplies a
6
- // default) and the native side falls back to https://api.usesense.ai.
4
+ // runFlow(flowRunId, sdkToken, apiBaseUrl?, appearance?, copy?). The apiBaseUrl
5
+ // parameter is nullable from JS — pass `null` (or omit, since the JS wrapper
6
+ // supplies a default) and the native side falls back to https://api.usesense.ai.
7
+ // `appearance` / `copy` are nullable JS objects (the white-label contract);
8
+ // when non-null they're decoded by FlowAppearance/FlowCopy.decodeFromJSONObject.
7
9
  @interface RCT_EXTERN_MODULE(UseSenseFlowsModule, NSObject)
8
10
 
9
11
  RCT_EXTERN_METHOD(runFlow:(NSString *)flowRunId
10
12
  sdkToken:(NSString *)sdkToken
11
13
  apiBaseUrl:(NSString * _Nullable)apiBaseUrl
14
+ appearance:(NSDictionary * _Nullable)appearance
15
+ copy:(NSDictionary * _Nullable)copy
12
16
  resolver:(RCTPromiseResolveBlock)resolve
13
17
  rejecter:(RCTPromiseRejectBlock)reject)
14
18
 
@@ -23,13 +23,20 @@ class UseSenseFlowsModule: NSObject {
23
23
  return false
24
24
  }
25
25
 
26
- /// `runFlow(flowRunId, sdkToken, apiBaseUrl?, resolve, reject)` — Promise.
27
- /// The SDK takes care of presentation; we just resolve when the run
28
- /// reaches a terminal state.
26
+ /// `runFlow(flowRunId, sdkToken, apiBaseUrl?, appearance?, copy?, resolve,
27
+ /// reject)` — Promise. The SDK takes care of presentation; we just resolve
28
+ /// when the run reaches a terminal state.
29
+ ///
30
+ /// `appearance` / `copy` are the optional white-label maps forwarded raw
31
+ /// from JS (camelCase, matching the web contract). We decode them via the
32
+ /// SDK's `decodeFromJSONObject`, which degrades a malformed payload to nil
33
+ /// (built-in tokens) rather than failing the run.
29
34
  @objc
30
35
  func runFlow(_ flowRunId: String,
31
36
  sdkToken: String,
32
37
  apiBaseUrl: String?,
38
+ appearance: NSDictionary?,
39
+ copy: NSDictionary?,
33
40
  resolver resolve: @escaping RCTPromiseResolveBlock,
34
41
  rejecter reject: @escaping RCTPromiseRejectBlock) {
35
42
  let baseString = apiBaseUrl ?? "https://api.usesense.ai"
@@ -37,6 +44,8 @@ class UseSenseFlowsModule: NSObject {
37
44
  reject("unknown", "Invalid apiBaseUrl: \(baseString)", nil)
38
45
  return
39
46
  }
47
+ let resolvedAppearance = (appearance as? [String: Any]).flatMap(FlowAppearance.decodeFromJSONObject)
48
+ let resolvedCopy = (copy as? [String: Any]).flatMap(FlowCopy.decodeFromJSONObject)
40
49
  DispatchQueue.main.async {
41
50
  guard let presenter = Self.topViewController() else {
42
51
  reject("unknown", "No view controller to present from", nil)
@@ -46,6 +55,8 @@ class UseSenseFlowsModule: NSObject {
46
55
  flowRunId: flowRunId,
47
56
  sdkToken: sdkToken,
48
57
  apiBaseURL: baseURL,
58
+ appearance: resolvedAppearance,
59
+ copy: resolvedCopy,
49
60
  from: presenter
50
61
  ) { runResult in
51
62
  switch runResult {
@@ -72,6 +72,34 @@ class FlowError extends Error {
72
72
  }
73
73
  }
74
74
 
75
+ // ─── White-label contract (mirrors the web SDK) ───────────────────────────
76
+ //
77
+ // FlowAppearance + FlowCopy are the shared customization schemas (Phase 1 +
78
+ // Phase 2 of the white-label initiative). They mirror the web SDK contract
79
+ // (packages/sdk/src/flows/theme.ts + copy.ts) one-to-one with camelCase keys.
80
+ // The RN bridge forwards the raw object across to the native iOS/Android
81
+ // runner, which decodes it (FlowAppearance/FlowCopy.decodeFromJSONObject).
82
+ // Everything is optional; an omitted key falls back to the hosted-page tokens.
83
+
84
+ /** A palette layer. `dark` overrides apply only in dark mode. */
85
+
86
+ /** Custom illustration/icon overrides (image URLs replacing built-in glyphs). */
87
+
88
+ /** Loading animation: a built-in preset or a custom asset. */
89
+
90
+ /**
91
+ * White-label appearance overrides for the Flow runner. Supplied at SDK init
92
+ * (this option) and merged over the operator's server-delivered branding by
93
+ * the native runner. Mirrors `FlowAppearance` in the web SDK.
94
+ */
95
+
96
+ /**
97
+ * White-label copy overrides for the Flow runner. Every subject-facing string
98
+ * can be overridden; an omitted key keeps the built-in copy. Supplied at SDK
99
+ * init and merged over the operator's server-delivered copy by the native
100
+ * runner. Mirrors `FlowCopy` in the web SDK.
101
+ */
102
+
75
103
  /** Options for `UseSenseFlows.runFlow`. */
76
104
  exports.FlowError = FlowError;
77
105
  /**
@@ -87,7 +115,7 @@ const UseSenseFlows = exports.UseSenseFlows = {
87
115
  */
88
116
  async runFlow(options) {
89
117
  try {
90
- const native = await nativeModule().runFlow(options.flowRunId, options.sdkToken, options.apiBaseUrl ?? null);
118
+ const native = await nativeModule().runFlow(options.flowRunId, options.sdkToken, options.apiBaseUrl ?? null, options.appearance ?? null, options.copy ?? null);
91
119
  return {
92
120
  flowRunId: native.flowRunId,
93
121
  state: native.state,
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","android","default","nativeModule","m","NativeModules","UseSenseFlowsModule","Error","FLOW_ERROR_CODES","normaliseCode","code","includes","FlowError","constructor","message","name","exports","UseSenseFlows","runFlow","options","native","flowRunId","sdkToken","apiBaseUrl","state","outcome","e"],"sourceRoot":"../../src","sources":["flows.ts"],"mappings":";;;;;;AAqBA,IAAAA,YAAA,GAAAC,OAAA;AArBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMC,aAAa,GACjB,0EAA0E,GAC1EC,qBAAQ,CAACC,MAAM,CAAC;EACdC,GAAG,EAAE,yDAAyD;EAC9DC,OAAO,EAAE,wDAAwD;EACjEC,OAAO,EAAE;AACX,CAAC,CAAC;;AAEJ;AACA;AACA,SAASC,YAAYA,CAAA,EAAG;EACtB,MAAMC,CAAC,GAAGC,0BAAa,CAACC,mBAAmB;EAC3C,IAAI,CAACF,CAAC,EAAE,MAAM,IAAIG,KAAK,CAACV,aAAa,CAAC;EACtC,OAAOO,CAAC;AACV;;AAEA;AACA;AACA;AACA;;AAWA;;AAGA;AACA;AACA;AACA;;AAeA,MAAMI,gBAA0C,GAAG,CACjD,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,SAAS,CACD;AAEV,SAASC,aAAaA,CAACC,IAAa,EAAiB;EACnD,OAAO,OAAOA,IAAI,KAAK,QAAQ,IAAKF,gBAAgB,CAAuBG,QAAQ,CAACD,IAAI,CAAC,GACpFA,IAAI,GACL,SAAS;AACf;;AAEA;;AAaA;AACA;AACA;AACA;AACA;AACO,MAAME,SAAS,SAASL,KAAK,CAAC;EAEnCM,WAAWA,CAACH,IAAmB,EAAEI,OAAe,EAAE;IAChD,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACC,IAAI,GAAG,WAAW;IACvB,IAAI,CAACL,IAAI,GAAGA,IAAI;EAClB;AACF;;AAEA;AAAAM,OAAA,CAAAJ,SAAA,GAAAA,SAAA;AAQA;AACA;AACA;AACA;AACO,MAAMK,aAAa,GAAAD,OAAA,CAAAC,aAAA,GAAG;EAC3B;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,OAAOA,CAACC,OAAuB,EAA0B;IAC7D,IAAI;MACF,MAAMC,MAAM,GAAG,MAAMjB,YAAY,CAAC,CAAC,CAACe,OAAO,CACzCC,OAAO,CAACE,SAAS,EACjBF,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACI,UAAU,IAAI,IACxB,CAAC;MACD,OAAO;QACLF,SAAS,EAAED,MAAM,CAACC,SAAS;QAC3BG,KAAK,EAAEJ,MAAM,CAACI,KAAK;QACnBC,OAAO,EAAEL,MAAM,CAACK;MAClB,CAAC;IACH,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV;MACA;MACA,MAAMhB,IAAI,GAAGD,aAAa,CAAEiB,CAAC,CAAuBhB,IAAI,CAAC;MACzD,MAAMI,OAAO,GAAIY,CAAC,CAA0BZ,OAAO,IAAI,aAAa;MACpE,MAAM,IAAIF,SAAS,CAACF,IAAI,EAAEI,OAAO,CAAC;IACpC;EACF;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","android","default","nativeModule","m","NativeModules","UseSenseFlowsModule","Error","FLOW_ERROR_CODES","normaliseCode","code","includes","FlowError","constructor","message","name","exports","UseSenseFlows","runFlow","options","native","flowRunId","sdkToken","apiBaseUrl","appearance","copy","state","outcome","e"],"sourceRoot":"../../src","sources":["flows.ts"],"mappings":";;;;;;AAqBA,IAAAA,YAAA,GAAAC,OAAA;AArBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMC,aAAa,GACjB,0EAA0E,GAC1EC,qBAAQ,CAACC,MAAM,CAAC;EACdC,GAAG,EAAE,yDAAyD;EAC9DC,OAAO,EAAE,wDAAwD;EACjEC,OAAO,EAAE;AACX,CAAC,CAAC;;AAEJ;AACA;AACA,SAASC,YAAYA,CAAA,EAAG;EACtB,MAAMC,CAAC,GAAGC,0BAAa,CAACC,mBAAmB;EAC3C,IAAI,CAACF,CAAC,EAAE,MAAM,IAAIG,KAAK,CAACV,aAAa,CAAC;EACtC,OAAOO,CAAC;AASV;;AAEA;AACA;AACA;AACA;;AAWA;;AAGA;AACA;AACA;AACA;;AAeA,MAAMI,gBAA0C,GAAG,CACjD,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,SAAS,CACD;AAEV,SAASC,aAAaA,CAACC,IAAa,EAAiB;EACnD,OAAO,OAAOA,IAAI,KAAK,QAAQ,IAAKF,gBAAgB,CAAuBG,QAAQ,CAACD,IAAI,CAAC,GACpFA,IAAI,GACL,SAAS;AACf;;AAEA;;AAaA;AACA;AACA;AACA;AACA;AACO,MAAME,SAAS,SAASL,KAAK,CAAC;EAEnCM,WAAWA,CAACH,IAAmB,EAAEI,OAAe,EAAE;IAChD,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACC,IAAI,GAAG,WAAW;IACvB,IAAI,CAACL,IAAI,GAAGA,IAAI;EAClB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAkCA;;AASA;;AAQA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;;AA8CA;AAAAM,OAAA,CAAAJ,SAAA,GAAAA,SAAA;AAoBA;AACA;AACA;AACA;AACO,MAAMK,aAAa,GAAAD,OAAA,CAAAC,aAAA,GAAG;EAC3B;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,OAAOA,CAACC,OAAuB,EAA0B;IAC7D,IAAI;MACF,MAAMC,MAAM,GAAG,MAAMjB,YAAY,CAAC,CAAC,CAACe,OAAO,CACzCC,OAAO,CAACE,SAAS,EACjBF,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACI,UAAU,IAAI,IAAI,EAC1BJ,OAAO,CAACK,UAAU,IAAI,IAAI,EAC1BL,OAAO,CAACM,IAAI,IAAI,IAClB,CAAC;MACD,OAAO;QACLJ,SAAS,EAAED,MAAM,CAACC,SAAS;QAC3BK,KAAK,EAAEN,MAAM,CAACM,KAAK;QACnBC,OAAO,EAAEP,MAAM,CAACO;MAClB,CAAC;IACH,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV;MACA;MACA,MAAMlB,IAAI,GAAGD,aAAa,CAAEmB,CAAC,CAAuBlB,IAAI,CAAC;MACzD,MAAMI,OAAO,GAAIc,CAAC,CAA0Bd,OAAO,IAAI,aAAa;MACpE,MAAM,IAAIF,SAAS,CAACF,IAAI,EAAEI,OAAO,CAAC;IACpC;EACF;AACF,CAAC","ignoreList":[]}
@@ -66,6 +66,34 @@ export class FlowError extends Error {
66
66
  }
67
67
  }
68
68
 
69
+ // ─── White-label contract (mirrors the web SDK) ───────────────────────────
70
+ //
71
+ // FlowAppearance + FlowCopy are the shared customization schemas (Phase 1 +
72
+ // Phase 2 of the white-label initiative). They mirror the web SDK contract
73
+ // (packages/sdk/src/flows/theme.ts + copy.ts) one-to-one with camelCase keys.
74
+ // The RN bridge forwards the raw object across to the native iOS/Android
75
+ // runner, which decodes it (FlowAppearance/FlowCopy.decodeFromJSONObject).
76
+ // Everything is optional; an omitted key falls back to the hosted-page tokens.
77
+
78
+ /** A palette layer. `dark` overrides apply only in dark mode. */
79
+
80
+ /** Custom illustration/icon overrides (image URLs replacing built-in glyphs). */
81
+
82
+ /** Loading animation: a built-in preset or a custom asset. */
83
+
84
+ /**
85
+ * White-label appearance overrides for the Flow runner. Supplied at SDK init
86
+ * (this option) and merged over the operator's server-delivered branding by
87
+ * the native runner. Mirrors `FlowAppearance` in the web SDK.
88
+ */
89
+
90
+ /**
91
+ * White-label copy overrides for the Flow runner. Every subject-facing string
92
+ * can be overridden; an omitted key keeps the built-in copy. Supplied at SDK
93
+ * init and merged over the operator's server-delivered copy by the native
94
+ * runner. Mirrors `FlowCopy` in the web SDK.
95
+ */
96
+
69
97
  /** Options for `UseSenseFlows.runFlow`. */
70
98
 
71
99
  /**
@@ -81,7 +109,7 @@ export const UseSenseFlows = {
81
109
  */
82
110
  async runFlow(options) {
83
111
  try {
84
- const native = await nativeModule().runFlow(options.flowRunId, options.sdkToken, options.apiBaseUrl ?? null);
112
+ const native = await nativeModule().runFlow(options.flowRunId, options.sdkToken, options.apiBaseUrl ?? null, options.appearance ?? null, options.copy ?? null);
85
113
  return {
86
114
  flowRunId: native.flowRunId,
87
115
  state: native.state,
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","android","default","nativeModule","m","UseSenseFlowsModule","Error","FLOW_ERROR_CODES","normaliseCode","code","includes","FlowError","constructor","message","name","UseSenseFlows","runFlow","options","native","flowRunId","sdkToken","apiBaseUrl","state","outcome","e"],"sourceRoot":"../../src","sources":["flows.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,0EAA0E,GAC1ED,QAAQ,CAACE,MAAM,CAAC;EACdC,GAAG,EAAE,yDAAyD;EAC9DC,OAAO,EAAE,wDAAwD;EACjEC,OAAO,EAAE;AACX,CAAC,CAAC;;AAEJ;AACA;AACA,SAASC,YAAYA,CAAA,EAAG;EACtB,MAAMC,CAAC,GAAGR,aAAa,CAACS,mBAAmB;EAC3C,IAAI,CAACD,CAAC,EAAE,MAAM,IAAIE,KAAK,CAACR,aAAa,CAAC;EACtC,OAAOM,CAAC;AACV;;AAEA;AACA;AACA;AACA;;AAWA;;AAGA;AACA;AACA;AACA;;AAeA,MAAMG,gBAA0C,GAAG,CACjD,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,SAAS,CACD;AAEV,SAASC,aAAaA,CAACC,IAAa,EAAiB;EACnD,OAAO,OAAOA,IAAI,KAAK,QAAQ,IAAKF,gBAAgB,CAAuBG,QAAQ,CAACD,IAAI,CAAC,GACpFA,IAAI,GACL,SAAS;AACf;;AAEA;;AAaA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,SAAS,SAASL,KAAK,CAAC;EAEnCM,WAAWA,CAACH,IAAmB,EAAEI,OAAe,EAAE;IAChD,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACC,IAAI,GAAG,WAAW;IACvB,IAAI,CAACL,IAAI,GAAGA,IAAI;EAClB;AACF;;AAEA;;AAQA;AACA;AACA;AACA;AACA,OAAO,MAAMM,aAAa,GAAG;EAC3B;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,OAAOA,CAACC,OAAuB,EAA0B;IAC7D,IAAI;MACF,MAAMC,MAAM,GAAG,MAAMf,YAAY,CAAC,CAAC,CAACa,OAAO,CACzCC,OAAO,CAACE,SAAS,EACjBF,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACI,UAAU,IAAI,IACxB,CAAC;MACD,OAAO;QACLF,SAAS,EAAED,MAAM,CAACC,SAAS;QAC3BG,KAAK,EAAEJ,MAAM,CAACI,KAAK;QACnBC,OAAO,EAAEL,MAAM,CAACK;MAClB,CAAC;IACH,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV;MACA;MACA,MAAMf,IAAI,GAAGD,aAAa,CAAEgB,CAAC,CAAuBf,IAAI,CAAC;MACzD,MAAMI,OAAO,GAAIW,CAAC,CAA0BX,OAAO,IAAI,aAAa;MACpE,MAAM,IAAIF,SAAS,CAACF,IAAI,EAAEI,OAAO,CAAC;IACpC;EACF;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","android","default","nativeModule","m","UseSenseFlowsModule","Error","FLOW_ERROR_CODES","normaliseCode","code","includes","FlowError","constructor","message","name","UseSenseFlows","runFlow","options","native","flowRunId","sdkToken","apiBaseUrl","appearance","copy","state","outcome","e"],"sourceRoot":"../../src","sources":["flows.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,0EAA0E,GAC1ED,QAAQ,CAACE,MAAM,CAAC;EACdC,GAAG,EAAE,yDAAyD;EAC9DC,OAAO,EAAE,wDAAwD;EACjEC,OAAO,EAAE;AACX,CAAC,CAAC;;AAEJ;AACA;AACA,SAASC,YAAYA,CAAA,EAAG;EACtB,MAAMC,CAAC,GAAGR,aAAa,CAACS,mBAAmB;EAC3C,IAAI,CAACD,CAAC,EAAE,MAAM,IAAIE,KAAK,CAACR,aAAa,CAAC;EACtC,OAAOM,CAAC;AASV;;AAEA;AACA;AACA;AACA;;AAWA;;AAGA;AACA;AACA;AACA;;AAeA,MAAMG,gBAA0C,GAAG,CACjD,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,SAAS,CACD;AAEV,SAASC,aAAaA,CAACC,IAAa,EAAiB;EACnD,OAAO,OAAOA,IAAI,KAAK,QAAQ,IAAKF,gBAAgB,CAAuBG,QAAQ,CAACD,IAAI,CAAC,GACpFA,IAAI,GACL,SAAS;AACf;;AAEA;;AAaA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,SAAS,SAASL,KAAK,CAAC;EAEnCM,WAAWA,CAACH,IAAmB,EAAEI,OAAe,EAAE;IAChD,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACC,IAAI,GAAG,WAAW;IACvB,IAAI,CAACL,IAAI,GAAGA,IAAI;EAClB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAkCA;;AASA;;AAQA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;;AA8CA;;AAoBA;AACA;AACA;AACA;AACA,OAAO,MAAMM,aAAa,GAAG;EAC3B;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,OAAOA,CAACC,OAAuB,EAA0B;IAC7D,IAAI;MACF,MAAMC,MAAM,GAAG,MAAMf,YAAY,CAAC,CAAC,CAACa,OAAO,CACzCC,OAAO,CAACE,SAAS,EACjBF,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACI,UAAU,IAAI,IAAI,EAC1BJ,OAAO,CAACK,UAAU,IAAI,IAAI,EAC1BL,OAAO,CAACM,IAAI,IAAI,IAClB,CAAC;MACD,OAAO;QACLJ,SAAS,EAAED,MAAM,CAACC,SAAS;QAC3BK,KAAK,EAAEN,MAAM,CAACM,KAAK;QACnBC,OAAO,EAAEP,MAAM,CAACO;MAClB,CAAC;IACH,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV;MACA;MACA,MAAMjB,IAAI,GAAGD,aAAa,CAAEkB,CAAC,CAAuBjB,IAAI,CAAC;MACzD,MAAMI,OAAO,GAAIa,CAAC,CAA0Bb,OAAO,IAAI,aAAa;MACpE,MAAM,IAAIF,SAAS,CAACF,IAAI,EAAEI,OAAO,CAAC;IACpC;EACF;AACF,CAAC","ignoreList":[]}
@@ -231,5 +231,9 @@ export default UseSense;
231
231
 
232
232
  // Slice 5d: Flows. A parallel surface to Sessions — host apps choose one
233
233
  // per call. See guides/flows/sessions-vs-flows in the API docs.
234
- export { UseSenseFlows, FlowError } from './flows';
234
+ export { UseSenseFlows, FlowError
235
+
236
+ // White-label contract (Phase 1 appearance + Phase 2 copy). Forwarded to the
237
+ // native runner via the bridge.
238
+ } from './flows';
235
239
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","NativeEventEmitter","Platform","LINKING_ERROR","select","ios","android","default","UseSenseModule","Error","eventEmitter","UseSense","initialize","config","apiKey","err","code","message","isRetryable","environment","apiEndpoint","branding","antispoofOnDeviceEnabled","liveSenseV4Enabled","startVerification","request","sessionType","externalUserId","identityId","metadata","addListener","callback","subscription","raw","remove","reset","isInitialized","startV4Verification","sessionId","sessionToken","nonce","apiBaseUrl","displayName","brandPrimaryColor","UseSenseFlows","FlowError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","NativeEventEmitter","Platform","LINKING_ERROR","select","ios","android","default","UseSenseModule","Error","eventEmitter","UseSense","initialize","config","apiKey","err","code","message","isRetryable","environment","apiEndpoint","branding","antispoofOnDeviceEnabled","liveSenseV4Enabled","startVerification","request","sessionType","externalUserId","identityId","metadata","addListener","callback","subscription","raw","remove","reset","isInitialized","startV4Verification","sessionId","sessionToken","nonce","apiBaseUrl","displayName","brandPrimaryColor","UseSenseFlows","FlowError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAE1E,MAAMC,aAAa,GACjB,kEAAkE,GAClED,QAAQ,CAACE,MAAM,CAAC;EACdC,GAAG,EAAE,yDAAyD;EAC9DC,OAAO,EAAE,wDAAwD;EACjEC,OAAO,EAAE;AACX,CAAC,CAAC,GACF,sJAAsJ;AAExJ,MAAMC,cAAc,GAAGR,aAAa,CAACQ,cAAc;AAEnD,IAAI,CAACA,cAAc,EAAE;EACnB,MAAM,IAAIC,KAAK,CAACN,aAAa,CAAC;AAChC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;;AAsCA;AACA;AACA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;;AAwBA;AACA;AACA;AACA;;AAsBA;;AASA;;AAKA;;AAEA,MAAMO,YAAY,GAAG,IAAIT,kBAAkB,CAACO,cAAc,CAAC;;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,QAAQ,CAAC;EACpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAaC,UAAUA,CAACC,MAAsB,EAAiB;IAC7D,IAAI,CAACA,MAAM,CAACC,MAAM,EAAE;MAClB,MAAMC,GAAkB,GAAG;QACzBC,IAAI,EAAE,gBAAgB;QACtBC,OAAO,EAAE,oBAAoB;QAC7BC,WAAW,EAAE;MACf,CAAC;MACD,MAAMH,GAAG;IACX;IACA,OAAOP,cAAc,CAACI,UAAU,CAAC;MAC/BE,MAAM,EAAED,MAAM,CAACC,MAAM;MACrBK,WAAW,EAAEN,MAAM,CAACM,WAAW,IAAI,MAAM;MACzCC,WAAW,EAAEP,MAAM,CAACO,WAAW;MAC/BC,QAAQ,EAAER,MAAM,CAACQ,QAAQ;MACzBC,wBAAwB,EAAET,MAAM,CAACS,wBAAwB,IAAI,KAAK;MAClEC,kBAAkB,EAAEV,MAAM,CAACU,kBAAkB,IAAI;IACnD,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,aAAaC,iBAAiBA,CAC5BC,OAA4B,EACH;IACzB,OAAOjB,cAAc,CAACgB,iBAAiB,CAAC;MACtCE,WAAW,EAAED,OAAO,CAACC,WAAW;MAChCC,cAAc,EAAEF,OAAO,CAACE,cAAc;MACtCC,UAAU,EAAEH,OAAO,CAACG,UAAU;MAC9BC,QAAQ,EAAEJ,OAAO,CAACI;IACpB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,WAAWA,CAChBC,QAAwC,EAClB;IACtB,MAAMC,YAAY,GAAGtB,YAAY,CAACoB,WAAW,CAC3C,eAAe,EACdG,GAAkB,IAAK;MACtBF,QAAQ,CAACE,GAAG,CAAC;IACf,CACF,CAAC;IACD,OAAO;MACLC,MAAM,EAAEA,CAAA,KAAMF,YAAY,CAACE,MAAM,CAAC;IACpC,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,aAAaC,KAAKA,CAAA,EAAkB;IAClC,OAAO3B,cAAc,CAAC2B,KAAK,CAAC,CAAC;EAC/B;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,aAAaC,aAAaA,CAAA,EAAqB;IAC7C,OAAO5B,cAAc,CAAC4B,aAAa,CAAC,CAAC;EACvC;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAaC,mBAAmBA,CAC9BZ,OAA8B,EACV;IACpB,OAAOjB,cAAc,CAAC6B,mBAAmB,CAAC;MACxCC,SAAS,EAAEb,OAAO,CAACa,SAAS;MAC5BC,YAAY,EAAEd,OAAO,CAACc,YAAY;MAClCC,KAAK,EAAEf,OAAO,CAACe,KAAK;MACpBC,UAAU,EAAEhB,OAAO,CAACgB,UAAU;MAC9BtB,WAAW,EAAEM,OAAO,CAACN,WAAW,IAAI,YAAY;MAChDuB,WAAW,EAAEjB,OAAO,CAACiB,WAAW;MAChCC,iBAAiB,EAAElB,OAAO,CAACkB;IAC7B,CAAC,CAAC;EACJ;AACF;;AAEA;;AAiBA;AACA;AACA;AACA;;AAWA,eAAehC,QAAQ;;AAEvB;AACA;AACA,SACEiC,aAAa,EACbC;;AAMA;AACA;AAAA,OAQK,SAAS","ignoreList":[]}
@@ -49,12 +49,178 @@ export declare class FlowError extends Error {
49
49
  readonly code: FlowErrorCode;
50
50
  constructor(code: FlowErrorCode, message: string);
51
51
  }
52
+ /** A palette layer. `dark` overrides apply only in dark mode. */
53
+ export interface AppearanceColors {
54
+ primary?: string;
55
+ primaryForeground?: string;
56
+ background?: string;
57
+ surface?: string;
58
+ foreground?: string;
59
+ muted?: string;
60
+ border?: string;
61
+ success?: string;
62
+ error?: string;
63
+ warning?: string;
64
+ /** Overrides applied on top of the dark base (e.g. a darker background). */
65
+ dark?: Omit<AppearanceColors, 'dark'>;
66
+ }
67
+ export interface AppearanceTypography {
68
+ /** Body font-family name (e.g. "DM Sans"). */
69
+ fontFamily?: string;
70
+ /** Heading/display font-family; defaults to fontFamily when omitted. */
71
+ displayFamily?: string;
72
+ /** A stylesheet URL or @font-face block to load custom fonts (web only;
73
+ * ignored by the native runners, which load fonts from app resources). */
74
+ fontCss?: string;
75
+ }
76
+ export interface AppearanceShape {
77
+ /** Base corner radius (cards, inputs). */
78
+ radius?: number;
79
+ /** Button corner radius; defaults to radius. */
80
+ buttonRadius?: number;
81
+ buttonStyle?: 'filled' | 'outline';
82
+ }
83
+ /** Custom illustration/icon overrides (image URLs replacing built-in glyphs). */
84
+ export interface AppearanceIcons {
85
+ /** Success result screen. */ success?: string;
86
+ /** Under-review result screen. */ review?: string;
87
+ /** Not-verified result screen. */ notVerified?: string;
88
+ /** Any other named slot by URL. */
89
+ [slot: string]: string | undefined;
90
+ }
91
+ /** Loading animation: a built-in preset or a custom asset. */
92
+ export interface AppearanceLoader {
93
+ /** Built-in preset. Default 'spinner'. */
94
+ style?: 'spinner' | 'dots' | 'bar';
95
+ /** Custom loader asset URL; overrides style. */
96
+ imageUrl?: string;
97
+ }
98
+ /**
99
+ * White-label appearance overrides for the Flow runner. Supplied at SDK init
100
+ * (this option) and merged over the operator's server-delivered branding by
101
+ * the native runner. Mirrors `FlowAppearance` in the web SDK.
102
+ */
103
+ export interface FlowAppearance {
104
+ colors?: AppearanceColors;
105
+ typography?: AppearanceTypography;
106
+ shape?: AppearanceShape;
107
+ logo?: {
108
+ url?: string;
109
+ placement?: 'header' | 'center' | 'none';
110
+ height?: number;
111
+ };
112
+ background?: {
113
+ color?: string;
114
+ imageUrl?: string;
115
+ };
116
+ /** Custom illustrations for result screens / icon slots. */
117
+ icons?: AppearanceIcons;
118
+ /** Loading-animation preset or custom asset. */
119
+ loader?: AppearanceLoader;
120
+ /** Force a palette or follow the OS (default 'auto'). */
121
+ mode?: 'light' | 'dark' | 'auto';
122
+ }
123
+ /**
124
+ * White-label copy overrides for the Flow runner. Every subject-facing string
125
+ * can be overridden; an omitted key keeps the built-in copy. Supplied at SDK
126
+ * init and merged over the operator's server-delivered copy by the native
127
+ * runner. Mirrors `FlowCopy` in the web SDK.
128
+ */
129
+ export interface FlowCopy {
130
+ /** Optional welcome/intro shown before the first step (when set). */
131
+ welcome?: {
132
+ title?: string;
133
+ body?: string;
134
+ };
135
+ /** Shared button labels. */
136
+ buttons?: {
137
+ continue?: string;
138
+ cancel?: string;
139
+ tryAgain?: string;
140
+ retake?: string;
141
+ useThisPhoto?: string;
142
+ uploadInstead?: string;
143
+ scan?: string;
144
+ upload?: string;
145
+ submitting?: string;
146
+ };
147
+ /** Titles shown under the loader for each transient state. */
148
+ loading?: {
149
+ default?: string;
150
+ verifying?: string;
151
+ submittingDocument?: string;
152
+ checkingQuality?: string;
153
+ };
154
+ /** Face capture primer. */
155
+ face?: {
156
+ title?: string;
157
+ body?: string;
158
+ start?: string;
159
+ };
160
+ /** Document capture surfaces. */
161
+ document?: {
162
+ selectTitle?: string;
163
+ selectBody?: string;
164
+ primerTitle?: string;
165
+ primerBody?: string;
166
+ uploadTitle?: string;
167
+ uploadBody?: string;
168
+ scanTitle?: string;
169
+ scanBody?: string;
170
+ confirmTitle?: string;
171
+ confirmBody?: string;
172
+ };
173
+ /** Form + ID-number surfaces. */
174
+ form?: {
175
+ title?: string;
176
+ };
177
+ idNumber?: {
178
+ title?: string;
179
+ body?: string;
180
+ };
181
+ /** Terminal result screens. */
182
+ result?: {
183
+ successTitle?: string;
184
+ successBody?: string;
185
+ reviewTitle?: string;
186
+ reviewBody?: string;
187
+ notVerifiedTitle?: string;
188
+ notVerifiedBody?: string;
189
+ cancelledTitle?: string;
190
+ };
191
+ /** Error copy (provider failure vs unreadable capture vs generic). */
192
+ errors?: {
193
+ generic?: string;
194
+ providerUnavailable?: string;
195
+ documentUnreadable?: string;
196
+ };
197
+ /** Privacy / consent disclosures shown to the subject. */
198
+ privacy?: {
199
+ disclosure?: string;
200
+ consentTitle?: string;
201
+ consentBody?: string;
202
+ };
203
+ /** Free-form help text / tooltips keyed by an SDK-defined slot id. */
204
+ help?: Record<string, string>;
205
+ }
52
206
  /** Options for `UseSenseFlows.runFlow`. */
53
207
  export interface RunFlowOptions {
54
208
  flowRunId: string;
55
209
  sdkToken: string;
56
210
  /** Defaults to `https://api.usesense.ai`. */
57
211
  apiBaseUrl?: string;
212
+ /**
213
+ * SDK-init white-label appearance. Forwarded to the native runner, which
214
+ * decodes it and merges it over the operator's server-delivered branding
215
+ * (SDK-init takes precedence). Omit to use the hosted-page tokens.
216
+ */
217
+ appearance?: FlowAppearance;
218
+ /**
219
+ * SDK-init white-label copy. Forwarded to the native runner, which decodes
220
+ * it and merges it over the operator's server-delivered copy (SDK-init takes
221
+ * precedence). Omit to keep the built-in subject-facing strings.
222
+ */
223
+ copy?: FlowCopy;
58
224
  }
59
225
  /**
60
226
  * Public entry point for the Flows runner. Sessions APIs are untouched;
@@ -1 +1 @@
1
- {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../../src/flows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAoBH;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,aAAa,GACb,SAAS,GACT,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,WAAW,GACX,WAAW,CAAC;AAEhB,sCAAsC;AACtC,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,eAAe,GACf,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,WAAW,GACX,oBAAoB;AACtB;;4EAE4E;GAC1E,eAAe,GACf,SAAS,CAAC;AAoBd,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAQD;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;gBACjB,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;CAKjD;AAED,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa;IACxB;;;;;OAKG;qBACoB,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAoB/D,CAAC"}
1
+ {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../../src/flows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA4BH;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,aAAa,GACb,SAAS,GACT,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,WAAW,GACX,WAAW,CAAC;AAEhB,sCAAsC;AACtC,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,eAAe,GACf,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,WAAW,GACX,oBAAoB;AACtB;;4EAE4E;GAC1E,eAAe,GACf,SAAS,CAAC;AAoBd,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAQD;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;gBACjB,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;CAKjD;AAWD,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;+EAC2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACpC;AAED,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC9B,6BAA6B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC/C,kCAAkC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACnD,kCAAkC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACxD,mCAAmC;IACnC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,4DAA4D;IAC5D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,gDAAgD;IAChD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,qEAAqE;IACrE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,4BAA4B;IAC5B,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,8DAA8D;IAC9D,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1G,2BAA2B;IAC3B,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,iCAAiC;IACjC,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QACtC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC7C,CAAC;IACF,iCAAiC;IACjC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,+BAA+B;IAC/B,MAAM,CAAC,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QACpD,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,sEAAsE;IACtE,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzF,0DAA0D;IAC1D,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa;IACxB;;;;;OAKG;qBACoB,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAsB/D,CAAC"}
@@ -264,5 +264,5 @@ export interface V4Verdict {
264
264
  timestamp: string;
265
265
  }
266
266
  export default UseSense;
267
- export { UseSenseFlows, FlowError, type FlowErrorCode, type FlowOutcome, type FlowRunResult, type FlowRunState, type RunFlowOptions, } from './flows';
267
+ export { UseSenseFlows, FlowError, type FlowErrorCode, type FlowOutcome, type FlowRunResult, type FlowRunState, type RunFlowOptions, type FlowAppearance, type FlowCopy, type AppearanceColors, type AppearanceTypography, type AppearanceShape, type AppearanceIcons, type AppearanceLoader, } from './flows';
268
268
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-usesense",
3
- "version": "2.1.1",
3
+ "version": "2.3.0",
4
4
  "description": "React Native plugin for human presence verification. Wraps the native UseSense iOS and Android SDKs.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -26,5 +26,5 @@ Pod::Spec.new do |s|
26
26
  # redaction result type with a completely different UseSenseConfig
27
27
  # init signature. See CHANGELOG [2.0.0] for the full rewrite
28
28
  # rationale.
29
- s.dependency "UseSenseSDK", "~> 4.4"
29
+ s.dependency "UseSenseSDK", "~> 4.5"
30
30
  end
package/src/flows.ts CHANGED
@@ -34,7 +34,15 @@ const LINKING_ERROR =
34
34
  function nativeModule() {
35
35
  const m = NativeModules.UseSenseFlowsModule;
36
36
  if (!m) throw new Error(LINKING_ERROR);
37
- return m as { runFlow: (flowRunId: string, sdkToken: string, apiBaseUrl: string | null) => Promise<NativeFlowRunResult> };
37
+ return m as {
38
+ runFlow: (
39
+ flowRunId: string,
40
+ sdkToken: string,
41
+ apiBaseUrl: string | null,
42
+ appearance: FlowAppearance | null,
43
+ copy: FlowCopy | null,
44
+ ) => Promise<NativeFlowRunResult>;
45
+ };
38
46
  }
39
47
 
40
48
  /**
@@ -117,12 +125,154 @@ export class FlowError extends Error {
117
125
  }
118
126
  }
119
127
 
128
+ // ─── White-label contract (mirrors the web SDK) ───────────────────────────
129
+ //
130
+ // FlowAppearance + FlowCopy are the shared customization schemas (Phase 1 +
131
+ // Phase 2 of the white-label initiative). They mirror the web SDK contract
132
+ // (packages/sdk/src/flows/theme.ts + copy.ts) one-to-one with camelCase keys.
133
+ // The RN bridge forwards the raw object across to the native iOS/Android
134
+ // runner, which decodes it (FlowAppearance/FlowCopy.decodeFromJSONObject).
135
+ // Everything is optional; an omitted key falls back to the hosted-page tokens.
136
+
137
+ /** A palette layer. `dark` overrides apply only in dark mode. */
138
+ export interface AppearanceColors {
139
+ primary?: string;
140
+ primaryForeground?: string;
141
+ background?: string;
142
+ surface?: string;
143
+ foreground?: string;
144
+ muted?: string;
145
+ border?: string;
146
+ success?: string;
147
+ error?: string;
148
+ warning?: string;
149
+ /** Overrides applied on top of the dark base (e.g. a darker background). */
150
+ dark?: Omit<AppearanceColors, 'dark'>;
151
+ }
152
+
153
+ export interface AppearanceTypography {
154
+ /** Body font-family name (e.g. "DM Sans"). */
155
+ fontFamily?: string;
156
+ /** Heading/display font-family; defaults to fontFamily when omitted. */
157
+ displayFamily?: string;
158
+ /** A stylesheet URL or @font-face block to load custom fonts (web only;
159
+ * ignored by the native runners, which load fonts from app resources). */
160
+ fontCss?: string;
161
+ }
162
+
163
+ export interface AppearanceShape {
164
+ /** Base corner radius (cards, inputs). */
165
+ radius?: number;
166
+ /** Button corner radius; defaults to radius. */
167
+ buttonRadius?: number;
168
+ buttonStyle?: 'filled' | 'outline';
169
+ }
170
+
171
+ /** Custom illustration/icon overrides (image URLs replacing built-in glyphs). */
172
+ export interface AppearanceIcons {
173
+ /** Success result screen. */ success?: string;
174
+ /** Under-review result screen. */ review?: string;
175
+ /** Not-verified result screen. */ notVerified?: string;
176
+ /** Any other named slot by URL. */
177
+ [slot: string]: string | undefined;
178
+ }
179
+
180
+ /** Loading animation: a built-in preset or a custom asset. */
181
+ export interface AppearanceLoader {
182
+ /** Built-in preset. Default 'spinner'. */
183
+ style?: 'spinner' | 'dots' | 'bar';
184
+ /** Custom loader asset URL; overrides style. */
185
+ imageUrl?: string;
186
+ }
187
+
188
+ /**
189
+ * White-label appearance overrides for the Flow runner. Supplied at SDK init
190
+ * (this option) and merged over the operator's server-delivered branding by
191
+ * the native runner. Mirrors `FlowAppearance` in the web SDK.
192
+ */
193
+ export interface FlowAppearance {
194
+ colors?: AppearanceColors;
195
+ typography?: AppearanceTypography;
196
+ shape?: AppearanceShape;
197
+ logo?: { url?: string; placement?: 'header' | 'center' | 'none'; height?: number };
198
+ background?: { color?: string; imageUrl?: string };
199
+ /** Custom illustrations for result screens / icon slots. */
200
+ icons?: AppearanceIcons;
201
+ /** Loading-animation preset or custom asset. */
202
+ loader?: AppearanceLoader;
203
+ /** Force a palette or follow the OS (default 'auto'). */
204
+ mode?: 'light' | 'dark' | 'auto';
205
+ }
206
+
207
+ /**
208
+ * White-label copy overrides for the Flow runner. Every subject-facing string
209
+ * can be overridden; an omitted key keeps the built-in copy. Supplied at SDK
210
+ * init and merged over the operator's server-delivered copy by the native
211
+ * runner. Mirrors `FlowCopy` in the web SDK.
212
+ */
213
+ export interface FlowCopy {
214
+ /** Optional welcome/intro shown before the first step (when set). */
215
+ welcome?: { title?: string; body?: string };
216
+ /** Shared button labels. */
217
+ buttons?: {
218
+ continue?: string;
219
+ cancel?: string;
220
+ tryAgain?: string;
221
+ retake?: string;
222
+ useThisPhoto?: string;
223
+ uploadInstead?: string;
224
+ scan?: string;
225
+ upload?: string;
226
+ submitting?: string;
227
+ };
228
+ /** Titles shown under the loader for each transient state. */
229
+ loading?: { default?: string; verifying?: string; submittingDocument?: string; checkingQuality?: string };
230
+ /** Face capture primer. */
231
+ face?: { title?: string; body?: string; start?: string };
232
+ /** Document capture surfaces. */
233
+ document?: {
234
+ selectTitle?: string; selectBody?: string;
235
+ primerTitle?: string; primerBody?: string;
236
+ uploadTitle?: string; uploadBody?: string;
237
+ scanTitle?: string; scanBody?: string;
238
+ confirmTitle?: string; confirmBody?: string;
239
+ };
240
+ /** Form + ID-number surfaces. */
241
+ form?: { title?: string };
242
+ idNumber?: { title?: string; body?: string };
243
+ /** Terminal result screens. */
244
+ result?: {
245
+ successTitle?: string; successBody?: string;
246
+ reviewTitle?: string; reviewBody?: string;
247
+ notVerifiedTitle?: string; notVerifiedBody?: string;
248
+ cancelledTitle?: string;
249
+ };
250
+ /** Error copy (provider failure vs unreadable capture vs generic). */
251
+ errors?: { generic?: string; providerUnavailable?: string; documentUnreadable?: string };
252
+ /** Privacy / consent disclosures shown to the subject. */
253
+ privacy?: { disclosure?: string; consentTitle?: string; consentBody?: string };
254
+ /** Free-form help text / tooltips keyed by an SDK-defined slot id. */
255
+ help?: Record<string, string>;
256
+ }
257
+
120
258
  /** Options for `UseSenseFlows.runFlow`. */
121
259
  export interface RunFlowOptions {
122
260
  flowRunId: string;
123
261
  sdkToken: string;
124
262
  /** Defaults to `https://api.usesense.ai`. */
125
263
  apiBaseUrl?: string;
264
+ /**
265
+ * SDK-init white-label appearance. Forwarded to the native runner, which
266
+ * decodes it and merges it over the operator's server-delivered branding
267
+ * (SDK-init takes precedence). Omit to use the hosted-page tokens.
268
+ */
269
+ appearance?: FlowAppearance;
270
+ /**
271
+ * SDK-init white-label copy. Forwarded to the native runner, which decodes
272
+ * it and merges it over the operator's server-delivered copy (SDK-init takes
273
+ * precedence). Omit to keep the built-in subject-facing strings.
274
+ */
275
+ copy?: FlowCopy;
126
276
  }
127
277
 
128
278
  /**
@@ -142,6 +292,8 @@ export const UseSenseFlows = {
142
292
  options.flowRunId,
143
293
  options.sdkToken,
144
294
  options.apiBaseUrl ?? null,
295
+ options.appearance ?? null,
296
+ options.copy ?? null,
145
297
  );
146
298
  return {
147
299
  flowRunId: native.flowRunId,
package/src/index.ts CHANGED
@@ -402,4 +402,13 @@ export {
402
402
  type FlowRunResult,
403
403
  type FlowRunState,
404
404
  type RunFlowOptions,
405
+ // White-label contract (Phase 1 appearance + Phase 2 copy). Forwarded to the
406
+ // native runner via the bridge.
407
+ type FlowAppearance,
408
+ type FlowCopy,
409
+ type AppearanceColors,
410
+ type AppearanceTypography,
411
+ type AppearanceShape,
412
+ type AppearanceIcons,
413
+ type AppearanceLoader,
405
414
  } from './flows';