@frankieone/one-sdk 1.5.0-rc.6 → 1.6.1-beta
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/dist/commit.txt +1 -2
- package/dist/esm/modules/biometrics/definition.d.ts +2 -0
- package/dist/esm/modules/biometrics/definition.d.ts.map +1 -1
- package/dist/esm/modules/biometrics/vendors/Incode/index.d.ts +1 -0
- package/dist/esm/modules/biometrics/vendors/Incode/index.d.ts.map +1 -1
- package/dist/esm/modules/biometrics/vendors/OcrLabs/index.d.ts +1 -0
- package/dist/esm/modules/biometrics/vendors/OcrLabs/index.d.ts.map +1 -1
- package/dist/esm/modules/biometrics/vendors/Onfido/index.d.ts +1 -0
- package/dist/esm/modules/biometrics/vendors/Onfido/index.d.ts.map +1 -1
- package/dist/esm/modules/biometrics/vendors/Onfido/index.js +4 -1
- package/dist/esm/modules/biometrics/vendors/Onfido/index.js.map +1 -1
- package/dist/esm/modules/biometrics/vendors/dummy-biometrics/index.d.ts +1 -0
- package/dist/esm/modules/biometrics/vendors/dummy-biometrics/index.d.ts.map +1 -1
- package/dist/esm/modules/common/shared/models/Applicant.d.ts +13 -13
- package/dist/esm/modules/common/shared/models/Applicant.d.ts.map +1 -1
- package/dist/esm/modules/common/shared/models/Applicant.js +19 -16
- package/dist/esm/modules/common/shared/models/Applicant.js.map +1 -1
- package/dist/esm/modules/common/shared/models/Profile.d.ts +46 -7
- package/dist/esm/modules/common/shared/models/Profile.d.ts.map +1 -1
- package/dist/esm/modules/common/shared/models/Profile.js +62 -16
- package/dist/esm/modules/common/shared/models/Profile.js.map +1 -1
- package/dist/esm/modules/common/types/recipeConfiguration.types.d.ts +2 -1
- package/dist/esm/modules/common/types/recipeConfiguration.types.d.ts.map +1 -1
- package/dist/esm/modules/common/vendors/onfido/onfido.types.d.ts +47 -1
- package/dist/esm/modules/common/vendors/onfido/onfido.types.d.ts.map +1 -1
- package/dist/esm/modules/form/vendors/react/types/pages.type.d.ts +3 -3
- package/dist/esm/modules/form/vendors/react/types/pages.type.d.ts.map +1 -1
- package/dist/esm/modules/idv/definition.types.d.ts +19 -11
- package/dist/esm/modules/idv/definition.types.d.ts.map +1 -1
- package/dist/esm/modules/idv/vendors/Incode/index.d.ts +9 -13
- package/dist/esm/modules/idv/vendors/Incode/index.d.ts.map +1 -1
- package/dist/esm/modules/idv/vendors/Incode/index.js +7 -0
- package/dist/esm/modules/idv/vendors/Incode/index.js.map +1 -1
- package/dist/esm/modules/idv/vendors/Mastercard/index.d.ts +5 -10
- package/dist/esm/modules/idv/vendors/Mastercard/index.d.ts.map +1 -1
- package/dist/esm/modules/idv/vendors/OcrLabs/index.d.ts +5 -10
- package/dist/esm/modules/idv/vendors/OcrLabs/index.d.ts.map +1 -1
- package/dist/esm/modules/idv/vendors/Onfido/index.d.ts +5 -10
- package/dist/esm/modules/idv/vendors/Onfido/index.d.ts.map +1 -1
- package/dist/esm/modules/idv/vendors/Onfido/index.js +3 -2
- package/dist/esm/modules/idv/vendors/Onfido/index.js.map +1 -1
- package/dist/esm/modules/idv/vendors/common/iframeUtils/defineIframeIDVWrapper.d.ts +5 -10
- package/dist/esm/modules/idv/vendors/common/iframeUtils/defineIframeIDVWrapper.d.ts.map +1 -1
- package/dist/esm/modules/index.d.ts.map +1 -1
- package/dist/esm/modules/index.js.map +1 -1
- package/dist/esm/modules/individual/actions/profileType.d.ts +13 -0
- package/dist/esm/modules/individual/actions/profileType.d.ts.map +1 -0
- package/dist/esm/modules/individual/actions/profileType.js +18 -0
- package/dist/esm/modules/individual/actions/profileType.js.map +1 -0
- package/dist/esm/modules/individual/actions/search.d.ts.map +1 -1
- package/dist/esm/modules/individual/actions/search.js +8 -2
- package/dist/esm/modules/individual/actions/search.js.map +1 -1
- package/dist/esm/modules/individual/definition.d.ts +6 -0
- package/dist/esm/modules/individual/definition.d.ts.map +1 -1
- package/dist/esm/modules/individual/index.d.ts.map +1 -1
- package/dist/esm/modules/individual/index.js +41 -7
- package/dist/esm/modules/individual/index.js.map +1 -1
- package/dist/esm/modules/meta.json +1 -1
- package/dist/esm/modules/ocr/definition.d.ts +6 -1
- package/dist/esm/modules/ocr/definition.d.ts.map +1 -1
- package/dist/esm/modules/ocr/index.d.ts.map +1 -1
- package/dist/esm/modules/ocr/index.js +15 -2
- package/dist/esm/modules/ocr/index.js.map +1 -1
- package/dist/esm/modules/ocr/vendors/Incode/index.d.ts.map +1 -1
- package/dist/esm/modules/ocr/vendors/Incode/index.js +11 -5
- package/dist/esm/modules/ocr/vendors/Incode/index.js.map +1 -1
- package/dist/esm/modules/ocr/vendors/Onfido/index.d.ts +2 -2
- package/dist/esm/modules/ocr/vendors/Onfido/index.d.ts.map +1 -1
- package/dist/esm/modules/ocr/vendors/Onfido/index.js +109 -51
- package/dist/esm/modules/ocr/vendors/Onfido/index.js.map +1 -1
- package/dist/esm/modules/sdk/initialisation/configurationParser.d.ts +7 -7
- package/dist/esm/modules/sdk/initialisation/configurationParser.d.ts.map +1 -1
- package/dist/esm/modules/sdk/initialisation/configurationParser.js +23 -16
- package/dist/esm/modules/sdk/initialisation/configurationParser.js.map +1 -1
- package/dist/release.txt +1 -2
- package/dist/umd/biometrics-incode.js +1 -1
- package/dist/umd/biometrics-incode.js.map +1 -1
- package/dist/umd/biometrics-onfido.js +1 -1
- package/dist/umd/biometrics-onfido.js.map +1 -1
- package/dist/umd/form-legacy.js +1 -1
- package/dist/umd/form-legacy.js.map +1 -1
- package/dist/umd/form-react.js +1 -1
- package/dist/umd/form-react.js.map +1 -1
- package/dist/umd/idv-incode.js +1 -1
- package/dist/umd/idv-incode.js.map +1 -1
- package/dist/umd/idv-ocrlabs.js +1 -1
- package/dist/umd/idv-ocrlabs.js.map +1 -1
- package/dist/umd/idv-onfido.js +1 -1
- package/dist/umd/idv-onfido.js.map +1 -1
- package/dist/umd/ocr-dummy.js +1 -1
- package/dist/umd/ocr-dummy.js.map +1 -1
- package/dist/umd/ocr-incode.js +1 -1
- package/dist/umd/ocr-incode.js.map +1 -1
- package/dist/umd/ocr-onfido.js +1 -1
- package/dist/umd/ocr-onfido.js.map +1 -1
- package/dist/umd/oneSdk.umd.js +1 -1
- package/dist/umd/oneSdk.umd.js.map +1 -1
- package/dist/version.txt +2 -2
- package/package.json +2 -2
|
@@ -18,9 +18,10 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
18
|
}
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
|
-
import { OneSDKError, merge } from
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
21
|
+
import { OneSDKError, merge } from '../../common/index.js';
|
|
22
|
+
import { ProfileTypeEnumerated } from '../../common/shared/models/Profile.js';
|
|
23
|
+
import { ConfigurationClient } from '../../frankie-client/clients/ConfigurationClient.js';
|
|
24
|
+
import { SdkModes } from '../types/index.js';
|
|
24
25
|
/**
|
|
25
26
|
*
|
|
26
27
|
* Parses parameters passed to OneSDK constructor and returns a dictionary of GlobalState variables and a list of warnings to be emitted as global events by the top level constructor
|
|
@@ -83,17 +84,19 @@ export function resolveModeObject(modeParameter) {
|
|
|
83
84
|
};
|
|
84
85
|
if (!modeParameter)
|
|
85
86
|
return modeObject;
|
|
86
|
-
const providedAsString = typeof modeParameter ===
|
|
87
|
-
const ensureObjectValue = providedAsString
|
|
87
|
+
const providedAsString = typeof modeParameter === 'string';
|
|
88
|
+
const ensureObjectValue = providedAsString
|
|
89
|
+
? { modeName: modeParameter }
|
|
90
|
+
: modeParameter;
|
|
88
91
|
return Object.assign(modeObject, ensureObjectValue);
|
|
89
92
|
}
|
|
90
93
|
export function resolveRecipeValue(recipeParameter) {
|
|
91
94
|
var _a;
|
|
92
95
|
if (!recipeParameter)
|
|
93
|
-
return { name:
|
|
94
|
-
if (typeof recipeParameter ===
|
|
96
|
+
return { name: ProfileTypeEnumerated.auto };
|
|
97
|
+
if (typeof recipeParameter === 'string')
|
|
95
98
|
return { name: recipeParameter };
|
|
96
|
-
return Object.assign(Object.assign({}, recipeParameter), { name: (_a = recipeParameter === null || recipeParameter === void 0 ? void 0 : recipeParameter.name) !== null && _a !== void 0 ? _a :
|
|
99
|
+
return Object.assign(Object.assign({}, recipeParameter), { name: (_a = recipeParameter === null || recipeParameter === void 0 ? void 0 : recipeParameter.name) !== null && _a !== void 0 ? _a : ProfileTypeEnumerated.auto });
|
|
97
100
|
}
|
|
98
101
|
export function includeTelemetry(oneSdkOptions) {
|
|
99
102
|
// Telemetry is on by default. If anything other than a explicit false is passed, enable it.
|
|
@@ -107,11 +110,13 @@ function mergeRecipeConfigurations(provided, fetched, warnings) {
|
|
|
107
110
|
const _a = resolveRecipeValue(fetched), { name: fetchedRecipeName } = _a, fetchedRecipeObject = __rest(_a, ["name"]);
|
|
108
111
|
/* eslint-disable */
|
|
109
112
|
const mergedRecipeConfiguration = merge({}, fetchedRecipeObject, providedRecipeObject, {
|
|
110
|
-
name: providedRecipeName ===
|
|
113
|
+
name: providedRecipeName === 'auto' ? fetchedRecipeName : providedRecipeName,
|
|
111
114
|
});
|
|
112
|
-
if (providedRecipeName !==
|
|
115
|
+
if (providedRecipeName !== 'auto' &&
|
|
116
|
+
fetchedRecipeName &&
|
|
117
|
+
providedRecipeName !== fetchedRecipeName) {
|
|
113
118
|
warnings.push({
|
|
114
|
-
level:
|
|
119
|
+
level: 'error',
|
|
115
120
|
data: new OneSDKError(`Recipe name mismatch. Requested '${providedRecipeName}', found '${fetchedRecipeName}'.` +
|
|
116
121
|
"Configuration might be incorrect. Check this event's 'payload' for the resulting configuration object.", mergedRecipeConfiguration),
|
|
117
122
|
});
|
|
@@ -121,17 +126,19 @@ function mergeRecipeConfigurations(provided, fetched, warnings) {
|
|
|
121
126
|
function fetchRecipeConfig(options, warnings) {
|
|
122
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
123
128
|
warnings.push({
|
|
124
|
-
level:
|
|
129
|
+
level: 'info',
|
|
125
130
|
data: {
|
|
126
|
-
message:
|
|
131
|
+
message: 'Fetching recipe configuration',
|
|
127
132
|
payload: { recipeName: options.recipe.name },
|
|
128
133
|
},
|
|
129
134
|
});
|
|
130
|
-
const config = new ConfigurationClient(options.frankieClient, {
|
|
135
|
+
const config = new ConfigurationClient(options.frankieClient, {
|
|
136
|
+
recipe: options.recipe.name,
|
|
137
|
+
});
|
|
131
138
|
return config.load().catch((error) => {
|
|
132
139
|
warnings.push({
|
|
133
|
-
level:
|
|
134
|
-
data: new OneSDKError(
|
|
140
|
+
level: 'error',
|
|
141
|
+
data: new OneSDKError('Failed fetching recipe configuration. Using provided configuration only.', error),
|
|
135
142
|
});
|
|
136
143
|
return {};
|
|
137
144
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationParser.js","sourceRoot":"","sources":["../../../../../modules/sdk/initialisation/configurationParser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"configurationParser.js","sourceRoot":"","sources":["../../../../../modules/sdk/initialisation/configurationParser.ts"],"names":[],"mappings":"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"}
|
package/dist/release.txt
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
v1.5.0-rc.6
|
|
1
|
+
v1.6.1-beta
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkOneSdk=self.webpackChunkOneSdk||[]).push([[153],{6715:(e,n,t)=>{t.r(n),t.d(n,{initialise:()=>u});var o=t(8016),i=t(2365),r=t(3655),s=t(5473),c=t(1272),d=t(9188),a=function(e,n,t,o){return new(t||(t=Promise))((function(i,r){function s(e){try{d(o.next(e))}catch(e){r(e)}}function c(e){try{d(o.throw(e))}catch(e){r(e)}}function d(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}d((o=o.apply(e,n||[])).next())}))};const u=(0,s.f)("incode",((e,n)=>a(void 0,void 0,void 0,(function*(){const{frankieClient:t,recipe:s}=e,{biometrics:{provider:u}}=s,{mountElement:l,eventHub:m}=n,v=new d.Ns(t),p=yield(0,o.j)(v,m);if(!p)return;const{vendorParameters:f}=p;try{const{apiURL:e,token:n,interviewId:t}=f,{incode:o}=yield(0,c.ai)({apiURL:e,sdkVersion:"incode"===u.name&&u.sdkVersion}),i=document.createElement("style");i.innerHTML="\n .IncodeCaptureSelfieBordersContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n }",document.head.appendChild(i);const{onLog:d,onError:p}=(0,c.g6)("biometrics",{eventHub:m,entityId:v.entityId}),y={incode:o,token:{token:n,interviewId:t},eventHub:m,mountElement:l,onError:p,onLog:d};(0,c.Yv)("biometrics",Object.assign(Object.assign({},y),{onSuccess:()=>a(void 0,void 0,void 0,(function*(){m.emit("detection_complete"),yield(0,r.W)({idvClient:v,recipe:s,eventHub:m}),m.emit("session_closed")}))})),m.emit("ready",{domElement:l})}catch(e){const n=(0,i.M)(s),{type:t=null,message:o=""}=e;m.emit("error",n("DEFAULT",{type:t,message:o}))}return{}}))))},8016:(e,n,t)=>{t.d(n,{j:()=>o});const o=(e,n)=>{return t=void 0,o=void 0,r=function*(){n.emit("loading",!0,{message:"Loading biometrics vendor"});try{const{entityId:t,token:o,vendorParameters:i}=yield e.getToken();return n.emit("session_data_generated",{session:{entityId:t,token:o,vendorParameters:i}}),n.emit("loading",!1,{message:"Biometrics vendor has loaded"}),{entityId:t,token:o,vendorParameters:i}}catch(e){const{code:t=null,message:o=""}=e;return n.emit("session_data_failed_loading",{code:t,message:o}),n.emit("loading",!1,{message:"Biometrics vendor has not loaded"}),null}},new((i=void 0)||(i=Promise))((function(e,n){function s(e){try{d(r.next(e))}catch(e){n(e)}}function c(e){try{d(r.throw(e))}catch(e){n(e)}}function d(n){var t;n.done?e(n.value):(t=n.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,c)}d((r=r.apply(t,o||[])).next())}));var t,o,i,r}},2365:(e,n,t)=>{t.d(n,{M:()=>r});var o=t(4334),i=t(9188);const r=e=>{const{biometrics:{provider:{name:n}}}=e;return(e,...t)=>{return new o.OneSDKError((r=n,{DEFAULT:`Error from vendor SDK '${r}'`,INIT_PROCESS:"Error from biometrics submission",[i.Yt.PROVIDER_OFFLINE]:`Error initialising biometrics check with '${r}'. The service doesn't appear to be available.`,[i.Yt.WAITING_DOC_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to run the 'ocr' component before running 'biometrics'.`,[i.Yt.WAITING_SELFIE_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to capture selfie before running 'biometrics'.`})[e],t);var r}}},3655:(e,n,t)=>{t.d(n,{W:()=>r});var o=t(2365),i=t(9188);const r=e=>{return n=void 0,t=[e],s=function*({idvClient:e,recipe:n,eventHub:t}){t.emit("loading",!0,{message:"Evaluating results"});const{biometrics:{is_synchronous:r}}=n,s=(0,o.M)(n),{checkStatus:c,ocrDocument:d}=yield e.initProcess({isSynchronous:!!r});(0,i.q8)(c)||(0,i.tX)(c)?t.emit("error",s(c)):t.emit(r?"results":"processing",{checkStatus:c,document:d,entityId:e.entityId}),t.emit("loading",!1,{message:"Results have retrived"})},new((r=void 0)||(r=Promise))((function(e,o){function i(e){try{d(s.next(e))}catch(e){o(e)}}function c(e){try{d(s.throw(e))}catch(e){o(e)}}function d(n){var t;n.done?e(n.value):(t=n.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}d((s=s.apply(n,t||[])).next())}));var n,t,r,s}},1272:(e,n,t)=>{t.d(n,{g6:()=>s,ai:()=>l,Yv:()=>d});var o=t(4334),i=t(
|
|
1
|
+
"use strict";(self.webpackChunkOneSdk=self.webpackChunkOneSdk||[]).push([[153],{6715:(e,n,t)=>{t.r(n),t.d(n,{initialise:()=>u});var o=t(8016),i=t(2365),r=t(3655),s=t(5473),c=t(1272),d=t(9188),a=function(e,n,t,o){return new(t||(t=Promise))((function(i,r){function s(e){try{d(o.next(e))}catch(e){r(e)}}function c(e){try{d(o.throw(e))}catch(e){r(e)}}function d(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}d((o=o.apply(e,n||[])).next())}))};const u=(0,s.f)("incode",((e,n)=>a(void 0,void 0,void 0,(function*(){const{frankieClient:t,recipe:s}=e,{biometrics:{provider:u}}=s,{mountElement:l,eventHub:m}=n,v=new d.Ns(t),p=yield(0,o.j)(v,m);if(!p)return;const{vendorParameters:f}=p;try{const{apiURL:e,token:n,interviewId:t}=f,{incode:o}=yield(0,c.ai)({apiURL:e,sdkVersion:"incode"===u.name&&u.sdkVersion}),i=document.createElement("style");i.innerHTML="\n .IncodeCaptureSelfieBordersContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n }",document.head.appendChild(i);const{onLog:d,onError:p}=(0,c.g6)("biometrics",{eventHub:m,entityId:v.entityId}),y={incode:o,token:{token:n,interviewId:t},eventHub:m,mountElement:l,onError:p,onLog:d};(0,c.Yv)("biometrics",Object.assign(Object.assign({},y),{onSuccess:()=>a(void 0,void 0,void 0,(function*(){m.emit("detection_complete"),yield(0,r.W)({idvClient:v,recipe:s,eventHub:m}),m.emit("session_closed")}))})),m.emit("ready",{domElement:l})}catch(e){const n=(0,i.M)(s),{type:t=null,message:o=""}=e;m.emit("error",n("DEFAULT",{type:t,message:o}))}return{}}))))},8016:(e,n,t)=>{t.d(n,{j:()=>o});const o=(e,n)=>{return t=void 0,o=void 0,r=function*(){n.emit("loading",!0,{message:"Loading biometrics vendor"});try{const{entityId:t,token:o,vendorParameters:i}=yield e.getToken();return n.emit("session_data_generated",{session:{entityId:t,token:o,vendorParameters:i}}),n.emit("loading",!1,{message:"Biometrics vendor has loaded"}),{entityId:t,token:o,vendorParameters:i}}catch(e){const{code:t=null,message:o=""}=e;return n.emit("session_data_failed_loading",{code:t,message:o}),n.emit("loading",!1,{message:"Biometrics vendor has not loaded"}),null}},new((i=void 0)||(i=Promise))((function(e,n){function s(e){try{d(r.next(e))}catch(e){n(e)}}function c(e){try{d(r.throw(e))}catch(e){n(e)}}function d(n){var t;n.done?e(n.value):(t=n.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,c)}d((r=r.apply(t,o||[])).next())}));var t,o,i,r}},2365:(e,n,t)=>{t.d(n,{M:()=>r});var o=t(4334),i=t(9188);const r=e=>{const{biometrics:{provider:{name:n}}}=e;return(e,...t)=>{return new o.OneSDKError((r=n,{DEFAULT:`Error from vendor SDK '${r}'`,INIT_PROCESS:"Error from biometrics submission",[i.Yt.PROVIDER_OFFLINE]:`Error initialising biometrics check with '${r}'. The service doesn't appear to be available.`,[i.Yt.WAITING_DOC_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to run the 'ocr' component before running 'biometrics'.`,[i.Yt.WAITING_SELFIE_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to capture selfie before running 'biometrics'.`})[e],t);var r}}},3655:(e,n,t)=>{t.d(n,{W:()=>r});var o=t(2365),i=t(9188);const r=e=>{return n=void 0,t=[e],s=function*({idvClient:e,recipe:n,eventHub:t}){t.emit("loading",!0,{message:"Evaluating results"});const{biometrics:{is_synchronous:r}}=n,s=(0,o.M)(n),{checkStatus:c,ocrDocument:d}=yield e.initProcess({isSynchronous:!!r});(0,i.q8)(c)||(0,i.tX)(c)?t.emit("error",s(c)):t.emit(r?"results":"processing",{checkStatus:c,document:d,entityId:e.entityId}),t.emit("loading",!1,{message:"Results have retrived"})},new((r=void 0)||(r=Promise))((function(e,o){function i(e){try{d(s.next(e))}catch(e){o(e)}}function c(e){try{d(s.throw(e))}catch(e){o(e)}}function d(n){var t;n.done?e(n.value):(t=n.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}d((s=s.apply(n,t||[])).next())}));var n,t,r,s}},1272:(e,n,t)=>{t.d(n,{g6:()=>s,ai:()=>l,Yv:()=>d});var o=t(4334),i=t(4366),r=t(4527);const s=(e,{eventHub:n,entityId:t})=>{let s=!1;const c=["InternalServerError","skip","OSVersionNotSupported","browserNotSupported"];return{biometrics:{onLog:({type:e})=>{"noAttemps"===e&&(s=!0)},onError:({type:e,payload:r})=>{s?n.emit("detection_failed",{message:null==r?void 0:r.message}):"permissionDenied"===e?n.emit("input_required",{entityId:t},i.Yt.INTERRUPTED):c.includes(e)&&n.emit("error",new o.OneSDKError("Error from vendor SDK 'Incode'",{type:e,payload:r}))}},ocr:{onLog:({type:e,payload:t})=>{["IDNotDetected","nothingHappened","manualCaptureOn","successCapture","attemptFailed","success"].includes(e)?n.emit("info",{message:null==t?void 0:t.message,payload:{type:e}}):"noAttemps"===e&&(s=!0)},onError:({type:e,payload:t})=>{s?n.emit("detection_failed",{message:null==t?void 0:t.message}):"permissionDenied"===e?n.emit("input_required",{documentType:null,side:"front"},r.By.INTERRUPTED,(()=>({}))):c.includes(e)&&n.emit("error",new o.OneSDKError("Error from vendor SDK 'Incode'",{type:e,payload:t}))}}}[e]};var c=function(e,n,t,o){return new(t||(t=Promise))((function(i,r){function s(e){try{d(o.next(e))}catch(e){r(e)}}function c(e){try{d(o.throw(e))}catch(e){r(e)}}function d(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}d((o=o.apply(e,n||[])).next())}))};const d=(e,n)=>c(void 0,void 0,void 0,(function*(){if("ocr"===e)return yield a("front",Object.assign(Object.assign({},n),{onSuccess:e=>c(void 0,[e],void 0,(function*({skipBackIdCapture:e,typeOfId:t,countryCode:o}){var i,r;(null===(i=null==n?void 0:n.validate)||void 0===i?void 0:i.call(n,{typeOfId:t,countryCode:o}))&&(e?null===(r=null==n?void 0:n.onSuccess)||void 0===r||r.call(n,{}):yield a("back",n))}))}));if("biometrics"===e)return yield a("selfie",n);throw new o.OneSDKError("Unknown purpose",{purpose:e})})),a=(e,n)=>c(void 0,void 0,void 0,(function*(){const{incode:t,token:i,eventHub:r,mountElement:s,onSuccess:d=(()=>({})),onError:a,onLog:u}=n;return new Promise(((n,l)=>{try{t.renderCamera(e,s,{onSuccess:e=>c(void 0,void 0,void 0,(function*(){return d(e),n({})})),onError:e=>(a(e),l(e)),onLog:e=>{u(e)},token:i,numberOfTries:3})}catch(e){const{message:n=""}=e;return r.emit("error",new o.OneSDKError("Error from vendor SDK 'Incode'",{message:n})),l(e)}}))}));var u=function(e,n,t,o){return new(t||(t=Promise))((function(i,r){function s(e){try{d(o.next(e))}catch(e){r(e)}}function c(e){try{d(o.throw(e))}catch(e){r(e)}}function d(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}d((o=o.apply(e,n||[])).next())}))};const l=e=>u(void 0,[e],void 0,(function*({apiURL:e,sdkVersion:n="1.69.1"}){return yield(0,o.loadAsyncAsset)(`https://sdk.incode.com/sdk/onBoarding-${n}.js`),{incode:yield m({apiURL:`${e}/0/`})}})),m=e=>u(void 0,[e],void 0,(function*({apiURL:e}){const n=window.OnBoarding.create({apiURL:e});return yield n.warmup(),n}))}}]);
|
|
2
2
|
//# sourceMappingURL=biometrics-incode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"biometrics-incode.js","mappings":"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","sources":["webpack://OneSdk/./modules/biometrics/vendors/Incode/index.ts","webpack://OneSdk/./modules/biometrics/vendors/common/createSession.ts","webpack://OneSdk/./modules/biometrics/vendors/common/errors.ts","webpack://OneSdk/./modules/biometrics/vendors/common/initProcess.ts","webpack://OneSdk/./modules/common/vendors/incode/createEventHandlers.ts","webpack://OneSdk/./modules/common/vendors/incode/startCamera.ts","webpack://OneSdk/./modules/common/vendors/incode/index.ts"],"sourcesContent":["import type { BiometricsModule } from '@module/biometrics';\nimport { createSession } from '@module/biometrics/vendors/common/createSession';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport { initProcess } from '@module/biometrics/vendors/common/initProcess';\nimport { defineWrapper } from '@module/common/modules/defineModule';\nimport type { IncodeSession } from '@module/common/vendors/incode';\nimport {\n createEventHandlers,\n install,\n startCamera,\n} from '@module/common/vendors/incode';\nimport { IDVClient } from '@module/frankie-client/clients/IDVClient';\n\nexport const initialise = defineWrapper<BiometricsModule>('incode', async (\n shared,\n options,\n) => {\n const { frankieClient, recipe } = shared;\n const { biometrics: { provider } } = recipe;\n const { mountElement, eventHub } = options;\n const idvClient = new IDVClient(frankieClient);\n\n // generate session token from backend\n const idvSession = await createSession<IncodeSession>(idvClient, eventHub);\n // terminate initialising if session failed\n if (!idvSession) return;\n const { vendorParameters } = idvSession;\n\n try {\n // initialise Incode with credentials\n const { apiURL, token, interviewId } = vendorParameters;\n const { incode } = await install({\n apiURL,\n sdkVersion: provider.name === 'incode' && provider.sdkVersion,\n });\n\n /**\n * There is CSS misalignment from Incode loading animation\n * Adding style override to enforce center alignment\n */\n const styleSheet = document.createElement('style');\n styleSheet.innerHTML = `\n .IncodeCaptureSelfieBordersContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n }`;\n document.head.appendChild(styleSheet);\n\n const {\n onLog,\n onError,\n } = createEventHandlers('biometrics', {\n eventHub,\n entityId: idvClient.entityId,\n });\n const cameraProps = {\n incode,\n token: { token, interviewId },\n eventHub,\n mountElement,\n onError,\n onLog,\n };\n // turn on camera to capture selfie\n // \"void\" operator indicates the intention of non-blocking async process\n // it allows other events to emit while using camera to capture\n void startCamera('biometrics', {\n ...cameraProps,\n onSuccess: async (): Promise<void> => {\n eventHub.emit('detection_complete');\n await initProcess({ idvClient, recipe, eventHub });\n eventHub.emit('session_closed');\n },\n });\n eventHub.emit('ready', { domElement: mountElement });\n } catch (error) {\n const errorMessages = mkErrors(recipe);\n const { type = null, message = '' } = error;\n eventHub.emit('error', errorMessages('DEFAULT', { type, message }));\n }\n\n return {};\n});\n","import type { Events } from '@module/biometrics/events';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport type { _DictionaryWrite } from '@types';\n\n/**\n * Creates a session by obtaining an entity ID, token, and vendor parameters from an IDVClient.\n * It will also emit 'session_data_generated' event to the provided event hub.\n * This function won't throw errors. Instead, it will emit 'session_data_failed_loading' and return null.\n *\n * @param idvClient - The IDVClient instance used to obtain the session data.\n * @param eventHub - The EventHub instance for emitting session-related events.\n * @returns A Promise that resolves with an object containing entityId, token, and vendorParameters upon success, or null if a session couldn't be created\n */\nexport const createSession = async <T extends _DictionaryWrite<unknown>>(\n idvClient: IDVClient,\n eventHub: EventHub<Events>,\n): Promise<{ entityId: string; token: string; vendorParameters: T } | null> => {\n eventHub.emit('loading', true, { message: 'Loading biometrics vendor' });\n try {\n const { entityId, token, vendorParameters } = await idvClient.getToken<T>();\n eventHub.emit('session_data_generated', {\n session: { entityId, token, vendorParameters },\n });\n eventHub.emit('loading', false, { message: 'Biometrics vendor has loaded' });\n return { entityId, token, vendorParameters };\n } catch (error) {\n const { code = null, message = '' } = error;\n eventHub.emit('session_data_failed_loading', { code, message });\n eventHub.emit('loading', false, { message: `Biometrics vendor has not loaded` });\n return null;\n }\n};\n","import { OneSDKError } from '@module/common';\nimport { IDVStatus } from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport type ErrorMessages = Record<\n 'DEFAULT' | 'INIT_PROCESS' | Extract<IDVStatus, 'PROVIDER_OFFLINE' | 'WAITING_DOC_UPLOAD' | 'WAITING_SELFIE_UPLOAD'>,\n string\n>;\n\nconst mkErrorMessages = (provider: string): ErrorMessages => ({\n DEFAULT: `Error from vendor SDK '${provider}'`,\n INIT_PROCESS: 'Error from biometrics submission',\n [IDVStatus.PROVIDER_OFFLINE]: `Error initialising biometrics check with '${provider}'. The service doesn't appear to be available.`,\n [IDVStatus.WAITING_DOC_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to run the 'ocr' component before running 'biometrics'.`,\n [IDVStatus.WAITING_SELFIE_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to capture selfie before running 'biometrics'.`,\n});\n\nexport const mkErrors = (recipe: RecipeParsed) => {\n const {\n biometrics: {\n provider: {\n name,\n },\n },\n } = recipe;\n\n return (type: keyof ErrorMessages, ...payload: unknown[]) => {\n return new OneSDKError(mkErrorMessages(name)[type], payload);\n };\n \n};\n","import type { Events } from '@module/biometrics/events';\nimport type { ErrorMessages } from '@module/biometrics/vendors/common/errors';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport {\n isErrorStatus,\n isInputRequiredStatus,\n} from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport const initProcess = async (\n { idvClient, recipe, eventHub }: {\n idvClient: IDVClient;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n },\n) => {\n eventHub.emit('loading', true, { message: 'Evaluating results' });\n const { biometrics: { is_synchronous: isSynchronous } } = recipe;\n const errorMessages = mkErrors(recipe);\n const {\n checkStatus,\n ocrDocument,\n } = await idvClient.initProcess({ isSynchronous: !!isSynchronous });\n if (isInputRequiredStatus(checkStatus) || isErrorStatus(checkStatus)) {\n eventHub.emit('error', errorMessages((checkStatus as keyof ErrorMessages)));\n } else {\n eventHub.emit(isSynchronous ? 'results' : 'processing', {\n checkStatus,\n document: ocrDocument,\n entityId: idvClient.entityId,\n });\n }\n eventHub.emit('loading', false, { message: 'Results have retrived' });\n};\n","import { IDVStatus } from '@frankieone/one-sdk';\nimport type { Events as BiometricsEvents } from '@module/biometrics';\nimport type { EventHub } from '@module/common';\nimport { OneSDKError } from '@module/common';\nimport type {\n IncodeResponse,\n} from '@module/common/vendors/incode/onBoarding.types';\nimport type { Events as OcrEvents } from '@module/ocr';\nimport { OCRStatus } from '@module/types';\n\n/**\n * Creates event handlers for a given EventHub.\n *\n * @param {'ocr' | 'biometrics'} module - The module type for which to create event handlers.\n * @param {object} options - The options for creating event handlers.\n * @param {EventHub<OcrEvents | BiometricsEvents>} options.eventHub - The EventHub for handling events.\n * @param {string} [options.entityId] - An optional entityId parameter.\n * @returns {object} - The event handlers for the specified module ('biometrics' or 'ocr').\n **/\nexport const createEventHandlers = (\n module: 'ocr' | 'biometrics', {\n eventHub,\n entityId,\n }: {\n eventHub: EventHub<OcrEvents | BiometricsEvents>;\n entityId?: string;\n },\n) => {\n\n // A flag indicating whether the event handler should emit error event\n let noAttemptsFlag = false;\n\n // user or environment issues that are not related to a specific workflow\n const genericErrors = [\n 'InternalServerError',\n 'skip',\n 'OSVersionNotSupported',\n 'browserNotSupported',\n ];\n\n /**\n * Event handlers for biometrics-related events.\n *\n * @namespace biometrics\n */\n const biometrics = {\n /**\n * Handles log events for biometrics.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onLog: (\n { type }: IncodeResponse,\n ): void => {\n if (type === 'noAttemps') { // not a typo, 'noAttemps' comes from Incode SDK\n // we would like to emit this scenario along with an Incode error event\n // update the error state so that a corresponding error can be emitted\n noAttemptsFlag = true;\n }\n },\n /**\n * Handles error events for biometrics.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onError: (\n { type, payload }: IncodeResponse,\n ): void => {\n // check if error state is being flagged in the log already\n if (noAttemptsFlag) {\n eventHub.emit('detection_failed', {\n message: payload?.message,\n });\n } else if (type === 'permissionDenied') {\n eventHub.emit('input_required', { entityId }, IDVStatus.INTERRUPTED);\n } else if (genericErrors.includes(type)) {\n eventHub.emit('error', new OneSDKError(`Error from vendor SDK 'Incode'`, {\n type,\n payload,\n }));\n }\n },\n };\n\n /**\n * Event handlers for OCR-related events.\n *\n * @namespace ocr\n */\n const ocr = {\n /**\n * Handles log events for OCR.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onLog: (\n { type, payload }: IncodeResponse,\n ): void => {\n if ([\n 'IDNotDetected',\n 'nothingHappened',\n 'manualCaptureOn',\n 'successCapture',\n 'attemptFailed',\n 'success',\n ].includes(type)) {\n eventHub.emit('info', {\n message: payload?.message,\n payload: { type },\n });\n } else if (type === 'noAttemps') { // not a typo, 'noAttemps' comes from Incode SDK\n // we would like to emit this scenario along with an Incode error event\n // update the error state so that a corresponding error can be emitted\n noAttemptsFlag = true;\n }\n },\n /**\n * Handles error events for OCR.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onError: (\n { type, payload }: IncodeResponse,\n ): void => {\n // check if error state is being flagged in the log already\n if (noAttemptsFlag) {\n eventHub.emit('detection_failed', {\n message: payload?.message,\n });\n } else if (type === 'permissionDenied') {\n eventHub.emit('input_required',\n {\n documentType: null,\n side: 'front',\n }, OCRStatus.INTERRUPTED, () => ({}));\n } else if (genericErrors.includes(type)) {\n eventHub.emit('error', new OneSDKError(`Error from vendor SDK 'Incode'`, {\n type,\n payload,\n }));\n }\n },\n };\n\n return { biometrics, ocr }[module];\n};\n","import type { EventHub } from '@module/common';\nimport { OneSDKError } from '@module/common';\nimport type {\n IncodeInstance,\n IncodeResponse,\n IncodeSuccessResponse,\n} from '@module/common/vendors/incode/onBoarding.types';\nimport type { Events } from '@module/ocr';\n\ntype CameraProps = {\n incode: IncodeInstance;\n token: { token: string; interviewId: string };\n eventHub: EventHub<Events>;\n mountElement: HTMLElement;\n onSuccess?: (response: Partial<IncodeSuccessResponse>) => void;\n onError: (response: unknown, payload?: unknown) => void;\n onLog: (response: unknown) => void;\n validate?: ({\n typeOfId,\n countryCode,\n }: Partial<IncodeSuccessResponse>) => boolean;\n};\n\nexport const startCamera = async (\n purpose: 'biometrics' | 'ocr',\n cameraProps: CameraProps,\n) => {\n if (purpose === 'ocr') {\n return await renderCamera('front', {\n ...cameraProps,\n onSuccess: async ({\n skipBackIdCapture,\n typeOfId,\n countryCode,\n }: IncodeSuccessResponse,\n ): Promise<void> => {\n if (!cameraProps?.validate?.({ typeOfId, countryCode })) return;\n // when Incode determines it needs to capture the back of document\n if (!skipBackIdCapture) {\n await renderCamera('back', cameraProps);\n } else {\n cameraProps?.onSuccess?.({});\n }\n },\n });\n } else if (purpose === 'biometrics') {\n return await renderCamera('selfie', cameraProps);\n }\n throw new OneSDKError('Unknown purpose', { purpose });\n};\n\nconst renderCamera = async (\n type: 'front' | 'back' | 'selfie',\n cameraProps: CameraProps,\n) => {\n const {\n incode,\n token,\n eventHub,\n mountElement,\n onSuccess = () => ({}),\n onError,\n onLog,\n } = cameraProps;\n return new Promise((resolve, reject): void => {\n try {\n incode.renderCamera(type, mountElement, {\n onSuccess: async (response: IncodeSuccessResponse): Promise<void> => {\n onSuccess(response);\n return resolve({});\n },\n onError: (error: IncodeResponse) => {\n onError(error);\n return reject(error);\n },\n onLog: (log: IncodeResponse) => {\n onLog(log);\n },\n token,\n numberOfTries: 3,\n });\n } catch (error) {\n const { message = '' } = error;\n eventHub.emit('error', new OneSDKError(`Error from vendor SDK 'Incode'`, { message }));\n return reject(error);\n }\n });\n};\n","import { loadAsyncAsset } from '@module/common';\nimport type {\n IncodeConfig,\n IncodeInstance,\n} from '@module/common/vendors/incode/onBoarding.types';\n\nexport { createEventHandlers } from './createEventHandlers';\nexport { startCamera } from './startCamera';\nexport * from './onBoarding.types';\n\nexport const install = async ({\n apiURL,\n sdkVersion = '1.69.1',\n}: IncodeConfig & { sdkVersion?: string }): Promise<{\n incode: IncodeInstance;\n}> => {\n // install Incode script from CDN\n await loadAsyncAsset(`https://sdk.incode.com/sdk/onBoarding-${sdkVersion}.js`);\n // instructed by vendor to add `/0/` to the end of the apiURL\n const incode = await createInstance({ apiURL: `${apiURL}/0/` });\n return { incode };\n};\n\nconst createInstance = async ({\n apiURL,\n}: IncodeConfig): Promise<IncodeInstance> => {\n const incode = window.OnBoarding.create({ apiURL });\n await incode.warmup();\n return incode;\n};\n"],"names":["initialise","shared","options","frankieClient","recipe","biometrics","provider","mountElement","eventHub","idvClient","idvSession","vendorParameters","apiURL","token","interviewId","incode","sdkVersion","name","styleSheet","document","createElement","innerHTML","head","appendChild","onLog","onError","entityId","cameraProps","onSuccess","emit","domElement","error","errorMessages","type","message","createSession","getToken","session","code","mkErrors","payload","OneSDKError","DEFAULT","INIT_PROCESS","PROVIDER_OFFLINE","WAITING_DOC_UPLOAD","WAITING_SELFIE_UPLOAD","initProcess","is_synchronous","isSynchronous","checkStatus","ocrDocument","createEventHandlers","module","noAttemptsFlag","genericErrors","INTERRUPTED","includes","ocr","documentType","side","startCamera","purpose","renderCamera","skipBackIdCapture","typeOfId","countryCode","validate","Promise","resolve","reject","response","log","numberOfTries","install","loadAsyncAsset","createInstance","window","OnBoarding","create","warmup"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"biometrics-incode.js","mappings":"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","sources":["webpack://OneSdk/./modules/biometrics/vendors/Incode/index.ts","webpack://OneSdk/./modules/biometrics/vendors/common/createSession.ts","webpack://OneSdk/./modules/biometrics/vendors/common/errors.ts","webpack://OneSdk/./modules/biometrics/vendors/common/initProcess.ts","webpack://OneSdk/./modules/common/vendors/incode/createEventHandlers.ts","webpack://OneSdk/./modules/common/vendors/incode/startCamera.ts","webpack://OneSdk/./modules/common/vendors/incode/index.ts"],"sourcesContent":["import type { BiometricsModule } from '@module/biometrics';\nimport { createSession } from '@module/biometrics/vendors/common/createSession';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport { initProcess } from '@module/biometrics/vendors/common/initProcess';\nimport { defineWrapper } from '@module/common/modules/defineModule';\nimport type { IncodeSession } from '@module/common/vendors/incode';\nimport {\n createEventHandlers,\n install,\n startCamera,\n} from '@module/common/vendors/incode';\nimport { IDVClient } from '@module/frankie-client/clients/IDVClient';\n\nexport const initialise = defineWrapper<BiometricsModule>('incode', async (\n shared,\n options,\n) => {\n const { frankieClient, recipe } = shared;\n const { biometrics: { provider } } = recipe;\n const { mountElement, eventHub } = options;\n const idvClient = new IDVClient(frankieClient);\n\n // generate session token from backend\n const idvSession = await createSession<IncodeSession>(idvClient, eventHub);\n // terminate initialising if session failed\n if (!idvSession) return;\n const { vendorParameters } = idvSession;\n\n try {\n // initialise Incode with credentials\n const { apiURL, token, interviewId } = vendorParameters;\n const { incode } = await install({\n apiURL,\n sdkVersion: provider.name === 'incode' && provider.sdkVersion,\n });\n\n /**\n * There is CSS misalignment from Incode loading animation\n * Adding style override to enforce center alignment\n */\n const styleSheet = document.createElement('style');\n styleSheet.innerHTML = `\n .IncodeCaptureSelfieBordersContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n }`;\n document.head.appendChild(styleSheet);\n\n const {\n onLog,\n onError,\n } = createEventHandlers('biometrics', {\n eventHub,\n entityId: idvClient.entityId,\n });\n const cameraProps = {\n incode,\n token: { token, interviewId },\n eventHub,\n mountElement,\n onError,\n onLog,\n };\n // turn on camera to capture selfie\n // \"void\" operator indicates the intention of non-blocking async process\n // it allows other events to emit while using camera to capture\n void startCamera('biometrics', {\n ...cameraProps,\n onSuccess: async (): Promise<void> => {\n eventHub.emit('detection_complete');\n await initProcess({ idvClient, recipe, eventHub });\n eventHub.emit('session_closed');\n },\n });\n eventHub.emit('ready', { domElement: mountElement });\n } catch (error) {\n const errorMessages = mkErrors(recipe);\n const { type = null, message = '' } = error;\n eventHub.emit('error', errorMessages('DEFAULT', { type, message }));\n }\n\n return {};\n});\n","import type { Events } from '@module/biometrics/events';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport type { _DictionaryWrite } from '@types';\n\n/**\n * Creates a session by obtaining an entity ID, token, and vendor parameters from an IDVClient.\n * It will also emit 'session_data_generated' event to the provided event hub.\n * This function won't throw errors. Instead, it will emit 'session_data_failed_loading' and return null.\n *\n * @param idvClient - The IDVClient instance used to obtain the session data.\n * @param eventHub - The EventHub instance for emitting session-related events.\n * @returns A Promise that resolves with an object containing entityId, token, and vendorParameters upon success, or null if a session couldn't be created\n */\nexport const createSession = async <T extends _DictionaryWrite<unknown>>(\n idvClient: IDVClient,\n eventHub: EventHub<Events>,\n): Promise<{ entityId: string; token: string; vendorParameters: T } | null> => {\n eventHub.emit('loading', true, { message: 'Loading biometrics vendor' });\n try {\n const { entityId, token, vendorParameters } = await idvClient.getToken<T>();\n eventHub.emit('session_data_generated', {\n session: { entityId, token, vendorParameters },\n });\n eventHub.emit('loading', false, { message: 'Biometrics vendor has loaded' });\n return { entityId, token, vendorParameters };\n } catch (error) {\n const { code = null, message = '' } = error;\n eventHub.emit('session_data_failed_loading', { code, message });\n eventHub.emit('loading', false, { message: `Biometrics vendor has not loaded` });\n return null;\n }\n};\n","import { OneSDKError } from '@module/common';\nimport { IDVStatus } from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport type ErrorMessages = Record<\n 'DEFAULT' | 'INIT_PROCESS' | Extract<IDVStatus, 'PROVIDER_OFFLINE' | 'WAITING_DOC_UPLOAD' | 'WAITING_SELFIE_UPLOAD'>,\n string\n>;\n\nconst mkErrorMessages = (provider: string): ErrorMessages => ({\n DEFAULT: `Error from vendor SDK '${provider}'`,\n INIT_PROCESS: 'Error from biometrics submission',\n [IDVStatus.PROVIDER_OFFLINE]: `Error initialising biometrics check with '${provider}'. The service doesn't appear to be available.`,\n [IDVStatus.WAITING_DOC_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to run the 'ocr' component before running 'biometrics'.`,\n [IDVStatus.WAITING_SELFIE_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to capture selfie before running 'biometrics'.`,\n});\n\nexport const mkErrors = (recipe: RecipeParsed) => {\n const {\n biometrics: {\n provider: {\n name,\n },\n },\n } = recipe;\n\n return (type: keyof ErrorMessages, ...payload: unknown[]) => {\n return new OneSDKError(mkErrorMessages(name)[type], payload);\n };\n \n};\n","import type { Events } from '@module/biometrics/events';\nimport type { ErrorMessages } from '@module/biometrics/vendors/common/errors';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport {\n isErrorStatus,\n isInputRequiredStatus,\n} from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport const initProcess = async (\n { idvClient, recipe, eventHub }: {\n idvClient: IDVClient;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n },\n) => {\n eventHub.emit('loading', true, { message: 'Evaluating results' });\n const { biometrics: { is_synchronous: isSynchronous } } = recipe;\n const errorMessages = mkErrors(recipe);\n const {\n checkStatus,\n ocrDocument,\n } = await idvClient.initProcess({ isSynchronous: !!isSynchronous });\n if (isInputRequiredStatus(checkStatus) || isErrorStatus(checkStatus)) {\n eventHub.emit('error', errorMessages((checkStatus as keyof ErrorMessages)));\n } else {\n eventHub.emit(isSynchronous ? 'results' : 'processing', {\n checkStatus,\n document: ocrDocument,\n entityId: idvClient.entityId,\n });\n }\n eventHub.emit('loading', false, { message: 'Results have retrived' });\n};\n","import { IDVStatus } from '@frankieone/one-sdk';\nimport type { Events as BiometricsEvents } from '@module/biometrics';\nimport type { EventHub } from '@module/common';\nimport { OneSDKError } from '@module/common';\nimport type {\n IncodeResponse,\n} from '@module/common/vendors/incode/onBoarding.types';\nimport type { Events as OcrEvents } from '@module/ocr';\nimport { OCRStatus } from '@module/types';\n\n/**\n * Creates event handlers for a given EventHub.\n *\n * @param {'ocr' | 'biometrics'} module - The module type for which to create event handlers.\n * @param {object} options - The options for creating event handlers.\n * @param {EventHub<OcrEvents | BiometricsEvents>} options.eventHub - The EventHub for handling events.\n * @param {string} [options.entityId] - An optional entityId parameter.\n * @returns {object} - The event handlers for the specified module ('biometrics' or 'ocr').\n **/\nexport const createEventHandlers = (\n module: 'ocr' | 'biometrics', {\n eventHub,\n entityId,\n }: {\n eventHub: EventHub<OcrEvents | BiometricsEvents>;\n entityId?: string;\n },\n) => {\n\n // A flag indicating whether the event handler should emit error event\n let noAttemptsFlag = false;\n\n // user or environment issues that are not related to a specific workflow\n const genericErrors = [\n 'InternalServerError',\n 'skip',\n 'OSVersionNotSupported',\n 'browserNotSupported',\n ];\n\n /**\n * Event handlers for biometrics-related events.\n *\n * @namespace biometrics\n */\n const biometrics = {\n /**\n * Handles log events for biometrics.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onLog: (\n { type }: IncodeResponse,\n ): void => {\n if (type === 'noAttemps') { // not a typo, 'noAttemps' comes from Incode SDK\n // we would like to emit this scenario along with an Incode error event\n // update the error state so that a corresponding error can be emitted\n noAttemptsFlag = true;\n }\n },\n /**\n * Handles error events for biometrics.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onError: (\n { type, payload }: IncodeResponse,\n ): void => {\n // check if error state is being flagged in the log already\n if (noAttemptsFlag) {\n eventHub.emit('detection_failed', {\n message: payload?.message,\n });\n } else if (type === 'permissionDenied') {\n eventHub.emit('input_required', { entityId }, IDVStatus.INTERRUPTED);\n } else if (genericErrors.includes(type)) {\n eventHub.emit('error', new OneSDKError(`Error from vendor SDK 'Incode'`, {\n type,\n payload,\n }));\n }\n },\n };\n\n /**\n * Event handlers for OCR-related events.\n *\n * @namespace ocr\n */\n const ocr = {\n /**\n * Handles log events for OCR.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onLog: (\n { type, payload }: IncodeResponse,\n ): void => {\n if ([\n 'IDNotDetected',\n 'nothingHappened',\n 'manualCaptureOn',\n 'successCapture',\n 'attemptFailed',\n 'success',\n ].includes(type)) {\n eventHub.emit('info', {\n message: payload?.message,\n payload: { type },\n });\n } else if (type === 'noAttemps') { // not a typo, 'noAttemps' comes from Incode SDK\n // we would like to emit this scenario along with an Incode error event\n // update the error state so that a corresponding error can be emitted\n noAttemptsFlag = true;\n }\n },\n /**\n * Handles error events for OCR.\n *\n * @param {IncodeResponse} response - The response object from Incode.\n */\n onError: (\n { type, payload }: IncodeResponse,\n ): void => {\n // check if error state is being flagged in the log already\n if (noAttemptsFlag) {\n eventHub.emit('detection_failed', {\n message: payload?.message,\n });\n } else if (type === 'permissionDenied') {\n eventHub.emit('input_required',\n {\n documentType: null,\n side: 'front',\n }, OCRStatus.INTERRUPTED, () => ({}));\n } else if (genericErrors.includes(type)) {\n eventHub.emit('error', new OneSDKError(`Error from vendor SDK 'Incode'`, {\n type,\n payload,\n }));\n }\n },\n };\n\n return { biometrics, ocr }[module];\n};\n","import type { EventHub } from '@module/common';\nimport { OneSDKError } from '@module/common';\nimport type {\n IncodeInstance,\n IncodeResponse,\n IncodeSuccessResponse,\n} from '@module/common/vendors/incode/onBoarding.types';\nimport type { Events } from '@module/ocr';\n\ntype CameraProps = {\n incode: IncodeInstance;\n token: { token: string; interviewId: string };\n eventHub: EventHub<Events>;\n mountElement: HTMLElement;\n onSuccess?: (response: Partial<IncodeSuccessResponse>) => void;\n onError: (response: unknown, payload?: unknown) => void;\n onLog: (response: unknown) => void;\n validate?: ({\n typeOfId,\n countryCode,\n }: Partial<IncodeSuccessResponse>) => boolean;\n};\n\nexport const startCamera = async (\n purpose: 'biometrics' | 'ocr',\n cameraProps: CameraProps,\n) => {\n if (purpose === 'ocr') {\n return await renderCamera('front', {\n ...cameraProps,\n onSuccess: async ({\n skipBackIdCapture,\n typeOfId,\n countryCode,\n }: IncodeSuccessResponse,\n ): Promise<void> => {\n if (!cameraProps?.validate?.({ typeOfId, countryCode })) return;\n // when Incode determines it needs to capture the back of document\n if (!skipBackIdCapture) {\n await renderCamera('back', cameraProps);\n } else {\n cameraProps?.onSuccess?.({});\n }\n },\n });\n } else if (purpose === 'biometrics') {\n return await renderCamera('selfie', cameraProps);\n }\n throw new OneSDKError('Unknown purpose', { purpose });\n};\n\nconst renderCamera = async (\n type: 'front' | 'back' | 'selfie',\n cameraProps: CameraProps,\n) => {\n const {\n incode,\n token,\n eventHub,\n mountElement,\n onSuccess = () => ({}),\n onError,\n onLog,\n } = cameraProps;\n return new Promise((resolve, reject): void => {\n try {\n incode.renderCamera(type, mountElement, {\n onSuccess: async (response: IncodeSuccessResponse): Promise<void> => {\n onSuccess(response);\n return resolve({});\n },\n onError: (error: IncodeResponse) => {\n onError(error);\n return reject(error);\n },\n onLog: (log: IncodeResponse) => {\n onLog(log);\n },\n token,\n numberOfTries: 3,\n });\n } catch (error) {\n const { message = '' } = error;\n eventHub.emit('error', new OneSDKError(`Error from vendor SDK 'Incode'`, { message }));\n return reject(error);\n }\n });\n};\n","import { loadAsyncAsset } from '@module/common';\nimport type {\n IncodeConfig,\n IncodeInstance,\n} from '@module/common/vendors/incode/onBoarding.types';\n\nexport { createEventHandlers } from './createEventHandlers';\nexport { startCamera } from './startCamera';\nexport * from './onBoarding.types';\n\nexport const install = async ({\n apiURL,\n sdkVersion = '1.69.1',\n}: IncodeConfig & { sdkVersion?: string }): Promise<{\n incode: IncodeInstance;\n}> => {\n // install Incode script from CDN\n await loadAsyncAsset(`https://sdk.incode.com/sdk/onBoarding-${sdkVersion}.js`);\n // instructed by vendor to add `/0/` to the end of the apiURL\n const incode = await createInstance({ apiURL: `${apiURL}/0/` });\n return { incode };\n};\n\nconst createInstance = async ({\n apiURL,\n}: IncodeConfig): Promise<IncodeInstance> => {\n const incode = window.OnBoarding.create({ apiURL });\n await incode.warmup();\n return incode;\n};\n"],"names":["initialise","shared","options","frankieClient","recipe","biometrics","provider","mountElement","eventHub","idvClient","idvSession","vendorParameters","apiURL","token","interviewId","incode","sdkVersion","name","styleSheet","document","createElement","innerHTML","head","appendChild","onLog","onError","entityId","cameraProps","onSuccess","emit","domElement","error","errorMessages","type","message","createSession","getToken","session","code","mkErrors","payload","OneSDKError","DEFAULT","INIT_PROCESS","PROVIDER_OFFLINE","WAITING_DOC_UPLOAD","WAITING_SELFIE_UPLOAD","initProcess","is_synchronous","isSynchronous","checkStatus","ocrDocument","createEventHandlers","module","noAttemptsFlag","genericErrors","INTERRUPTED","includes","ocr","documentType","side","startCamera","purpose","renderCamera","skipBackIdCapture","typeOfId","countryCode","validate","Promise","resolve","reject","response","log","numberOfTries","install","loadAsyncAsset","createInstance","window","OnBoarding","create","warmup"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkOneSdk=self.webpackChunkOneSdk||[]).push([[328],{7920:(e,n,t)=>{t.r(n),t.d(n,{initialise:()=>u});var i=t(8016),o=t(2365),r=t(3655),s=t(5473),c=t(4090),a=t(9188),d=function(e,n,t,i){return new(t||(t=Promise))((function(o,r){function s(e){try{a(i.next(e))}catch(e){r(e)}}function c(e){try{a(i.throw(e))}catch(e){r(e)}}function a(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}a((i=i.apply(e,n||[])).next())}))};const u=(0,s.f)("onfido",((e,n)=>d(void 0,void 0,void 0,(function*(){let t=!1;const{frankieClient:o,recipe:r}=e,{biometrics:{provider:s}}=r,{mountElement:u,eventHub:f}=n,y=new a.Ns(o),h=yield(0,i.j)(y,f);if(!h)return;(0,c.g)("onfido-sdk-ui-Theme-portal",f),yield(0,c.a)({sdkVersion:"onfido"===s.name&&s.sdkVersion});const{token:p}=h,b=window.Onfido.init({token:p,containerEl:u,steps:[{type:"face",options:{requestedVariant:"motion",motionFallbackVariant:"onfido"===s.name&&(null==s?void 0:s.fallback)}}],useModal:!0,isModalOpen:!0,disableAnalytics:!0,disableAnalyticsCookies:!0,onComplete:()=>d(void 0,void 0,void 0,(function*(){t||(t=!0,yield l({idvClient:y,recipe:r,eventHub:f}),yield m({instance:b,recipe:r,eventHub:f}))})),onError:e=>d(void 0,void 0,void 0,(function*(){v({error:e,recipe:r,eventHub:f}),yield m({instance:b,recipe:r,eventHub:f})})),onUserExit:e=>d(void 0,void 0,void 0,(function*(){f.emit("detection_failed",{message:e}),yield m({instance:b,recipe:r,eventHub:f})})),onModalRequestClose:()=>d(void 0,void 0,void 0,(function*(){f.emit("detection_failed",{message:null}),yield m({instance:b,recipe:r,eventHub:f})}))});return{}})))),l=e=>d(void 0,[e],void 0,(function*({idvClient:e,recipe:n,eventHub:t}){const i=(0,o.M)(n);t.emit("detection_complete");try{yield(0,r.W)({idvClient:e,recipe:n,eventHub:t})}catch(e){const{message:n=""}=e;t.emit("error",i("INIT_PROCESS",{message:n}))}})),v=({error:e,recipe:n,eventHub:t})=>{const i=(0,o.M)(n),{message:r=""}=e;t.emit("error",i("DEFAULT",{message:r}))},m=e=>d(void 0,[e],void 0,(function*({instance:e,recipe:n,eventHub:t}){const i=(0,o.M)(n);try{yield e.safeTearDown(),t.emit("session_closed")}catch(e){const{message:n=""}=e;t.emit("error",i("DEFAULT",{message:n}))}}))},8016:(e,n,t)=>{t.d(n,{j:()=>i});const i=(e,n)=>{return t=void 0,i=void 0,r=function*(){n.emit("loading",!0,{message:"Loading biometrics vendor"});try{const{entityId:t,token:i,vendorParameters:o}=yield e.getToken();return n.emit("session_data_generated",{session:{entityId:t,token:i,vendorParameters:o}}),n.emit("loading",!1,{message:"Biometrics vendor has loaded"}),{entityId:t,token:i,vendorParameters:o}}catch(e){const{code:t=null,message:i=""}=e;return n.emit("session_data_failed_loading",{code:t,message:i}),n.emit("loading",!1,{message:"Biometrics vendor has not loaded"}),null}},new((o=void 0)||(o=Promise))((function(e,n){function s(e){try{a(r.next(e))}catch(e){n(e)}}function c(e){try{a(r.throw(e))}catch(e){n(e)}}function a(n){var t;n.done?e(n.value):(t=n.value,t instanceof o?t:new o((function(e){e(t)}))).then(s,c)}a((r=r.apply(t,i||[])).next())}));var t,i,o,r}},2365:(e,n,t)=>{t.d(n,{M:()=>r});var i=t(4334),o=t(9188);const r=e=>{const{biometrics:{provider:{name:n}}}=e;return(e,...t)=>{return new i.OneSDKError((r=n,{DEFAULT:`Error from vendor SDK '${r}'`,INIT_PROCESS:"Error from biometrics submission",[o.Yt.PROVIDER_OFFLINE]:`Error initialising biometrics check with '${r}'. The service doesn't appear to be available.`,[o.Yt.WAITING_DOC_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to run the 'ocr' component before running 'biometrics'.`,[o.Yt.WAITING_SELFIE_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to capture selfie before running 'biometrics'.`})[e],t);var r}}},3655:(e,n,t)=>{t.d(n,{W:()=>r});var i=t(2365),o=t(9188);const r=e=>{return n=void 0,t=[e],s=function*({idvClient:e,recipe:n,eventHub:t}){t.emit("loading",!0,{message:"Evaluating results"});const{biometrics:{is_synchronous:r}}=n,s=(0,i.M)(n),{checkStatus:c,ocrDocument:a}=yield e.initProcess({isSynchronous:!!r});(0,o.q8)(c)||(0,o.tX)(c)?t.emit("error",s(c)):t.emit(r?"results":"processing",{checkStatus:c,document:a,entityId:e.entityId}),t.emit("loading",!1,{message:"Results have retrived"})},new((r=void 0)||(r=Promise))((function(e,i){function o(e){try{a(s.next(e))}catch(e){i(e)}}function c(e){try{a(s.throw(e))}catch(e){i(e)}}function a(n){var t;n.done?e(n.value):(t=n.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,c)}a((s=s.apply(n,t||[])).next())}));var n,t,r,s}},4090:(e,n,t)=>{t.d(n,{a:()=>o,g:()=>r});var i=t(4334);const o=e=>{return n=void 0,t=[e],r=function*({sdkVersion:e="12"}){yield(0,i.loadAsyncAsset)(`https://sdk.onfido.com/v${e}`),Number(e)<14&&(yield(0,i.loadAsyncAsset)(`https://sdk.onfido.com/v${e}/style.css`,"style"))},new((o=void 0)||(o=Promise))((function(e,i){function s(e){try{a(r.next(e))}catch(e){i(e)}}function c(e){try{a(r.throw(e))}catch(e){i(e)}}function a(n){var t;n.done?e(n.value):(t=n.value,t instanceof o?t:new o((function(e){e(t)}))).then(s,c)}a((r=r.apply(n,t||[])).next())}));var n,t,o,r},r=(e,n)=>{const t=document.querySelector("body");new MutationObserver(((t,i)=>{var o;for(const r of t){const t=null===(o=r.addedNodes)||void 0===o?void 0:o[0];(null==t?void 0:t.classList.contains(e))&&(n.emit("ready",{domElement:t}),i.disconnect())}})).observe(t,{childList:!0,subtree:!0})}}}]);
|
|
1
|
+
"use strict";(self.webpackChunkOneSdk=self.webpackChunkOneSdk||[]).push([[328],{7920:(e,n,t)=>{t.r(n),t.d(n,{initialise:()=>u});var i=t(8016),o=t(2365),r=t(3655),s=t(5473),c=t(4090),a=t(9188),d=function(e,n,t,i){return new(t||(t=Promise))((function(o,r){function s(e){try{a(i.next(e))}catch(e){r(e)}}function c(e){try{a(i.throw(e))}catch(e){r(e)}}function a(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}a((i=i.apply(e,n||[])).next())}))};const u=(0,s.f)("onfido",((e,n)=>d(void 0,void 0,void 0,(function*(){let t=!1;const{frankieClient:o,recipe:r}=e,{biometrics:{provider:s}}=r,{mountElement:u,eventHub:f}=n,y=new a.Ns(o),h=yield(0,i.j)(y,f);if(!h)return;(0,c.g)("onfido-sdk-ui-Theme-portal",f),yield(0,c.a)({sdkVersion:"onfido"===s.name&&s.sdkVersion});const{token:p}=h,b=window.Onfido.init({token:p,containerEl:u,steps:[{type:"face",options:{requestedVariant:"motion",motionFallbackVariant:"onfido"===s.name&&(null==s?void 0:s.fallback)}}],customUI:"onfido"===s.name&&s.customUI,useModal:!0,isModalOpen:!0,disableAnalytics:!0,disableAnalyticsCookies:!0,onComplete:()=>d(void 0,void 0,void 0,(function*(){t||(t=!0,yield l({idvClient:y,recipe:r,eventHub:f}),yield m({instance:b,recipe:r,eventHub:f}))})),onError:e=>d(void 0,void 0,void 0,(function*(){v({error:e,recipe:r,eventHub:f}),yield m({instance:b,recipe:r,eventHub:f})})),onUserExit:e=>d(void 0,void 0,void 0,(function*(){f.emit("detection_failed",{message:e}),yield m({instance:b,recipe:r,eventHub:f})})),onModalRequestClose:()=>d(void 0,void 0,void 0,(function*(){f.emit("detection_failed",{message:null}),yield m({instance:b,recipe:r,eventHub:f})}))});return{}})))),l=e=>d(void 0,[e],void 0,(function*({idvClient:e,recipe:n,eventHub:t}){const i=(0,o.M)(n);t.emit("detection_complete");try{yield(0,r.W)({idvClient:e,recipe:n,eventHub:t})}catch(e){const{message:n=""}=e;t.emit("error",i("INIT_PROCESS",{message:n}))}})),v=({error:e,recipe:n,eventHub:t})=>{const i=(0,o.M)(n),{message:r=""}=e;t.emit("error",i("DEFAULT",{message:r}))},m=e=>d(void 0,[e],void 0,(function*({instance:e,recipe:n,eventHub:t}){const i=(0,o.M)(n);try{yield e.safeTearDown(),t.emit("session_closed")}catch(e){const{message:n=""}=e;t.emit("error",i("DEFAULT",{message:n}))}}))},8016:(e,n,t)=>{t.d(n,{j:()=>i});const i=(e,n)=>{return t=void 0,i=void 0,r=function*(){n.emit("loading",!0,{message:"Loading biometrics vendor"});try{const{entityId:t,token:i,vendorParameters:o}=yield e.getToken();return n.emit("session_data_generated",{session:{entityId:t,token:i,vendorParameters:o}}),n.emit("loading",!1,{message:"Biometrics vendor has loaded"}),{entityId:t,token:i,vendorParameters:o}}catch(e){const{code:t=null,message:i=""}=e;return n.emit("session_data_failed_loading",{code:t,message:i}),n.emit("loading",!1,{message:"Biometrics vendor has not loaded"}),null}},new((o=void 0)||(o=Promise))((function(e,n){function s(e){try{a(r.next(e))}catch(e){n(e)}}function c(e){try{a(r.throw(e))}catch(e){n(e)}}function a(n){var t;n.done?e(n.value):(t=n.value,t instanceof o?t:new o((function(e){e(t)}))).then(s,c)}a((r=r.apply(t,i||[])).next())}));var t,i,o,r}},2365:(e,n,t)=>{t.d(n,{M:()=>r});var i=t(4334),o=t(9188);const r=e=>{const{biometrics:{provider:{name:n}}}=e;return(e,...t)=>{return new i.OneSDKError((r=n,{DEFAULT:`Error from vendor SDK '${r}'`,INIT_PROCESS:"Error from biometrics submission",[o.Yt.PROVIDER_OFFLINE]:`Error initialising biometrics check with '${r}'. The service doesn't appear to be available.`,[o.Yt.WAITING_DOC_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to run the 'ocr' component before running 'biometrics'.`,[o.Yt.WAITING_SELFIE_UPLOAD]:`Error initialising biometrics check with '${r}'. You might need to capture selfie before running 'biometrics'.`})[e],t);var r}}},3655:(e,n,t)=>{t.d(n,{W:()=>r});var i=t(2365),o=t(9188);const r=e=>{return n=void 0,t=[e],s=function*({idvClient:e,recipe:n,eventHub:t}){t.emit("loading",!0,{message:"Evaluating results"});const{biometrics:{is_synchronous:r}}=n,s=(0,i.M)(n),{checkStatus:c,ocrDocument:a}=yield e.initProcess({isSynchronous:!!r});(0,o.q8)(c)||(0,o.tX)(c)?t.emit("error",s(c)):t.emit(r?"results":"processing",{checkStatus:c,document:a,entityId:e.entityId}),t.emit("loading",!1,{message:"Results have retrived"})},new((r=void 0)||(r=Promise))((function(e,i){function o(e){try{a(s.next(e))}catch(e){i(e)}}function c(e){try{a(s.throw(e))}catch(e){i(e)}}function a(n){var t;n.done?e(n.value):(t=n.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,c)}a((s=s.apply(n,t||[])).next())}));var n,t,r,s}},4090:(e,n,t)=>{t.d(n,{a:()=>o,g:()=>r});var i=t(4334);const o=e=>{return n=void 0,t=[e],r=function*({sdkVersion:e="12"}){yield(0,i.loadAsyncAsset)(`https://sdk.onfido.com/v${e}`),Number(e)<14&&(yield(0,i.loadAsyncAsset)(`https://sdk.onfido.com/v${e}/style.css`,"style"))},new((o=void 0)||(o=Promise))((function(e,i){function s(e){try{a(r.next(e))}catch(e){i(e)}}function c(e){try{a(r.throw(e))}catch(e){i(e)}}function a(n){var t;n.done?e(n.value):(t=n.value,t instanceof o?t:new o((function(e){e(t)}))).then(s,c)}a((r=r.apply(n,t||[])).next())}));var n,t,o,r},r=(e,n)=>{const t=document.querySelector("body");new MutationObserver(((t,i)=>{var o;for(const r of t){const t=null===(o=r.addedNodes)||void 0===o?void 0:o[0];(null==t?void 0:t.classList.contains(e))&&(n.emit("ready",{domElement:t}),i.disconnect())}})).observe(t,{childList:!0,subtree:!0})}}}]);
|
|
2
2
|
//# sourceMappingURL=biometrics-onfido.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"biometrics-onfido.js","mappings":"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","sources":["webpack://OneSdk/./modules/biometrics/vendors/Onfido/index.ts","webpack://OneSdk/./modules/biometrics/vendors/common/createSession.ts","webpack://OneSdk/./modules/biometrics/vendors/common/errors.ts","webpack://OneSdk/./modules/biometrics/vendors/common/initProcess.ts","webpack://OneSdk/./modules/common/vendors/onfido/index.ts"],"sourcesContent":["import type { BiometricsModule } from '@module/biometrics';\nimport type { Events } from '@module/biometrics/events';\nimport { createSession } from '@module/biometrics/vendors/common/createSession';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport { initProcess } from '@module/biometrics/vendors/common/initProcess';\nimport type { EventHub } from '@module/common';\nimport { defineWrapper } from '@module/common/modules/defineModule';\nimport type { InjectedState } from '@module/common/types';\nimport { install, observeReady } from '@module/common/vendors/onfido';\nimport type {\n SdkError,\n SdkHandle,\n UserExitCode,\n} from '@module/common/vendors/onfido/onfido.types';\nimport { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport const initialise = defineWrapper<BiometricsModule>(\n 'onfido',\n async (\n shared: InjectedState,\n options: BiometricsModule['wrapperOptions'],\n ) => {\n let runOnceAlready = false;\n const { frankieClient, recipe } = shared;\n const {\n biometrics: { provider },\n } = recipe;\n const { mountElement, eventHub } = options;\n const idvClient = new IDVClient(frankieClient);\n\n // generate onfido sdk token from backend\n const idvSession = await createSession(idvClient, eventHub);\n // terminate initialising if session failed\n if (!idvSession) return;\n\n observeReady('onfido-sdk-ui-Theme-portal', eventHub);\n\n await install({ sdkVersion: provider.name === 'onfido' && provider.sdkVersion });\n\n // initialise onfido instance\n const { token } = idvSession;\n const Onfido = window.Onfido;\n const instance: SdkHandle = Onfido.init({\n token,\n containerEl: mountElement,\n steps: [\n {\n type: 'face',\n options: {\n requestedVariant: 'motion',\n motionFallbackVariant: provider.name === 'onfido' && provider?.fallback,\n },\n },\n ],\n useModal: true,\n isModalOpen: true,\n disableAnalytics: true,\n disableAnalyticsCookies: true,\n onComplete: async (): Promise<void> => {\n if (runOnceAlready) return;\n runOnceAlready = true;\n await handleComplete({ idvClient, recipe, eventHub });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n onError: async (error: SdkError): Promise<void> => {\n handleError({ error, recipe, eventHub });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n onUserExit: async (error: UserExitCode) => {\n eventHub.emit('detection_failed', {\n message: error,\n });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n onModalRequestClose: async () => {\n eventHub.emit('detection_failed', {\n message: null,\n });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n });\n return {};\n },\n);\n\nconst handleComplete = async ({\n idvClient,\n recipe,\n eventHub,\n}: {\n idvClient: IDVClient;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n}): Promise<void> => {\n const errorMessages = mkErrors(recipe);\n eventHub.emit('detection_complete');\n try {\n await initProcess({ idvClient, recipe, eventHub });\n } catch (error) {\n const { message = '' } = error;\n eventHub.emit('error', errorMessages('INIT_PROCESS', { message }));\n }\n};\n\nconst handleError = ({\n error,\n recipe,\n eventHub,\n}: {\n error: SdkError;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n}): void => {\n const errorMessages = mkErrors(recipe);\n const { message = '' } = error;\n eventHub.emit('error', errorMessages('DEFAULT', { message }));\n};\n\n// destroy onfido instance\nconst removeVendorSdk = async ({\n instance,\n recipe,\n eventHub,\n}: {\n instance: SdkHandle;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n}): Promise<void> => {\n const errorMessages = mkErrors(recipe);\n try {\n await instance.safeTearDown();\n eventHub.emit('session_closed');\n } catch (error) {\n const { message = '' } = error;\n eventHub.emit('error', errorMessages('DEFAULT', { message }));\n }\n};\n","import type { Events } from '@module/biometrics/events';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport type { _DictionaryWrite } from '@types';\n\n/**\n * Creates a session by obtaining an entity ID, token, and vendor parameters from an IDVClient.\n * It will also emit 'session_data_generated' event to the provided event hub.\n * This function won't throw errors. Instead, it will emit 'session_data_failed_loading' and return null.\n *\n * @param idvClient - The IDVClient instance used to obtain the session data.\n * @param eventHub - The EventHub instance for emitting session-related events.\n * @returns A Promise that resolves with an object containing entityId, token, and vendorParameters upon success, or null if a session couldn't be created\n */\nexport const createSession = async <T extends _DictionaryWrite<unknown>>(\n idvClient: IDVClient,\n eventHub: EventHub<Events>,\n): Promise<{ entityId: string; token: string; vendorParameters: T } | null> => {\n eventHub.emit('loading', true, { message: 'Loading biometrics vendor' });\n try {\n const { entityId, token, vendorParameters } = await idvClient.getToken<T>();\n eventHub.emit('session_data_generated', {\n session: { entityId, token, vendorParameters },\n });\n eventHub.emit('loading', false, { message: 'Biometrics vendor has loaded' });\n return { entityId, token, vendorParameters };\n } catch (error) {\n const { code = null, message = '' } = error;\n eventHub.emit('session_data_failed_loading', { code, message });\n eventHub.emit('loading', false, { message: `Biometrics vendor has not loaded` });\n return null;\n }\n};\n","import { OneSDKError } from '@module/common';\nimport { IDVStatus } from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport type ErrorMessages = Record<\n 'DEFAULT' | 'INIT_PROCESS' | Extract<IDVStatus, 'PROVIDER_OFFLINE' | 'WAITING_DOC_UPLOAD' | 'WAITING_SELFIE_UPLOAD'>,\n string\n>;\n\nconst mkErrorMessages = (provider: string): ErrorMessages => ({\n DEFAULT: `Error from vendor SDK '${provider}'`,\n INIT_PROCESS: 'Error from biometrics submission',\n [IDVStatus.PROVIDER_OFFLINE]: `Error initialising biometrics check with '${provider}'. The service doesn't appear to be available.`,\n [IDVStatus.WAITING_DOC_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to run the 'ocr' component before running 'biometrics'.`,\n [IDVStatus.WAITING_SELFIE_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to capture selfie before running 'biometrics'.`,\n});\n\nexport const mkErrors = (recipe: RecipeParsed) => {\n const {\n biometrics: {\n provider: {\n name,\n },\n },\n } = recipe;\n\n return (type: keyof ErrorMessages, ...payload: unknown[]) => {\n return new OneSDKError(mkErrorMessages(name)[type], payload);\n };\n \n};\n","import type { Events } from '@module/biometrics/events';\nimport type { ErrorMessages } from '@module/biometrics/vendors/common/errors';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport {\n isErrorStatus,\n isInputRequiredStatus,\n} from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport const initProcess = async (\n { idvClient, recipe, eventHub }: {\n idvClient: IDVClient;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n },\n) => {\n eventHub.emit('loading', true, { message: 'Evaluating results' });\n const { biometrics: { is_synchronous: isSynchronous } } = recipe;\n const errorMessages = mkErrors(recipe);\n const {\n checkStatus,\n ocrDocument,\n } = await idvClient.initProcess({ isSynchronous: !!isSynchronous });\n if (isInputRequiredStatus(checkStatus) || isErrorStatus(checkStatus)) {\n eventHub.emit('error', errorMessages((checkStatus as keyof ErrorMessages)));\n } else {\n eventHub.emit(isSynchronous ? 'results' : 'processing', {\n checkStatus,\n document: ocrDocument,\n entityId: idvClient.entityId,\n });\n }\n eventHub.emit('loading', false, { message: 'Results have retrived' });\n};\n","import type { Events as BiometricsEvents } from '@module/biometrics';\nimport { type EventHub, loadAsyncAsset } from '@module/common';\nimport type { Events as OcrEvents } from '@module/ocr';\n\nexport const install = async ({ sdkVersion = '12' }): Promise<void> => {\n // install Onfido script from CDN\n await loadAsyncAsset(`https://sdk.onfido.com/v${sdkVersion}`);\n // note that from version 14 onwards, a separate stylesheet is no longer required as it will be included with the default library.\n if (Number(sdkVersion) < 14 && process.env.NODE_ENV !== 'test') {\n await loadAsyncAsset(`https://sdk.onfido.com/v${sdkVersion}/style.css`, 'style');\n }\n};\n\nexport const observeReady = (\n mutationClass: string,\n eventHub: EventHub<BiometricsEvents | OcrEvents>,\n): void => {\n // Select the target node\n const targetNode = document.querySelector('body');\n // Create an observer instance\n const observer = new MutationObserver((\n mutations: MutationRecord[],\n observer: MutationObserver,\n ) => {\n for (const mutation of mutations) {\n const mutationElement = mutation.addedNodes?.[0] as HTMLElement;\n if (mutationElement?.classList.contains(mutationClass)) {\n eventHub.emit('ready', { domElement: mutationElement });\n // stop observing\n observer.disconnect();\n }\n }\n });\n // Options for the observer (which mutations to observe)\n const config = { childList: true, subtree: true };\n // Start observing the target node for specified mutations\n observer.observe(targetNode, config);\n};\n"],"names":["initialise","shared","options","runOnceAlready","frankieClient","recipe","biometrics","provider","mountElement","eventHub","idvClient","idvSession","sdkVersion","name","token","instance","window","Onfido","init","containerEl","steps","type","requestedVariant","motionFallbackVariant","fallback","useModal","isModalOpen","disableAnalytics","disableAnalyticsCookies","onComplete","handleComplete","removeVendorSdk","onError","error","handleError","onUserExit","emit","message","onModalRequestClose","errorMessages","safeTearDown","createSession","entityId","vendorParameters","getToken","session","code","mkErrors","payload","OneSDKError","DEFAULT","INIT_PROCESS","PROVIDER_OFFLINE","WAITING_DOC_UPLOAD","WAITING_SELFIE_UPLOAD","initProcess","is_synchronous","isSynchronous","checkStatus","ocrDocument","document","install","loadAsyncAsset","Number","observeReady","mutationClass","targetNode","querySelector","MutationObserver","mutations","observer","mutation","mutationElement","addedNodes","classList","contains","domElement","disconnect","observe","childList","subtree"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"biometrics-onfido.js","mappings":"seAiBO,MAAMA,GAAa,OACxB,UACA,CACEC,EACAC,IACG,OAAD,6BACF,IAAIC,GAAiB,EACrB,MAAM,cAAEC,EAAa,OAAEC,GAAWJ,GAEhCK,YAAY,SAAEC,IACZF,GACE,aAAEG,EAAY,SAAEC,GAAaP,EAC7BQ,EAAY,IAAI,KAAUN,GAG1BO,QAAmB,OAAcD,EAAWD,GAElD,IAAKE,EAAY,QAEjB,OAAa,6BAA8BF,SAErC,OAAQ,CACZG,WAA8B,WAAlBL,EAASM,MAAqBN,EAASK,aAIrD,MAAM,MAAEE,GAAUH,EAEZI,EADSC,OAAOC,OACaC,KAAK,CACtCJ,QACAK,YAAaX,EACbY,MAAO,CACL,CACEC,KAAM,OACNnB,QAAS,CACPoB,iBAAkB,SAClBC,sBACoB,WAAlBhB,EAASM,OAAqBN,aAAQ,EAARA,EAAUiB,aAIhDC,SAA4B,WAAlBlB,EAASM,MAAqBN,EAASkB,SACjDC,UAAU,EACVC,aAAa,EACbC,kBAAkB,EAClBC,yBAAyB,EACzBC,WAAY,IAA2B,OAAD,6BAChC3B,IACJA,GAAiB,QACX4B,EAAe,CAAErB,YAAWL,SAAQI,mBACpCuB,EAAgB,CAAEjB,WAAUV,SAAQI,aAC5C,IACAwB,QAAgBC,GAAmC,OAAD,6BAChDC,EAAY,CAAED,QAAO7B,SAAQI,mBACvBuB,EAAgB,CAAEjB,WAAUV,SAAQI,YAC5C,IACA2B,WAAmBF,GAAwB,OAAD,6BACxCzB,EAAS4B,KAAK,mBAAoB,CAChCC,QAASJ,UAELF,EAAgB,CAAEjB,WAAUV,SAAQI,YAC5C,IACA8B,oBAAqB,IAAY,OAAD,6BAC9B9B,EAAS4B,KAAK,mBAAoB,CAChCC,QAAS,aAELN,EAAgB,CAAEjB,WAAUV,SAAQI,YAC5C,MAEF,MAAO,CAAC,CACV,MAGIsB,EAAiB,GAQF,OAAD,yBARU,UAC5BrB,EAAS,OACTL,EAAM,SACNI,IAMA,MAAM+B,GAAgB,OAASnC,GAC/BI,EAAS4B,KAAK,sBACd,UACQ,OAAY,CAAE3B,YAAWL,SAAQI,YACzC,CAAE,MAAOyB,GACP,MAAM,QAAEI,EAAU,IAAOJ,EACzBzB,EAAS4B,KAAK,QAASG,EAAc,eAAgB,CAAEF,YACzD,CACF,IAEMH,EAAc,EAClBD,QACA7B,SACAI,eAMA,MAAM+B,GAAgB,OAASnC,IACzB,QAAEiC,EAAU,IAAOJ,EACzBzB,EAAS4B,KAAK,QAASG,EAAc,UAAW,CAAEF,YAAW,EAIzDN,EAAkB,GAQH,OAAD,yBARW,SAC7BjB,EAAQ,OACRV,EAAM,SACNI,IAMA,MAAM+B,GAAgB,OAASnC,GAC/B,UACQU,EAAS0B,eACfhC,EAAS4B,KAAK,iBAChB,CAAE,MAAOH,GACP,MAAM,QAAEI,EAAU,IAAOJ,EACzBzB,EAAS4B,KAAK,QAASG,EAAc,UAAW,CAAEF,YACpD,CACF,G,kCC/HO,MAAMI,EAAgB,CAC3BhC,EACAD,KAC6E,O,OAAD,E,OAAA,E,EAAA,YAC5EA,EAAS4B,KAAK,WAAW,EAAM,CAAEC,QAAS,8BAC1C,IACE,MAAM,SAAEK,EAAQ,MAAE7B,EAAK,iBAAE8B,SAA2BlC,EAAUmC,WAK9D,OAJApC,EAAS4B,KAAK,yBAA0B,CACtCS,QAAS,CAAEH,WAAU7B,QAAO8B,sBAE9BnC,EAAS4B,KAAK,WAAW,EAAO,CAAEC,QAAS,iCACpC,CAAEK,WAAU7B,QAAO8B,mBAC5B,CAAE,MAAOV,GACP,MAAM,KAAEa,EAAO,KAAI,QAAET,EAAU,IAAOJ,EAGtC,OAFAzB,EAAS4B,KAAK,8BAA+B,CAAEU,OAAMT,YACrD7B,EAAS4B,KAAK,WAAW,EAAO,CAAEC,QAAS,qCACpC,IACT,CACF,E,YAf8E,K,6QAe7E,C,0DCvBD,MAQaU,EAAY3C,IACvB,MACEC,YACEC,UAAU,KACRM,KAGFR,EAEJ,MAAO,CAACgB,KAA8B4B,KACpC,OAAO,IAAI,EAAAC,aAlBU3C,EAkBkBM,EAlBkB,CAC3DsC,QAAS,0BAA0B5C,KACnC6C,aAAc,mCACd,CAAC,KAAUC,kBAAmB,6CAA6C9C,kDAC3E,CAAC,KAAU+C,oBAAqB,6CAA6C/C,6EAC7E,CAAC,KAAUgD,uBAAwB,6CAA6ChD,sEAajCc,GAAO4B,GAlBhC,IAAC1C,CAkBuC,CAC7D,C,0DCjBI,MAAMiD,EAAc,IAMtB,O,OAAD,E,EAAA,I,EAAA,WALF,UAAE9C,EAAS,OAAEL,EAAM,SAAEI,IAMrBA,EAAS4B,KAAK,WAAW,EAAM,CAAEC,QAAS,uBAC1C,MAAQhC,YAAcmD,eAAgBC,IAAoBrD,EACpDmC,GAAgB,OAASnC,IACzB,YACJsD,EAAW,YACXC,SACQlD,EAAU8C,YAAY,CAAEE,gBAAiBA,KAC/C,QAAsBC,KAAgB,QAAcA,GACtDlD,EAAS4B,KAAK,QAASG,EAAemB,IAEtClD,EAAS4B,KAAKqB,EAAgB,UAAY,aAAc,CACtDC,cACAE,SAAUD,EACVjB,SAAUjC,EAAUiC,WAGxBlC,EAAS4B,KAAK,WAAW,EAAO,CAAEC,QAAS,yBAC7C,E,YAlBI,K,6QAkBH,C,wDC/BM,MAAMwB,EAAU,IAAgD,O,OAAD,E,EAAA,I,EAAA,WAAxC,WAAElD,EAAa,aAErC,IAAAmD,gBAAe,2BAA2BnD,KAE5CoD,OAAOpD,GAAc,WACjB,IAAAmD,gBAAe,2BAA2BnD,cAAwB,SAE5E,E,YAPsE,K,6QAOrE,EAEYqD,EAAe,CAC1BC,EACAzD,KAGA,MAAM0D,EAAaN,SAASO,cAAc,QAEzB,IAAIC,kBAAiB,CACpCC,EACAC,K,MAEA,IAAK,MAAMC,KAAYF,EAAW,CAChC,MAAMG,EAAqC,QAAnB,EAAAD,EAASE,kBAAU,eAAG,IAC1CD,aAAe,EAAfA,EAAiBE,UAAUC,SAASV,MACtCzD,EAAS4B,KAAK,QAAS,CAAEwC,WAAYJ,IAErCF,EAASO,aAEb,KAKOC,QAAQZ,EAFF,CAAEa,WAAW,EAAMC,SAAS,GAEP,C","sources":["webpack://OneSdk/./modules/biometrics/vendors/Onfido/index.ts","webpack://OneSdk/./modules/biometrics/vendors/common/createSession.ts","webpack://OneSdk/./modules/biometrics/vendors/common/errors.ts","webpack://OneSdk/./modules/biometrics/vendors/common/initProcess.ts","webpack://OneSdk/./modules/common/vendors/onfido/index.ts"],"sourcesContent":["import type { BiometricsModule } from '@module/biometrics';\nimport type { Events } from '@module/biometrics/events';\nimport { createSession } from '@module/biometrics/vendors/common/createSession';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport { initProcess } from '@module/biometrics/vendors/common/initProcess';\nimport type { EventHub } from '@module/common';\nimport { defineWrapper } from '@module/common/modules/defineModule';\nimport type { InjectedState } from '@module/common/types';\nimport { install, observeReady } from '@module/common/vendors/onfido';\nimport type {\n SdkError,\n SdkHandle,\n UserExitCode,\n} from '@module/common/vendors/onfido/onfido.types';\nimport { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport const initialise = defineWrapper<BiometricsModule>(\n 'onfido',\n async (\n shared: InjectedState,\n options: BiometricsModule['wrapperOptions'],\n ) => {\n let runOnceAlready = false;\n const { frankieClient, recipe } = shared;\n const {\n biometrics: { provider },\n } = recipe;\n const { mountElement, eventHub } = options;\n const idvClient = new IDVClient(frankieClient);\n\n // generate onfido sdk token from backend\n const idvSession = await createSession(idvClient, eventHub);\n // terminate initialising if session failed\n if (!idvSession) return;\n\n observeReady('onfido-sdk-ui-Theme-portal', eventHub);\n\n await install({\n sdkVersion: provider.name === 'onfido' && provider.sdkVersion,\n });\n\n // initialise onfido instance\n const { token } = idvSession;\n const Onfido = window.Onfido;\n const instance: SdkHandle = Onfido.init({\n token,\n containerEl: mountElement,\n steps: [\n {\n type: 'face',\n options: {\n requestedVariant: 'motion',\n motionFallbackVariant:\n provider.name === 'onfido' && provider?.fallback,\n },\n },\n ],\n customUI: provider.name === 'onfido' && provider.customUI,\n useModal: true,\n isModalOpen: true,\n disableAnalytics: true,\n disableAnalyticsCookies: true,\n onComplete: async (): Promise<void> => {\n if (runOnceAlready) return;\n runOnceAlready = true;\n await handleComplete({ idvClient, recipe, eventHub });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n onError: async (error: SdkError): Promise<void> => {\n handleError({ error, recipe, eventHub });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n onUserExit: async (error: UserExitCode) => {\n eventHub.emit('detection_failed', {\n message: error,\n });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n onModalRequestClose: async () => {\n eventHub.emit('detection_failed', {\n message: null,\n });\n await removeVendorSdk({ instance, recipe, eventHub });\n },\n });\n return {};\n },\n);\n\nconst handleComplete = async ({\n idvClient,\n recipe,\n eventHub,\n}: {\n idvClient: IDVClient;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n}): Promise<void> => {\n const errorMessages = mkErrors(recipe);\n eventHub.emit('detection_complete');\n try {\n await initProcess({ idvClient, recipe, eventHub });\n } catch (error) {\n const { message = '' } = error;\n eventHub.emit('error', errorMessages('INIT_PROCESS', { message }));\n }\n};\n\nconst handleError = ({\n error,\n recipe,\n eventHub,\n}: {\n error: SdkError;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n}): void => {\n const errorMessages = mkErrors(recipe);\n const { message = '' } = error;\n eventHub.emit('error', errorMessages('DEFAULT', { message }));\n};\n\n// destroy onfido instance\nconst removeVendorSdk = async ({\n instance,\n recipe,\n eventHub,\n}: {\n instance: SdkHandle;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n}): Promise<void> => {\n const errorMessages = mkErrors(recipe);\n try {\n await instance.safeTearDown();\n eventHub.emit('session_closed');\n } catch (error) {\n const { message = '' } = error;\n eventHub.emit('error', errorMessages('DEFAULT', { message }));\n }\n};\n","import type { Events } from '@module/biometrics/events';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport type { _DictionaryWrite } from '@types';\n\n/**\n * Creates a session by obtaining an entity ID, token, and vendor parameters from an IDVClient.\n * It will also emit 'session_data_generated' event to the provided event hub.\n * This function won't throw errors. Instead, it will emit 'session_data_failed_loading' and return null.\n *\n * @param idvClient - The IDVClient instance used to obtain the session data.\n * @param eventHub - The EventHub instance for emitting session-related events.\n * @returns A Promise that resolves with an object containing entityId, token, and vendorParameters upon success, or null if a session couldn't be created\n */\nexport const createSession = async <T extends _DictionaryWrite<unknown>>(\n idvClient: IDVClient,\n eventHub: EventHub<Events>,\n): Promise<{ entityId: string; token: string; vendorParameters: T } | null> => {\n eventHub.emit('loading', true, { message: 'Loading biometrics vendor' });\n try {\n const { entityId, token, vendorParameters } = await idvClient.getToken<T>();\n eventHub.emit('session_data_generated', {\n session: { entityId, token, vendorParameters },\n });\n eventHub.emit('loading', false, { message: 'Biometrics vendor has loaded' });\n return { entityId, token, vendorParameters };\n } catch (error) {\n const { code = null, message = '' } = error;\n eventHub.emit('session_data_failed_loading', { code, message });\n eventHub.emit('loading', false, { message: `Biometrics vendor has not loaded` });\n return null;\n }\n};\n","import { OneSDKError } from '@module/common';\nimport { IDVStatus } from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport type ErrorMessages = Record<\n 'DEFAULT' | 'INIT_PROCESS' | Extract<IDVStatus, 'PROVIDER_OFFLINE' | 'WAITING_DOC_UPLOAD' | 'WAITING_SELFIE_UPLOAD'>,\n string\n>;\n\nconst mkErrorMessages = (provider: string): ErrorMessages => ({\n DEFAULT: `Error from vendor SDK '${provider}'`,\n INIT_PROCESS: 'Error from biometrics submission',\n [IDVStatus.PROVIDER_OFFLINE]: `Error initialising biometrics check with '${provider}'. The service doesn't appear to be available.`,\n [IDVStatus.WAITING_DOC_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to run the 'ocr' component before running 'biometrics'.`,\n [IDVStatus.WAITING_SELFIE_UPLOAD]: `Error initialising biometrics check with '${provider}'. You might need to capture selfie before running 'biometrics'.`,\n});\n\nexport const mkErrors = (recipe: RecipeParsed) => {\n const {\n biometrics: {\n provider: {\n name,\n },\n },\n } = recipe;\n\n return (type: keyof ErrorMessages, ...payload: unknown[]) => {\n return new OneSDKError(mkErrorMessages(name)[type], payload);\n };\n \n};\n","import type { Events } from '@module/biometrics/events';\nimport type { ErrorMessages } from '@module/biometrics/vendors/common/errors';\nimport { mkErrors } from '@module/biometrics/vendors/common/errors';\nimport type { EventHub } from '@module/common';\nimport type { IDVClient } from '@module/frankie-client/clients/IDVClient';\nimport {\n isErrorStatus,\n isInputRequiredStatus,\n} from '@module/frankie-client/clients/IDVClient';\nimport type { RecipeParsed } from '@module/sdk/types';\n\nexport const initProcess = async (\n { idvClient, recipe, eventHub }: {\n idvClient: IDVClient;\n recipe: RecipeParsed;\n eventHub: EventHub<Events>;\n },\n) => {\n eventHub.emit('loading', true, { message: 'Evaluating results' });\n const { biometrics: { is_synchronous: isSynchronous } } = recipe;\n const errorMessages = mkErrors(recipe);\n const {\n checkStatus,\n ocrDocument,\n } = await idvClient.initProcess({ isSynchronous: !!isSynchronous });\n if (isInputRequiredStatus(checkStatus) || isErrorStatus(checkStatus)) {\n eventHub.emit('error', errorMessages((checkStatus as keyof ErrorMessages)));\n } else {\n eventHub.emit(isSynchronous ? 'results' : 'processing', {\n checkStatus,\n document: ocrDocument,\n entityId: idvClient.entityId,\n });\n }\n eventHub.emit('loading', false, { message: 'Results have retrived' });\n};\n","import type { Events as BiometricsEvents } from '@module/biometrics';\nimport { type EventHub, loadAsyncAsset } from '@module/common';\nimport type { Events as OcrEvents } from '@module/ocr';\n\nexport const install = async ({ sdkVersion = '12' }): Promise<void> => {\n // install Onfido script from CDN\n await loadAsyncAsset(`https://sdk.onfido.com/v${sdkVersion}`);\n // note that from version 14 onwards, a separate stylesheet is no longer required as it will be included with the default library.\n if (Number(sdkVersion) < 14 && process.env.NODE_ENV !== 'test') {\n await loadAsyncAsset(`https://sdk.onfido.com/v${sdkVersion}/style.css`, 'style');\n }\n};\n\nexport const observeReady = (\n mutationClass: string,\n eventHub: EventHub<BiometricsEvents | OcrEvents>,\n): void => {\n // Select the target node\n const targetNode = document.querySelector('body');\n // Create an observer instance\n const observer = new MutationObserver((\n mutations: MutationRecord[],\n observer: MutationObserver,\n ) => {\n for (const mutation of mutations) {\n const mutationElement = mutation.addedNodes?.[0] as HTMLElement;\n if (mutationElement?.classList.contains(mutationClass)) {\n eventHub.emit('ready', { domElement: mutationElement });\n // stop observing\n observer.disconnect();\n }\n }\n });\n // Options for the observer (which mutations to observe)\n const config = { childList: true, subtree: true };\n // Start observing the target node for specified mutations\n observer.observe(targetNode, config);\n};\n"],"names":["initialise","shared","options","runOnceAlready","frankieClient","recipe","biometrics","provider","mountElement","eventHub","idvClient","idvSession","sdkVersion","name","token","instance","window","Onfido","init","containerEl","steps","type","requestedVariant","motionFallbackVariant","fallback","customUI","useModal","isModalOpen","disableAnalytics","disableAnalyticsCookies","onComplete","handleComplete","removeVendorSdk","onError","error","handleError","onUserExit","emit","message","onModalRequestClose","errorMessages","safeTearDown","createSession","entityId","vendorParameters","getToken","session","code","mkErrors","payload","OneSDKError","DEFAULT","INIT_PROCESS","PROVIDER_OFFLINE","WAITING_DOC_UPLOAD","WAITING_SELFIE_UPLOAD","initProcess","is_synchronous","isSynchronous","checkStatus","ocrDocument","document","install","loadAsyncAsset","Number","observeReady","mutationClass","targetNode","querySelector","MutationObserver","mutations","observer","mutation","mutationElement","addedNodes","classList","contains","domElement","disconnect","observe","childList","subtree"],"sourceRoot":""}
|
package/dist/umd/form-legacy.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkOneSdk=self.webpackChunkOneSdk||[]).push([[823],{8665:(e,n,E)=>{E.r(n),E.d(n,{initialise:()=>S});var i=E(
|
|
1
|
+
"use strict";(self.webpackChunkOneSdk=self.webpackChunkOneSdk||[]).push([[823],{8665:(e,n,E)=>{E.r(n),E.d(n,{initialise:()=>S});var i=E(4366),t=E(4334),o=E(5473);const r=["INIT","FF_SAVE_RESULT","FF_CHECK_RESULT","FF_SAVE_ERROR","FF_CHECK_ERROR","FF_ONBOARDING_WIDGET_DESTROYED","DESTROY","SCREEN:WELCOME","SCREEN:DOCUMENT_TYPE_SELECT","SCREEN:DRIVERS_LICENCE_INPUT","SCREEN:NATIONAL_ID","SCREEN:MEDICARE_INPUT","SCREEN:PASSPORT_INPUT","SCREEN:NAME_INPUT","SCREEN:DOB_INPUT","SCREEN:ADDRESS_INPUT","SCREEN:DETAILS_SUMMARY","SCREEN:FAILURE","SCREEN:SUCCESS","SCREEN:NO_MATCH","SCREEN:PENDING_VERFICATION","SCREEN:ERROR","SCREEN:NAME_INPUT_CHECK","SCREEN:DOB_INPUT_CHECK","SCREEN:MANUAL_ADDRESS_INPUT","SCREEN:ADDITIONAL_ADDRESS_INPUT","SCREEN:ADDRESS_INPUT_CHECK"],a={"SCREEN:WELCOME":"form:welcome:ready","SCREEN:DOCUMENT_TYPE_SELECT":"form:document_type_select:ready","SCREEN:DRIVERS_LICENCE_INPUT":"form:drivers_license_input:ready","SCREEN:NATIONAL_ID":"form:national_id:ready","SCREEN:MEDICARE_INPUT":"form:medicare_input:ready","SCREEN:PASSPORT_INPUT":"form:passport_input:ready","SCREEN:NAME_INPUT":"form:name_input:ready","SCREEN:DOB_INPUT":"form:dob_input:ready","SCREEN:ADDRESS_INPUT":"form:address_input:ready","SCREEN:DETAILS_SUMMARY":"form:details_summary:ready","SCREEN:FAILURE":"form:failure:ready","SCREEN:SUCCESS":"form:success:ready","SCREEN:NO_MATCH":"form:no_match:ready","SCREEN:PENDING_VERFICATION":"form:pending_verification:ready","SCREEN:ERROR":"form:error:ready","SCREEN:NAME_INPUT_CHECK":"form:name_input_check:ready","SCREEN:DOB_INPUT_CHECK":"form:dob_input_check:ready","SCREEN:MANUAL_ADDRESS_INPUT":"form:manual_address_input:ready","SCREEN:ADDITIONAL_ADDRESS_INPUT":"form:additional_address_input:ready","SCREEN:ADDRESS_INPUT_CHECK":"form:address_input_check:ready"};var d=E(1668),c=E(486);const N=e=>e.emit.bind(e);var _=function(e,n,E,i){return new(E||(E=Promise))((function(t,o){function r(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var n;e.done?t(e.value):(n=e.value,n instanceof E?n:new E((function(e){e(n)}))).then(r,a)}d((i=i.apply(e,n||[])).next())}))};const R=["PASSPORT","DRIVERS_LICENCE","NATIONAL_ID","NATIONAL_HEALTH_ID"],S=(0,o.f)("legacy",((...e)=>_(void 0,void 0,void 0,(function*(){var n,E;const{eventListener:o,domElement:S,cleanup:s}=yield function(e){return n=this,E=arguments,o=function*([e,{mountElement:n}]){var E,i;const o=e.recipe.form.provider;if("legacy"!==o.name)throw new Error(`Attempt to initialise the wrong provider of the Legacy UI '${o.name}'`);if(!(null===(E=null===window||void 0===window?void 0:window.frankieFinancial)||void 0===E?void 0:E.initialiseOnboardingWidget)){const e=null!==(i=o.version)&&void 0!==i?i:"v4";yield(0,t.loadAsyncAsset)("https://assets.frankiefinancial.io/onboarding/:version:/ff-onboarding-widget.umd.js".replace(":version:",e))}const a=document.createElement("ff-onboarding-widget");n.appendChild(a);const{cleanup:_,eventListener:R}=function(e){const n={},E=(0,c.y)(),i=N(E);return e.forEach((e=>((e,E)=>{var i;null!==(i=n[e])&&void 0!==i||(n[e]=[]),n[e].push(E),window.addEventListener(e,E)})(e,(n=>{const E=n.detail,t=E instanceof Error?new d.p(E.message,E):E;i(e,t)})))),{cleanup(){Object.entries(n).forEach((([e,n])=>{n.forEach((n=>{window.removeEventListener(e,n)}))}))},eventListener:(0,c.n)(E)}}(r);return{eventListener:R,domElement:a,cleanup:()=>{_(),n.contains(a)&&n.removeChild(a)}}},new((i=void 0)||(i=Promise))((function(e,t){function r(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(n){var E;n.done?e(n.value):(E=n.value,E instanceof i?E:new i((function(e){e(E)}))).then(r,a)}d((o=o.apply(n,E||[])).next())}));var n,E,i,o}(e),[C]=e,{localEventHub:l,oneSdkInstance:f,session:u,mode:m,recipe:{form:I}}=C,T=f.individual();l.emit("loaded",{domElement:S,provider:I.provider.name}),o.on("INIT",(({data:e})=>l.emit("ready",{domElement:S,config:e}))),Object.entries(a).forEach((([e,n])=>{o.on(e,(e=>l.emit(n,e)))})),o.on(["FF_CHECK_ERROR","FF_SAVE_ERROR"],(e=>l.emit("error",e))),o.on(["FF_SAVE_RESULT","FF_CHECK_RESULT"],(e=>_(void 0,void 0,void 0,(function*(){yield T.search(),l.emit("results",e)})))),o.on(["DESTROY","FF_ONBOARDING_WIDGET_DESTROYED"],(()=>l.emit("destroy")));const v=T.access("documents").getValue().map((e=>e.idType)).filter((e=>R.includes(e))),A=v.length>0?v:R,D=u.entityId?{entityId:u.entityId}:{applicantReference:u.reference},p=m.is(i.O_.DUMMY),O="legacy"===I.provider.name&&(null!==(E=null===(n=I.provider)||void 0===n?void 0:n.config)&&void 0!==E?E:{});return window.frankieFinancial.initialiseOnboardingWidget(Object.assign(Object.assign({},D),{ffToken:p?null:u.token,width:"100%",height:"100%",config:Object.assign(Object.assign({documentTypes:A},O),{mode:p?"demo":"production",frankieBackendUrl:p?(0,t.env2url)(t.ENVIRONMENTS.development):u.environment,idScanVerification:!1,enableDeviceCharacteristics:!1})})),{cleanup:s}}))))}}]);
|
|
2
2
|
//# sourceMappingURL=form-legacy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-legacy.js","mappings":"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","sources":["webpack://OneSdk/./modules/form/vendors/legacy/legacyUIEvents.types.ts","webpack://OneSdk/./modules/common/modules/eventHub/windowEventHub.ts","webpack://OneSdk/./modules/form/vendors/legacy/index.ts","webpack://OneSdk/./modules/form/vendors/legacy/loadLegacyUI.ts"],"sourcesContent":["import type { OneSDKError } from '@module/common';\nimport type { Applicant } from '@module/common/shared/models/Applicant';\nimport type { Document } from '@module/common/shared/models/Document';\nimport type { FormEvents } from '@module/form/events';\nimport type { CheckSummary } from '@module/types';\n\nimport type { LegacyUIConfiguration } from './legacyUIOptions.types';\n\n// use all events defined above to create a object type mapping event name to a tuple of [all data in the detail field]\nexport type LegacyUIScreenEvents = {\n 'SCREEN:WELCOME': [LegacyUIScreenPayload];\n 'SCREEN:DOCUMENT_TYPE_SELECT': [LegacyUIScreenPayload];\n 'SCREEN:DRIVERS_LICENCE_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:NATIONAL_ID': [LegacyUIScreenPayload];\n 'SCREEN:MEDICARE_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:PASSPORT_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:NAME_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:DOB_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:ADDRESS_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:DETAILS_SUMMARY': [LegacyUIScreenPayload];\n 'SCREEN:FAILURE': [LegacyUIScreenPayload];\n 'SCREEN:SUCCESS': [LegacyUIScreenPayload];\n 'SCREEN:NO_MATCH': [LegacyUIScreenPayload];\n 'SCREEN:PENDING_VERFICATION': [LegacyUIScreenPayload];\n 'SCREEN:ERROR': [LegacyUIScreenPayload];\n 'SCREEN:NAME_INPUT_CHECK': [LegacyUIScreenPayload];\n 'SCREEN:DOB_INPUT_CHECK': [LegacyUIScreenPayload];\n 'SCREEN:MANUAL_ADDRESS_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:ADDITIONAL_ADDRESS_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:ADDRESS_INPUT_CHECK': [LegacyUIScreenPayload];\n}\n\nexport type LegacyUIEvents = {\n INIT: [{ data: LegacyUIConfiguration }];\n FF_SAVE_RESULT: [LegacyUIResultPayload];\n FF_CHECK_RESULT: [LegacyUIResultPayload];\n FF_SAVE_ERROR: [OneSDKError];\n FF_CHECK_ERROR: [OneSDKError];\n FF_ONBOARDING_WIDGET_DESTROYED: [];\n DESTROY: [];\n} & LegacyUIScreenEvents\n\n\nexport type LegacyUIScreenPayload = {\n readonly applicant?: Applicant;\n readonly documents?: Document[];\n readonly checkSummary?: CheckSummary;\n readonly name: string;\n readonly customerId: string;\n readonly sessionId: string;\n readonly timeStamp: string;\n readonly data: {\n [field: string]: string | boolean | number;\n };\n readonly channel: string | null;\n readonly version: string | null;\n readonly deviceType: string | null;\n readonly browser: string | null;\n}\n\nexport type LegacyUIResultPayload = {\n readonly applicant: Applicant;\n readonly documents: Document[];\n readonly attemptCount: number;\n readonly maxAttemptCount: number;\n readonly isCheckingAddress: boolean;\n readonly isCheckingIDs: boolean;\n readonly isSaveOnly: boolean;\n readonly checkSummary?: CheckSummary;\n readonly resultSlug?: 'success' | 'pending-success' | 'too-many-tries' | 'no-match' | 'partial-match';\n}\nexport const LegacyUIScreenEventKeys: (keyof LegacyUIScreenEvents)[] = [\n 'SCREEN:WELCOME',\n 'SCREEN:DOCUMENT_TYPE_SELECT',\n 'SCREEN:DRIVERS_LICENCE_INPUT',\n 'SCREEN:NATIONAL_ID',\n 'SCREEN:MEDICARE_INPUT',\n 'SCREEN:PASSPORT_INPUT',\n 'SCREEN:NAME_INPUT',\n 'SCREEN:DOB_INPUT',\n 'SCREEN:ADDRESS_INPUT',\n 'SCREEN:DETAILS_SUMMARY',\n 'SCREEN:FAILURE',\n 'SCREEN:SUCCESS',\n 'SCREEN:NO_MATCH',\n 'SCREEN:PENDING_VERFICATION',\n 'SCREEN:ERROR',\n 'SCREEN:NAME_INPUT_CHECK',\n 'SCREEN:DOB_INPUT_CHECK',\n 'SCREEN:MANUAL_ADDRESS_INPUT',\n 'SCREEN:ADDITIONAL_ADDRESS_INPUT',\n 'SCREEN:ADDRESS_INPUT_CHECK',\n];\n\nexport const LegacyUIEventKeys: (keyof LegacyUIEvents)[] = [\n 'INIT',\n 'FF_SAVE_RESULT',\n 'FF_CHECK_RESULT',\n 'FF_SAVE_ERROR',\n 'FF_CHECK_ERROR',\n 'FF_ONBOARDING_WIDGET_DESTROYED',\n 'DESTROY',\n ...LegacyUIScreenEventKeys,\n];\n\nexport const LegacyUIEventDict: Record<keyof LegacyUIScreenEvents, keyof FormEvents> = {\n 'SCREEN:WELCOME': 'form:welcome:ready',\n 'SCREEN:DOCUMENT_TYPE_SELECT': 'form:document_type_select:ready',\n 'SCREEN:DRIVERS_LICENCE_INPUT': 'form:drivers_license_input:ready',\n 'SCREEN:NATIONAL_ID': 'form:national_id:ready',\n 'SCREEN:MEDICARE_INPUT': 'form:medicare_input:ready',\n 'SCREEN:PASSPORT_INPUT': 'form:passport_input:ready',\n 'SCREEN:NAME_INPUT': 'form:name_input:ready',\n 'SCREEN:DOB_INPUT': 'form:dob_input:ready',\n 'SCREEN:ADDRESS_INPUT': 'form:address_input:ready',\n 'SCREEN:DETAILS_SUMMARY': 'form:details_summary:ready',\n 'SCREEN:FAILURE': 'form:failure:ready',\n 'SCREEN:SUCCESS': 'form:success:ready',\n 'SCREEN:NO_MATCH': 'form:no_match:ready',\n 'SCREEN:PENDING_VERFICATION': 'form:pending_verification:ready',\n 'SCREEN:ERROR': 'form:error:ready',\n 'SCREEN:NAME_INPUT_CHECK': 'form:name_input_check:ready',\n 'SCREEN:DOB_INPUT_CHECK': 'form:dob_input_check:ready',\n 'SCREEN:MANUAL_ADDRESS_INPUT': 'form:manual_address_input:ready',\n 'SCREEN:ADDITIONAL_ADDRESS_INPUT': 'form:additional_address_input:ready',\n 'SCREEN:ADDRESS_INPUT_CHECK': 'form:address_input_check:ready',\n};\n","import { OneSDKError } from '@module/common/errors/OneSDKError.class';\nimport type { KeyOf } from '@types';\n\nimport { mkEventHub, mkEventListener } from '.';\n\nimport type { EventsDictionary, KeyOfExtendedEvents, EventHub } from './types';\n\n/**\n * This function is used to create an event hub that listens to events emitted by the window object.\n * This function will convert Error objects into OneSDKError objects.\n * @param autoEmitEventNames - The names of the events that should be listened to and reemitted automatically\n * @returns A cleanup method and an event listener\n */\nexport function mkWindowEventHub<Events extends EventsDictionary>(autoEmitEventNames: KeyOf<Events>[]) {\n type EventListenerCallback<T> = (event: CustomEvent<T>) => void;\n\n const listeners: {\n [key: string]: EventListenerCallback<unknown>[];\n } = {};\n\n const FormEventHub = mkEventHub<Events>();\n const emitToEventHub = extractGenericEmitMethod(FormEventHub);\n\n const addEventListener = (\n eventName: string,\n listener: EventListenerCallback<unknown>,\n ) => {\n listeners[eventName] ??= [];\n listeners[eventName].push(listener);\n\n window.addEventListener(eventName, listener);\n };\n autoEmitEventNames.forEach((eventName) =>\n addEventListener(eventName, (customEvent) => {\n const detail = customEvent.detail;\n const data = detail instanceof Error ? new OneSDKError(detail.message, detail) : detail;\n\n emitToEventHub(eventName as unknown as KeyOfExtendedEvents<Events>, data);\n }),\n );\n\n return {\n cleanup() {\n Object.entries(listeners).forEach(([eventName, listeners]) => {\n listeners.forEach((listener) => {\n window.removeEventListener(eventName, listener);\n });\n });\n },\n eventListener: mkEventListener(FormEventHub),\n };\n}\n\n/**\n * This function is simply used to simplify typescript's type inference\n */\nconst extractGenericEmitMethod = (eh: EventHub) => eh.emit.bind(eh) as (\n en: string,\n data: unknown\n) => void;\n","import { SdkMode } from '@frankieone/one-sdk';\nimport { env2url, ENVIRONMENTS } from '@module/common';\nimport { defineWrapper } from '@module/common/modules/defineModule';\nimport type { Document } from '@module/common/shared/models/Document';\nimport type { DeepPartial } from '@module/common/shared/models/general';\nimport type { FormModule } from '@module/form/definition';\nimport type { FormEvents } from '@module/form/events';\nimport type {\n LegacyUIResultPayload,\n LegacyUIScreenEvents,\n LegacyUIScreenPayload,\n} from '@module/form/vendors/legacy/legacyUIEvents.types';\nimport {\n LegacyUIEventDict,\n} from '@module/form/vendors/legacy/legacyUIEvents.types';\n\nimport { loadLegacyUI } from './loadLegacyUI';\n\nimport type {\n LegacyUIConfiguration,\n SupportedDocumentType,\n} from './legacyUIOptions.types';\n\nconst SUPPORTED_DOCUMENT_TYPES: Document['idType'][] = [\n 'PASSPORT',\n 'DRIVERS_LICENCE',\n 'NATIONAL_ID',\n 'NATIONAL_HEALTH_ID',\n];\nexport const initialise = defineWrapper<FormModule>('legacy', async (...args) => {\n const {\n eventListener: legacyUIEventListener,\n domElement,\n cleanup,\n } = await loadLegacyUI(args);\n\n const [sharedState] = args;\n const {\n localEventHub,\n oneSdkInstance,\n session,\n mode,\n recipe: { form },\n } = sharedState;\n const individual = oneSdkInstance.individual();\n\n localEventHub.emit('loaded', { domElement, provider: form.provider.name });\n\n // setup events\n legacyUIEventListener.on('INIT', ({ data }) =>\n localEventHub.emit('ready', {\n domElement,\n config: data,\n }));\n\n // screen events\n Object.entries(LegacyUIEventDict)\n .forEach(([screenEvents, formEvents]: [keyof LegacyUIScreenEvents, keyof FormEvents]) => {\n legacyUIEventListener.on(screenEvents, (payload: LegacyUIScreenPayload) =>\n localEventHub.emit(formEvents, payload));\n });\n // error events\n legacyUIEventListener.on([\n 'FF_CHECK_ERROR',\n 'FF_SAVE_ERROR',\n ], (error) => localEventHub.emit('error', error));\n\n // check events\n legacyUIEventListener.on([\n 'FF_SAVE_RESULT',\n 'FF_CHECK_RESULT',\n ], async (payload: LegacyUIResultPayload) => {\n await individual.search();\n localEventHub.emit('results', payload);\n });\n\n // destroy events\n legacyUIEventListener.on([\n 'DESTROY',\n 'FF_ONBOARDING_WIDGET_DESTROYED',\n ], () => localEventHub.emit('destroy'));\n\n // Initialise legacy ui\n const documents = individual.access('documents').getValue();\n // Select document types belonging to the entity\n const entityDocumentTypes = documents\n .map((document) => document.idType)\n .filter((idType): idType is SupportedDocumentType => SUPPORTED_DOCUMENT_TYPES.includes(idType));\n // prettier-ignore\n const documentTypes = entityDocumentTypes.length > 0\n ? entityDocumentTypes\n : SUPPORTED_DOCUMENT_TYPES as SupportedDocumentType[];\n\n const entityIdentifier = session.entityId\n ? { entityId: session.entityId }\n : { applicantReference: session.reference };\n const isDummyMode = mode.is(SdkMode.DUMMY);\n const legacyUIConfiguration = form.provider.name === 'legacy' && (form.provider?.config ?? {});\n\n window.frankieFinancial.initialiseOnboardingWidget({\n ...entityIdentifier,\n ffToken: isDummyMode ? null : session.token,\n width: '100%',\n height: '100%',\n config: {\n documentTypes,\n ...legacyUIConfiguration,\n mode: isDummyMode ? 'demo' : 'production',\n // Legacy ui requires a valid frankieone url to be provided,\n // and the session.environment in dummy mode won't be one for that\n // reason here in dummy mode we simply pass the development url\n frankieBackendUrl: isDummyMode ? env2url(ENVIRONMENTS.development) : session.environment,\n // Disabling the following features in Legacy UI that is already\n // powered by onesdk\n idScanVerification: false,\n enableDeviceCharacteristics: false,\n },\n });\n\n return {\n cleanup,\n };\n});\n\ndeclare global {\n type Options = {\n ffToken: string;\n width?: string;\n height?: string;\n config?: DeepPartial<LegacyUIConfiguration>;\n selector?: string;\n shadow?: boolean;\n entityId?: string;\n applicantReference?: string;\n };\n\n interface Window {\n frankieFinancial: {\n initialiseOnboardingWidget: (options: Options) => void;\n };\n }\n}\n","import { loadAsyncAsset } from '@module/common';\nimport type { WrapperParameters } from '@module/common/modules/defineModule';\nimport {\n mkWindowEventHub,\n} from '@module/common/modules/eventHub/windowEventHub';\nimport type { FormModule } from '@module/form/definition';\n\nimport { LegacyUIEventKeys } from './legacyUIEvents.types';\n\nimport type { LegacyUIEvents } from './legacyUIEvents.types';\n\nconst CDN_URL = 'https://assets.frankiefinancial.io/onboarding/:version:/ff-onboarding-widget.umd.js';\n\nexport async function loadLegacyUI([globalState, { mountElement }]: WrapperParameters<FormModule>) {\n const provider = globalState.recipe.form.provider;\n if (provider.name !== 'legacy')\n throw new Error(`Attempt to initialise the wrong provider of the Legacy UI '${provider.name}'`);\n\n // Don't load legacy ui twice\n if (!window?.frankieFinancial?.initialiseOnboardingWidget) {\n const version = provider.version ?? 'v4';\n await loadAsyncAsset(CDN_URL.replace(':version:', version));\n }\n\n const legacyUIElement = document.createElement('ff-onboarding-widget');\n mountElement.appendChild(legacyUIElement);\n\n const {\n cleanup: eventsCleanup,\n eventListener,\n } = mkWindowEventHub<LegacyUIEvents>(LegacyUIEventKeys);\n\n const cleanup = () => {\n eventsCleanup();\n if (mountElement.contains(legacyUIElement)) mountElement.removeChild(legacyUIElement);\n };\n\n return { eventListener, domElement: legacyUIElement, cleanup };\n}\n"],"names":["LegacyUIEventKeys","LegacyUIEventDict","extractGenericEmitMethod","eh","emit","bind","SUPPORTED_DOCUMENT_TYPES","initialise","args","eventListener","legacyUIEventListener","domElement","cleanup","globalState","mountElement","provider","recipe","form","name","Error","window","frankieFinancial","initialiseOnboardingWidget","version","loadAsyncAsset","replace","legacyUIElement","document","createElement","appendChild","eventsCleanup","autoEmitEventNames","listeners","FormEventHub","emitToEventHub","forEach","eventName","listener","push","addEventListener","customEvent","detail","data","message","Object","entries","removeEventListener","mkWindowEventHub","contains","removeChild","loadLegacyUI","sharedState","localEventHub","oneSdkInstance","session","mode","individual","on","config","screenEvents","formEvents","payload","error","search","entityDocumentTypes","access","getValue","map","idType","filter","includes","documentTypes","length","entityIdentifier","entityId","applicantReference","reference","isDummyMode","is","DUMMY","legacyUIConfiguration","ffToken","token","width","height","frankieBackendUrl","env2url","ENVIRONMENTS","development","environment","idScanVerification","enableDeviceCharacteristics"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"form-legacy.js","mappings":"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","sources":["webpack://OneSdk/./modules/form/vendors/legacy/legacyUIEvents.types.ts","webpack://OneSdk/./modules/common/modules/eventHub/windowEventHub.ts","webpack://OneSdk/./modules/form/vendors/legacy/index.ts","webpack://OneSdk/./modules/form/vendors/legacy/loadLegacyUI.ts"],"sourcesContent":["import type { OneSDKError } from '@module/common';\nimport type { Applicant } from '@module/common/shared/models/Applicant';\nimport type { Document } from '@module/common/shared/models/Document';\nimport type { FormEvents } from '@module/form/events';\nimport type { CheckSummary } from '@module/types';\n\nimport type { LegacyUIConfiguration } from './legacyUIOptions.types';\n\n// use all events defined above to create a object type mapping event name to a tuple of [all data in the detail field]\nexport type LegacyUIScreenEvents = {\n 'SCREEN:WELCOME': [LegacyUIScreenPayload];\n 'SCREEN:DOCUMENT_TYPE_SELECT': [LegacyUIScreenPayload];\n 'SCREEN:DRIVERS_LICENCE_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:NATIONAL_ID': [LegacyUIScreenPayload];\n 'SCREEN:MEDICARE_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:PASSPORT_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:NAME_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:DOB_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:ADDRESS_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:DETAILS_SUMMARY': [LegacyUIScreenPayload];\n 'SCREEN:FAILURE': [LegacyUIScreenPayload];\n 'SCREEN:SUCCESS': [LegacyUIScreenPayload];\n 'SCREEN:NO_MATCH': [LegacyUIScreenPayload];\n 'SCREEN:PENDING_VERFICATION': [LegacyUIScreenPayload];\n 'SCREEN:ERROR': [LegacyUIScreenPayload];\n 'SCREEN:NAME_INPUT_CHECK': [LegacyUIScreenPayload];\n 'SCREEN:DOB_INPUT_CHECK': [LegacyUIScreenPayload];\n 'SCREEN:MANUAL_ADDRESS_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:ADDITIONAL_ADDRESS_INPUT': [LegacyUIScreenPayload];\n 'SCREEN:ADDRESS_INPUT_CHECK': [LegacyUIScreenPayload];\n}\n\nexport type LegacyUIEvents = {\n INIT: [{ data: LegacyUIConfiguration }];\n FF_SAVE_RESULT: [LegacyUIResultPayload];\n FF_CHECK_RESULT: [LegacyUIResultPayload];\n FF_SAVE_ERROR: [OneSDKError];\n FF_CHECK_ERROR: [OneSDKError];\n FF_ONBOARDING_WIDGET_DESTROYED: [];\n DESTROY: [];\n} & LegacyUIScreenEvents\n\n\nexport type LegacyUIScreenPayload = {\n readonly applicant?: Applicant;\n readonly documents?: Document[];\n readonly checkSummary?: CheckSummary;\n readonly name: string;\n readonly customerId: string;\n readonly sessionId: string;\n readonly timeStamp: string;\n readonly data: {\n [field: string]: string | boolean | number;\n };\n readonly channel: string | null;\n readonly version: string | null;\n readonly deviceType: string | null;\n readonly browser: string | null;\n}\n\nexport type LegacyUIResultPayload = {\n readonly applicant: Applicant;\n readonly documents: Document[];\n readonly attemptCount: number;\n readonly maxAttemptCount: number;\n readonly isCheckingAddress: boolean;\n readonly isCheckingIDs: boolean;\n readonly isSaveOnly: boolean;\n readonly checkSummary?: CheckSummary;\n readonly resultSlug?: 'success' | 'pending-success' | 'too-many-tries' | 'no-match' | 'partial-match';\n}\nexport const LegacyUIScreenEventKeys: (keyof LegacyUIScreenEvents)[] = [\n 'SCREEN:WELCOME',\n 'SCREEN:DOCUMENT_TYPE_SELECT',\n 'SCREEN:DRIVERS_LICENCE_INPUT',\n 'SCREEN:NATIONAL_ID',\n 'SCREEN:MEDICARE_INPUT',\n 'SCREEN:PASSPORT_INPUT',\n 'SCREEN:NAME_INPUT',\n 'SCREEN:DOB_INPUT',\n 'SCREEN:ADDRESS_INPUT',\n 'SCREEN:DETAILS_SUMMARY',\n 'SCREEN:FAILURE',\n 'SCREEN:SUCCESS',\n 'SCREEN:NO_MATCH',\n 'SCREEN:PENDING_VERFICATION',\n 'SCREEN:ERROR',\n 'SCREEN:NAME_INPUT_CHECK',\n 'SCREEN:DOB_INPUT_CHECK',\n 'SCREEN:MANUAL_ADDRESS_INPUT',\n 'SCREEN:ADDITIONAL_ADDRESS_INPUT',\n 'SCREEN:ADDRESS_INPUT_CHECK',\n];\n\nexport const LegacyUIEventKeys: (keyof LegacyUIEvents)[] = [\n 'INIT',\n 'FF_SAVE_RESULT',\n 'FF_CHECK_RESULT',\n 'FF_SAVE_ERROR',\n 'FF_CHECK_ERROR',\n 'FF_ONBOARDING_WIDGET_DESTROYED',\n 'DESTROY',\n ...LegacyUIScreenEventKeys,\n];\n\nexport const LegacyUIEventDict: Record<keyof LegacyUIScreenEvents, keyof FormEvents> = {\n 'SCREEN:WELCOME': 'form:welcome:ready',\n 'SCREEN:DOCUMENT_TYPE_SELECT': 'form:document_type_select:ready',\n 'SCREEN:DRIVERS_LICENCE_INPUT': 'form:drivers_license_input:ready',\n 'SCREEN:NATIONAL_ID': 'form:national_id:ready',\n 'SCREEN:MEDICARE_INPUT': 'form:medicare_input:ready',\n 'SCREEN:PASSPORT_INPUT': 'form:passport_input:ready',\n 'SCREEN:NAME_INPUT': 'form:name_input:ready',\n 'SCREEN:DOB_INPUT': 'form:dob_input:ready',\n 'SCREEN:ADDRESS_INPUT': 'form:address_input:ready',\n 'SCREEN:DETAILS_SUMMARY': 'form:details_summary:ready',\n 'SCREEN:FAILURE': 'form:failure:ready',\n 'SCREEN:SUCCESS': 'form:success:ready',\n 'SCREEN:NO_MATCH': 'form:no_match:ready',\n 'SCREEN:PENDING_VERFICATION': 'form:pending_verification:ready',\n 'SCREEN:ERROR': 'form:error:ready',\n 'SCREEN:NAME_INPUT_CHECK': 'form:name_input_check:ready',\n 'SCREEN:DOB_INPUT_CHECK': 'form:dob_input_check:ready',\n 'SCREEN:MANUAL_ADDRESS_INPUT': 'form:manual_address_input:ready',\n 'SCREEN:ADDITIONAL_ADDRESS_INPUT': 'form:additional_address_input:ready',\n 'SCREEN:ADDRESS_INPUT_CHECK': 'form:address_input_check:ready',\n};\n","import { OneSDKError } from '@module/common/errors/OneSDKError.class';\nimport type { KeyOf } from '@types';\n\nimport { mkEventHub, mkEventListener } from '.';\n\nimport type { EventsDictionary, KeyOfExtendedEvents, EventHub } from './types';\n\n/**\n * This function is used to create an event hub that listens to events emitted by the window object.\n * This function will convert Error objects into OneSDKError objects.\n * @param autoEmitEventNames - The names of the events that should be listened to and reemitted automatically\n * @returns A cleanup method and an event listener\n */\nexport function mkWindowEventHub<Events extends EventsDictionary>(autoEmitEventNames: KeyOf<Events>[]) {\n type EventListenerCallback<T> = (event: CustomEvent<T>) => void;\n\n const listeners: {\n [key: string]: EventListenerCallback<unknown>[];\n } = {};\n\n const FormEventHub = mkEventHub<Events>();\n const emitToEventHub = extractGenericEmitMethod(FormEventHub);\n\n const addEventListener = (\n eventName: string,\n listener: EventListenerCallback<unknown>,\n ) => {\n listeners[eventName] ??= [];\n listeners[eventName].push(listener);\n\n window.addEventListener(eventName, listener);\n };\n autoEmitEventNames.forEach((eventName) =>\n addEventListener(eventName, (customEvent) => {\n const detail = customEvent.detail;\n const data = detail instanceof Error ? new OneSDKError(detail.message, detail) : detail;\n\n emitToEventHub(eventName as unknown as KeyOfExtendedEvents<Events>, data);\n }),\n );\n\n return {\n cleanup() {\n Object.entries(listeners).forEach(([eventName, listeners]) => {\n listeners.forEach((listener) => {\n window.removeEventListener(eventName, listener);\n });\n });\n },\n eventListener: mkEventListener(FormEventHub),\n };\n}\n\n/**\n * This function is simply used to simplify typescript's type inference\n */\nconst extractGenericEmitMethod = (eh: EventHub) => eh.emit.bind(eh) as (\n en: string,\n data: unknown\n) => void;\n","import { SdkMode } from '@frankieone/one-sdk';\nimport { env2url, ENVIRONMENTS } from '@module/common';\nimport { defineWrapper } from '@module/common/modules/defineModule';\nimport type { Document } from '@module/common/shared/models/Document';\nimport type { DeepPartial } from '@module/common/shared/models/general';\nimport type { FormModule } from '@module/form/definition';\nimport type { FormEvents } from '@module/form/events';\nimport type {\n LegacyUIResultPayload,\n LegacyUIScreenEvents,\n LegacyUIScreenPayload,\n} from '@module/form/vendors/legacy/legacyUIEvents.types';\nimport {\n LegacyUIEventDict,\n} from '@module/form/vendors/legacy/legacyUIEvents.types';\n\nimport { loadLegacyUI } from './loadLegacyUI';\n\nimport type {\n LegacyUIConfiguration,\n SupportedDocumentType,\n} from './legacyUIOptions.types';\n\nconst SUPPORTED_DOCUMENT_TYPES: Document['idType'][] = [\n 'PASSPORT',\n 'DRIVERS_LICENCE',\n 'NATIONAL_ID',\n 'NATIONAL_HEALTH_ID',\n];\nexport const initialise = defineWrapper<FormModule>('legacy', async (...args) => {\n const {\n eventListener: legacyUIEventListener,\n domElement,\n cleanup,\n } = await loadLegacyUI(args);\n\n const [sharedState] = args;\n const {\n localEventHub,\n oneSdkInstance,\n session,\n mode,\n recipe: { form },\n } = sharedState;\n const individual = oneSdkInstance.individual();\n\n localEventHub.emit('loaded', { domElement, provider: form.provider.name });\n\n // setup events\n legacyUIEventListener.on('INIT', ({ data }) =>\n localEventHub.emit('ready', {\n domElement,\n config: data,\n }));\n\n // screen events\n Object.entries(LegacyUIEventDict)\n .forEach(([screenEvents, formEvents]: [keyof LegacyUIScreenEvents, keyof FormEvents]) => {\n legacyUIEventListener.on(screenEvents, (payload: LegacyUIScreenPayload) =>\n localEventHub.emit(formEvents, payload));\n });\n // error events\n legacyUIEventListener.on([\n 'FF_CHECK_ERROR',\n 'FF_SAVE_ERROR',\n ], (error) => localEventHub.emit('error', error));\n\n // check events\n legacyUIEventListener.on([\n 'FF_SAVE_RESULT',\n 'FF_CHECK_RESULT',\n ], async (payload: LegacyUIResultPayload) => {\n await individual.search();\n localEventHub.emit('results', payload);\n });\n\n // destroy events\n legacyUIEventListener.on([\n 'DESTROY',\n 'FF_ONBOARDING_WIDGET_DESTROYED',\n ], () => localEventHub.emit('destroy'));\n\n // Initialise legacy ui\n const documents = individual.access('documents').getValue();\n // Select document types belonging to the entity\n const entityDocumentTypes = documents\n .map((document) => document.idType)\n .filter((idType): idType is SupportedDocumentType => SUPPORTED_DOCUMENT_TYPES.includes(idType));\n // prettier-ignore\n const documentTypes = entityDocumentTypes.length > 0\n ? entityDocumentTypes\n : SUPPORTED_DOCUMENT_TYPES as SupportedDocumentType[];\n\n const entityIdentifier = session.entityId\n ? { entityId: session.entityId }\n : { applicantReference: session.reference };\n const isDummyMode = mode.is(SdkMode.DUMMY);\n const legacyUIConfiguration = form.provider.name === 'legacy' && (form.provider?.config ?? {});\n\n window.frankieFinancial.initialiseOnboardingWidget({\n ...entityIdentifier,\n ffToken: isDummyMode ? null : session.token,\n width: '100%',\n height: '100%',\n config: {\n documentTypes,\n ...legacyUIConfiguration,\n mode: isDummyMode ? 'demo' : 'production',\n // Legacy ui requires a valid frankieone url to be provided,\n // and the session.environment in dummy mode won't be one for that\n // reason here in dummy mode we simply pass the development url\n frankieBackendUrl: isDummyMode ? env2url(ENVIRONMENTS.development) : session.environment,\n // Disabling the following features in Legacy UI that is already\n // powered by onesdk\n idScanVerification: false,\n enableDeviceCharacteristics: false,\n },\n });\n\n return {\n cleanup,\n };\n});\n\ndeclare global {\n type Options = {\n ffToken: string;\n width?: string;\n height?: string;\n config?: DeepPartial<LegacyUIConfiguration>;\n selector?: string;\n shadow?: boolean;\n entityId?: string;\n applicantReference?: string;\n };\n\n interface Window {\n frankieFinancial: {\n initialiseOnboardingWidget: (options: Options) => void;\n };\n }\n}\n","import { loadAsyncAsset } from '@module/common';\nimport type { WrapperParameters } from '@module/common/modules/defineModule';\nimport {\n mkWindowEventHub,\n} from '@module/common/modules/eventHub/windowEventHub';\nimport type { FormModule } from '@module/form/definition';\n\nimport { LegacyUIEventKeys } from './legacyUIEvents.types';\n\nimport type { LegacyUIEvents } from './legacyUIEvents.types';\n\nconst CDN_URL = 'https://assets.frankiefinancial.io/onboarding/:version:/ff-onboarding-widget.umd.js';\n\nexport async function loadLegacyUI([globalState, { mountElement }]: WrapperParameters<FormModule>) {\n const provider = globalState.recipe.form.provider;\n if (provider.name !== 'legacy')\n throw new Error(`Attempt to initialise the wrong provider of the Legacy UI '${provider.name}'`);\n\n // Don't load legacy ui twice\n if (!window?.frankieFinancial?.initialiseOnboardingWidget) {\n const version = provider.version ?? 'v4';\n await loadAsyncAsset(CDN_URL.replace(':version:', version));\n }\n\n const legacyUIElement = document.createElement('ff-onboarding-widget');\n mountElement.appendChild(legacyUIElement);\n\n const {\n cleanup: eventsCleanup,\n eventListener,\n } = mkWindowEventHub<LegacyUIEvents>(LegacyUIEventKeys);\n\n const cleanup = () => {\n eventsCleanup();\n if (mountElement.contains(legacyUIElement)) mountElement.removeChild(legacyUIElement);\n };\n\n return { eventListener, domElement: legacyUIElement, cleanup };\n}\n"],"names":["LegacyUIEventKeys","LegacyUIEventDict","extractGenericEmitMethod","eh","emit","bind","SUPPORTED_DOCUMENT_TYPES","initialise","args","eventListener","legacyUIEventListener","domElement","cleanup","globalState","mountElement","provider","recipe","form","name","Error","window","frankieFinancial","initialiseOnboardingWidget","version","loadAsyncAsset","replace","legacyUIElement","document","createElement","appendChild","eventsCleanup","autoEmitEventNames","listeners","FormEventHub","emitToEventHub","forEach","eventName","listener","push","addEventListener","customEvent","detail","data","message","Object","entries","removeEventListener","mkWindowEventHub","contains","removeChild","loadLegacyUI","sharedState","localEventHub","oneSdkInstance","session","mode","individual","on","config","screenEvents","formEvents","payload","error","search","entityDocumentTypes","access","getValue","map","idType","filter","includes","documentTypes","length","entityIdentifier","entityId","applicantReference","reference","isDummyMode","is","DUMMY","legacyUIConfiguration","ffToken","token","width","height","frankieBackendUrl","env2url","ENVIRONMENTS","development","environment","idScanVerification","enableDeviceCharacteristics"],"sourceRoot":""}
|