@regulaforensics/idv 3.2.59-beta → 3.2.69-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.
Files changed (48) hide show
  1. package/RNIDV.podspec +3 -3
  2. package/android/CVDIDV.kt +3 -0
  3. package/android/build.gradle +1 -1
  4. package/android/cordova.gradle +1 -1
  5. package/android/src/main/java/com/regula/plugin/idv/JSONConstructor.kt +32 -0
  6. package/android/src/main/java/com/regula/plugin/idv/Main.kt +21 -1
  7. package/android/src/main/java/com/regula/plugin/idv/RNIDVModule.kt +3 -0
  8. package/examples/capacitor/android/app/src/main/AndroidManifest.xml +3 -0
  9. package/examples/capacitor/index.tsx +5 -5
  10. package/examples/capacitor/ios/App/App/Info.plist +8 -6
  11. package/examples/capacitor/ios/App/App.xcodeproj/project.pbxproj +4 -0
  12. package/examples/capacitor/package-lock.json +12 -12
  13. package/examples/capacitor/package.json +7 -7
  14. package/examples/capacitor/src/main.html +1 -1
  15. package/examples/capacitor/src/main.tsx +2 -2
  16. package/examples/ionic/config.xml +5 -0
  17. package/examples/ionic/index.tsx +5 -1
  18. package/examples/ionic/package-lock.json +4742 -2430
  19. package/examples/ionic/package.json +16 -16
  20. package/examples/ionic/src/main.html +1 -1
  21. package/examples/ionic/src/main.tsx +2 -2
  22. package/examples/react_native/app.config.ts +6 -1
  23. package/examples/react_native/index.html +5 -4
  24. package/examples/react_native/package-lock.json +40 -40
  25. package/examples/react_native/package.json +7 -7
  26. package/examples/react_native/src/main.html +1 -1
  27. package/examples/react_native/src/main.tsx +2 -2
  28. package/ios/CVDIDV.swift +26 -3
  29. package/ios/JSONConstructor.swift +24 -2
  30. package/ios/Main.swift +28 -12
  31. package/ios/RNIDV.m +11 -0
  32. package/ios/RNIDV.swift +35 -12
  33. package/ios/Utils.swift +0 -4
  34. package/package.json +1 -1
  35. package/plugin.xml +2 -2
  36. package/test/json.tsx +9 -0
  37. package/test/package-lock.json +1 -1
  38. package/test/test.tsx +4 -2
  39. package/www/capacitor/config/send_data_config.js +28 -0
  40. package/www/capacitor/config/start_session_config.js +24 -0
  41. package/www/capacitor/index.js +16 -8
  42. package/www/cordova.js +141 -43
  43. package/www/react-native/config/send_data_config.js +28 -0
  44. package/www/react-native/config/start_session_config.js +24 -0
  45. package/www/react-native/index.js +16 -8
  46. package/www/types/config/send_data_config.d.ts +5 -0
  47. package/www/types/config/start_session_config.d.ts +4 -0
  48. package/www/types/index.d.ts +7 -8
@@ -6,23 +6,23 @@
6
6
  "android": "scripts/android.sh"
7
7
  },
