diff --git a/Frameworks/Bindings.txt b/Frameworks/Bindings.txt index 702c949d1dd03ac8030c0ef9c5a36af0c325f134..83a8da383de3a57509257d2b3b05af2c65d64fe1 100644 --- a/Frameworks/Bindings.txt +++ b/Frameworks/Bindings.txt @@ -1,4 +1,4 @@ -https://git.xx.network/elixxir/client/-/commit/9a44f79889f967704d60a43f1c24a945028afb06 +https://git.xx.network/elixxir/client/-/commit/57b7e3b88e740c36935ab2da04d94fd5a6a85262 go version go1.17.13 darwin/arm64 Xcode 13.4.1 Build version 13F100 gomobile bind target: ios,iossimulator,macos diff --git a/Frameworks/Bindings.xcframework/Info.plist b/Frameworks/Bindings.xcframework/Info.plist index 3d81013ba0ba606da4b42b6f3119f688c6d9b97d..43fe32dad94767ae305b61db56f5604f8612617e 100644 --- a/Frameworks/Bindings.xcframework/Info.plist +++ b/Frameworks/Bindings.xcframework/Info.plist @@ -6,7 +6,7 @@ <array> <dict> <key>LibraryIdentifier</key> - <string>ios-arm64_x86_64-simulator</string> + <string>macos-arm64_x86_64</string> <key>LibraryPath</key> <string>Bindings.framework</string> <key>SupportedArchitectures</key> @@ -15,13 +15,11 @@ <string>x86_64</string> </array> <key>SupportedPlatform</key> - <string>ios</string> - <key>SupportedPlatformVariant</key> - <string>simulator</string> + <string>macos</string> </dict> <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> @@ -30,7 +28,9 @@ <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> 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 0ce0097a9af5e6db2577a9264a6ca65277b87a5f..381c2ba28c87178ac5f80950ba6439f8b4bfa8f1 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 40a89ee2ee4afde62d99dcdcac9ef77d09c7c663..313101ebfb224eb77a7b3e3b99459fab55b79c3c 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 @@ -33,6 +33,7 @@ @class BindingsGroupSendReport; @class BindingsMessage; @class BindingsNodeRegistrationReport; +@class BindingsNotificationReport; @class BindingsProgress; @class BindingsReceivedFile; @class BindingsReceptionIdentity; @@ -78,6 +79,8 @@ @class BindingsSingleUseResponse; @protocol BindingsStopper; @class BindingsStopper; +@protocol BindingsTrackServicesCallback; +@class BindingsTrackServicesCallback; @protocol BindingsUdLookupCallback; @class BindingsUdLookupCallback; @protocol BindingsUdNetworkStatus; @@ -196,6 +199,10 @@ Parameters: - (void)stop; @end +@protocol BindingsTrackServicesCallback <NSObject> +- (void)callback:(NSData* _Nullable)marshalData err:(NSError* _Nullable)err; +@end + @protocol BindingsUdLookupCallback <NSObject> - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end @@ -552,6 +559,17 @@ If the network follower is running and this fails, the Cmix object will most likely be in an unrecoverable state and need to be trashed. */ - (BOOL)stopNetworkFollower:(NSError* _Nullable* _Nullable)error; +/** + * TrackServices will return via a callback the list of services the +backend keeps track of, which is formally referred to as a +[message.ServiceList]. This may be passed into other bindings call which +may need context on the available services for this client. + +Parameters: + - cb - A TrackServicesCallback, which will be passed the marshalled + message.ServiceList. + */ +- (void)trackServices:(id<BindingsTrackServicesCallback> _Nullable)cb; /** * WaitForNetwork will block until either the network is healthy or the passed timeout is reached. It will return true if the network is healthy. @@ -1406,6 +1424,57 @@ Cmix.GetNodeRegistrationStatus returns JSON marshalled. @property (nonatomic) long numberOfNodes; @end +/** + * NotificationReport is the bindings' representation for notifications for +this user. + +Example NotificationReport JSON: + +{ + "ForMe": true, + "Type": "e2e", + "Source": "dGVzdGVyMTIzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +} + +Given the Type, the Source value will have specific contextual meanings. +Below is a table that will define the contextual meaning of the Source field +given all possible Type fields. + + TYPE | SOURCE | DESCRIPTION + ________________________________________________________________________________________ + "default" | recipient user ID | A message with no association. + "request" | sender user ID | A channel request has been received, from Source. + "reset" | sender user ID | A channel reset has been received. + "confirm" | sender user ID | A channel request has been accepted. + "silent" | sender user ID | A message where the user should not be notified. + "e2e" | sender user ID | A reception of an E2E message. + "group" | group ID | A reception of a group chat message. + "endFT" | sender user ID | The last message sent confirming end of file transfer. + "groupRQ" | sender user ID | A request from Source to join a group chat. + todo iterate over this docstring, ensure descriptions/sources are + still accurate (they are from the old implementation + */ +@interface BindingsNotificationReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * ForMe determines whether this value is for the user. If it is +false, this report may be ignored. + */ +@property (nonatomic) BOOL forMe; +/** + * Type is the type of notification. The list can be seen + */ +@property (nonatomic) NSString* _Nonnull type; +/** + * Source is the source of the notification. + */ +@property (nonatomic) NSData* _Nullable source; +@end + /** * Progress is a public struct that represents the progress of an in-progress file transfer. @@ -1810,6 +1879,25 @@ Returns: */ FOUNDATION_EXPORT NSData* _Nullable BindingsGetIDFromContact(NSData* _Nullable marshaledContact, NSError* _Nullable* _Nullable error); +/** + * GetNotificationsReport parses the received notification data to determine which +notifications are for this user. // This returns the JSON-marshalled +NotificationReports. + +Parameters: + - e2eID - e2e object ID in the tracker + - notificationCSV - the notification data received from the + notifications' server. + - marshalledServices - the JSON-marshalled list of services the backend + keeps track of. Refer to Cmix.TrackServices for information about this. + +Returns: + - []byte - A JSON marshalled NotificationReports. Some NotificationReport's + within in this structure may have their NotificationReport.ForMe + set to false. These may be ignored. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetNotificationsReport(long e2eId, NSString* _Nullable notificationCSV, NSData* _Nullable marshalledServices, NSError* _Nullable* _Nullable error); + /** * GetPubkeyFromContact returns the DH public key in the [contact.Contact] object. @@ -2283,6 +2371,8 @@ FOUNDATION_EXPORT BOOL BindingsUpdateCommonErrors(NSString* _Nullable jsonFile, @class BindingsStopper; +@class BindingsTrackServicesCallback; + @class BindingsUdLookupCallback; @class BindingsUdNetworkStatus; @@ -2564,6 +2654,45 @@ registered listener. - (void)stop; @end +/** + * TrackServicesCallback is the callback for Cmix.TrackServices. +This will pass to the user a JSON-marshalled list of backend services. +If there was an error retrieving or marshalling the service list, +there is an error for the second parameter which will be non-null. + +Example JSON: + +[ + { + "Id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "Services": [ + { + "Identifier": null, + "Tag": "test", + "Metadata": null + } + ] + }, + { + "Id": "AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "Services": [ + { + "Identifier": null, + "Tag": "test", + "Metadata": null + } + ] + }, +] + */ +@interface BindingsTrackServicesCallback : NSObject <goSeqRefInterface, BindingsTrackServicesCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)marshalData err:(NSError* _Nullable)err; +@end + /** * UdLookupCallback contains the callback called by LookupUD that returns the contact that matches the passed in ID. 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 c302dc6cf19adf806e3a638565957629c1798bba..1005ae67edb1b57deb38ed23b9639767d796f5ab 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 40a89ee2ee4afde62d99dcdcac9ef77d09c7c663..313101ebfb224eb77a7b3e3b99459fab55b79c3c 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 @@ -33,6 +33,7 @@ @class BindingsGroupSendReport; @class BindingsMessage; @class BindingsNodeRegistrationReport; +@class BindingsNotificationReport; @class BindingsProgress; @class BindingsReceivedFile; @class BindingsReceptionIdentity; @@ -78,6 +79,8 @@ @class BindingsSingleUseResponse; @protocol BindingsStopper; @class BindingsStopper; +@protocol BindingsTrackServicesCallback; +@class BindingsTrackServicesCallback; @protocol BindingsUdLookupCallback; @class BindingsUdLookupCallback; @protocol BindingsUdNetworkStatus; @@ -196,6 +199,10 @@ Parameters: - (void)stop; @end +@protocol BindingsTrackServicesCallback <NSObject> +- (void)callback:(NSData* _Nullable)marshalData err:(NSError* _Nullable)err; +@end + @protocol BindingsUdLookupCallback <NSObject> - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end @@ -552,6 +559,17 @@ If the network follower is running and this fails, the Cmix object will most likely be in an unrecoverable state and need to be trashed. */ - (BOOL)stopNetworkFollower:(NSError* _Nullable* _Nullable)error; +/** + * TrackServices will return via a callback the list of services the +backend keeps track of, which is formally referred to as a +[message.ServiceList]. This may be passed into other bindings call which +may need context on the available services for this client. + +Parameters: + - cb - A TrackServicesCallback, which will be passed the marshalled + message.ServiceList. + */ +- (void)trackServices:(id<BindingsTrackServicesCallback> _Nullable)cb; /** * WaitForNetwork will block until either the network is healthy or the passed timeout is reached. It will return true if the network is healthy. @@ -1406,6 +1424,57 @@ Cmix.GetNodeRegistrationStatus returns JSON marshalled. @property (nonatomic) long numberOfNodes; @end +/** + * NotificationReport is the bindings' representation for notifications for +this user. + +Example NotificationReport JSON: + +{ + "ForMe": true, + "Type": "e2e", + "Source": "dGVzdGVyMTIzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +} + +Given the Type, the Source value will have specific contextual meanings. +Below is a table that will define the contextual meaning of the Source field +given all possible Type fields. + + TYPE | SOURCE | DESCRIPTION + ________________________________________________________________________________________ + "default" | recipient user ID | A message with no association. + "request" | sender user ID | A channel request has been received, from Source. + "reset" | sender user ID | A channel reset has been received. + "confirm" | sender user ID | A channel request has been accepted. + "silent" | sender user ID | A message where the user should not be notified. + "e2e" | sender user ID | A reception of an E2E message. + "group" | group ID | A reception of a group chat message. + "endFT" | sender user ID | The last message sent confirming end of file transfer. + "groupRQ" | sender user ID | A request from Source to join a group chat. + todo iterate over this docstring, ensure descriptions/sources are + still accurate (they are from the old implementation + */ +@interface BindingsNotificationReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * ForMe determines whether this value is for the user. If it is +false, this report may be ignored. + */ +@property (nonatomic) BOOL forMe; +/** + * Type is the type of notification. The list can be seen + */ +@property (nonatomic) NSString* _Nonnull type; +/** + * Source is the source of the notification. + */ +@property (nonatomic) NSData* _Nullable source; +@end + /** * Progress is a public struct that represents the progress of an in-progress file transfer. @@ -1810,6 +1879,25 @@ Returns: */ FOUNDATION_EXPORT NSData* _Nullable BindingsGetIDFromContact(NSData* _Nullable marshaledContact, NSError* _Nullable* _Nullable error); +/** + * GetNotificationsReport parses the received notification data to determine which +notifications are for this user. // This returns the JSON-marshalled +NotificationReports. + +Parameters: + - e2eID - e2e object ID in the tracker + - notificationCSV - the notification data received from the + notifications' server. + - marshalledServices - the JSON-marshalled list of services the backend + keeps track of. Refer to Cmix.TrackServices for information about this. + +Returns: + - []byte - A JSON marshalled NotificationReports. Some NotificationReport's + within in this structure may have their NotificationReport.ForMe + set to false. These may be ignored. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetNotificationsReport(long e2eId, NSString* _Nullable notificationCSV, NSData* _Nullable marshalledServices, NSError* _Nullable* _Nullable error); + /** * GetPubkeyFromContact returns the DH public key in the [contact.Contact] object. @@ -2283,6 +2371,8 @@ FOUNDATION_EXPORT BOOL BindingsUpdateCommonErrors(NSString* _Nullable jsonFile, @class BindingsStopper; +@class BindingsTrackServicesCallback; + @class BindingsUdLookupCallback; @class BindingsUdNetworkStatus; @@ -2564,6 +2654,45 @@ registered listener. - (void)stop; @end +/** + * TrackServicesCallback is the callback for Cmix.TrackServices. +This will pass to the user a JSON-marshalled list of backend services. +If there was an error retrieving or marshalling the service list, +there is an error for the second parameter which will be non-null. + +Example JSON: + +[ + { + "Id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "Services": [ + { + "Identifier": null, + "Tag": "test", + "Metadata": null + } + ] + }, + { + "Id": "AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "Services": [ + { + "Identifier": null, + "Tag": "test", + "Metadata": null + } + ] + }, +] + */ +@interface BindingsTrackServicesCallback : NSObject <goSeqRefInterface, BindingsTrackServicesCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)marshalData err:(NSError* _Nullable)err; +@end + /** * UdLookupCallback contains the callback called by LookupUD that returns the contact that matches the passed in ID. 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 ad4d0f109edc52b1309a375c2bfea9a9b61764ec..2b925090d31ec9d29ff598919efa963e385b8603 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 40a89ee2ee4afde62d99dcdcac9ef77d09c7c663..313101ebfb224eb77a7b3e3b99459fab55b79c3c 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 @@ -33,6 +33,7 @@ @class BindingsGroupSendReport; @class BindingsMessage; @class BindingsNodeRegistrationReport; +@class BindingsNotificationReport; @class BindingsProgress; @class BindingsReceivedFile; @class BindingsReceptionIdentity; @@ -78,6 +79,8 @@ @class BindingsSingleUseResponse; @protocol BindingsStopper; @class BindingsStopper; +@protocol BindingsTrackServicesCallback; +@class BindingsTrackServicesCallback; @protocol BindingsUdLookupCallback; @class BindingsUdLookupCallback; @protocol BindingsUdNetworkStatus; @@ -196,6 +199,10 @@ Parameters: - (void)stop; @end +@protocol BindingsTrackServicesCallback <NSObject> +- (void)callback:(NSData* _Nullable)marshalData err:(NSError* _Nullable)err; +@end + @protocol BindingsUdLookupCallback <NSObject> - (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; @end @@ -552,6 +559,17 @@ If the network follower is running and this fails, the Cmix object will most likely be in an unrecoverable state and need to be trashed. */ - (BOOL)stopNetworkFollower:(NSError* _Nullable* _Nullable)error; +/** + * TrackServices will return via a callback the list of services the +backend keeps track of, which is formally referred to as a +[message.ServiceList]. This may be passed into other bindings call which +may need context on the available services for this client. + +Parameters: + - cb - A TrackServicesCallback, which will be passed the marshalled + message.ServiceList. + */ +- (void)trackServices:(id<BindingsTrackServicesCallback> _Nullable)cb; /** * WaitForNetwork will block until either the network is healthy or the passed timeout is reached. It will return true if the network is healthy. @@ -1406,6 +1424,57 @@ Cmix.GetNodeRegistrationStatus returns JSON marshalled. @property (nonatomic) long numberOfNodes; @end +/** + * NotificationReport is the bindings' representation for notifications for +this user. + +Example NotificationReport JSON: + +{ + "ForMe": true, + "Type": "e2e", + "Source": "dGVzdGVyMTIzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +} + +Given the Type, the Source value will have specific contextual meanings. +Below is a table that will define the contextual meaning of the Source field +given all possible Type fields. + + TYPE | SOURCE | DESCRIPTION + ________________________________________________________________________________________ + "default" | recipient user ID | A message with no association. + "request" | sender user ID | A channel request has been received, from Source. + "reset" | sender user ID | A channel reset has been received. + "confirm" | sender user ID | A channel request has been accepted. + "silent" | sender user ID | A message where the user should not be notified. + "e2e" | sender user ID | A reception of an E2E message. + "group" | group ID | A reception of a group chat message. + "endFT" | sender user ID | The last message sent confirming end of file transfer. + "groupRQ" | sender user ID | A request from Source to join a group chat. + todo iterate over this docstring, ensure descriptions/sources are + still accurate (they are from the old implementation + */ +@interface BindingsNotificationReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * ForMe determines whether this value is for the user. If it is +false, this report may be ignored. + */ +@property (nonatomic) BOOL forMe; +/** + * Type is the type of notification. The list can be seen + */ +@property (nonatomic) NSString* _Nonnull type; +/** + * Source is the source of the notification. + */ +@property (nonatomic) NSData* _Nullable source; +@end + /** * Progress is a public struct that represents the progress of an in-progress file transfer. @@ -1810,6 +1879,25 @@ Returns: */ FOUNDATION_EXPORT NSData* _Nullable BindingsGetIDFromContact(NSData* _Nullable marshaledContact, NSError* _Nullable* _Nullable error); +/** + * GetNotificationsReport parses the received notification data to determine which +notifications are for this user. // This returns the JSON-marshalled +NotificationReports. + +Parameters: + - e2eID - e2e object ID in the tracker + - notificationCSV - the notification data received from the + notifications' server. + - marshalledServices - the JSON-marshalled list of services the backend + keeps track of. Refer to Cmix.TrackServices for information about this. + +Returns: + - []byte - A JSON marshalled NotificationReports. Some NotificationReport's + within in this structure may have their NotificationReport.ForMe + set to false. These may be ignored. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetNotificationsReport(long e2eId, NSString* _Nullable notificationCSV, NSData* _Nullable marshalledServices, NSError* _Nullable* _Nullable error); + /** * GetPubkeyFromContact returns the DH public key in the [contact.Contact] object. @@ -2283,6 +2371,8 @@ FOUNDATION_EXPORT BOOL BindingsUpdateCommonErrors(NSString* _Nullable jsonFile, @class BindingsStopper; +@class BindingsTrackServicesCallback; + @class BindingsUdLookupCallback; @class BindingsUdNetworkStatus; @@ -2564,6 +2654,45 @@ registered listener. - (void)stop; @end +/** + * TrackServicesCallback is the callback for Cmix.TrackServices. +This will pass to the user a JSON-marshalled list of backend services. +If there was an error retrieving or marshalling the service list, +there is an error for the second parameter which will be non-null. + +Example JSON: + +[ + { + "Id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "Services": [ + { + "Identifier": null, + "Tag": "test", + "Metadata": null + } + ] + }, + { + "Id": "AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "Services": [ + { + "Identifier": null, + "Tag": "test", + "Metadata": null + } + ] + }, +] + */ +@interface BindingsTrackServicesCallback : NSObject <goSeqRefInterface, BindingsTrackServicesCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)marshalData err:(NSError* _Nullable)err; +@end + /** * UdLookupCallback contains the callback called by LookupUD that returns the contact that matches the passed in ID.