diff --git a/Frameworks/Bindings.txt b/Frameworks/Bindings.txt index e77b06d527dadbc6d73073897cc37beb65f704bd..cec1da4111fcd335b53d1e363114a94685800fa8 100644 --- a/Frameworks/Bindings.txt +++ b/Frameworks/Bindings.txt @@ -1,4 +1,4 @@ -https://git.xx.network/elixxir/client/-/commit/2deedc730bbe8ff3a0888c666cdb096bdda56663 +https://git.xx.network/elixxir/client/-/commit/12eb14f16d4a786b073364333d5fb7add6aa6fb7 go version go1.17.13 darwin/arm64 Xcode 14.0 Build version 14A309 gomobile bind target: ios,iossimulator,macos diff --git a/Frameworks/Bindings.xcframework/Info.plist b/Frameworks/Bindings.xcframework/Info.plist index 43fe32dad94767ae305b61db56f5604f8612617e..e66824e5243985b4ac053ef62aeaaf571fe03970 100644 --- a/Frameworks/Bindings.xcframework/Info.plist +++ b/Frameworks/Bindings.xcframework/Info.plist @@ -6,7 +6,7 @@ <array> <dict> <key>LibraryIdentifier</key> - <string>macos-arm64_x86_64</string> + <string>ios-arm64_x86_64-simulator</string> <key>LibraryPath</key> <string>Bindings.framework</string> <key>SupportedArchitectures</key> @@ -15,34 +15,34 @@ <string>x86_64</string> </array> <key>SupportedPlatform</key> - <string>macos</string> + <string>ios</string> + <key>SupportedPlatformVariant</key> + <string>simulator</string> </dict> <dict> <key>LibraryIdentifier</key> - <string>ios-arm64_x86_64-simulator</string> + <string>ios-arm64</string> <key>LibraryPath</key> <string>Bindings.framework</string> <key>SupportedArchitectures</key> <array> <string>arm64</string> - <string>x86_64</string> </array> <key>SupportedPlatform</key> <string>ios</string> - <key>SupportedPlatformVariant</key> - <string>simulator</string> </dict> <dict> <key>LibraryIdentifier</key> - <string>ios-arm64</string> + <string>macos-arm64_x86_64</string> <key>LibraryPath</key> <string>Bindings.framework</string> <key>SupportedArchitectures</key> <array> <string>arm64</string> + <string>x86_64</string> </array> <key>SupportedPlatform</key> - <string>ios</string> + <string>macos</string> </dict> </array> <key>CFBundlePackageType</key> diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings index 028698e78d12ebe96e4ffd2d7e8e5ed848493dc9..3e4de76647083e287fb3285e065272666172135a 100644 Binary files a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Bindings differ diff --git a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h index 8a469e985c895f732191ca1be50728da7528d8e3..96ddf1d0c47ebdea5dffbb77e053fbdd5e841798 100644 --- a/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h +++ b/Frameworks/Bindings.xcframework/ios-arm64/Bindings.framework/Versions/A/Headers/Bindings.objc.h @@ -84,6 +84,8 @@ @class BindingsTrackServicesCallback; @protocol BindingsUdLookupCallback; @class BindingsUdLookupCallback; +@protocol BindingsUdMultiLookupCallback; +@class BindingsUdMultiLookupCallback; @protocol BindingsUdNetworkStatus; @class BindingsUdNetworkStatus; @protocol BindingsUdSearchCallback; @@ -208,6 +210,10 @@ Parameters: - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end +@protocol BindingsUdMultiLookupCallback <NSObject> +- (void)callback:(NSData* _Nullable)contactListJSON failedIDs:(NSData* _Nullable)failedIDs err:(NSError* _Nullable)err; +@end + @protocol BindingsUdNetworkStatus <NSObject> /** * UdNetworkStatus returns: @@ -2114,6 +2120,24 @@ Returns: */ FOUNDATION_EXPORT NSData* _Nullable BindingsLookupUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdLookupCallback> _Nullable cb, NSData* _Nullable lookupId, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); +/** + * MultiLookupUD returns the public key of all passed in IDs as known by the +user discovery system or returns by the timeout. + +Parameters: + - e2eID - e2e object ID in the tracker + - udContact - the marshalled bytes of the contact.Contact object + - lookupIds - JSON marshalled list of []*id.ID object for the users that + MultiLookupUD will look up. + - singleRequestParams - the JSON marshalled bytes of single.RequestParams + +Returns: + - []byte - the JSON marshalled bytes of the SingleUseSendReport object, + which can be passed into Cmix.WaitForRoundResult to see if the send + succeeded. + */ +FOUNDATION_EXPORT BOOL BindingsMultiLookupUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdMultiLookupCallback> _Nullable cb, NSData* _Nullable lookupIds, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); + /** * NewBroadcastChannel creates a bindings-layer broadcast channel and starts listening for new messages. @@ -2465,6 +2489,8 @@ FOUNDATION_EXPORT BOOL BindingsUpdateCommonErrors(NSString* _Nullable jsonFile, @class BindingsUdLookupCallback; +@class BindingsUdMultiLookupCallback; + @class BindingsUdNetworkStatus; @class BindingsUdSearchCallback; @@ -2805,6 +2831,31 @@ Parameters: - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end +/** + * UdMultiLookupCallback contains the callback called by MultiLookupUD that returns the +contacts which match the passed in IDs. + +Parameters: + - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil + if an error occurs. + + JSON Example: + { + "<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>", + "<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>", + "<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>" + } + - failedIDs - JSON marshalled list of []*id.ID objects which failed lookup + - err - any errors that occurred in the multilookup. + */ +@interface BindingsUdMultiLookupCallback : NSObject <goSeqRefInterface, BindingsUdMultiLookupCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)contactListJSON failedIDs:(NSData* _Nullable)failedIDs err:(NSError* _Nullable)err; +@end + /** * UdNetworkStatus contains the UdNetworkStatus, which is a bindings-level interface for ud.udNetworkStatus. diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings index 42059901ccb6235d86e772871181ef017f1f7121..c03b3514dde5282a331b4eb6e4502dd88e118c73 100644 Binary files a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings and b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings differ diff --git a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h index 8a469e985c895f732191ca1be50728da7528d8e3..96ddf1d0c47ebdea5dffbb77e053fbdd5e841798 100644 --- a/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h +++ b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Headers/Bindings.objc.h @@ -84,6 +84,8 @@ @class BindingsTrackServicesCallback; @protocol BindingsUdLookupCallback; @class BindingsUdLookupCallback; +@protocol BindingsUdMultiLookupCallback; +@class BindingsUdMultiLookupCallback; @protocol BindingsUdNetworkStatus; @class BindingsUdNetworkStatus; @protocol BindingsUdSearchCallback; @@ -208,6 +210,10 @@ Parameters: - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end +@protocol BindingsUdMultiLookupCallback <NSObject> +- (void)callback:(NSData* _Nullable)contactListJSON failedIDs:(NSData* _Nullable)failedIDs err:(NSError* _Nullable)err; +@end + @protocol BindingsUdNetworkStatus <NSObject> /** * UdNetworkStatus returns: @@ -2114,6 +2120,24 @@ Returns: */ FOUNDATION_EXPORT NSData* _Nullable BindingsLookupUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdLookupCallback> _Nullable cb, NSData* _Nullable lookupId, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); +/** + * MultiLookupUD returns the public key of all passed in IDs as known by the +user discovery system or returns by the timeout. + +Parameters: + - e2eID - e2e object ID in the tracker + - udContact - the marshalled bytes of the contact.Contact object + - lookupIds - JSON marshalled list of []*id.ID object for the users that + MultiLookupUD will look up. + - singleRequestParams - the JSON marshalled bytes of single.RequestParams + +Returns: + - []byte - the JSON marshalled bytes of the SingleUseSendReport object, + which can be passed into Cmix.WaitForRoundResult to see if the send + succeeded. + */ +FOUNDATION_EXPORT BOOL BindingsMultiLookupUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdMultiLookupCallback> _Nullable cb, NSData* _Nullable lookupIds, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); + /** * NewBroadcastChannel creates a bindings-layer broadcast channel and starts listening for new messages. @@ -2465,6 +2489,8 @@ FOUNDATION_EXPORT BOOL BindingsUpdateCommonErrors(NSString* _Nullable jsonFile, @class BindingsUdLookupCallback; +@class BindingsUdMultiLookupCallback; + @class BindingsUdNetworkStatus; @class BindingsUdSearchCallback; @@ -2805,6 +2831,31 @@ Parameters: - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end +/** + * UdMultiLookupCallback contains the callback called by MultiLookupUD that returns the +contacts which match the passed in IDs. + +Parameters: + - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil + if an error occurs. + + JSON Example: + { + "<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>", + "<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>", + "<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>" + } + - failedIDs - JSON marshalled list of []*id.ID objects which failed lookup + - err - any errors that occurred in the multilookup. + */ +@interface BindingsUdMultiLookupCallback : NSObject <goSeqRefInterface, BindingsUdMultiLookupCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)contactListJSON failedIDs:(NSData* _Nullable)failedIDs err:(NSError* _Nullable)err; +@end + /** * UdNetworkStatus contains the UdNetworkStatus, which is a bindings-level interface for ud.udNetworkStatus. diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Bindings b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Bindings index e4308e494b7c1c9233d1e4b05c6c458b2c055b14..bcea7d00c7ba5265cc4daf72def814d7065df731 100644 Binary files a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Bindings and b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Bindings differ diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Bindings.objc.h b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Bindings.objc.h index 8a469e985c895f732191ca1be50728da7528d8e3..96ddf1d0c47ebdea5dffbb77e053fbdd5e841798 100644 --- a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Bindings.objc.h +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Bindings.objc.h @@ -84,6 +84,8 @@ @class BindingsTrackServicesCallback; @protocol BindingsUdLookupCallback; @class BindingsUdLookupCallback; +@protocol BindingsUdMultiLookupCallback; +@class BindingsUdMultiLookupCallback; @protocol BindingsUdNetworkStatus; @class BindingsUdNetworkStatus; @protocol BindingsUdSearchCallback; @@ -208,6 +210,10 @@ Parameters: - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end +@protocol BindingsUdMultiLookupCallback <NSObject> +- (void)callback:(NSData* _Nullable)contactListJSON failedIDs:(NSData* _Nullable)failedIDs err:(NSError* _Nullable)err; +@end + @protocol BindingsUdNetworkStatus <NSObject> /** * UdNetworkStatus returns: @@ -2114,6 +2120,24 @@ Returns: */ FOUNDATION_EXPORT NSData* _Nullable BindingsLookupUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdLookupCallback> _Nullable cb, NSData* _Nullable lookupId, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); +/** + * MultiLookupUD returns the public key of all passed in IDs as known by the +user discovery system or returns by the timeout. + +Parameters: + - e2eID - e2e object ID in the tracker + - udContact - the marshalled bytes of the contact.Contact object + - lookupIds - JSON marshalled list of []*id.ID object for the users that + MultiLookupUD will look up. + - singleRequestParams - the JSON marshalled bytes of single.RequestParams + +Returns: + - []byte - the JSON marshalled bytes of the SingleUseSendReport object, + which can be passed into Cmix.WaitForRoundResult to see if the send + succeeded. + */ +FOUNDATION_EXPORT BOOL BindingsMultiLookupUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdMultiLookupCallback> _Nullable cb, NSData* _Nullable lookupIds, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); + /** * NewBroadcastChannel creates a bindings-layer broadcast channel and starts listening for new messages. @@ -2465,6 +2489,8 @@ FOUNDATION_EXPORT BOOL BindingsUpdateCommonErrors(NSString* _Nullable jsonFile, @class BindingsUdLookupCallback; +@class BindingsUdMultiLookupCallback; + @class BindingsUdNetworkStatus; @class BindingsUdSearchCallback; @@ -2805,6 +2831,31 @@ Parameters: - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end +/** + * UdMultiLookupCallback contains the callback called by MultiLookupUD that returns the +contacts which match the passed in IDs. + +Parameters: + - contactListJSON - the JSON marshalled bytes of []contact.Contact, or nil + if an error occurs. + + JSON Example: + { + "<xxc(2)F8dL9EC6gy+RMJuk3R+Au6eGExo02Wfio5cacjBcJRwDEgB7Ugdw/BAr6RkCABkWAFV1c2VybmFtZTA7c4LzV05sG+DMt+rFB0NIJg==xxc>", + "<xxc(2)eMhAi/pYkW5jCmvKE5ZaTglQb+fTo1D8NxVitr5CCFADEgB7Ugdw/BAr6RoCABkWAFV1c2VybmFtZTE7fElAa7z3IcrYrrkwNjMS2w==xxc>", + "<xxc(2)d7RJTu61Vy1lDThDMn8rYIiKSe1uXA/RCvvcIhq5Yg4DEgB7Ugdw/BAr6RsCABkWAFV1c2VybmFtZTI7N3XWrxIUpR29atpFMkcR6A==xxc>" + } + - failedIDs - JSON marshalled list of []*id.ID objects which failed lookup + - err - any errors that occurred in the multilookup. + */ +@interface BindingsUdMultiLookupCallback : NSObject <goSeqRefInterface, BindingsUdMultiLookupCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)contactListJSON failedIDs:(NSData* _Nullable)failedIDs err:(NSError* _Nullable)err; +@end + /** * UdNetworkStatus contains the UdNetworkStatus, which is a bindings-level interface for ud.udNetworkStatus. diff --git a/Sources/XXClient/Callbacks/UdMultiLookupCallback.swift b/Sources/XXClient/Callbacks/UdMultiLookupCallback.swift new file mode 100644 index 0000000000000000000000000000000000000000..9a6d9df64e56f28edc072449bc0dac5be7de6aa4 --- /dev/null +++ b/Sources/XXClient/Callbacks/UdMultiLookupCallback.swift @@ -0,0 +1,55 @@ +import Bindings +import XCTestDynamicOverlay + +public struct UdMultiLookupCallback { + public enum Result: Equatable { + case success([Contact]) + case failure(error: NSError, failedIDs: [Data]) + } + + public init(handle: @escaping (Result) -> Void) { + self.handle = handle + } + + public var handle: (Result) -> Void +} + +extension UdMultiLookupCallback { + public static let unimplemented = UdMultiLookupCallback( + handle: XCTUnimplemented("\(Self.self)") + ) +} + +extension UdMultiLookupCallback { + func makeBindingsUdMultiLookupCallback() -> BindingsUdMultiLookupCallbackProtocol { + class CallbackObject: NSObject, BindingsUdMultiLookupCallbackProtocol { + init(_ callback: UdMultiLookupCallback) { + self.callback = callback + } + + let callback: UdMultiLookupCallback + + func callback(_ contactListJSON: Data?, failedIDs: Data?, err: Error?) { + if let err = err { + callback.handle(.failure( + error: err as NSError, + failedIDs: failedIDs + .map { (try? JSONDecoder().decode([Data].self, from: $0)) ?? [] } ?? [] + )) + } else if let contactListJSON = contactListJSON { + do { + let contactsData = try JSONDecoder().decode([Data].self, from: contactListJSON) + let contacts: [Contact] = contactsData.map { Contact.live($0) } + callback.handle(.success(contacts)) + } catch { + callback.handle(.failure(error: error as NSError, failedIDs: [])) + } + } else { + fatalError("BindingsUdMultiLookupCallbackProtocol received `nil` contactListJSON and `nil` error") + } + } + } + + return CallbackObject(self) + } +} diff --git a/Sources/XXClient/Functions/MultiLookupUD.swift b/Sources/XXClient/Functions/MultiLookupUD.swift new file mode 100644 index 0000000000000000000000000000000000000000..0cf81669219d1327ae1686056253a747762a1055 --- /dev/null +++ b/Sources/XXClient/Functions/MultiLookupUD.swift @@ -0,0 +1,57 @@ +import Bindings +import XCTestDynamicOverlay + +public struct MultiLookupUD { + public struct Params: Equatable { + public init( + e2eId: Int, + udContact: Data, + lookupIds: [Data], + singleRequestParams: Data = GetSingleUseParams.liveDefault() + ) { + self.e2eId = e2eId + self.udContact = udContact + self.lookupIds = lookupIds + self.singleRequestParams = singleRequestParams + } + + public var e2eId: Int + public var udContact: Data + public var lookupIds: [Data] + public var singleRequestParams: Data + } + + public var run: (Params, UdMultiLookupCallback) throws -> Void + + public func callAsFunction(params: Params, callback: UdMultiLookupCallback) throws -> Void { + try run(params, callback) + } +} + +extension MultiLookupUD { + public static func live() -> MultiLookupUD { + MultiLookupUD { params, callback in + var error: NSError? + let result = BindingsMultiLookupUD( + params.e2eId, + params.udContact, + callback.makeBindingsUdMultiLookupCallback(), + try JSONEncoder().encode(params.lookupIds), + params.singleRequestParams, + &error + ) + if let error = error { + throw error + } + guard result else { + fatalError("BindingsMultiLookupUD returned `false` without providing error") + } + } + } +} + +extension MultiLookupUD { + public static let unimplemented = MultiLookupUD( + run: XCTUnimplemented("\(Self.self)") + ) +}