8
8
  "dependencies": {
9
- "@angular-devkit/build-angular": "^20.3.1",
10
- "@angular/cli": "^20.3.1",
11
- "@angular/common": "^20.3.0",
12
- "@angular/compiler-cli": "^20.3.0",
13
- "@angular/core": "^20.3.0",
14
- "@angular/forms": "^20.3.0",
15
- "@angular/platform-browser-dynamic": "^20.3.0",
16
- "@angular/router": "^20.3.0",
17
- "@ionic/angular": "^8.7.3",
9
+ "@angular-devkit/build-angular": "^21.0.1",
10
+ "@angular/cli": "^21.0.1",
11
+ "@angular/common": "^21.0.2",
12
+ "@angular/compiler-cli": "^21.0.2",
13
+ "@angular/core": "^21.0.2",
14
+ "@angular/forms": "^21.0.2",
15
+ "@angular/platform-browser-dynamic": "^21.0.2",
16
+ "@angular/router": "^21.0.2",
17
+ "@ionic/angular": "^8.7.11",
18
18
  "@ionic/cordova-builders": "^12.3.0",
19
- "@regulaforensics/idv": "3.2.59-beta",
20
- "@regulaforensics/document-reader": "8.4.341-beta",
21
- "@regulaforensics/face-sdk": "8.1.506-beta",
22
- "@regulaforensics/document-reader-core-fullauthrfid": "8.4.325-beta",
23
- "@regulaforensics/face-core-basic": "7.3.282-beta",
24
- "@regulaforensics/idv-module-document-reader": "3.2.30-beta",
25
- "@regulaforensics/idv-module-face": "3.2.31-beta",
19
+ "@regulaforensics/idv": "3.2.69-beta",
20
+ "@regulaforensics/document-reader": "9.1.505",
21
+ "@regulaforensics/face-sdk": "7.2.691",
22
+ "@regulaforensics/document-reader-core-fullauthrfid": "9.1.1281",
23
+ "@regulaforensics/face-core-basic": "7.2.265",
24
+ "@regulaforensics/idv-module-document-reader": "3.2.48-beta",
25
+ "@regulaforensics/idv-module-face": "3.2.49-beta",
26
26
  "cordova-android": "^14.0.1",
27
27
  "cordova-ios": "^7.1.1",
28
28
  "cordova-plugin-ionic-webview": "^5.0.1"
@@ -1,6 +1,6 @@
1
1
  <div class="column" style="height: 100%">
2
2
  <div class="column header">
3
- <span id="status">Loading...</span>
3
+ <span id="status">Initializing...</span>
4
4
  <div class="column divider"></div>
5
5
  </div>
6
6
  <div id="sub-header" class="column sub-header" style="display: none;">
@@ -71,11 +71,11 @@ async function startWorkflow(): Promise<void> {
71
71
  setDescription(`SessionID: ${result?.sessionId}`)
72
72
  }
73
73
 
74
- function handleException(error?: string, tag?: string): boolean {
74
+ function handleException(error?: string | null, tag?: string): boolean {
75
75
  if (error == null) return false
76
76
  setStatus(`Error - IDV.${tag}()`)
77
77
  setDescription(error)
78
- console.error(error)
78
+ console.log(error)
79
79
  return true
80
80
  }
81
81
 
@@ -11,6 +11,7 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
11
11
  infoPlist: {
12
12
  NSCameraUsageDescription: 'To use camera',
13
13
  NSPhotoLibraryUsageDescription: 'To use gallery',
14
+ NSLocationWhenInUseUsageDescription: 'To use location',
14
15
  NFCReaderUsageDescription: 'To use NFC',
15
16
  'com.apple.developer.nfc.readersession.iso7816.select-identifiers': [
16
17
  'A0000002471001',
@@ -27,7 +28,11 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
27
28
  },
28
29
  android: {
29
30
  package: 'com.regula.example.idv.react',
30
- permissions: ['android.permission.NFC'],
31
+ permissions: [
32
+ 'android.permission.NFC',
33
+ 'android.permission.ACCESS_COARSE_LOCATION',
34
+ 'android.permission.ACCESS_FINE_LOCATION'
35
+ ],
31
36
  edgeToEdgeEnabled: true
32
37
  },
33
38
  plugins: [
@@ -4,8 +4,9 @@
4
4
  <div id="content" style="height: 100%"></div>
5
5
 
6
6
  <script>
7
- fetch("src/main.html")
8
- .then(response => response.text())
9
- .then(html => document.getElementById("content").innerHTML = html)
10
- .then(_ => window.ReactNativeWebView.postMessage(`{"id": "ready"}`))
7
+ (async () => {
8
+ document.getElementById("content").innerHTML = await fetch("src/main.html").then(r => r.text())
9
+ await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)))
10
+ window.ReactNativeWebView.postMessage(JSON.stringify({ id: "ready" }))
11
+ })()
11
12
  </script>
@@ -1590,9 +1590,9 @@
1590
1590
  }
