[INJIMOB-3193]add preauth and credential offer support (#1949)

[INJIMOB-3058]temp commit2



[INJIMOB-3058]temp commit2



[INJIMOB-3058] add support for pre-auth flow by credential-offer



[INJIMOB-3187] animo working chcekpoint

Signed-off-by: Abhishek Paul <paul.apaul.abhishek.ap@gmail.com>
This commit is contained in:
abhip2565
2025-06-04 14:46:07 +05:30
committed by GitHub
parent ddf5244f32
commit bd90b342e0
63 changed files with 3510 additions and 2063 deletions

View File

@@ -10,17 +10,13 @@
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
1E55C2072DB12044009DF38B /* IntentData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E55C2062DB12044009DF38B /* IntentData.swift */; };
1E55C20B2DB120C2009DF38B /* RNDeepLinkIntentModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E55C20A2DB120C2009DF38B /* RNDeepLinkIntentModule.swift */; };
1E55C20D2DB120E7009DF38B /* RNDeepLinkIntentModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E55C20C2DB120E7009DF38B /* RNDeepLinkIntentModule.m */; };
1E6875E92CA554E80086D870 /* OpenID4VP in Frameworks */ = {isa = PBXBuildFile; productRef = 1E6875E82CA554E80086D870 /* OpenID4VP */; };
1E6875EB2CA554FD0086D870 /* RNOpenID4VPModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E6875EA2CA554FD0086D870 /* RNOpenID4VPModule.m */; };
1E6875ED2CA5550F0086D870 /* RNOpenID4VPModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E6875EC2CA5550F0086D870 /* RNOpenID4VPModule.swift */; };
1EED69F92DA913D30042EAFC /* IntentData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EED69F82DA913D30042EAFC /* IntentData.swift */; };
1EED69FB2DA914130042EAFC /* RNDeepLinkIntentModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EED69FA2DA914130042EAFC /* RNDeepLinkIntentModule.swift */; };
1EED69FD2DA914D00042EAFC /* RNDeepLinkIntentModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EED69FC2DA914D00042EAFC /* RNDeepLinkIntentModule.m */; };
34873E472CD8DAF3004DE734 /* VCIClient in Frameworks */ = {isa = PBXBuildFile; productRef = 34873E462CD8DAF3004DE734 /* VCIClient */; };
34873E4D2CD8DD11004DE734 /* pixelpass in Frameworks */ = {isa = PBXBuildFile; productRef = 34873E4C2CD8DD11004DE734 /* pixelpass */; };
3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
717E6FEC33D6D8A2F9B01CBC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1D23B9CD47CFD7F3C87D202F /* PrivacyInfo.xcprivacy */; };
73295844242A4AD3AA52D0BE /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = D98B96A488E54CBDB286B26F /* noop-file.swift */; };
@@ -38,6 +34,8 @@
9C7CDF3E2C7CBEDE00243A9A /* RNSecureKeystoreModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C7CDF3D2C7CBEDE00243A9A /* RNSecureKeystoreModule.swift */; };
9C7CDF432C7CC13500243A9A /* RNSecureKeystoreModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C7CDF422C7CC13500243A9A /* RNSecureKeystoreModule.m */; };
9CCCA19E2CF87A8400D5A461 /* securekeystore in Frameworks */ = {isa = PBXBuildFile; productRef = 9CCCA19D2CF87A8400D5A461 /* securekeystore */; };
9CFB37492DDDC9A000C199A8 /* pixelpass in Frameworks */ = {isa = PBXBuildFile; productRef = 9CFB37482DDDC9A000C199A8 /* pixelpass */; };
9CFB374C2DDDC9B500C199A8 /* VCIClient in Frameworks */ = {isa = PBXBuildFile; productRef = 9CFB374B2DDDC9B500C199A8 /* VCIClient */; };
B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
E86208152C0335C5007C3E24 /* RNVCIClientModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86208142C0335C5007C3E24 /* RNVCIClientModule.swift */; };
@@ -72,9 +70,7 @@
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Inji/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Inji/main.m; sourceTree = "<group>"; };
1D23B9CD47CFD7F3C87D202F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = Inji/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
1E55C2062DB12044009DF38B /* IntentData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentData.swift; sourceTree = "<group>"; };
1E55C20A2DB120C2009DF38B /* RNDeepLinkIntentModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNDeepLinkIntentModule.swift; sourceTree = "<group>"; };
1E55C20C2DB120E7009DF38B /* RNDeepLinkIntentModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNDeepLinkIntentModule.m; sourceTree = "<group>"; };
1E6875EA2CA554FD0086D870 /* RNOpenID4VPModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNOpenID4VPModule.m; sourceTree = "<group>"; };
1E6875EC2CA5550F0086D870 /* RNOpenID4VPModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNOpenID4VPModule.swift; sourceTree = "<group>"; };
1EED69F82DA913D30042EAFC /* IntentData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentData.swift; sourceTree = "<group>"; };
@@ -127,11 +123,11 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
34873E472CD8DAF3004DE734 /* VCIClient in Frameworks */,
9CFB374C2DDDC9B500C199A8 /* VCIClient in Frameworks */,
9C4850432C3E5873002ECBD5 /* ios-tuvali-library in Frameworks */,
1E6875E92CA554E80086D870 /* OpenID4VP in Frameworks */,
9CCCA19E2CF87A8400D5A461 /* securekeystore in Frameworks */,
34873E4D2CD8DD11004DE734 /* pixelpass in Frameworks */,
9CFB37492DDDC9A000C199A8 /* pixelpass in Frameworks */,
96905EF65AED1B983A6B3ABC /* libPods-Inji.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -208,6 +204,7 @@
D65327D7A22EEC0BE12398D9 /* Pods */,
D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,
462CE07025BF40E9952DCDA0 /* Resources */,
9CFB37462DDDC83900C199A8 /* Recovered References */,
);
indentWidth = 2;
sourceTree = "<group>";
@@ -230,6 +227,14 @@
name = Inji;
sourceTree = "<group>";
};
9CFB37462DDDC83900C199A8 /* Recovered References */ = {
isa = PBXGroup;
children = (
1E55C20A2DB120C2009DF38B /* RNDeepLinkIntentModule.swift */,
);
name = "Recovered References";
sourceTree = "<group>";
};
BB2F792B24A3F905000567C9 /* Supporting */ = {
isa = PBXGroup;
children = (
@@ -309,9 +314,9 @@
packageProductDependencies = (
9C4850422C3E5873002ECBD5 /* ios-tuvali-library */,
1E6875E82CA554E80086D870 /* OpenID4VP */,
34873E462CD8DAF3004DE734 /* VCIClient */,
34873E4C2CD8DD11004DE734 /* pixelpass */,
9CCCA19D2CF87A8400D5A461 /* securekeystore */,
9CFB37482DDDC9A000C199A8 /* pixelpass */,
9CFB374B2DDDC9B500C199A8 /* VCIClient */,
);
productName = Inji;
productReference = 13B07F961A680F5B00A75B9A /* Inji.app */;
@@ -340,11 +345,11 @@
);
mainGroup = 83CBB9F61A601CBA00E9B192;
packageReferences = (
34873E4B2CD8DD11004DE734 /* XCRemoteSwiftPackageReference "pixelpass-ios-swift" */,
34873E452CD8DAF3004DE734 /* XCRemoteSwiftPackageReference "inji-vci-client-ios-swift" */,
9C4850412C3E5873002ECBD5 /* XCRemoteSwiftPackageReference "tuvali-ios-swift" */,
1E6875E72CA554E80086D870 /* XCRemoteSwiftPackageReference "inji-openid4vp-ios-swift" */,
9CCCA19C2CF87A8400D5A461 /* XCRemoteSwiftPackageReference "secure-keystore-ios-swift" */,
9CFB37472DDDC99F00C199A8 /* XCRemoteSwiftPackageReference "pixelpass-ios-swift" */,
9CFB374A2DDDC9B500C199A8 /* XCRemoteSwiftPackageReference "inji-vci-client-ios-swift" */,
);
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
@@ -592,12 +597,11 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Inji/Inji.entitlements;
CODE_SIGN_IDENTITY = "Apple Distribution";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = V2ABX7953Z;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = V2ABX7953Z;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -829,22 +833,6 @@
kind = branch;
};
};
34873E452CD8DAF3004DE734 /* XCRemoteSwiftPackageReference "inji-vci-client-ios-swift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/mosip/inji-vci-client-ios-swift";
requirement = {
branch = develop;
kind = branch;
};
};
34873E4B2CD8DD11004DE734 /* XCRemoteSwiftPackageReference "pixelpass-ios-swift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/mosip/pixelpass-ios-swift";
requirement = {
branch = develop;
kind = branch;
};
};
9C4850412C3E5873002ECBD5 /* XCRemoteSwiftPackageReference "tuvali-ios-swift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/mosip/tuvali-ios-swift/";
@@ -861,6 +849,22 @@
version = 0.3.0;
};
};
9CFB37472DDDC99F00C199A8 /* XCRemoteSwiftPackageReference "pixelpass-ios-swift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/mosip/pixelpass-ios-swift/";
requirement = {
branch = develop;
kind = branch;
};
};
9CFB374A2DDDC9B500C199A8 /* XCRemoteSwiftPackageReference "inji-vci-client-ios-swift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/mosip/inji-vci-client-ios-swift";
requirement = {
branch = develop;
kind = branch;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
@@ -869,16 +873,6 @@
package = 1E6875E72CA554E80086D870 /* XCRemoteSwiftPackageReference "inji-openid4vp-ios-swift" */;
productName = OpenID4VP;
};
34873E462CD8DAF3004DE734 /* VCIClient */ = {
isa = XCSwiftPackageProductDependency;
package = 34873E452CD8DAF3004DE734 /* XCRemoteSwiftPackageReference "inji-vci-client-ios-swift" */;
productName = VCIClient;
};
34873E4C2CD8DD11004DE734 /* pixelpass */ = {
isa = XCSwiftPackageProductDependency;
package = 34873E4B2CD8DD11004DE734 /* XCRemoteSwiftPackageReference "pixelpass-ios-swift" */;
productName = pixelpass;
};
9C4850422C3E5873002ECBD5 /* ios-tuvali-library */ = {
isa = XCSwiftPackageProductDependency;
package = 9C4850412C3E5873002ECBD5 /* XCRemoteSwiftPackageReference "tuvali-ios-swift" */;
@@ -889,6 +883,16 @@
package = 9CCCA19C2CF87A8400D5A461 /* XCRemoteSwiftPackageReference "secure-keystore-ios-swift" */;
productName = securekeystore;
};
9CFB37482DDDC9A000C199A8 /* pixelpass */ = {
isa = XCSwiftPackageProductDependency;
package = 9CFB37472DDDC99F00C199A8 /* XCRemoteSwiftPackageReference "pixelpass-ios-swift" */;
productName = pixelpass;
};
9CFB374B2DDDC9B500C199A8 /* VCIClient */ = {
isa = XCSwiftPackageProductDependency;
package = 9CFB374A2DDDC9B500C199A8 /* XCRemoteSwiftPackageReference "inji-vci-client-ios-swift" */;
productName = VCIClient;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;

View File

@@ -1,5 +1,5 @@
{
"originHash" : "178f6c7c607eeb08b99a4966015d08339500de64791888a2e79d6b7afae53659",
"originHash" : "2d4bd4f2ff41823478f56a65a061c28a141105b8447f22a9d1cef51048d33e76",
"pins" : [
{
"identity" : "alamofire",
@@ -51,8 +51,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/mosip/inji-openid4vp-ios-swift",
"state" : {
"branch" : "release-0.3.x",
"revision" : "58ac61a84fdef03b7a1cc9e6f4ba3c4bfd57fe61"
"branch" : "develop",
"revision" : "c83527449f97c07e6f0a0bec239f9afe477bf216"
}
},
{
@@ -60,8 +60,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/mosip/inji-vci-client-ios-swift",
"state" : {
"branch" : "release-0.3.x",
"revision" : "02f367bd2527f249145393a533f5175918c1fc8a"
"branch" : "develop",
"revision" : "8a39bbf7805af4c615904090a027fa472e5f4534"
}
},
{
@@ -76,10 +76,10 @@
{
"identity" : "pixelpass-ios-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/mosip/pixelpass-ios-swift",
"location" : "https://github.com/mosip/pixelpass-ios-swift/",
"state" : {
"branch" : "develop",
"revision" : "760438e38e01bd9deb170585f37d7c05c5c1785a"
"revision" : "78a8b507f5bd0046e273e3ba962696b44aea0e33"
}
},
{
@@ -128,5 +128,5 @@
}
}
],
"version" : 2
"version" : 3
}

View File

@@ -1189,6 +1189,27 @@ PODS:
- React-Core
- react-native-spinkit (1.4.1):
- React
- react-native-webview (13.13.5):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2024.01.01.00)
- RCTRequired
- RCTTypeSafety
- React-Codegen
- React-Core
- React-debug
- React-Fabric
- React-featureflags
- React-graphics
- React-ImageManager
- React-NativeModulesApple
- React-RCTFabric
- React-rendererdebug
- React-utils
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- React-nativeconfig (0.74.5)
- React-NativeModulesApple (0.74.5):
- glog
@@ -1587,6 +1608,7 @@ DEPENDENCIES:
- react-native-rsa-native (from `../node_modules/react-native-rsa-native`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-spinkit (from `../node_modules/react-native-spinkit`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
@@ -1798,6 +1820,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-safe-area-context"
react-native-spinkit:
:path: "../node_modules/react-native-spinkit"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-nativeconfig:
:path: "../node_modules/react-native/ReactCommon"
React-NativeModulesApple:
@@ -1881,33 +1905,33 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73
biometric-sdk-react-native: 11925e3af28eecd733efc43670c5d8b4f014cddc
biometric-sdk-react-native: d2a3a1279013cc4a7514a1b43fe557eb76e4e4c1
BiometricSdk: 303e7329404ea4d922dc14108449d10d21574f77
boost: d3f49c53809116a5d38da093a8aa78bf551aed09
BVLinearGradient: cb006ba232a1f3e4f341bb62c42d1098c284da70
BVLinearGradient: 880f91a7854faff2df62518f0281afb1c60d49a3
CatCrypto: a477899b6be4954e75be4897e732da098cc0a5a8
DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5
EASClient: 95592393d6d1e60609f0afb373191d918c687b98
EXApplication: ec862905fdab3a15bf6bd8ca1a99df7fc02d7762
EXConstants: 89d35611505a8ce02550e64e43cd05565da35f9a
EXFaceDetector: 917b279228541801bfa8ee22d867594ef84e31de
EASClient: 1509a9a6b48b932ec61667644634daf2562983b8
EXApplication: c08200c34daca7af7fd76ac4b9d606077410e8ad
EXConstants: 409690fbfd5afea964e5e9d6c4eb2c2b59222c59
EXFaceDetector: 50810192af3c2b80a53a6778b4e67af78b8e4cd5
EXJSONUtils: 30c17fd9cc364d722c0946a550dfbf1be92ef6a4
EXManifests: ebb7f551c340c0d06f3ecd9ae662e418bf68417c
Expo: ed0a748eb6be0efd2c3df7f6de3f3158a14464c9
ExpoAdapterGoogleSignIn: 97fc4b93c6b35837b5a5f2ff8ee5403548c1a4ba
ExpoAsset: 286fee7ba711ce66bf20b315e68106b13b8629fc
ExpoCamera: cf49d2d121a9f883be0f98dde15a2185a1dd42be
ExpoCrypto: c5c052d5f9f668c21975cb4caf072cec23c823fa
ExpoFileSystem: 2988caaf68b7cb706e36d382829d99811d9d76a5
ExpoFont: 38dddf823e32740c2a9f37c926a33aeca736b5c4
ExpoKeepAwake: dd02e65d49f1cfd9194640028ae2857e536eb1c9
ExpoLocalAuthentication: b94db59f55df95350223200c746b4ddf0cb7cfc0
ExpoLocalization: 1b4195ed48148c7f52ce790d3965cc19483fcbf2
ExpoModulesCore: 9ac73e2f60e0ea1d30137ca96cfc8c2aa34ef2b2
ExpoWebBrowser: cf10afe886891ab495877dada977fe6c269614a4
EXManifests: c1fab4c3237675e7b0299ea8df0bcb14baca4f42
Expo: 8c995afb875c15bf8439af0b20bcb9ed8f90d0bd
ExpoAdapterGoogleSignIn: 6c55782832b7fbdc2c27dac05ef00445c103b8f3
ExpoAsset: 323700f291684f110fb55f0d4022a3362ea9f875
ExpoCamera: 929be541d1c1319fcf32f9f5d9df8b97804346b5
ExpoCrypto: 156078f266bf28f80ecf5e2a9c3a0d6ffce07a1c
ExpoFileSystem: 80bfe850b1f9922c16905822ecbf97acd711dc51
ExpoFont: 00756e6c796d8f7ee8d211e29c8b619e75cbf238
ExpoKeepAwake: 3b8815d9dd1d419ee474df004021c69fdd316d08
ExpoLocalAuthentication: 9e02a56a4cf9868f0052656a93d4c94101a42ed7
ExpoLocalization: f04eeec2e35bed01ab61c72ee1768ec04d093d01
ExpoModulesCore: 831ece8311a489418746925820bbffdda587d6f4
ExpoWebBrowser: 7595ccac6938eb65b076385fd23d035db9ecdc8e
EXStructuredHeaders: cb8d1f698e144f4c5547b4c4963e1552f5d2b457
EXUpdates: bb1b0790e3b2adfbb193ad6a51c567a4bd2adf9f
EXUpdatesInterface: c3a9494c2173db6442c7d5ad4e5b984972760fd3
EXUpdates: 52c797a4b71b25315353041c29571cd65ecc7141
EXUpdatesInterface: 996527fd7d1a5d271eb523258d603f8f92038f24
FBLazyVector: ac12dc084d1c8ec4cc4d7b3cf1b0ebda6dab85af
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f
@@ -1920,7 +1944,7 @@ SPEC CHECKSUMS:
GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae
GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba
hermes-engine: 8c1577f3fdb849cbe7729c2e7b5abc4b845e88f8
ImageColors: 869f48b27ca2afb347fd0bada3257a5f698ee55e
ImageColors: 88be684570585c07ae2750bff34eb7b78bfc53b4
MLImage: a454f9f8ecfd537783a12f9488f5be1a68820829
MLKitCommon: 3bc17c6f7d25ce3660f030350b46ae7ec9ebca6e
MLKitFaceDetection: 617cb847441868a8bfd4b48d751c9b33c1104948
@@ -1928,87 +1952,88 @@ SPEC CHECKSUMS:
MMKV: aac95d817a100479445633f2b3ed8961b4ac5043
MMKVCore: 9cfef4c48c6c46f66226fc2e4634d78490206a48
nanopb: 438bc412db1928dac798aa6fd75726007be04262
Permission-BluetoothPeripheral: aa44bde6f52530eb00c0128ee2575b68fe8abdfe
Permission-Camera: 78301f2241e8297a80089d2452adbef2add8fe56
Permission-LocationAccuracy: 7ee13967dc5272e08172f5afa40c408bf83b6196
Permission-LocationWhenInUse: 59523bb3d8b95b267baa172ecbf1f31bc672795a
Permission-BluetoothPeripheral: 2b88a131074edafd8a46a5cda4ba610ec986d2fb
Permission-Camera: 7ec9ee99704766ff9b90198183387a7f5d82b0c1
Permission-LocationAccuracy: a38ddb5c5d0b8e656f3c86e4a500f9bb88bc099d
Permission-LocationWhenInUse: 24d97eeb25d8ff9f2232e070f792eeb1360ccaf0
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
Protobuf: 0c5a9e64f38aed73b5d1ff88a20112ce195cf909
RCT-Folly: 5dc73daec3476616d19e8a53f0156176f7b55461
RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47
RCTDeprecation: 3afceddffa65aee666dafd6f0116f1d975db1584
RCTRequired: ec1239bc9d8bf63e10fb92bd8b26171a9258e0c1
RCTTypeSafety: f5ecbc86c5c5fa163c05acb7a1c5012e15b5f994
ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda
React: fc9fa7258eff606f44d58c5b233a82dc9cf09018
React-callinvoker: e3fab14d69607fb7e8e3a57e5a415aed863d3599
React-Codegen: 3963186cb6a4ef21b5e67dcf7badf359867ff6df
React-Core: c3f589f104983dec3c3eeec5e70d61aa811bc236
React-CoreModules: 864932ddae3ead5af5bfb05f9bbc2cedcb958b39
React-cxxreact: bd9146108c44e6dbb99bba4568ce7af0304a2419
React-Codegen: 6fa87b7c6b8efcd0cef4bfeaec8c8bc8a6abe75a
React-Core: 3a5fd9e781cecf87803e5b091496a606a3df774a
React-CoreModules: cbf4707dafab8f9f826ac0c63a07d0bf5d01e256
React-cxxreact: 7b188556271e3c7fdf22a04819f6a6225045b9dd
React-debug: d30893c49ae1bce4037ea5cd8bb2511d2a38d057
React-Fabric: a171830e52baf8ec2b175c6a3791e01bbb92f1fb
React-FabricImage: ad154af0067f4b5dc5a41f607e48ee343641e903
React-Fabric: 826729dd2304fda9b89ff0a579f60ba2a470bc26
React-FabricImage: 2ad1fb8ffa5778eda9ed204a7b3cdd70bc333ce7
React-featureflags: 4ae83e72d9a92452793601ac9ac7d2280e486089
React-graphics: ed7d57965140168de86835946e8f1210c72c65dc
React-hermes: 177b1efdf3b8f10f4ca12b624b83fb4d4ccb2884
React-ImageManager: 3a50d0ee0bf81b1a6f23a0c5b30388293bcd6004
React-jserrorhandler: dcd62f5ca1c724c19637595ef7f45b78018e758f
React-jsi: 0abe1b0881b67caf8d8df6a57778dd0d3bb9d9a5
React-jsiexecutor: f6ca8c04f19f6a3acaa9610f7fb728f39d6e3248
React-jsinspector: db98771eae84e6f86f0ca5d9dcc572baadbfefc0
React-jsitracing: f8367edacc50bb3f9f056a5aeafb8cee5849fafb
React-logger: 780b9ee9cec7d44eabc4093de90107c379078cb6
React-Mapbuffer: f544f00b98dbdd8cbae96dd2bdb8b47f719976e0
react-native-app-auth: 5bf64c0d0e7cbea8ff6ea0b90e4397c8dcfc656a
react-native-cloud-storage: ddc959e7ddb08ff18ce9389787aa7254d7f45ee3
react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba
react-native-image-editor: 29a86ccb509072a429c56abf73c35d63288108e5
react-native-location: 70e6bdfe4a98a80ebda57fd5b30994e48d082e99
react-native-mmkv-storage: 45287ac5851a967d15f6c59b4a8aee6331bec034
react-native-netinfo: 2e3c27627db7d49ba412bfab25834e679db41e21
react-native-restart: df7caae89026a8ab2ecdd82839978f657701f51d
react-native-rsa-native: a7931cdda1f73a8576a46d7f431378c5550f0c38
react-native-safe-area-context: df9763c5de6fa38883028e243a0b60123acb8858
react-native-spinkit: 96a74c3519fab0eded2ab8c285f774aa3f4b7944
React-graphics: 61a026e1c1e7e20d20ac9fec6f6de631732b233d
React-hermes: a7054fbcbda3957e3c5eaad06ef9bf79998d535a
React-ImageManager: 2bbd6eb2e696bc680f76f84563e4b87d241614e1
React-jserrorhandler: 56fa04d49bfbe54ddfece7916673a73ebfea286b
React-jsi: f3ce1dd2e950b6ad12b65ea3ef89168f1b94c584
React-jsiexecutor: b4df3a27973d82f9abf3c4bd0f88e042cda25f16
React-jsinspector: 97ea746c023687de7313ee289817d6991d596c7d
React-jsitracing: 3b6060bbf5317663667e1dd93560c7943ab86ccc
React-logger: 257858bd55f3a4e1bc0cf07ddc8fb9faba6f8c7c
React-Mapbuffer: 6c1cacdbf40b531f549eba249e531a7d0bfd8e7f
react-native-app-auth: 63fa4e58c5bd29aeb974d3a06a23c5858322d533
react-native-cloud-storage: 15f24d9b9f175ce07473c3af86b6add72a727c95
react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06
react-native-image-editor: b09448ba9171308ff5ac6c9f66f49ad4cbfaee06
react-native-location: 5a40ec1cc6abf2f6d94df979f98ec76c3a415681
react-native-mmkv-storage: cfb6854594cfdc5f7383a9e464bb025417d1721c
react-native-netinfo: bdb108d340cdb41875c9ced535977cac6d2ff321
react-native-restart: 45c8dca02491980f2958595333cbccd6877cb57e
react-native-rsa-native: 12132eb627797529fdb1f0d22fd0f8f9678df64a
react-native-safe-area-context: a240ad4b683349e48b1d51fed1611138d1bdad97
react-native-spinkit: da294fd828216ad211fe36a5c14c1e09f09e62db
react-native-webview: db97533d0b7534225f48ad4e0c313b83cfae8a20
React-nativeconfig: ba9a2e54e2f0882cf7882698825052793ed4c851
React-NativeModulesApple: 84aaad2b0e546d7b839837ca537f6e72804a4cad
React-NativeModulesApple: 8d11ff8955181540585c944cf48e9e7236952697
React-perflogger: ed4e0c65781521e0424f2e5e40b40cc7879d737e
React-RCTActionSheet: 49d53ff03bb5688ca4606c55859053a0cd129ea5
React-RCTAnimation: 3075449f26cb98a52bcbf51cccd0c7954e2a71db
React-RCTAppDelegate: 9a419c4dda9dd039ad851411546dd297b930c454
React-RCTBlob: e81ab773a8fc1e9dceed953e889f936a7b7b3aa6
React-RCTFabric: 47a87a3e3fa751674f7e64d0bcd58976b8c57db9
React-RCTImage: d570531201c6dce7b5b63878fa8ecec0cc311c4c
React-RCTLinking: af888972b925d2811633d47853c479e88c35eb4d
React-RCTNetwork: 5728a06ff595003eca628f43f112a804f4a9a970
React-RCTSettings: ba3665b0569714a8aaceee5c7d23b943e333fa55
React-RCTText: b733fa984f0336b072e47512898ba91214f66ddb
React-RCTVibration: 0cbcbbd8781b6f6123671bae9ee5dd20d621af6c
React-rendererdebug: 9fc8f7d0bd19f2a3fe3791982af550b5e1535ff7
React-RCTAnimation: 07b4923885c52c397c4ec103924bf6e53b42c73e
React-RCTAppDelegate: 316e295076734baf9bdf1bfac7d92ab647aed930
React-RCTBlob: 85c57b0d5e667ff8a472163ba3af0628171a64bb
React-RCTFabric: 97c1465ded4dc92841f5376a39e43e1b2c455f40
React-RCTImage: b965c85bec820e2a9c154b1fb00a2ecdd59a9c92
React-RCTLinking: 75f04a5f27c26c4e73a39c50df470820d219df79
React-RCTNetwork: c1a9143f4d5778efc92da40d83969d03912ccc24
React-RCTSettings: c6800f91c0ecd48868cd5db754b0b0a7f5ffe039
React-RCTText: b923e24f9b7250bc4f7ab154c4168ad9f8d8fc9d
React-RCTVibration: 08c4f0c917c435b3619386c25a94ee5d64c250f0
React-rendererdebug: 3cda04217d9df67b94397ee0ead8ef3d8b7e427b
React-rncore: 4013508a2f3fcf46c961919bbbd4bfdda198977e
React-RuntimeApple: a852a6e06ab20711658873f39cb10b0033bea19d
React-RuntimeCore: 12e5e176c0cb09926f3e6f37403a84d2e0f203a7
React-RuntimeApple: 447844a2bdb0a03ffd24e5b4a4b96cfc50325b88
React-RuntimeCore: 9b5bffdaccee9b707b1c2694c9044e13ff0bb087
React-runtimeexecutor: 0e688aefc14c6bc8601f4968d8d01c3fb6446844
React-RuntimeHermes: 80c03a5215520c9733764ba11cbe535053c9746d
React-runtimescheduler: 2cbd0f3625b30bba08e8768776107f6f0203159b
React-utils: 9fa4e5d0b5e6c6c85c958f19d6ef854337886417
ReactCommon: 9f285823dbe955099978d9bff65a7653ca029256
RNAppleAuthentication: 445222cf501db405f0b3713593a6d0fecc87fd05
RNArgon2: 708e188b7a4d4ec8baf62463927c47abef453a94
RNBluetoothStateManager: 221894bb59b22ec8be372740178545d0bbdb1ab6
RNCClipboard: efe1b27ad1ea378c60c8c8aabfd130961bbeb474
RNCPicker: 15ad063c72ecba748be9edea62a5bdce53090aa6
RNDeviceInfo: 98bb51ba1519cd3f19f14e7236b5bb1c312c780f
RNFS: 89de7d7f4c0f6bafa05343c578f61118c8282ed8
RNGestureHandler: 326e35460fb6c8c64a435d5d739bea90d7ed4e49
RNGoogleSignin: bee4a648cf7bfe848b3674b5d487504831a115dd
RNLocalize: d024afa9204c13885e61dc88b8190651bcaabac9
RNPermissions: 1e3fb35b2ac79aaad28788302ead31ca8230d611
RNScreens: a2d8a2555b4653d7a19706eb172f855657ac30d7
RNSecureRandom: b64d263529492a6897e236a22a2c4249aa1b53dc
RNShare: 694e19d7f74ac4c04de3a8af0649e9ccc03bd8b1
RNSVG: 0e7deccab0678200815104223aadd5ca734dd41d
RNZipArchive: 2b0d34cfe303447f5b55ae5658ec62f1ebce4ab5
React-RuntimeHermes: 4d6ef6bb0f2b0b40d59143317f6b99c82764c959
React-runtimescheduler: cfbe85c3510c541ec6dc815c7729b41304b67961
React-utils: f242eb7e7889419d979ca0e1c02ccc0ea6e43b29
ReactCommon: f7da14a8827b72704169a48c929bcde802698361
RNAppleAuthentication: e99eaf3c4c01ad8ecb6125dd6f0cfd98871685b5
RNArgon2: 1481820722fd4af1575c09f7fc9ad67c00ee8a42
RNBluetoothStateManager: ae6a26260cbdf1827b58bd3bcc563527d61e6488
RNCClipboard: 3f0451a8100393908bea5c5c5b16f96d45f30bfc
RNCPicker: 3e2c37a8328f368ce14da050cdc8231deb5fc9f9
RNDeviceInfo: 59344c19152c4b2b32283005f9737c5c64b42fba
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
RNGestureHandler: 2282cfbcf86c360d29f44ace393203afd5c6cff7
RNGoogleSignin: aac5c1ec73422109dec1da770247a1e410dcc620
RNLocalize: 298e85ce16540a11de40c1a588ead39fc5e9a072
RNPermissions: f1b49dd05fa9b83993cd05a9ee115247944d8f1a
RNScreens: b32a9ff15bea7fcdbe5dff6477bc503f792b1208
RNSecureRandom: 07efbdf2cd99efe13497433668e54acd7df49fef
RNShare: 0fad69ae2d71de9d1f7b9a43acf876886a6cb99c
RNSVG: 43b64ed39c14ce830d840903774154ca0c1f27ec
RNZipArchive: ef9451b849c45a29509bf44e65b788829ab07801
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
sqlite3: 02d1f07eaaa01f80a1c16b4b31dfcbb3345ee01a
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
@@ -2017,6 +2042,6 @@ SPEC CHECKSUMS:
Yoga: 950bbfd7e6f04790fdb51149ed51df41f329fcc8
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5
PODFILE CHECKSUM: 4d2ee2cbf5f1553030d56659748bb7baece24998
PODFILE CHECKSUM: a555e3bf20e7a7fbd521747ca919066410e3af18
COCOAPODS: 1.16.2

View File

@@ -3,14 +3,34 @@
@interface RCT_EXTERN_MODULE(InjiVciClient, NSObject)
RCT_EXTERN_METHOD(init:(NSString *)appId)
// Initializes the VCIClient with a traceability ID
RCT_EXTERN_METHOD(init:(NSString *)traceabilityId)
RCT_EXTERN_METHOD(requestCredential:(id)issuerMeta
proof:(NSString *)proof
accessToken:(NSString *)accessToken
// Requests a credential using a credential offer string and client metadata (both as JSON strings)
RCT_EXTERN_METHOD(requestCredentialByOffer:(NSString *)credentialOffer
clientMetadata:(NSString *)clientMetadata
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject);
rejecter:(RCTPromiseRejectBlock)reject)
RCT_EXTERN_METHOD(requiresMainQueueSetup:(BOOL))
// Requests a credential from a trusted issuer using issuer metadata and client metadata (both as JSON strings)
RCT_EXTERN_METHOD(requestCredentialFromTrustedIssuer:(NSString *)issuerMetadata
clientMetadata:(NSString *)clientMetadata
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
// Sends proof JWT back to native side (in response to onRequestProof)
RCT_EXTERN_METHOD(sendProofFromJS:(NSString *)jwtProof)
// Sends authorization code back to native side (in response to onRequestAuthCode)
RCT_EXTERN_METHOD(sendAuthCodeFromJS:(NSString *)authCode)
// Sends tx_code back to native side (in response to onRequestTxCode)
RCT_EXTERN_METHOD(sendTxCodeFromJS:(NSString *)txCode)
// Sends issuer trust decision (true/false) back to native side (in response to onCheckIssuerTrust)
RCT_EXTERN_METHOD(sendIssuerTrustResponseFromJS:(BOOL)isTrusted)
// Required by React Native
RCT_EXTERN_METHOD(requiresMainQueueSetup:(BOOL)isRequired)
@end

View File

@@ -1,86 +1,222 @@
import Foundation
import VCIClient
import React
import VCIClient
@objc(InjiVciClient)
class RNVCIClientModule: NSObject, RCTBridgeModule {
private var vciClient: VCIClient?
private var pendingProofContinuation: ((String) -> Void)?
private var pendingAuthCodeContinuation: ((String) -> Void)?
private var pendingTxCodeContinuation: ((String) -> Void)?
private var pendingIssuerTrustDecision: ((Bool) -> Void)?
private var vciClient: VCIClient?
static func moduleName() -> String {
return "InjiVciClient"
}
@objc
func `init`(_ traceabilityId: String) {
vciClient = VCIClient(traceabilityId: traceabilityId)
static func moduleName() -> String {
return "InjiVciClient"
}
@objc
func requestCredential(_ issuerMeta: AnyObject, proof: String, accessToken: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
Task {
do {
guard let issuerMetaDict = issuerMeta as? [String: Any] else {
reject(nil, "Invalid issuerMeta format", nil)
return
}
@objc
func `init`(_ traceabilityId: String) {
vciClient = VCIClient(traceabilityId: traceabilityId)
}
@objc
func requestCredentialByOffer(
_ credentialOffer: String,
clientMetadata: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock
) {
Task {
do {
guard let vciClient = vciClient else {
reject(nil, "VCIClient not initialized", nil)
return
}
guard let credentialAudience = issuerMetaDict["credentialAudience"] as? String,
let credentialEndpoint = issuerMetaDict["credentialEndpoint"] as? String,
let downloadTimeoutInMilliseconds = issuerMetaDict["downloadTimeoutInMilliSeconds"] as? Int,
let credentialFormatString = issuerMetaDict["credentialFormat"] as? String,
let credentialFormat = CredentialFormat(rawValue: credentialFormatString) else {
reject(nil, "Invalid issuerMeta format", nil)
return
}
let clientMeta = try parseClientMetadata(from: clientMetadata)
var issuerMetaObject : IssuerMeta
let response = try await vciClient.requestCredentialByCredentialOffer(
credentialOffer: credentialOffer,
clientMetadata: clientMeta,
getTxCode: { inputMode, description, length in
try await self.getTxCodeHook(
inputMode: inputMode,
description: description,
length: length
)
},
getProofJwt: { accessToken, cNonce, issuerMetadata, credentialConfigId in
try await self.getProofContinuationHook(
accessToken: accessToken,
cNonce: cNonce,
issuerMetadata: issuerMetadata,
credentialConfigId: credentialConfigId
)
},
getAuthCode: { authUrl in
try await self.getAuthCodeContinuationHook(authUrl: authUrl)
},
onCheckIssuerTrust: { issuerMetadata in
try await self.getIssuerTrustDecisionHook(issuerMetadata: issuerMetadata)
}
)
switch credentialFormat {
case .ldp_vc:
guard let credentialType = issuerMetaDict["credentialType"] as? [String] else {
reject(nil, "Invalid issuerMeta format", nil)
return
}
issuerMetaObject = IssuerMeta(
credentialAudience: credentialAudience,
credentialEndpoint: credentialEndpoint,
downloadTimeoutInMilliseconds: downloadTimeoutInMilliseconds,
credentialType: credentialType,
credentialFormat: credentialFormat
)
case .mso_mdoc:
guard let doctype = issuerMetaDict["doctype"] as? String,
let claims = issuerMetaDict["claims"] as? [String:Any] else {
reject(nil, "Invalid issuerMeta format", nil)
return
}
issuerMetaObject = IssuerMeta(
credentialAudience: credentialAudience,
credentialEndpoint: credentialEndpoint,
downloadTimeoutInMilliseconds: downloadTimeoutInMilliseconds,
credentialFormat: .mso_mdoc,
docType: doctype,
claims: claims
)
resolve(try response?.toJsonString())
} catch {
reject(nil, error.localizedDescription, nil)
}
}
}
@objc
func requestCredentialFromTrustedIssuer(
_ issuerMetadata: String,
clientMetadata: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock
) {
Task {
do {
guard let vciClient = vciClient else {
reject(nil, "VCIClient not initialized", nil)
return
}
let issuer = try parseIssuerMeta(from: issuerMetadata)
let clientMeta = try parseClientMetadata(from: clientMetadata)
let response = try await vciClient.requestCredentialFromTrustedIssuer(
issuerMetadata: issuer,
clientMetadata: clientMeta,
getProofJwt: { accessToken, cNonce, issuerMetadata, credentialConfigId in
try await self.getProofContinuationHook(
accessToken: accessToken,
cNonce: cNonce,
issuerMetadata: issuerMetadata,
credentialConfigId: credentialConfigId
)
},
getAuthCode: { authUrl in
try await self.getAuthCodeContinuationHook(authUrl: authUrl)
}
)
let response = try await vciClient!.requestCredential(issuerMeta: issuerMetaObject, proof: JWTProof(jwt: proof), accessToken: accessToken)!
let responseString = try response.toJsonString()
resolve(responseString)
} catch {
reject(nil,error.localizedDescription, nil)
}
}
}
resolve(try response?.toJsonString())
} catch {
reject(nil, error.localizedDescription, nil)
}
}
}
@objc
static func requiresMainQueueSetup() -> Bool {
return true
}
private func getProofContinuationHook(
accessToken: String,
cNonce: String?,
issuerMetadata: [String: Any]?,
credentialConfigId: String?
) async throws -> String {
var issuerMetadataJson: String = ""
if let issuerMetadata = issuerMetadata {
if let data = try? JSONSerialization.data(withJSONObject: issuerMetadata, options: []),
let jsonString = String(data: data, encoding: .utf8) {
issuerMetadataJson = jsonString
}
}
if let bridge = RCTBridge.current() {
let payload: [String: Any] = [
"accessToken": accessToken,
"cNonce": cNonce ?? NSNull(),
"issuerMetadata": issuerMetadataJson,
"credentialConfigurationId": credentialConfigId ?? NSNull(),
]
bridge.eventDispatcher().sendAppEvent(withName: "onRequestProof", body: payload)
}
return try await withCheckedThrowingContinuation { continuation in
self.pendingProofContinuation = { jwt in continuation.resume(returning: jwt) }
}
}
private func getAuthCodeContinuationHook(authUrl: String) async throws -> String {
if let bridge = RCTBridge.current() {
bridge.eventDispatcher().sendAppEvent(withName: "onRequestAuthCode", body: ["authorizationEndpoint": authUrl])
}
return try await withCheckedThrowingContinuation { continuation in
self.pendingAuthCodeContinuation = { code in continuation.resume(returning: code) }
}
}
private func getTxCodeHook(inputMode: String?, description: String?, length: Int? ) async throws -> String {
if let bridge = RCTBridge.current() {
bridge.eventDispatcher().sendAppEvent(withName: "onRequestTxCode", body: [
"inputMode": inputMode,
"description": description,
"length": length
])
}
return try await withCheckedThrowingContinuation { continuation in
self.pendingTxCodeContinuation = { code in continuation.resume(returning: code) }
}
}
private func getIssuerTrustDecisionHook(issuerMetadata: [String: Any]) async throws -> Bool {
var metadataJson = ""
if let data = try? JSONSerialization.data(withJSONObject: issuerMetadata, options: []),
let string = String(data: data, encoding: .utf8) {
metadataJson = string
}
if let bridge = RCTBridge.current() {
bridge.eventDispatcher().sendAppEvent(withName: "onCheckIssuerTrust", body: ["issuerMetadata": metadataJson])
}
return try await withCheckedThrowingContinuation { continuation in
self.pendingIssuerTrustDecision = { decision in continuation.resume(returning: decision) }
}
}
@objc(sendProofFromJS:)
func sendProofFromJS(_ jwt: String) {
pendingProofContinuation?(jwt)
pendingProofContinuation = nil
}
@objc(sendAuthCodeFromJS:)
func sendAuthCodeFromJS(_ code: String) {
pendingAuthCodeContinuation?(code)
pendingAuthCodeContinuation = nil
}
@objc(sendTxCodeFromJS:)
func sendTxCodeFromJS(_ code: String) {
pendingTxCodeContinuation?(code)
pendingTxCodeContinuation = nil
}
@objc(sendIssuerTrustResponseFromJS:)
func sendIssuerTrustResponseFromJS(_ trusted: Bool) {
pendingIssuerTrustDecision?(trusted)
pendingIssuerTrustDecision = nil
}
private func parseClientMetadata(from jsonString: String) throws -> ClientMetaData {
guard let data = jsonString.data(using: .utf8) else {
throw NSError(domain: "Invalid JSON string for clientMetadata", code: 0)
}
return try JSONDecoder().decode(ClientMetaData.self, from: data)
}
private func parseIssuerMeta(from jsonString: String) throws -> IssuerMetadata {
guard let data = jsonString.data(using: .utf8) else {
throw NSError(domain: "Invalid JSON string for issuerMetadata", code: 0)
}
return try JSONDecoder().decode(IssuerMetadata.self, from: data)
}
@objc static func requiresMainQueueSetup() -> Bool {
return true
}
}