1591
1591
  },
1592
1592
  "node_modules/@expo/cli/node_modules/glob": {
1593
- "version": "10.4.5",
1594
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1595
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1593
+ "version": "10.5.0",
1594
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
1595
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
1596
1596
  "license": "ISC",
1597
1597
  "dependencies": {
1598
1598
  "foreground-child": "^3.1.0",
@@ -1675,9 +1675,9 @@
1675
1675
  }
1676
1676
  },
1677
1677
  "node_modules/@expo/config-plugins/node_modules/glob": {
1678
- "version": "10.4.5",
1679
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1680
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1678
+ "version": "10.5.0",
1679
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
1680
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
1681
1681
  "license": "ISC",
1682
1682
  "dependencies": {
1683
1683
  "foreground-child": "^3.1.0",
@@ -1722,9 +1722,9 @@
1722
1722
  }
1723
1723
  },
1724
1724
  "node_modules/@expo/config/node_modules/glob": {
1725
- "version": "10.4.5",
1726
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1727
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1725
+ "version": "10.5.0",
1726
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
1727
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
1728
1728
  "license": "ISC",
1729
1729
  "dependencies": {
1730
1730
  "foreground-child": "^3.1.0",
@@ -1774,9 +1774,9 @@
1774
1774
  }
1775
1775
  },
1776
1776
  "node_modules/@expo/devcert/node_modules/glob": {
1777
- "version": "10.4.5",
1778
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1779
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1777
+ "version": "10.5.0",
1778
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
1779
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
1780
1780
  "license": "ISC",
1781
1781
  "dependencies": {
1782
1782
  "foreground-child": "^3.1.0",
@@ -1850,9 +1850,9 @@
1850
1850
  }
1851
1851
  },
1852
1852
  "node_modules/@expo/fingerprint/node_modules/glob": {
1853
- "version": "10.4.5",
1854
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1855
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1853
+ "version": "10.5.0",
1854
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
1855
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
1856
1856
  "license": "ISC",
1857
1857
  "dependencies": {
1858
1858
  "foreground-child": "^3.1.0",
@@ -2007,9 +2007,9 @@
2007
2007
  }
2008
2008
  },
2009
2009
  "node_modules/@expo/metro-config/node_modules/glob": {
2010
- "version": "10.4.5",
2011
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
2012
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
2010
+ "version": "10.5.0",
2011
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
2012
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
2013
2013
  "license": "ISC",
2014
2014
  "dependencies": {
2015
2015
  "foreground-child": "^3.1.0",
@@ -2378,9 +2378,9 @@
2378
2378
  }
2379
2379
  },
2380
2380
  "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
2381
- "version": "3.14.1",
2382
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
2383
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
2381
+ "version": "3.14.2",
2382
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
2383
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
2384
2384
  "license": "MIT",
2385
2385
  "dependencies": {
2386
2386
  "argparse": "^1.0.7",
@@ -4112,9 +4112,9 @@
4112
4112
  }
4113
4113
  },
4114
4114
  "node_modules/cosmiconfig/node_modules/js-yaml": {
4115
- "version": "3.14.1",
4116
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
4117
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
4115
+ "version": "3.14.2",
4116
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
4117
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
4118
4118
  "license": "MIT",
4119
4119
  "dependencies": {
4120
4120
  "argparse": "^1.0.7",
@@ -4627,9 +4627,9 @@
4627
4627
  }
4628
4628
  },
4629
4629
  "node_modules/expo-modules-autolinking/node_modules/glob": {
4630
- "version": "10.4.5",
4631
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
4632
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
4630
+ "version": "10.5.0",
4631
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
4632
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
4633
4633
  "license": "ISC",
4634
4634
  "dependencies": {
4635
4635
  "foreground-child": "^3.1.0",
@@ -5473,9 +5473,9 @@
5473
5473
  "license": "MIT"
5474
5474
  },
5475
5475
  "node_modules/js-yaml": {
5476
- "version": "4.1.0",
5477
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
5478
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
5476
+ "version": "4.1.1",
5477
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
5478
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
5479
5479
  "license": "MIT",
5480
5480
  "dependencies": {
5481
5481
  "argparse": "^2.0.1"
@@ -6806,9 +6806,9 @@
6806
6806
  "license": "MIT"
6807
6807
  },
6808
6808
  "node_modules/node-forge": {
6809
- "version": "1.3.1",
6810
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
6811
- "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
6809
+ "version": "1.3.2",
6810
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz",
6811
+ "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==",
6812
6812
  "license": "(BSD-3-Clause OR GPL-2.0)",
6813
6813
  "engines": {
6814
6814
  "node": ">= 6.13.0"
@@ -8283,9 +8283,9 @@
8283
8283
  }
8284
8284
  },
8285
8285
  "node_modules/sucrase/node_modules/glob": {
8286
- "version": "10.4.5",
8287
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
8288
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
8286
+ "version": "10.5.0",
8287
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
8288
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
8289
8289
  "license": "ISC",
8290
8290
  "dependencies": {
8291
8291
  "foreground-child": "^3.1.0",
@@ -8340,10 +8340,10 @@
8340
8340
  }
8341
8341
  },
8342
8342
  "node_modules/tar": {
8343
- "version": "7.5.1",
8344
- "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz",
8345
- "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==",
8346
- "license": "ISC",
8343
+ "version": "7.5.2",
8344
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz",
8345
+ "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==",
8346
+ "license": "BlueOak-1.0.0",
8347
8347
  "dependencies": {
8348
8348
  "@isaacs/fs-minipass": "^4.0.0",
8349
8349
  "chownr": "^3.0.0",
@@ -8,13 +8,13 @@
8
8
  "start": "expo start"
9
9
  },
10
10
  "dependencies": {
11
- "@regulaforensics/idv": "3.2.59-beta",
12
- "@regulaforensics/document-reader": "8.4.341-beta",
13
- "@regulaforensics/face-sdk": "8.1.506-beta",
14
- "@regulaforensics/document-reader-core-fullauthrfid": "8.4.325-beta",
15
- "@regulaforensics/face-core-basic": "7.3.282-beta",
16
- "@regulaforensics/idv-module-document-reader": "3.2.30-beta",
17
- "@regulaforensics/idv-module-face": "3.2.31-beta",
11
+ "@regulaforensics/idv": "3.2.69-beta",
12
+ "@regulaforensics/document-reader": "9.1.505",
13
+ "@regulaforensics/face-sdk": "7.2.691",
14
+ "@regulaforensics/document-reader-core-fullauthrfid": "9.1.1281",
15
+ "@regulaforensics/face-core-basic": "7.2.265",
16
+ "@regulaforensics/idv-module-document-reader": "3.2.48-beta",
17
+ "@regulaforensics/idv-module-face": "3.2.49-beta",
18
18
  "react-native": "^0.81.4",
19
19
  "react-native-webview": "^13.16.0",
20
20
  "@react-native/metro-config": "^0.81.1",
@@ -1,6 +1,6 @@
1
1
  <div class="column" style="height: 100%">
2
2
  <div class="column header">
3
- <span id="status">Loading...</span>
3
+ <span id="status">Initializing...</span>
4
4
  <div class="column divider"></div>
5
5
  </div>
6
6
  <div id="sub-header" class="column sub-header" style="display: none;">
@@ -71,11 +71,11 @@ async function startWorkflow(): Promise<void> {
71
71
  setDescription(`SessionID: ${result?.sessionId}`)
72
72
  }
73
73
 
74
- function handleException(error?: string, tag?: string): boolean {
74
+ function handleException(error?: string | null, tag?: string): boolean {
75
75
  if (error == null) return false
76
76
  setStatus(`Error - IDV.${tag}()`)
77
77
  setDescription(error)
78
- console.error(error)
78
+ console.log(error)
79
79
  return true
80
80
  }
81
81
 
package/ios/CVDIDV.swift CHANGED
@@ -1,20 +1,43 @@
1
1
  var eventCallbackIds: [String: String] = [:]
2
+ private var args: [Any?] = []
3
+ private var this: CVDIDV?
2
4
 
3
5
  func sendEvent(_ event: String, _ data: Any? = nil) {
6
+ var callbackId = event
7
+ let eventId = eventCallbackIds[event]
8
+ if eventId != nil { callbackId = eventId! }
9
+
10
+ var sendable = data.toSendable() as Any?
11
+ if sendable is NSNull { sendable = nil }
12
+ let result = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: sendable as! String?)!
13
+ result.setKeepCallbackAs(true)
4
14
 
15
+ this!.commandDelegate.send(result, callbackId: callbackId)
5
16
  }
6
17
 
7
18
  func args<T>(_ index: Int) -> T {
8
- return index as! T
19
+ return args[index] as! T
9
20
  }
10
21
 
11
22
  func argsNullable<T>(_ index: Int) -> T? {
12
- return nil
23
+ if (args[index] is NSNull) { return nil }
24
+ return args[index] as! T?
13
25
  }
14
26
 
27
+ @objc(CVDIDV)
15
28
  class CVDIDV: CDVPlugin {
29
+ @objc(exec:)
16
30
  func exec(_ command: CDVInvokedUrlCommand) {
17
-
31
+ this = self
32
+ let method = command.arguments.first as! String
33
+ args = Array(command.arguments.dropFirst())
34
+
35
+ if method == "setEvent" {
36
+ eventCallbackIds[args.first as! String] = command.callbackId
37
+ return
38
+ }
39
+
40
+ methodCall(method, { data in sendEvent(command.callbackId, data) })
18
41
  }
19
42
  }
20
43
 
@@ -1,5 +1,3 @@
1
- import Foundation
2
- import UIKit
3
1
  import IDVSDK
4
2
  import IDVModule
5
3
 
@@ -83,6 +81,29 @@ public func generateStartWorkflowConfig(_ data: StartWorkflowConfig) -> [String:
83
81
  ]
84
82
  }
85
83
 
84
+ public func sendDataConfigFromJSON(_ data: [String: Any?]) -> SendDataConfig {
85
+ return SendDataConfig(sessionId: data["sessionId"] as! String, step: data["step"] as! String, data: data["data"] as! [String: Any])
86
+ }
87
+
88
+ public func generateSendDataConfig(_ data: SendDataConfig) -> [String: Any?] {
89
+ return [
90
+ "sessionId": data.sessionId,
91
+ "step": data.step,
92
+ "data": data.data
93
+ ]
94
+ }
95
+
96
+ public func startSessionConfigFromJSON(_ data: [String: Any?]) -> StartSessionConfig {
97
+ return StartSessionConfig(workflowId: data["workflowId"] as! String, metadata: data["metadata"] as? [String : Any])
98
+ }
99
+
100
+ public func generateStartSessionConfig(_ data: StartSessionConfig) -> [String: Any?] {
101
+ return [
102
+ "workflowId": data.workflowId,
103
+ "metadata": data.metadata
104
+ ]
105
+ }
106
+
86
107
  // MARK: - Model
87
108
 
88
109
  public func workflowFromJSON(_ input: [String: Any?]?) -> Workflow? {
@@ -90,6 +111,7 @@ public func workflowFromJSON(_ input: [String: Any?]?) -> Workflow? {
90
111
  it["client"] = [String: Any]()
91
112
  it["steps"] = [WorkflowStep]()
92
113
  it["_description"] = it["description"]
114
+ it["trackLocation"] = false
93
115
  return try! Workflow(from: it.toDecoder())
94
116
  }
95
117
 
package/ios/Main.swift CHANGED
@@ -1,5 +1,3 @@
1
- import Foundation
2
- import UIKit
3
1
  import IDVSDK
4
2
 
5
3
  let didStartSessionEvent = "didStartSessionEvent"
@@ -11,7 +9,7 @@ func methodCall(_ method: String, _ callback: @escaping Callback) {
11
9
  switch (method) {
12
10
  case("setSessionRestoreMode"): IDV.shared.sessionRestoreMode = SessionRestoreMode(rawValue: args(0))!
13
11
  case("getCurrentSessionId"): callback(IDV.shared.currentSessionId)
14
- case ("initialize"): initialize(callback)
12
+ case("initialize"): initialize(callback)
15
13
  case("deinitialize"): deinitialize(callback)
16
14
  case("configureWithToken"): configureWithToken(callback, args(0))
17
15
  case("configureWithCredentials"): configureWithCredentials(callback, args(0))
@@ -19,6 +17,8 @@ func methodCall(_ method: String, _ callback: @escaping Callback) {
19
17
  case("prepareWorkflow"): prepareWorkflow(callback, args(0))
20
18
  case("startWorkflow"): startWorkflow(callback, argsNullable(0))
21
19
  case("getWorkflows"): getWorkflows(callback)
20
+ case("startSession"): startSession(callback, args(0))
21
+ case("sendData"): sendData(callback, args(0))
22
22
  default: break
23
23
  }
24
24
  }
@@ -26,10 +26,12 @@ func methodCall(_ method: String, _ callback: @escaping Callback) {
26
26
  // MARK: - Implementation
27
27
 
28
28
  func initialize(_ callback: @escaping Callback) {
29
- IDV.shared.initialize(config: IDVInitConfig(), completion: { result in
30
- IDV.shared.delegate = delegate
31
- callback(generateCompletion(result.isSuccess, result.failureOrNil))
32
- })
29
+ DispatchQueue.main.async {
30
+ IDV.shared.initialize(config: IDVInitConfig(), completion: { result in
31
+ IDV.shared.delegate = delegate
32
+ callback(generateCompletion(result.isSuccess, result.failureOrNil))
33
+ })
34
+ }
33
35
  }
34
36
 
35
37
  func deinitialize(_ callback: @escaping Callback) {
@@ -63,11 +65,13 @@ func prepareWorkflow(_ callback: @escaping Callback, _ data: [String: Any?]) {
63
65
  }
64
66
 
65
67
  func startWorkflow(_ callback: @escaping Callback, _ data: [String: Any?]?) {
66
- IDV.shared.startWorkflow(presenter: rootViewController()!,
67
- config: startWorkflowConfigFromJSON(input: data),
68
- completion: { result in
69
- callback(generateCompletion(generateWorkflowResult(result.successOrNil), result.failureOrNil))
70
- })
68
+ DispatchQueue.main.async {
69
+ IDV.shared.startWorkflow(presenter: rootViewController()!,
70
+ config: startWorkflowConfigFromJSON(input: data),
71
+ completion: { result in
72
+ callback(generateCompletion(generateWorkflowResult(result.successOrNil), result.failureOrNil))
73
+ })
74
+ }
71
75
  }
72
76
 
73
77
  func getWorkflows(_ callback: @escaping Callback) {
@@ -77,6 +81,18 @@ func getWorkflows(_ callback: @escaping Callback) {
77
81
  })
78
82
  }
79
83
 
84
+ func startSession(_ callback: @escaping Callback, _ data: [String: Any?]) {
85
+ IDV.shared.startSession(with: startSessionConfigFromJSON(data), completion: { result in
86
+ callback(generateCompletion(result.successOrNil, result.failureOrNil))
87
+ })
88
+ }
89
+
90
+ func sendData(_ callback: @escaping Callback, _ data: [String: Any?]) {
91
+ IDV.shared.sendData(with: sendDataConfigFromJSON(data), completion: { result in
92
+ callback(generateCompletion(result.isSuccess, result.failureOrNil))
93
+ })
94
+ }
95
+
80
96
 
81
97
  // MARK: - WeakReference
82
98
 
package/ios/RNIDV.m ADDED
@@ -0,0 +1,11 @@
1
+ #import <React/RCTEventEmitter.h>
2
+ #import <React/RCTBridgeModule.h>
3
+
4
+ @interface RCT_EXTERN_MODULE(RNIDV, RCTEventEmitter)
5
+
6
+ RCT_EXTERN_METHOD(exec: (NSString*)method
7
+ args:(NSArray*)args
8
+ resolve:(RCTPromiseResolveBlock)resolve
9
+ reject:(RCTPromiseRejectBlock)reject)
10
+
11
+ @end
package/ios/RNIDV.swift CHANGED
@@ -1,24 +1,47 @@
1
- func sendEvent(_ event: String, _ data: Any? = nil) {
1
+ import React
2
2
 
3
+ func sendEvent(_ event: String, _ data: Any? = nil) {
4
+ guard let plugin = this, hasListeners else { return }
5
+ DispatchQueue.main.async {
6
+ plugin.sendEvent(withName: event, body: data.toSendable())
7
+ }
3
8
  }
4
9
 
5
10
  func args<T>(_ index: Int) -> T {
6
- return index as! T
11
+ return mArgs[index] as! T
7
12
  }
8
13
 
9
14
  func argsNullable<T>(_ index: Int) -> T? {
10
- return nil
15
+ if (mArgs[index] is NSNull) { return nil }
16
+ return mArgs[index] as! T?
11
17
  }
12
18
 
13
- public class RNIDVPlugin: NSObject {
19
+ private var firedCallbacks: [RCTResponseSenderBlock] = []
20
+ private var hasListeners: Bool = false
21
+ private var this: RNIDV?
22
+ private var mArgs: [Any?] = []
14
23
 
15
- }
16
-
17
- let rootViewController: () -> UIViewController? = {
18
- for window in UIApplication.shared.windows {
19
- if window.isKeyWindow {
20
- return window.rootViewController
21
- }
24
+ @objc(RNIDV)
25
+ public class RNIDV: RCTEventEmitter {
26
+ override public func startObserving() { hasListeners = true }
27
+ override public func stopObserving() { hasListeners = false }
28
+ override public func supportedEvents()->[String] {
29
+ return [didStartSessionEvent,
30
+ didEndSessionEvent,
31
+ didStartRestoreSessionEvent,
32
+ didContinueRemoteSessionEvent];
33
+ }
34
+
35
+ @objc
36
+ func exec(_ method: String, args: [Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
37
+ this = self
38
+ mArgs = args
39
+ methodCall(method, { data in
40
+ if firedCallbacks.contains(where: { ($0 as AnyObject) === (resolve as AnyObject) }) { return }
41
+ firedCallbacks.append(resolve)
42
+ resolve(data.toSendable())
43
+ })
22
44
  }
23
- return nil
24
45
  }
46
+
47
+ let rootViewController: () -> UIViewController? = { return RCTPresentedViewController() }
package/ios/Utils.swift CHANGED
@@ -1,7 +1,3 @@
1
- import Foundation
2
- import UIKit
3
- import IDVSDK
4
-
5
1
  public typealias Callback = (Any?) -> Void
6
2
 
7
3
  extension Any? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regulaforensics/idv",
3
- "version": "3.2.59-beta",
3
+ "version": "3.2.69-beta",
4
4
  "description": "This is an npm module for Regula IDV, which unifies access to all Regula products. This plugin makes possible to use it with react-native, cordova and capacitor applications. Supports Android and iOS.",
5
5
  "main": "www/react-native/index.js",
6
6
  "module": "www/capacitor/index.js",
package/plugin.xml CHANGED
@@ -1,5 +1,5 @@
1
1
  <?xml version='1.0' encoding='utf-8'?>
2
- <plugin id="@regulaforensics/idv" version="3.2.59-beta" xmlns="http://apache.org/cordova/ns/plugins/1.0">
2
+ <plugin id="@regulaforensics/idv" version="3.2.69-beta" xmlns="http://apache.org/cordova/ns/plugins/1.0">
3
3
  <name>IDV</name>
4
4
  <description>Cordova plugin for Regula IDV</description>
5
5
  <license>commercial</license>
@@ -26,7 +26,7 @@
26
26
  <source url="https://github.com/CocoaPods/Specs.git" />
27
27
  </config>
28
28
  <pods>
29
- <pod name="IDVSDK" spec="3.1.1492" />
29
+ <pod name="IDVSDK" spec="3.2.1670" />
30
30
  </pods>
31
31
  </podspec>
32
32
  </platform>
package/test/json.tsx CHANGED
@@ -22,6 +22,15 @@ export var startWorkflowConfig = {
22
22
  "test2": "test3",
23
23
  },
24
24
  }
25
+ export var startSessionConfig = {
26
+ "workflowId": "test1",
27
+ "metadata": {"test1": 0, "test2": "test3", "test4": true},
28
+ }
29
+ export var sendDataConfig = {
30
+ "sessionId": "test1",
31
+ "step": "test2",
32
+ "data": {"test1": 0, "test2": "test3", "test4": true},
33
+ }
25
34
 
26
35
  export var workflow = {
27
36
  "id": "test1",
@@ -13,7 +13,7 @@
13
13
  },
14
14
  "..": {
15
15
  "name": "@regulaforensics/idv",
16
- "version": "3.2.59-beta",
16
+ "version": "3.2.69-beta",
17
17
  "dev": true,
18
18
  "license": "commercial"
19
19
  },
package/test/test.tsx CHANGED
@@ -1,12 +1,14 @@
1
1
  import { compare } from './utils'
2
- import { CredentialsConnectionConfig, TokenConnectionConfig, ApiKeyConnectionConfig, PrepareWorkflowConfig, StartWorkflowConfig, Workflow, WorkflowStep, WorkflowResult } from '@regulaforensics/idv/www/capacitor'
3
- import { apiKeyConnectionConfig, credentialsConnectionConfig, prepareWorkflowConfig, startWorkflowConfig, tokenConnectionConfig, workflow, workflowStep, workflowResult } from './json'
2
+ import { CredentialsConnectionConfig, TokenConnectionConfig, ApiKeyConnectionConfig, PrepareWorkflowConfig, StartWorkflowConfig, Workflow, WorkflowStep, WorkflowResult, StartSessionConfig, SendDataConfig } from '@regulaforensics/idv/www/capacitor'
3
+ import { apiKeyConnectionConfig, credentialsConnectionConfig, prepareWorkflowConfig, startWorkflowConfig, tokenConnectionConfig, workflow, workflowStep, workflowResult, startSessionConfig, sendDataConfig } from './json'
4
4
 
5
5
  compare('credentialsConnectionConfig', credentialsConnectionConfig, CredentialsConnectionConfig.fromJson)
6
6
  compare('tokenConnectionConfig', tokenConnectionConfig, TokenConnectionConfig.fromJson)
7
7
  compare('apiKeyConnectionConfig', apiKeyConnectionConfig, ApiKeyConnectionConfig.fromJson)
8
8
  compare('prepareWorkflowConfig', prepareWorkflowConfig, PrepareWorkflowConfig.fromJson)
9
9
  compare('startWorkflowConfig', startWorkflowConfig, StartWorkflowConfig.fromJson)
10
+ compare('startSessionConfig', startSessionConfig, StartSessionConfig.fromJson)
11
+ compare('sendDataConfig', sendDataConfig, SendDataConfig.fromJson)
10
12
 
11
13
  compare('workflow', workflow, Workflow.fromJson);
12
14
  compare('workflowStep', workflowStep, WorkflowStep.fromJson);