diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8721b27aaf9d670b4b38ef339dec7015b55316de..9e87f241d5ee8ea1c5511bdca11093bb0e0ce5c4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,18 +1,26 @@ stages: - test -package-tests: +test-package-macos: stage: test tags: - ios script: - - ./run-tests.sh + - ./run-tests.sh macos retry: 1 -examples-tests: +test-package-ios: stage: test tags: - ios script: - - ./run-tests.sh examples + - ./run-tests.sh ios + retry: 1 + +test-examples-ios: + stage: test + tags: + - ios + script: + - ./run-tests.sh examples-ios retry: 1 diff --git a/Frameworks/Bindings.txt b/Frameworks/Bindings.txt index a92bf6ab8e8d78359ec5e0545e6210bd808a8150..702c949d1dd03ac8030c0ef9c5a36af0c325f134 100644 --- a/Frameworks/Bindings.txt +++ b/Frameworks/Bindings.txt @@ -1,4 +1,4 @@ https://git.xx.network/elixxir/client/-/commit/9a44f79889f967704d60a43f1c24a945028afb06 go version go1.17.13 darwin/arm64 Xcode 13.4.1 Build version 13F100 -gomobile bind target: ios +gomobile bind target: ios,iossimulator,macos diff --git a/Frameworks/Bindings.xcframework/Info.plist b/Frameworks/Bindings.xcframework/Info.plist index 3c96df61083ca794226526858401b4539235d6ba..3d81013ba0ba606da4b42b6f3119f688c6d9b97d 100644 --- a/Frameworks/Bindings.xcframework/Info.plist +++ b/Frameworks/Bindings.xcframework/Info.plist @@ -19,6 +19,19 @@ <key>SupportedPlatformVariant</key> <string>simulator</string> </dict> + <dict> + <key>LibraryIdentifier</key> + <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>macos</string> + </dict> <dict> <key>LibraryIdentifier</key> <string>ios-arm64</string> 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 97e97af7174ec20d4d520130bf17d49444638fef..0ce0097a9af5e6db2577a9264a6ca65277b87a5f 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_x86_64-simulator/Bindings.framework/Versions/A/Bindings b/Frameworks/Bindings.xcframework/ios-arm64_x86_64-simulator/Bindings.framework/Versions/A/Bindings index 431f58beebd36b7f255ed716ac72175c60b0fd30..c302dc6cf19adf806e3a638565957629c1798bba 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/macos-arm64_x86_64/Bindings.framework/Bindings b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Bindings new file mode 120000 index 0000000000000000000000000000000000000000..55113b7838ed2ec628fd342ab36137a85788d9a7 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Bindings @@ -0,0 +1 @@ +Versions/Current/Bindings \ No newline at end of file diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Headers b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Headers new file mode 120000 index 0000000000000000000000000000000000000000..a177d2a6b92600696030834c319f5e1434f9ee6a --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Modules b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Modules new file mode 120000 index 0000000000000000000000000000000000000000..5736f3186e797b8b787748c9979d0fed3b0536c3 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Resources b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Resources new file mode 120000 index 0000000000000000000000000000000000000000..953ee36f3bb709faf58a351e0b33c353e337c0a2 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file 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 new file mode 100644 index 0000000000000000000000000000000000000000..ad4d0f109edc52b1309a375c2bfea9a9b61764ec Binary files /dev/null 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.h b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Bindings.h new file mode 100644 index 0000000000000000000000000000000000000000..8906a7da239705b790cb2bb64de92f806640cb38 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Bindings.h @@ -0,0 +1,13 @@ + +// Objective-C API for talking to the following Go packages +// +// gitlab.com/elixxir/client/bindings +// +// File is generated by gomobile bind. Do not edit. +#ifndef __Bindings_FRAMEWORK_H__ +#define __Bindings_FRAMEWORK_H__ + +#include "Bindings.objc.h" +#include "Universe.objc.h" + +#endif 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 new file mode 100644 index 0000000000000000000000000000000000000000..40a89ee2ee4afde62d99dcdcac9ef77d09c7c663 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Bindings.objc.h @@ -0,0 +1,2636 @@ +// Objective-C API for talking to gitlab.com/elixxir/client/bindings Go package. +// gobind -lang=objc gitlab.com/elixxir/client/bindings +// +// File is generated by gobind. Do not edit. + +#ifndef __Bindings_H__ +#define __Bindings_H__ + +@import Foundation; +#include "ref.h" +#include "Universe.objc.h" + + +@class BindingsAuthenticatedConnection; +@class BindingsBackup; +@class BindingsBackupReport; +@class BindingsBroadcastMessage; +@class BindingsBroadcastReport; +@class BindingsChannel; +@class BindingsChannelDef; +@class BindingsCmix; +@class BindingsConnection; +@class BindingsDummyTraffic; +@class BindingsE2ESendReport; +@class BindingsE2e; +@class BindingsEventReport; +@class BindingsFilePartTracker; +@class BindingsFileSend; +@class BindingsFileTransfer; +@class BindingsGroup; +@class BindingsGroupChat; +@class BindingsGroupReport; +@class BindingsGroupSendReport; +@class BindingsMessage; +@class BindingsNodeRegistrationReport; +@class BindingsProgress; +@class BindingsReceivedFile; +@class BindingsReceptionIdentity; +@class BindingsRestlikeMessage; +@class BindingsRoundsList; +@class BindingsSingleUseCallbackReport; +@class BindingsSingleUseResponseReport; +@class BindingsSingleUseSendReport; +@class BindingsUserDiscovery; +@protocol BindingsAuthCallbacks; +@class BindingsAuthCallbacks; +@protocol BindingsBroadcastListener; +@class BindingsBroadcastListener; +@protocol BindingsClientError; +@class BindingsClientError; +@protocol BindingsFileTransferReceiveProgressCallback; +@class BindingsFileTransferReceiveProgressCallback; +@protocol BindingsFileTransferSentProgressCallback; +@class BindingsFileTransferSentProgressCallback; +@protocol BindingsGroupChatProcessor; +@class BindingsGroupChatProcessor; +@protocol BindingsGroupRequest; +@class BindingsGroupRequest; +@protocol BindingsListener; +@class BindingsListener; +@protocol BindingsLogWriter; +@class BindingsLogWriter; +@protocol BindingsMessageDeliveryCallback; +@class BindingsMessageDeliveryCallback; +@protocol BindingsNetworkHealthCallback; +@class BindingsNetworkHealthCallback; +@protocol BindingsProcessor; +@class BindingsProcessor; +@protocol BindingsReceiveFileCallback; +@class BindingsReceiveFileCallback; +@protocol BindingsReporterFunc; +@class BindingsReporterFunc; +@protocol BindingsRestlikeCallback; +@class BindingsRestlikeCallback; +@protocol BindingsSingleUseCallback; +@class BindingsSingleUseCallback; +@protocol BindingsSingleUseResponse; +@class BindingsSingleUseResponse; +@protocol BindingsStopper; +@class BindingsStopper; +@protocol BindingsUdLookupCallback; +@class BindingsUdLookupCallback; +@protocol BindingsUdNetworkStatus; +@class BindingsUdNetworkStatus; +@protocol BindingsUdSearchCallback; +@class BindingsUdSearchCallback; +@protocol BindingsUpdateBackupFunc; +@class BindingsUpdateBackupFunc; + +@protocol BindingsAuthCallbacks <NSObject> +- (void)confirm:(NSData* _Nullable)contact receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +- (void)request:(NSData* _Nullable)contact receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +- (void)reset:(NSData* _Nullable)contact receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +@end + +@protocol BindingsBroadcastListener <NSObject> +- (void)callback:(NSData* _Nullable)p0 p1:(NSError* _Nullable)p1; +@end + +@protocol BindingsClientError <NSObject> +- (void)report:(NSString* _Nullable)source message:(NSString* _Nullable)message trace:(NSString* _Nullable)trace; +@end + +@protocol BindingsFileTransferReceiveProgressCallback <NSObject> +/** + * Callback is called when a file part is sent or an error occurs. + +Parameters: + - payload - the JSON marshalled bytes of a Progress object. + - t - tracker that allows the lookup of the status of any file part + - err - any errors that occurred during sending + */ +- (void)callback:(NSData* _Nullable)payload t:(BindingsFilePartTracker* _Nullable)t err:(NSError* _Nullable)err; +@end + +@protocol BindingsFileTransferSentProgressCallback <NSObject> +/** + * Callback is called when a file part is sent or an error occurs. + +Parameters: + - payload - the JSON marshalled bytes of a Progress object. + - t - tracker that allows the lookup of the status of any file part + - err - any errors that occurred during sending + */ +- (void)callback:(NSData* _Nullable)payload t:(BindingsFilePartTracker* _Nullable)t err:(NSError* _Nullable)err; +@end + +@protocol BindingsGroupChatProcessor <NSObject> +- (void)process:(NSData* _Nullable)decryptedMessage msg:(NSData* _Nullable)msg receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId err:(NSError* _Nullable)err; +- (NSString* _Nonnull)string; +@end + +@protocol BindingsGroupRequest <NSObject> +- (void)callback:(BindingsGroup* _Nullable)g; +@end + +@protocol BindingsListener <NSObject> +/** + * Hear is called to receive a message in the UI. + +Parameters: + - item - JSON marshalled Message object + */ +- (void)hear:(NSData* _Nullable)item; +/** + * Name returns a name; used for debugging. + */ +- (NSString* _Nonnull)name; +@end + +@protocol BindingsLogWriter <NSObject> +- (void)log:(NSString* _Nullable)p0; +@end + +@protocol BindingsMessageDeliveryCallback <NSObject> +- (void)eventCallback:(BOOL)delivered timedOut:(BOOL)timedOut roundResults:(NSData* _Nullable)roundResults; +@end + +@protocol BindingsNetworkHealthCallback <NSObject> +- (void)callback:(BOOL)p0; +@end + +@protocol BindingsProcessor <NSObject> +- (void)process:(NSData* _Nullable)message receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +- (NSString* _Nonnull)string; +@end + +@protocol BindingsReceiveFileCallback <NSObject> +/** + * Callback is called when a new file transfer is received. + +Parameters: + - payload - the JSON marshalled bytes of a ReceivedFile object. + - err - any errors that occurred during reception + */ +- (void)callback:(NSData* _Nullable)payload err:(NSError* _Nullable)err; +@end + +@protocol BindingsReporterFunc <NSObject> +- (void)report:(NSData* _Nullable)payload err:(NSError* _Nullable)err; +@end + +@protocol BindingsRestlikeCallback <NSObject> +- (void)callback:(NSData* _Nullable)p0 p1:(NSError* _Nullable)p1; +@end + +@protocol BindingsSingleUseCallback <NSObject> +- (void)callback:(NSData* _Nullable)callbackReport err:(NSError* _Nullable)err; +@end + +@protocol BindingsSingleUseResponse <NSObject> +- (void)callback:(NSData* _Nullable)responseReport err:(NSError* _Nullable)err; +@end + +@protocol BindingsStopper <NSObject> +- (void)stop; +@end + +@protocol BindingsUdLookupCallback <NSObject> +- (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; +@end + +@protocol BindingsUdNetworkStatus <NSObject> +/** + * UdNetworkStatus returns: +- int - a xxdk.Status int + */ +- (long)udNetworkStatus; +@end + +@protocol BindingsUdSearchCallback <NSObject> +- (void)callback:(NSData* _Nullable)contactListJSON err:(NSError* _Nullable)err; +@end + +@protocol BindingsUpdateBackupFunc <NSObject> +- (void)updateBackup:(NSData* _Nullable)encryptedBackup; +@end + +@interface BindingsAuthenticatedConnection : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field AuthenticatedConnection.Connection with unsupported type: gitlab.com/elixxir/client/bindings.Connection + +- (BOOL)close:(NSError* _Nullable* _Nullable)error; +- (long)getId; +- (NSData* _Nullable)getPartner; +- (BOOL)isAuthenticated; +- (BOOL)registerListener:(long)messageType newListener:(id<BindingsListener> _Nullable)newListener error:(NSError* _Nullable* _Nullable)error; +- (NSData* _Nullable)sendE2E:(long)mt payload:(NSData* _Nullable)payload error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Backup is a bindings-level struct encapsulating the backup.Backup +client object. + */ +@interface BindingsBackup : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * AddJson stores the argument within the Backup structure. + +Params + - json - JSON string + */ +- (void)addJson:(NSString* _Nullable)json; +/** + * IsBackupRunning returns true if the backup has been initialized and is +running. Returns false if it has been stopped. + */ +- (BOOL)isBackupRunning; +/** + * StopBackup stops the backup processes and deletes the user's password from +storage. To enable backups again, call InitializeBackup. + */ +- (BOOL)stopBackup:(NSError* _Nullable* _Nullable)error; +@end + +/** + * BackupReport is the bindings' representation of the return values of +NewCmixFromBackup. + +Example BackupReport: + { + "RestoredContacts": [ + "U4x/lrFkvxuXu59LtHLon1sUhPJSCcnZND6SugndnVID", + "15tNdkKbYXoMn58NO6VbDMDWFEyIhTWEGsvgcJsHWAgD" + ], + "Params": "" + } + */ +@interface BindingsBackupReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field BackupReport.RestoredContacts with unsupported type: []*gitlab.com/xx_network/primitives/id.ID + +/** + * The backup parameters found within the backup file + */ +@property (nonatomic) NSString* _Nonnull params; +@end + +/** + * BroadcastMessage is the bindings representation of a broadcast message. + +Example JSON: + {"RoundID":42, + "EphID":[0,0,0,0,0,0,24,61], + "Payload":"SGVsbG8sIGJyb2FkY2FzdCBmcmllbmRzIQ==" + } + */ +@interface BindingsBroadcastMessage : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field BroadcastMessage.BroadcastReport with unsupported type: gitlab.com/elixxir/client/bindings.BroadcastReport + +@property (nonatomic) NSData* _Nullable payload; +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * BroadcastReport is the bindings representation of the info on how a broadcast +message was sent + +Example JSON: + {"RoundID":42, + "EphID":[0,0,0,0,0,0,24,61] + } + */ +@interface BindingsBroadcastReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field BroadcastReport.RoundsList with unsupported type: gitlab.com/elixxir/client/bindings.RoundsList + +// skipped field BroadcastReport.EphID with unsupported type: gitlab.com/xx_network/primitives/id/ephemeral.Id + +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Channel is a bindings-level struct encapsulating the broadcast.Channel client +object. + */ +@interface BindingsChannel : NSObject <goSeqRefInterface, BindingsStopper> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * Broadcast sends a given payload over the broadcast channel using symmetric +broadcast. + +Returns: + - []byte - the JSON marshalled bytes of the BroadcastReport object, which + can be passed into Cmix.WaitForRoundResult to see if the broadcast + succeeded. + */ +- (NSData* _Nullable)broadcast:(NSData* _Nullable)payload error:(NSError* _Nullable* _Nullable)error; +/** + * BroadcastAsymmetric sends a given payload over the broadcast channel using +asymmetric broadcast. This mode of encryption requires a private key. + +Returns: + - []byte - the JSON marshalled bytes of the BroadcastReport object, which + can be passed into WaitForRoundResult to see if the broadcast succeeded. + */ +- (NSData* _Nullable)broadcastAsymmetric:(NSData* _Nullable)payload pk:(NSData* _Nullable)pk error:(NSError* _Nullable* _Nullable)error; +/** + * Get returns the result of calling json.Marshal on a ChannelDef based on the +underlying crypto broadcast.Channel. + */ +- (NSData* _Nullable)get:(NSError* _Nullable* _Nullable)error; +/** + * Listen registers a BroadcastListener for a given method. This allows users to +handle incoming broadcast messages. + +Parameters: + - l - BroadcastListener object + - method - int corresponding to broadcast.Method constant, 0 for symmetric + or 1 for asymmetric + */ +- (BOOL)listen:(id<BindingsBroadcastListener> _Nullable)l method:(long)method error:(NSError* _Nullable* _Nullable)error; +/** + * MaxAsymmetricPayloadSize returns the maximum possible payload size which can +be broadcast. + */ +- (long)maxAsymmetricPayloadSize; +/** + * MaxPayloadSize returns the maximum possible payload size which can be +broadcast. + */ +- (long)maxPayloadSize; +/** + * Stop stops the channel from listening for more messages. + */ +- (void)stop; +@end + +/** + * ChannelDef is the bindings representation of an elixxir/crypto +broadcast.Channel object. + +Example JSON: + { + "Name": "My broadcast channel", + "Description": "A broadcast channel for me to test things", + "Salt": "gpUqW7N22sffMXsvPLE7BA==", + "PubKey": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1DZ0NJUUN2YkZVckJKRFpqT3Y0Y0MvUHZZdXNvQkFtUTFkb3Znb044aHRuUjA2T3F3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0=" + } + */ +@interface BindingsChannelDef : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) NSString* _Nonnull name; +@property (nonatomic) NSString* _Nonnull description; +@property (nonatomic) NSData* _Nullable salt; +@property (nonatomic) NSData* _Nullable pubKey; +@end + +/** + * Cmix wraps the xxdk.Cmix struct, implementing additional functions to support +the bindings Cmix interface. + */ +@interface BindingsCmix : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * AddHealthCallback adds a callback that gets called whenever the network +health changes. Returns a registration ID that can be used to unregister. + */ +- (int64_t)addHealthCallback:(id<BindingsNetworkHealthCallback> _Nullable)nhc; +/** + * Connect performs auth key negotiation with the given recipient and returns a +Connection object for the newly created partner.Manager. + +This function is to be used sender-side and will block until the +partner.Manager is confirmed. + +Parameters: + - e2eId - ID of the E2E object in the e2e tracker + - recipientContact - marshalled contact.Contact object + - e2eParamsJSON - JSON marshalled byte of xxdk.E2EParams object + */ +- (BindingsConnection* _Nullable)connect:(long)e2eId recipientContact:(NSData* _Nullable)recipientContact e2eParamsJSON:(NSData* _Nullable)e2eParamsJSON error:(NSError* _Nullable* _Nullable)error; +- (BindingsAuthenticatedConnection* _Nullable)connectWithAuthentication:(long)e2eId recipientContact:(NSData* _Nullable)recipientContact e2eParamsJSON:(NSData* _Nullable)e2eParamsJSON error:(NSError* _Nullable* _Nullable)error; +/** + * GetID returns the ID for this Cmix in the cmixTracker. + */ +- (long)getID; +/** + * GetNodeRegistrationStatus returns the current state of node registration. + +Returns: + - []byte - A marshalled NodeRegistrationReport containing the number of + nodes the user is registered with and the number of nodes present in the + NDF. + - An error if it cannot get the node registration status. The most likely + cause is that the network is unhealthy. + */ +- (NSData* _Nullable)getNodeRegistrationStatus:(NSError* _Nullable* _Nullable)error; +/** + * GetReceptionRegistrationValidationSignature returns the signature provided by +the xx network. + */ +- (NSData* _Nullable)getReceptionRegistrationValidationSignature; +/** + * HasRunningProcessies checks if any background threads are running and returns +true if one or more are. + +This is meant to be used when NetworkFollowerStatus returns xxdk.Stopping. +Due to the handling of comms on iOS, where the OS can block indefinitely, it +may not enter the stopped state appropriately. This can be used instead. + */ +- (BOOL)hasRunningProcessies; +/** + * IsHealthy returns true if the network is read to be in a healthy state where +messages can be sent. + */ +- (BOOL)isHealthy; +/** + * MakeLegacyReceptionIdentity generates the legacy identity for receiving +messages. As with all legacy calls, this should primarily be used +for the xx messenger team. + */ +- (NSData* _Nullable)makeLegacyReceptionIdentity:(NSError* _Nullable* _Nullable)error; +/** + * MakeReceptionIdentity generates a new cryptographic identity for receiving +messages. + */ +- (NSData* _Nullable)makeReceptionIdentity:(NSError* _Nullable* _Nullable)error; +/** + * NetworkFollowerStatus gets the state of the network follower. It returns a +status with the following values: + Stopped - 0 + Running - 2000 + Stopping - 3000 + */ +- (long)networkFollowerStatus; +/** + * RegisterClientErrorCallback registers the callback to handle errors from the +long-running threads controlled by StartNetworkFollower and +StopNetworkFollower. + */ +- (void)registerClientErrorCallback:(id<BindingsClientError> _Nullable)clientError; +/** + * RemoveHealthCallback removes a health callback using its registration ID. + */ +- (void)removeHealthCallback:(int64_t)funcID; +/** + * StartNetworkFollower kicks off the tracking of the network. It starts long- +running network threads and returns an object for checking state and +stopping those threads. + +Call this when returning from sleep and close when going back to sleep. + +These threads may become a significant drain on battery when offline, ensure +they are stopped if there is no internet access. + +Threads Started: + - Network Follower (/network/follow.go) + tracks the network events and hands them off to workers for handling. + - Historical Round Retrieval (/network/rounds/historical.go) + retrieves data about rounds that are too old to be stored by the client. + - Message Retrieval Worker Group (/network/rounds/retrieve.go) + requests all messages in a given round from the gateway of the last + nodes. + - Message Handling Worker Group (/network/message/handle.go) + decrypts and partitions messages when signals via the Switchboard. + - Health Tracker (/network/health), + via the network instance, tracks the state of the network. + - Garbled Messages (/network/message/garbled.go) + can be signaled to check all recent messages that could be decoded. It + uses a message store on disk for persistence. + - Critical Messages (/network/message/critical.go) + ensures all protocol layer mandatory messages are sent. It uses a message + store on disk for persistence. + - KeyExchange Trigger (/keyExchange/trigger.go) + responds to sent rekeys and executes them. + - KeyExchange Confirm (/keyExchange/confirm.go) + responds to confirmations of successful rekey operations. + - Auth Callback (/auth/callback.go) + handles both auth confirm and requests. + */ +- (BOOL)startNetworkFollower:(long)timeoutMS error:(NSError* _Nullable* _Nullable)error; +/** + * StopNetworkFollower stops the network follower if it is running. It returns +an error if the follower is in the wrong state to stop or if it fails to stop +it. + +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; +/** + * WaitForNetwork will block until either the network is healthy or the passed +timeout is reached. It will return true if the network is healthy. + */ +- (BOOL)waitForNetwork:(long)timeoutMS; +/** + * WaitForRoundResult allows the caller to get notified if the rounds a message +was sent in successfully completed. Under the hood, this uses an API that +uses the internal round data, network historical round lookup, and waiting on +network events to determine what has (or will) occur. + +This function takes the marshaled send report to ensure a memory leak does +not occur as a result of both sides of the bindings holding a reference to +the same pointer. + +Parameters: + - roundList - JSON marshalled bytes of RoundsList or JSON of any send report + that inherits a [bindings.RoundsList] object + - mdc - callback that adheres to the MessageDeliveryCallback interface + - timeoutMS - timeout when the callback will return if no state update + occurs, in milliseconds + */ +- (BOOL)waitForRoundResult:(NSData* _Nullable)roundList mdc:(id<BindingsMessageDeliveryCallback> _Nullable)mdc timeoutMS:(long)timeoutMS error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Connection is the bindings' representation of a connect.Connection object +that can be tracked by ID. + */ +@interface BindingsConnection : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * Close deletes this Connection's partner.Manager and releases resources. + */ +- (BOOL)close:(NSError* _Nullable* _Nullable)error; +/** + * GetId returns the Connection ID. + */ +- (long)getId; +/** + * GetPartner returns the partner.Manager for this Connection. + */ +- (NSData* _Nullable)getPartner; +/** + * RegisterListener is used for E2E reception and allows for reading data sent +from the partner.Manager. + */ +- (BOOL)registerListener:(long)messageType newListener:(id<BindingsListener> _Nullable)newListener error:(NSError* _Nullable* _Nullable)error; +/** + * SendE2E is a wrapper for sending specifically to the Connection's +partner.Manager. + +Returns: + - []byte - the JSON marshalled bytes of the E2ESendReport object, which can + be passed into Cmix.WaitForRoundResult to see if the send succeeded. + */ +- (NSData* _Nullable)sendE2E:(long)mt payload:(NSData* _Nullable)payload error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * DummyTraffic is the bindings-layer dummy (or "cover") traffic manager. T +The manager can be used to set and get the status of the thread responsible for +sending dummy messages. + */ +@interface BindingsDummyTraffic : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +/** + * NewDummyTrafficManager creates a DummyTraffic manager and initialises the +dummy traffic sending thread. Note that the manager does not start sending +dummy traffic until true is passed into DummyTraffic.SetStatus. The time +duration between each sending operation and the amount of messages sent each +interval are randomly generated values with bounds defined by the given +parameters below. + +Parameters: + - cmixId - a Cmix object ID in the tracker. + - maxNumMessages - the upper bound of the random number of messages sent + each sending cycle. + - avgSendDeltaMS - the average duration, in milliseconds, to wait between + sends. + - randomRangeMS - the upper bound of the interval between sending cycles, in + milliseconds. Sends occur every avgSendDeltaMS +/- a random duration with + an upper bound of randomRangeMS. + */ +- (nullable instancetype)initManager:(long)cmixId maxNumMessages:(long)maxNumMessages avgSendDeltaMS:(long)avgSendDeltaMS randomRangeMS:(long)randomRangeMS; +/** + * GetStatus returns the current state of the DummyTraffic manager's sending +thread. Note that this function does not return the status set by the most +recent call to SetStatus. Instead, this call returns the current status of +the sending thread. This is due to the small delay that may occur between +calling SetStatus and the sending thread taking into effect that status +change. + +Returns: + - bool - Returns true if sending thread is sending dummy messages and false + if sending thread is paused/stopped and is not sending dummy messages. + */ +- (BOOL)getStatus; +/** + * SetStatus sets the state of the DummyTraffic manager's send thread by passing +in a boolean parameter. There may be a small delay in between this call and +the status of the sending thread to change accordingly. For example, passing +false into this call while the sending thread is currently sending messages +will not cancel nor halt the sending operation, but will pause the thread +once that operation has completed. + +Parameters: + - status - Input should be true if you want to send dummy messages and false + if you want to pause dummy messages. + +Returns: + - error - if the DummyTraffic.SetStatus is called too frequently, causing + the internal status channel to fill. + */ +- (BOOL)setStatus:(BOOL)status error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * E2ESendReport is the bindings' representation of the return values of +SendE2E. + +Example E2ESendReport: +{ +"Rounds": [ 1, 4, 9], +"MessageID": "iM34yCIr4Je8ZIzL9iAAG1UWAeDiHybxMTioMAaezvs=", +"Timestamp": 1661532254302612000, +"KeyResidue": "9q2/A69EAuFM1hFAT7Bzy5uGOQ4T6bPFF72h5PlgCWE=" +} + */ +@interface BindingsE2ESendReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field E2ESendReport.RoundsList with unsupported type: gitlab.com/elixxir/client/bindings.RoundsList + +@property (nonatomic) NSData* _Nullable messageID; +@property (nonatomic) int64_t timestamp; +@property (nonatomic) NSData* _Nullable keyResidue; +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * E2e wraps the xxdk.E2e, implementing additional functions to support the +bindings E2e interface. + */ +@interface BindingsE2e : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * AddPartnerCallback adds a new callback that overrides the generic auth +callback for the given partner ID. + +Parameters: + - partnerID - the marshalled bytes of the id.ID object. + */ +- (BOOL)addPartnerCallback:(NSData* _Nullable)partnerID cb:(id<BindingsAuthCallbacks> _Nullable)cb error:(NSError* _Nullable* _Nullable)error; +/** + * AddService adds a service for all partners of the given tag, which will call +back on the given processor. These can be sent to using the tag fields in the +Params object. + +Passing nil for the processor allows you to create a service that is never +called but will be visible by notifications. Processes added this way are +generally not end-to-end encrypted messages themselves, but other protocols +that piggyback on e2e relationships to start communication. + */ +- (BOOL)addService:(NSString* _Nullable)tag processor:(id<BindingsProcessor> _Nullable)processor error:(NSError* _Nullable* _Nullable)error; +/** + * CallAllReceivedRequests will iterate through all pending contact requests and +replay them on the callbacks. + */ +- (void)callAllReceivedRequests; +/** + * Confirm sends a confirmation for a received request. It can only be called +once. This both sends keying material to the other party and creates a +channel in the e2e handler, after which e2e messages can be sent to the +partner using E2e.SendE2E. + +The round the request is initially sent on will be returned, but the request +will be listed as a critical message, so the underlying cMix client will auto +resend it in the event of failure. + +A confirmation cannot be sent for a contact who has not sent a request or who +is already a partner. This can only be called once for a specific contact. +The confirmation sends as a critical message; if the round it sends on fails, +it will be auto resent by the cMix client. + +If the confirmation must be resent, use ReplayConfirm. + +Parameters: + - partnerContact - the marshalled bytes of the contact.Contact object. + +Returns: + - int64 - ID of the round (convert to uint64) + */ +- (BOOL)confirm:(NSData* _Nullable)partnerContact ret0_:(int64_t* _Nullable)ret0_ error:(NSError* _Nullable* _Nullable)error; +/** + * DeleteAllRequests clears all requests from auth storage. + */ +- (BOOL)deleteAllRequests:(NSError* _Nullable* _Nullable)error; +/** + * DeletePartnerCallback deletes the callback that overrides the generic +auth callback for the given partner ID. + +Parameters: + - partnerID - the marshalled bytes of the id.ID object. + */ +- (BOOL)deletePartnerCallback:(NSData* _Nullable)partnerID error:(NSError* _Nullable* _Nullable)error; +/** + * DeleteReceiveRequests clears all received requests from auth storage. + */ +- (BOOL)deleteReceiveRequests:(NSError* _Nullable* _Nullable)error; +/** + * DeleteRequest deletes sent or received requests for a specific partner ID. + +Parameters: + - partnerID - the marshalled bytes of the id.ID object. + */ +- (BOOL)deleteRequest:(NSData* _Nullable)partnerID error:(NSError* _Nullable* _Nullable)error; +/** + * DeleteSentRequests clears all sent requests from auth storage. + */ +- (BOOL)deleteSentRequests:(NSError* _Nullable* _Nullable)error; +/** + * FirstPartitionSize returns the max partition payload size for the first +payload. + */ +- (long)firstPartitionSize; +/** + * GetAllPartnerIDs returns a list of all partner IDs that the user has an E2E +relationship with. + +Returns: + - []byte - the marshalled bytes of []*id.ID. + */ +- (NSData* _Nullable)getAllPartnerIDs:(NSError* _Nullable* _Nullable)error; +/** + * GetContact returns a marshalled contact.Contact object for the E2e +ReceptionIdentity. + */ +- (NSData* _Nullable)getContact; +/** + * GetHistoricalDHPrivkey returns the user's marshalled historical DH private +key. + +Returns: + - []byte - the marshalled bytes of the cyclic.Int object. + */ +- (NSData* _Nullable)getHistoricalDHPrivkey:(NSError* _Nullable* _Nullable)error; +/** + * GetHistoricalDHPubkey returns the user's marshalled historical DH public key. + +Returns: + - []byte - the marshalled bytes of the cyclic.Int object. + */ +- (NSData* _Nullable)getHistoricalDHPubkey:(NSError* _Nullable* _Nullable)error; +/** + * GetID returns the ID for this E2e in the e2eTracker. + */ +- (long)getID; +/** + * GetReceivedRequest returns a contact if there is a received request for it. + +Parameters: + - partnerID - the marshalled bytes of the id.ID object. + +Returns: + - []byte - the marshalled bytes of the contact.Contact object. + */ +- (NSData* _Nullable)getReceivedRequest:(NSData* _Nullable)partnerID error:(NSError* _Nullable* _Nullable)error; +/** + * GetReceptionID returns the marshalled default IDs. + +Returns: + - []byte - the marshalled bytes of the id.ID object. + */ +- (NSData* _Nullable)getReceptionID; +/** + * GetUdAddressFromNdf retrieve the User Discovery's network address fom the +NDF. + */ +- (NSString* _Nonnull)getUdAddressFromNdf; +/** + * GetUdCertFromNdf retrieves the User Discovery's TLS certificate (in PEM +format) from the NDF. + */ +- (NSData* _Nullable)getUdCertFromNdf; +/** + * GetUdContactFromNdf assembles the User Discovery's contact file from the data +within the NDF. + +Returns + - []byte - A byte marshalled contact.Contact. + */ +- (NSData* _Nullable)getUdContactFromNdf:(NSError* _Nullable* _Nullable)error; +/** + * HasAuthenticatedChannel returns true if an authenticated channel with the +partner exists, otherwise returns false. + +Parameters: + - partnerId - the marshalled bytes of the id.ID object. + */ +- (BOOL)hasAuthenticatedChannel:(NSData* _Nullable)partnerId ret0_:(BOOL* _Nullable)ret0_ error:(NSError* _Nullable* _Nullable)error; +/** + * PartitionSize returns the partition payload size for the given payload index. +The first payload is index 0. + */ +- (long)partitionSize:(long)payloadIndex; +/** + * PayloadSize returns the max payload size for a partitionable E2E message. + */ +- (long)payloadSize; +/** + * RegisterListener registers a new listener. + +Parameters: + - senderId - the user ID who sends messages to this user that + this function will register a listener for. + - messageType - message type from the sender you want to listen for. + - newListener: A provider for a callback to hear a message. + Do not pass nil to this. + */ +- (BOOL)registerListener:(NSData* _Nullable)senderID messageType:(long)messageType newListener:(id<BindingsListener> _Nullable)newListener error:(NSError* _Nullable* _Nullable)error; +/** + * RemoveService removes all services for the given tag. + */ +- (BOOL)removeService:(NSString* _Nullable)tag error:(NSError* _Nullable* _Nullable)error; +/** + * ReplayConfirm resends a confirmation to the partner. It will fail to send if +the send relationship with the partner has already ratcheted. + +The confirmation sends as a critical message; if the round it sends on fails, +it will be auto resent by the cMix client. + +This will not be useful if either side has ratcheted. + +Parameters: + - partnerID - the marshalled bytes of the id.ID object. + +Returns: + - int64 - ID of the round (convert to uint64) + */ +- (BOOL)replayConfirm:(NSData* _Nullable)partnerID ret0_:(int64_t* _Nullable)ret0_ error:(NSError* _Nullable* _Nullable)error; +/** + * Request sends a contact request from the user identity in the imported E2e +structure to the passed contact, as well as the passed facts (it will error +if they are too long). + +The other party must accept the request by calling Confirm to be able to send +messages using E2e.SendE2E. When the other party does so, the "confirm" +callback will get called. + +The round the request is initially sent on will be returned, but the request +will be listed as a critical message, so the underlying cMix client will auto +resend it in the event of failure. + +A request cannot be sent for a contact who has already received a request or +who is already a partner. + +The request sends as a critical message, if the round it sends on fails, it +will be auto resent by the cMix client. + +Parameters: + - partnerContact - the marshalled bytes of the contact.Contact object. + - factsListJson - the JSON marshalled bytes of [fact.FactList]. + +Returns: + - int64 - ID of the round (convert to uint64) + */ +- (BOOL)request:(NSData* _Nullable)partnerContact factsListJson:(NSData* _Nullable)factsListJson ret0_:(int64_t* _Nullable)ret0_ error:(NSError* _Nullable* _Nullable)error; +/** + * Reset sends a contact reset request from the user identity in the imported +e2e structure to the passed contact, as well as the passed facts (it will +error if they are too long). + +This deletes all traces of the relationship with the partner from e2e and +create a new relationship from scratch. + +The round the reset is initially sent on will be returned, but the request +will be listed as a critical message, so the underlying cMix client will auto +resend it in the event of failure. + +A request cannot be sent for a contact who has already received a request or +who is already a partner. + +Parameters: + - partnerContact - the marshalled bytes of the contact.Contact object. + +Returns: + - int64 - ID of the round (convert to uint64) + */ +- (BOOL)reset:(NSData* _Nullable)partnerContact ret0_:(int64_t* _Nullable)ret0_ error:(NSError* _Nullable* _Nullable)error; +/** + * SecondPartitionSize returns the max partition payload size for all payloads +after the first payload. + */ +- (long)secondPartitionSize; +/** + * SendE2E send a message containing the payload to the recipient of the passed +message type, per the given parameters--encrypted with end-to-end encryption. + +Parameters: + - recipientId - the marshalled bytes of the id.ID object. + - e2eParams - the marshalled bytes of the e2e.Params object. + +Returns: + - []byte - the JSON marshalled bytes of the E2ESendReport object, which can + be passed into Cmix.WaitForRoundResult to see if the send succeeded. + */ +- (NSData* _Nullable)sendE2E:(long)messageType recipientId:(NSData* _Nullable)recipientId payload:(NSData* _Nullable)payload e2eParamsJSON:(NSData* _Nullable)e2eParamsJSON error:(NSError* _Nullable* _Nullable)error; +/** + * VerifyOwnership checks if the received ownership proof is valid. + +Parameters: + - receivedContact, verifiedContact - the marshalled bytes of the + contact.Contact object. + - e2eId - ID of the e2e handler + */ +- (BOOL)verifyOwnership:(NSData* _Nullable)receivedContact verifiedContact:(NSData* _Nullable)verifiedContact e2eId:(long)e2eId ret0_:(BOOL* _Nullable)ret0_ error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * EventReport is a public struct which represents the contents of an event +report. + +Example JSON: + { + "Priority":1, + "Category":"Test Events", + "EventType":"Ping", + "Details":"This is an example of an event report" + } + */ +@interface BindingsEventReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) long priority; +@property (nonatomic) NSString* _Nonnull category; +@property (nonatomic) NSString* _Nonnull eventType; +@property (nonatomic) NSString* _Nonnull details; +@end + +/** + * FilePartTracker contains the fileTransfer.FilePartTracker. + */ +@interface BindingsFilePartTracker : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * GetNumParts returns the total number of file parts in the transfer. + */ +- (long)getNumParts; +/** + * GetPartStatus returns the status of the file part with the given part number. + +The possible values for the status are: + - 0 < Part does not exist + - 0 = unsent + - 1 = arrived (sender has sent a part, and it has arrived) + - 2 = received (receiver has received a part) + */ +- (long)getPartStatus:(long)partNum; +@end + +/** + * FileSend is a public struct that contains the file contents and its name, +type, and preview. + { + "Name":"testfile.txt", + "Type":"text file", + "Preview":"aXQncyBtZSBhIHByZXZpZXc=", + "Contents":"VGhpcyBpcyB0aGUgZnVsbCBjb250ZW50cyBvZiB0aGUgZmlsZSBpbiBieXRlcw==" + } + */ +@interface BindingsFileSend : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) NSString* _Nonnull name; +@property (nonatomic) NSString* _Nonnull type; +@property (nonatomic) NSData* _Nullable preview; +@property (nonatomic) NSData* _Nullable contents; +@end + +/** + * FileTransfer object is a bindings-layer struct which wraps a +fileTransfer.FileTransfer interface. + */ +@interface BindingsFileTransfer : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * CloseSend deletes a file from the internal storage once a transfer has +completed or reached the retry limit. Returns an error if the transfer has +not run out of retries. + +This function should be called once a transfer completes or errors out (as +reported by the progress callback). + +Parameters: + - tidBytes - file transfer ID + */ +- (BOOL)closeSend:(NSData* _Nullable)tidBytes error:(NSError* _Nullable* _Nullable)error; +/** + * MaxFileNameLen returns the max number of bytes allowed for a file name. + */ +- (long)maxFileNameLen; +/** + * MaxFileSize returns the max number of bytes allowed for a file. + */ +- (long)maxFileSize; +/** + * MaxFileTypeLen returns the max number of bytes allowed for a file type. + */ +- (long)maxFileTypeLen; +/** + * MaxPreviewSize returns the max number of bytes allowed for a file preview. + */ +- (long)maxPreviewSize; +/** + * Receive returns the full file on the completion of the transfer. It deletes +internal references to the data and unregisters any attached progress +callbacks. Returns an error if the transfer is not complete, the full file +cannot be verified, or if the transfer cannot be found. + +Receive can only be called once the progress callback returns that the +file transfer is complete. + +Parameters: + - tidBytes - file transfer ID + */ +- (NSData* _Nullable)receive:(NSData* _Nullable)tidBytes error:(NSError* _Nullable* _Nullable)error; +/** + * RegisterReceivedProgressCallback allows for the registration of a callback to +track the progress of an individual received file transfer. + +This should be done when a new transfer is received on the ReceiveCallback. + +Parameters: + - tidBytes - file transfer ID + - callback - callback that reports file reception progress + - period - duration to wait between progress callbacks triggering + */ +- (BOOL)registerReceivedProgressCallback:(NSData* _Nullable)tidBytes callback:(id<BindingsFileTransferReceiveProgressCallback> _Nullable)callback period:(NSString* _Nullable)period error:(NSError* _Nullable* _Nullable)error; +/** + * RegisterSentProgressCallback allows for the registration of a callback to +track the progress of an individual sent file transfer. + +SentProgressCallback is auto registered on Send; this function should be +called when resuming clients or registering extra callbacks. + +Parameters: + - tidBytes - file transfer ID + - callback - callback that reports file reception progress + - period - duration to wait between progress callbacks triggering + */ +- (BOOL)registerSentProgressCallback:(NSData* _Nullable)tidBytes callback:(id<BindingsFileTransferSentProgressCallback> _Nullable)callback period:(NSString* _Nullable)period error:(NSError* _Nullable* _Nullable)error; +/** + * Send is the bindings-level function for sending a file. + +Parameters: + - payload - JSON marshalled FileSend + - recipientID - marshalled recipient id.ID + - retry - number of retries allowed + - callback - callback that reports file sending progress + - period - duration to wait between progress callbacks triggering + +Returns: + - []byte - unique file transfer ID + */ +- (NSData* _Nullable)send:(NSData* _Nullable)payload recipientID:(NSData* _Nullable)recipientID retry:(float)retry callback:(id<BindingsFileTransferSentProgressCallback> _Nullable)callback period:(NSString* _Nullable)period error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Group structure contains the identifying and membership information of a +group chat. + */ +@interface BindingsGroup : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * GetCreatedMS returns the time the group was created in milliseconds. This is +also the time the group requests were sent. + */ +- (int64_t)getCreatedMS; +/** + * GetCreatedNano returns the time the group was created in nanoseconds. This is +also the time the group requests were sent. + */ +- (int64_t)getCreatedNano; +/** + * GetID return the 33-byte unique group ID. This represents the id.ID object. + */ +- (NSData* _Nullable)getID; +/** + * GetInitMessage returns initial message sent with the group request. + */ +- (NSData* _Nullable)getInitMessage; +/** + * GetMembership retrieves a list of group members. The list is in order; +the first contact is the leader/creator of the group. +All subsequent members are ordered by their ID. + +Returns: + - []byte - JSON marshalled [group.Membership], which is an array of + [group.Member]. + +Example JSON [group.Membership] return: + [ + { + "ID": "U4x/lrFkvxuXu59LtHLon1sUhPJSCcnZND6SugndnVID", + "DhKey": { + "Value": 3534334367214237261, + "Fingerprint": 16801541511233098363 + } + }, + { + "ID": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "DhKey": { + "Value": 7497468244883513247, + "Fingerprint": 16801541511233098363 + } + } + ] + */ +- (NSData* _Nullable)getMembership:(NSError* _Nullable* _Nullable)error; +/** + * GetName returns the name set by the user for the group. + */ +- (NSData* _Nullable)getName; +/** + * GetTrackedID returns the tracked ID of the Group object. This is used by the +backend tracker. + */ +- (long)getTrackedID; +/** + * Serialize serializes the Group. + */ +- (NSData* _Nullable)serialize; +@end + +/** + * GroupChat is a binding-layer group chat manager. + */ +@interface BindingsGroupChat : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +/** + * NewGroupChat creates a bindings-layer group chat manager. + +Parameters: + - e2eID - e2e object ID in the tracker. + - requestFunc - a callback to handle group chat requests. + - processor - the group chat message processor. + */ +- (nullable instancetype)init:(long)e2eID requestFunc:(id<BindingsGroupRequest> _Nullable)requestFunc processor:(id<BindingsGroupChatProcessor> _Nullable)processor; +/** + * GetGroup returns the group with the group ID. If no group exists, then the +error "failed to find group" is returned. + +Parameters: + - groupId - The byte data representing a group ID (a byte marshalled id.ID). + This can be pulled from a marshalled GroupReport. +Returns: + - Group - The bindings-layer representation of a group. + */ +- (BindingsGroup* _Nullable)getGroup:(NSData* _Nullable)groupId error:(NSError* _Nullable* _Nullable)error; +/** + * GetGroups returns a list of group IDs that the user is a member of. + +Returns: + - []byte - a JSON marshalled []*id.ID representing all group ID's. + */ +- (NSData* _Nullable)getGroups:(NSError* _Nullable* _Nullable)error; +/** + * JoinGroup allows a user to join a group when a request is received. +If an error is returned, handle it properly first; you may then retry later +with the same trackedGroupId. + +Parameters: + - trackedGroupId - the ID to retrieve the Group object within the backend's + tracking system. This is received by GroupRequest.Callback. + */ +- (BOOL)joinGroup:(long)trackedGroupId error:(NSError* _Nullable* _Nullable)error; +/** + * LeaveGroup deletes a group so a user no longer has access. + +Parameters: + - groupId - the byte data representing a group ID. + This can be pulled from a marshalled GroupReport. + */ +- (BOOL)leaveGroup:(NSData* _Nullable)groupId error:(NSError* _Nullable* _Nullable)error; +/** + * MakeGroup creates a new Group and sends a group request to all members in the +group. + +Parameters: + - membershipBytes - the JSON marshalled list of []*id.ID; it contains the + IDs of members the user wants to add to the group. + - message - the initial message sent to all members in the group. This is an + optional parameter and may be nil. + - name - the name of the group decided by the creator. This is an optional + parameter and may be nil. If nil the group will be assigned the default + name. + +Returns: + - []byte - the JSON marshalled bytes of the GroupReport object, which can be + passed into Cmix.WaitForRoundResult to see if the group request message + send succeeded. + */ +- (NSData* _Nullable)makeGroup:(NSData* _Nullable)membershipBytes message:(NSData* _Nullable)message name:(NSData* _Nullable)name error:(NSError* _Nullable* _Nullable)error; +/** + * NumGroups returns the number of groups the user is a part of. + */ +- (long)numGroups; +/** + * ResendRequest resends a group request to all members in the group. + +Parameters: + - groupId - a byte representation of a group's ID. + This can be found in the report returned by GroupChat.MakeGroup. + +Returns: + - []byte - the JSON marshalled bytes of the GroupReport object, which can be + passed into WaitForRoundResult to see if the group request message send + succeeded. + */ +- (NSData* _Nullable)resendRequest:(NSData* _Nullable)groupId error:(NSError* _Nullable* _Nullable)error; +/** + * Send is the bindings-level function for sending to a group. + +Parameters: + - groupId - the byte data representing a group ID. This can be pulled from + marshalled GroupReport. + - message - the message that the user wishes to send to the group. + - tag - the tag associated with the message. This tag may be empty. + +Returns: + - []byte - the JSON marshalled bytes of the GroupSendReport object, which + can be passed into Cmix.WaitForRoundResult to see if the group message + send succeeded. + */ +- (NSData* _Nullable)send:(NSData* _Nullable)groupId message:(NSData* _Nullable)message tag:(NSString* _Nullable)tag error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * GroupReport is returned when creating a new group and contains the ID of +the group, a list of rounds that the group requests were sent on, and the +status of the send operation. + */ +@interface BindingsGroupReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) NSData* _Nullable id_; +// skipped field GroupReport.RoundsList with unsupported type: gitlab.com/elixxir/client/bindings.RoundsList + +@property (nonatomic) long status; +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * GroupSendReport is returned when sending a group message. It contains the +round ID sent on and the timestamp of the send operation. + */ +@interface BindingsGroupSendReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field GroupSendReport.RoundsList with unsupported type: gitlab.com/elixxir/client/bindings.RoundsList + +@property (nonatomic) int64_t timestamp; +@property (nonatomic) NSData* _Nullable messageID; +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Message is the bindings' representation of a receive.Message. + +JSON example: + { + "MessageType":1, + "ID":"EB/70R5HYEw5htZ4Hg9ondrn3+cAc/lH2G0mjQMja3w=", + "Payload":"7TzZKgNphT5UooNM7mDSwtVcIs8AIu4vMKm4ld6GSR8YX5GrHirixUBAejmsgdroRJyo06TkIVef7UM9FN8YfQ==", + "Sender":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "RecipientID":"amFrZXh4MzYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "EphemeralID":17,"Timestamp":1653580439357351000, + "Encrypted":false, + "RoundId":19 + } + */ +@interface BindingsMessage : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) long messageType; +@property (nonatomic) NSData* _Nullable id_; +@property (nonatomic) NSData* _Nullable payload; +@property (nonatomic) NSData* _Nullable sender; +@property (nonatomic) NSData* _Nullable recipientID; +@property (nonatomic) int64_t ephemeralID; +@property (nonatomic) int64_t timestamp; +@property (nonatomic) BOOL encrypted; +@property (nonatomic) long roundId; +@end + +/** + * NodeRegistrationReport is the report structure which +Cmix.GetNodeRegistrationStatus returns JSON marshalled. + */ +@interface BindingsNodeRegistrationReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) long numberOfNodesRegistered; +@property (nonatomic) long numberOfNodes; +@end + +/** + * Progress is a public struct that represents the progress of an in-progress +file transfer. + +Example JSON: + { + "Completed":false, + "Transmitted":128, + "Total":2048, + "Err":null + } + */ +@interface BindingsProgress : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) BOOL completed; +@property (nonatomic) long transmitted; +@property (nonatomic) long total; +@property (nonatomic) NSError* _Nullable err; +@end + +/** + * ReceivedFile is a public struct that contains the metadata of a new file +transfer. + +Example JSON: + { + "TransferID":"B4Z9cwU18beRoGbk5xBjbcd5Ryi9ZUFA2UBvi8FOHWo=", + "SenderID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "Preview":"aXQncyBtZSBhIHByZXZpZXc=", + "Name":"testfile.txt", + "Type":"text file", + "Size":2048 + } + */ +@interface BindingsReceivedFile : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) NSData* _Nullable transferID; +@property (nonatomic) NSData* _Nullable senderID; +@property (nonatomic) NSData* _Nullable preview; +@property (nonatomic) NSString* _Nonnull name; +@property (nonatomic) NSString* _Nonnull type; +@property (nonatomic) long size; +@end + +/** + * ReceptionIdentity struct. + +JSON example: + { + "ID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "RSAPrivatePem":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBNU15dTdhYjBJOS9UL1BFUUxtd2x3ejZHV3FjMUNYemVIVXhoVEc4bmg1WWRWSXMxCmJ2THpBVjNOMDJxdXN6K2s4TVFEWjBtejMzdkswUmhPczZIY0NUSFdzTEpXRkE5WWpzWWlCRi9qTDd1bmd1ckIKL2tvK1JJSnNrWGFWaEZaazRGdERoRXhTNWY4RnR0Qmk1NmNLZmdJQlVKT3ozZi9qQllTMkxzMlJ6cWV5YXM3SApjV2RaME9TclBTT3BiYlViU1FPbS9LWnlweGZHU21yZ2oxRUZuU1dZZ2xGZTdUOTRPbHF5MG14QTV5clVXbHorCk9sK3hHbXpCNUp4WUFSMU9oMFQrQTk4RWMrTUZHNm43L1MraDdzRDgybGRnVnJmbStFTzRCdmFKeTRESGZGMWgKNnp6QnVnY25NUVFGc0dLeDFYWC9COTVMdUpPVjdyeXlDbzZGbHdJREFRQUJBb0lCQVFDaUh6OGNlcDZvQk9RTAphUzBVRitHeU5VMnlVcVRNTWtTWThoUkh1c09CMmFheXoybHZVb3RLUHBPbjZRSWRWVTJrcE4vY2dtY0lSb2x5CkhBMDRUOHJBWVNaRlVqaVlRajkzKzRFREpJYXd2Z0YyVEs1bFoyb3oxVTdreStncU82V0RMR2Z0Q0wvODVQWEIKa210aXhnUXpRV3g1RWcvemtHdm03eURBalQxeDloNytsRjJwNFlBam5kT2xTS0dmQjFZeTR1RXBQd0kwc1lWdgpKQWc0MEFxbllZUmt4emJPbmQxWGNjdEJFN2Z1VDdrWXhoeSs3WXYrUTJwVy9BYmh6NGlHOEY1MW9GMGZwV0czCmlISDhsVXZFTkp2SUZEVHZ0UEpESlFZalBRN3lUbGlGZUdrMXZUQkcyQkpQNExzVzhpbDZOeUFuRktaY1hOQ24KeHVCendiSlJBb0dCQVBUK0dGTVJGRHRHZVl6NmwzZmg3UjJ0MlhrMysvUmpvR3BDUWREWDhYNERqR1pVd1RGVQpOS2tQTTNjS29ia2RBYlBDb3FpL0tOOVBibk9QVlZ3R3JkSE9vSnNibFVHYmJGamFTUzJQMFZnNUVhTC9rT2dUCmxMMUdoVFpIUWk1VUlMM0p4M1Z3T0ZRQ3RQOU1UQlQ0UEQvcEFLbDg3VTJXN3JTY1dGV1ZGbFNkQW9HQkFPOFUKVmhHWkRpVGFKTWVtSGZIdVYrNmtzaUlsam9aUVVzeGpmTGNMZ2NjV2RmTHBqS0ZWTzJNN3NqcEJEZ0w4NmFnegorVk14ZkQzZ1l0SmNWN01aMVcwNlZ6TlNVTHh3a1dRY1hXUWdDaXc5elpyYlhCUmZRNUVjMFBlblVoWWVwVzF5CkpkTC8rSlpQeDJxSzVrQytiWU5EdmxlNWdpcjlDSGVzTlR5enVyckRBb0dCQUl0cTJnN1RaazhCSVFUUVNrZ24Kb3BkRUtzRW4wZExXcXlBdENtVTlyaWpHL2l2eHlXczMveXZDQWNpWm5VVEp0QUZISHVlbXVTeXplQ2g5QmRkegoyWkRPNUdqQVBxVHlQS3NudFlNZkY4UDczZ1NES1VSWWVFbHFDejdET0c5QzRzcitPK3FoN1B3cCtqUmFoK1ZiCkNuWllNMDlBVDQ3YStJYUJmbWRkaXpLbEFvR0JBSmo1dkRDNmJIQnNISWlhNUNJL1RZaG5YWXUzMkVCYytQM0sKMHF3VThzOCtzZTNpUHBla2Y4RjVHd3RuUU4zc2tsMk1GQWFGYldmeVFZazBpUEVTb0p1cGJzNXA1enNNRkJ1bwpncUZrVnQ0RUZhRDJweTVwM2tQbDJsZjhlZXVwWkZScGE0WmRQdVIrMjZ4eWYrNEJhdlZJeld3NFNPL1V4Q3crCnhqbTNEczRkQW9HQWREL0VOa1BjU004c1BCM3JSWW9MQ2twcUV2U0MzbVZSbjNJd3c1WFAwcDRRVndhRmR1ckMKYUhtSE1EekNrNEUvb0haQVhFdGZ2S2tRaUI4MXVYM2c1aVo4amdYUVhXUHRteTVIcVVhcWJYUTlENkxWc3B0egpKL3R4SWJLMXp5c1o2bk9IY1VoUUwyVVF6SlBBRThZNDdjYzVzTThEN3kwZjJ0QURTQUZNMmN3PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==", + "Salt":"4kk02v0NIcGtlobZ/xkxqWz8uH/ams/gjvQm14QT0dI=", + "DHKeyPrivate":"eyJWYWx1ZSI6NDU2MDgzOTEzMjA0OTIyODA5Njg2MDI3MzQ0MzM3OTA0MzAyODYwMjM2NDk2NDM5NDI4NTcxMTMwNDMzOTQwMzgyMTIyMjY4OTQzNTMyMjIyMzc1MTkzNTEzMjU4MjA4MDA0NTczMDY4MjEwNzg2NDI5NjA1MjA0OTA3MjI2ODI5OTc3NTczMDkxODY0NTY3NDExMDExNjQxNCwiRmluZ2VycHJpbnQiOjE2ODAxNTQxNTExMjMzMDk4MzYzfQ==" + "E2eGrp": "eyJnZW4iOiIyIiwicHJpbWUiOiJlMmVlOTgzZDAzMWRjMWRiNmYxYTdhNjdkZjBlOWE4ZTU1NjFkYjhlOGQ0OTQxMzM5NGMwNDliN2E4YWNjZWRjMjk4NzA4ZjEyMTk1MWQ5Y2Y5MjBlYzVkMTQ2NzI3YWE0YWU1MzViMDkyMmM2ODhiNTViM2RkMmFlZGY2YzAxYzk0NzY0ZGFiOTM3OTM1YWE4M2JlMzZlNjc3NjA3MTNhYjQ0YTYzMzdjMjBlNzg2MTU3NWU3NDVkMzFmOGI5ZTlhZDg0MTIxMThjNjJhM2UyZTI5ZGY0NmIwODY0ZDBjOTUxYzM5NGE1Y2JiZGM2YWRjNzE4ZGQyYTNlMDQxMDIzZGJiNWFiMjNlYmI0NzQyZGU5YzE2ODdiNWIzNGZhNDhjMzUyMTYzMmM0YTUzMGU4ZmZiMWJjNTFkYWRkZjQ1M2IwYjI3MTdjMmJjNjY2OWVkNzZiNGJkZDVjOWZmNTU4ZTg4ZjI2ZTU3ODUzMDJiZWRiY2EyM2VhYzVhY2U5MjA5NmVlOGE2MDY0MmZiNjFlOGYzZDI0OTkwYjhjYjEyZWU0NDhlZWY3OGUxODRjNzI0MmRkMTYxYzc3MzhmMzJiZjI5YTg0MTY5ODk3ODgyNWI0MTExYjRiYzNlMWUxOTg0NTUwOTU5NTgzMzNkNzc2ZDhiMmJlZWVkM2ExYTFhMjIxYTZlMzdlNjY0YTY0YjgzOTgxYzQ2ZmZkZGMxYTQ1ZTNkNTIxMWFhZjhiZmJjMDcyNzY4YzRmNTBkN2Q3ODAzZDJkNGYyNzhkZTgwMTRhNDczMjM2MzFkN2UwNjRkZTgxYzBjNmJmYTQzZWYwZTY5OTg4NjBmMTM5MGI1ZDNmZWFjYWYxNjk2MDE1Y2I3OWMzZjljMmQ5M2Q5NjExMjBjZDBlNWYxMmNiYjY4N2VhYjA0NTI0MWY5Njc4OWMzOGU4OWQ3OTYxMzhlNjMxOWJlNjJlMzVkODdiMTA0OGNhMjhiZTM4OWI1NzVlOTk0ZGNhNzU1NDcxNTg0YTA5ZWM3MjM3NDJkYzM1ODczODQ3YWVmNDlmNjZlNDM4NzMifQ==" +} + */ +@interface BindingsReceptionIdentity : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) NSData* _Nullable id_; +@property (nonatomic) NSData* _Nullable rsaPrivatePem; +@property (nonatomic) NSData* _Nullable salt; +@property (nonatomic) NSData* _Nullable dhKeyPrivate; +@property (nonatomic) NSData* _Nullable e2eGrp; +@end + +/** + * RestlikeMessage is the bindings' representation of a restlike.Message + +JSON example: + { + "Version":1, + "Headers":"Y29udGVudHM6YXBwbGljYXRpb24vanNvbg==", + "Content":"VGhpcyBpcyBhIHJlc3RsaWtlIG1lc3NhZ2U=", + "Method":2, + "URI":"xx://CmixRestlike/rest", + "Error":"" + } + */ +@interface BindingsRestlikeMessage : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field RestlikeMessage.Version with unsupported type: uint32 + +@property (nonatomic) NSData* _Nullable headers; +@property (nonatomic) NSData* _Nullable content; +@property (nonatomic) long method; +@property (nonatomic) NSString* _Nonnull uri; +@property (nonatomic) NSString* _Nonnull error; +@end + +/** + * RoundsList contains a list of round IDs. + +Example marshalled roundList object: + [1001,1003,1006] + */ +@interface BindingsRoundsList : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field RoundsList.Rounds with unsupported type: []uint64 + +/** + * Marshal JSON marshals the RoundsList. + */ +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * SingleUseCallbackReport is the bindings-layer struct used to represent +single -use messages received by a callback passed into single.Listen. + +JSON example: + { + "Rounds":[1,5,9], + "Payload":"rSuPD35ELWwm5KTR9ViKIz/r1YGRgXIl5792SF8o8piZzN6sT4Liq4rUU/nfOPvQEjbfWNh/NYxdJ72VctDnWw==", + "Partner":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "EphID":1655533, + "ReceptionID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD"} + } + */ +@interface BindingsSingleUseCallbackReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field SingleUseCallbackReport.RoundsList with unsupported type: gitlab.com/elixxir/client/bindings.RoundsList + +@property (nonatomic) NSData* _Nullable payload; +// skipped field SingleUseCallbackReport.Partner with unsupported type: *gitlab.com/xx_network/primitives/id.ID + +@property (nonatomic) int64_t ephID; +// skipped field SingleUseCallbackReport.ReceptionID with unsupported type: *gitlab.com/xx_network/primitives/id.ID + +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * SingleUseResponseReport is the bindings-layer struct used to represent +information passed to the single.Response callback interface in response to +single.TransmitRequest. + +JSON example: + { + "Rounds":[1,5,9], + "Payload":"rSuPD35ELWwm5KTR9ViKIz/r1YGRgXIl5792SF8o8piZzN6sT4Liq4rUU/nfOPvQEjbfWNh/NYxdJ72VctDnWw==", + "EphID":1655533, + "ReceptionID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD"}, + "Err":"", + } + */ +@interface BindingsSingleUseResponseReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field SingleUseResponseReport.RoundsList with unsupported type: gitlab.com/elixxir/client/bindings.RoundsList + +@property (nonatomic) NSData* _Nullable payload; +// skipped field SingleUseResponseReport.ReceptionID with unsupported type: *gitlab.com/xx_network/primitives/id.ID + +@property (nonatomic) int64_t ephID; +@property (nonatomic) NSError* _Nullable err; +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * SingleUseSendReport is the bindings-layer struct used to represent +information returned by single.TransmitRequest. + +JSON example: + { + "Rounds":[1,5,9], + "EphID":1655533, + "ReceptionID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD"} + } + */ +@interface BindingsSingleUseSendReport : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field SingleUseSendReport.RoundsList with unsupported type: gitlab.com/elixxir/client/bindings.RoundsList + +// skipped field SingleUseSendReport.ReceptionID with unsupported type: *gitlab.com/xx_network/primitives/id.ID + +@property (nonatomic) int64_t ephID; +- (NSData* _Nullable)marshal:(NSError* _Nullable* _Nullable)error; +@end + +/** + * UserDiscovery is a bindings-layer struct that wraps an ud.Manager interface. + */ +@interface BindingsUserDiscovery : NSObject <goSeqRefInterface> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * ConfirmFact confirms a fact first registered via SendRegisterFact. The +confirmation ID comes from SendRegisterFact while the code will come over the +associated communications system. + */ +- (BOOL)confirmFact:(NSString* _Nullable)confirmationID code:(NSString* _Nullable)code error:(NSError* _Nullable* _Nullable)error; +/** + * GetContact returns the marshalled bytes of the contact.Contact for UD as +retrieved from the NDF. + */ +- (NSData* _Nullable)getContact:(NSError* _Nullable* _Nullable)error; +/** + * GetFacts returns a JSON marshalled list of [fact.Fact] objects that exist +within the Store's registeredFacts map. + */ +- (NSData* _Nullable)getFacts; +/** + * GetID returns the udTracker ID for the UserDiscovery object. + */ +- (long)getID; +/** + * PermanentDeleteAccount removes the username associated with this user from +the UD service. This will only take a username type fact, and the fact must +be associated with this user. + +Parameters: + - factJson - a JSON marshalled [fact.Fact] + */ +- (BOOL)permanentDeleteAccount:(NSData* _Nullable)factJson error:(NSError* _Nullable* _Nullable)error; +/** + * RemoveFact removes a previously confirmed fact. This will fail if the fact +passed in is not UD service does not associate this fact with this user. + +Parameters: + - factJson - a JSON marshalled [fact.Fact] + */ +- (BOOL)removeFact:(NSData* _Nullable)factJson error:(NSError* _Nullable* _Nullable)error; +/** + * SendRegisterFact adds a fact for the user to user discovery. Will only +succeed if the user is already registered and the system does not have the +fact currently registered for any user. + +This does not complete the fact registration process, it returns a +confirmation ID instead. Over the communications system the fact is +associated with, a code will be sent. This confirmation ID needs to be called +along with the code to finalize the fact. + +Parameters: + - factJson - a JSON marshalled [fact.Fact] + */ +- (NSString* _Nonnull)sendRegisterFact:(NSData* _Nullable)factJson error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Error codes + */ +FOUNDATION_EXPORT NSString* _Nonnull const BindingsUnrecognizedCode; +/** + * Error codes + */ +FOUNDATION_EXPORT NSString* _Nonnull const BindingsUnrecognizedMessage; + +/** + * AsyncRequestRestLike sends an asynchronous restlike request to a given +contact. + +Parameters: + - e2eID - ID of the e2e object in the tracker + - recipient - marshalled contact.Contact object + - request - JSON marshalled RestlikeMessage + - paramsJSON - JSON marshalled single.RequestParams + - cb - RestlikeCallback callback + +Returns an error, and the RestlikeCallback will be called with the results +of JSON marshalling the response when received. + */ +FOUNDATION_EXPORT BOOL BindingsAsyncRequestRestLike(long e2eID, NSData* _Nullable recipient, NSData* _Nullable request, NSData* _Nullable paramsJSON, id<BindingsRestlikeCallback> _Nullable cb, NSError* _Nullable* _Nullable error); + +/** + * CreateUserFriendlyErrorMessage will convert the passed in error string to an +error string that is user-friendly if a substring match is found to a +common error. Common errors is a map that can be updated using +UpdateCommonErrors. If the error is not common, some simple parsing is done +on the error message to make it more user-accessible, removing backend +specific jargon. + +Parameters: + - errStr - an error returned from the backend. + +Returns + - A user-friendly error message. This should be devoid of technical speak + but still be meaningful for front-end or back-end teams. + */ +FOUNDATION_EXPORT NSString* _Nonnull BindingsCreateUserFriendlyErrorMessage(NSString* _Nullable errStr); + +/** + * DownloadAndVerifySignedNdfWithUrl retrieves the NDF from a specified URL. +The NDF is processed into a protobuf containing a signature that is verified +using the cert string passed in. The NDF is returned as marshaled byte data +that may be used to start a client. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsDownloadAndVerifySignedNdfWithUrl(NSString* _Nullable url, NSString* _Nullable cert, NSError* _Nullable* _Nullable error); + +/** + * EnableGrpcLogs sets GRPC trace logging. + */ +FOUNDATION_EXPORT void BindingsEnableGrpcLogs(id<BindingsLogWriter> _Nullable writer); + +/** + * GenerateSecret creates a secret password using a system-based pseudorandom +number generator. + +Parameters: + - numBytes - The size of secret. It should be set to 32, but can be set + higher in certain cases. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGenerateSecret(long numBytes); + +/** + * GetDefaultCMixParams returns a JSON serialized object with all of the cMix +parameters and their default values. Call this function and modify the JSON +to change cMix settings. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetDefaultCMixParams(void); + +/** + * GetDefaultE2EParams returns a JSON serialized object with all of the E2E +parameters and their default values. Call this function and modify the JSON +to change E2E settings. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetDefaultE2EParams(void); + +/** + * GetDefaultE2eFileTransferParams returns a JSON serialized object with all the +E2E file transfer parameters and their default values. Call this function and +modify the JSON to change single use settings. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetDefaultE2eFileTransferParams(void); + +/** + * GetDefaultFileTransferParams returns a JSON serialized object with all the +file transfer parameters and their default values. Call this function and +modify the JSON to change file transfer settings. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetDefaultFileTransferParams(void); + +/** + * GetDefaultSingleUseParams returns a JSON serialized object with all the +single-use parameters and their default values. Call this function and modify +the JSON to change single use settings. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetDefaultSingleUseParams(void); + +/** + * GetDependencies returns the xxdk.DEPENDENCIES. + */ +FOUNDATION_EXPORT NSString* _Nonnull BindingsGetDependencies(void); + +/** + * GetFactsFromContact returns the fact list in the [contact.Contact] object. + +Parameters: + - marshaledContact - the JSON marshalled bytes of [contact.Contact] + +Returns: + - []byte - the JSON marshalled bytes of [fact.FactList] + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetFactsFromContact(NSData* _Nullable marshaledContact, NSError* _Nullable* _Nullable error); + +/** + * GetGitVersion returns the xxdk.GITVERSION. + */ +FOUNDATION_EXPORT NSString* _Nonnull BindingsGetGitVersion(void); + +/** + * GetIDFromContact returns the ID in the [contact.Contact] object. + +Parameters: + - marshaledContact - JSON marshalled bytes of [contact.Contact] + +Returns: + - []byte - bytes of the [id.ID] object + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetIDFromContact(NSData* _Nullable marshaledContact, NSError* _Nullable* _Nullable error); + +/** + * GetPubkeyFromContact returns the DH public key in the [contact.Contact] +object. + +Parameters: + - marshaledContact - JSON marshalled bytes of [contact.Contact] + +Returns: + - []byte - JSON marshalled bytes of the [cyclic.Int] object + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsGetPubkeyFromContact(NSData* _Nullable marshaledContact, NSError* _Nullable* _Nullable error); + +/** + * GetVersion returns the xxdk.SEMVER. + */ +FOUNDATION_EXPORT NSString* _Nonnull BindingsGetVersion(void); + +/** + * InitFileTransfer creates a bindings-level file transfer manager. + +Parameters: + - e2eID - e2e object ID in the tracker + - paramsJSON - JSON marshalled fileTransfer.Params + */ +FOUNDATION_EXPORT BindingsFileTransfer* _Nullable BindingsInitFileTransfer(long e2eID, id<BindingsReceiveFileCallback> _Nullable receiveFileCallback, NSData* _Nullable e2eFileTransferParamsJson, NSData* _Nullable fileTransferParamsJson, NSError* _Nullable* _Nullable error); + +/** + * InitializeBackup creates a bindings-layer Backup object. + +Parameters: + - e2eID - ID of the E2e object in the e2e tracker. + - udID - ID of the UserDiscovery object in the ud tracker. + - backupPassPhrase - backup passphrase provided by the user. Used to decrypt + backup. + - cb - the callback to be called when a backup is triggered. + */ +FOUNDATION_EXPORT BindingsBackup* _Nullable BindingsInitializeBackup(long e2eID, long udID, NSString* _Nullable backupPassPhrase, id<BindingsUpdateBackupFunc> _Nullable cb, NSError* _Nullable* _Nullable error); + +/** + * IsRegisteredWithUD is a function which checks the internal state +files to determine if a user has registered with UD in the past. + +Parameters: + - e2eID - REQUIRED. The tracked e2e object ID. This can be retrieved using [E2e.GetID]. + +Returns: + - bool - A boolean representing true if the user has been registered with UD already + or false if it has not been registered already. + - error - An error should only be returned if the internal tracker failed to retrieve an + E2e object given the e2eId. If an error was returned, the registration state check + was not performed properly, and the boolean returned should be ignored. + */ +FOUNDATION_EXPORT BOOL BindingsIsRegisteredWithUD(long e2eId, BOOL* _Nullable ret0_, NSError* _Nullable* _Nullable error); + +/** + * Listen starts a single-use listener on a given tag using the passed in E2e +object and SingleUseCallback func. + +Parameters: + - e2eID - ID of the e2e object in the tracker + - tag - identifies the single-use message + - cb - the callback that will be called when a response is received + +Returns: + - Stopper - an interface containing a function used to stop the listener + */ +FOUNDATION_EXPORT id<BindingsStopper> _Nullable BindingsListen(long e2eID, NSString* _Nullable tag, id<BindingsSingleUseCallback> _Nullable cb, NSError* _Nullable* _Nullable error); + +/** + * LoadCmix will load an existing user storage from the storageDir using the +password. This will fail if the user storage does not exist or the password +is incorrect. + +The password is passed as a byte array so that it can be cleared from memory +and stored as securely as possible using the MemGuard library. + +LoadCmix does not block on network connection and instead loads and starts +subprocesses to perform network operations. + */ +FOUNDATION_EXPORT BindingsCmix* _Nullable BindingsLoadCmix(NSString* _Nullable storageDir, NSData* _Nullable password, NSData* _Nullable cmixParamsJSON, NSError* _Nullable* _Nullable error); + +/** + * LoadReceptionIdentity loads the given identity in Cmix storage with the given +key. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsLoadReceptionIdentity(NSString* _Nullable key, long cmixId, NSError* _Nullable* _Nullable error); + +/** + * LogLevel sets level of logging. All logs at the set level and below will be +displayed (e.g., when log level is ERROR, only ERROR, CRITICAL, and FATAL +messages will be printed). + +Log level options: + TRACE - 0 + DEBUG - 1 + INFO - 2 + WARN - 3 + ERROR - 4 + CRITICAL - 5 + FATAL - 6 + +The default log level without updates is INFO. + */ +FOUNDATION_EXPORT BOOL BindingsLogLevel(long level, NSError* _Nullable* _Nullable error); + +/** + * Login creates and returns a new E2e object and adds it to the +e2eTrackerSingleton. Identity should be created via +Cmix.MakeReceptionIdentity and passed in here. If callbacks is left nil, a +default auth.Callbacks will be used. + */ +FOUNDATION_EXPORT BindingsE2e* _Nullable BindingsLogin(long cmixId, id<BindingsAuthCallbacks> _Nullable callbacks, NSData* _Nullable identity, NSData* _Nullable e2eParamsJSON, NSError* _Nullable* _Nullable error); + +/** + * LoginEphemeral creates and returns a new ephemeral E2e object and adds it to +the e2eTrackerSingleton. Identity should be created via +Cmix.MakeReceptionIdentity or Cmix.MakeLegacyReceptionIdentity and passed in +here. If callbacks is left nil, a default auth.Callbacks will be used. + */ +FOUNDATION_EXPORT BindingsE2e* _Nullable BindingsLoginEphemeral(long cmixId, id<BindingsAuthCallbacks> _Nullable callbacks, NSData* _Nullable identity, NSData* _Nullable e2eParamsJSON, NSError* _Nullable* _Nullable error); + +/** + * LookupUD returns the public key of the passed ID 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 + - lookupId - the marshalled bytes of the id.ID object for the user that + LookupUD 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 NSData* _Nullable BindingsLookupUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdLookupCallback> _Nullable cb, NSData* _Nullable lookupId, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); + +/** + * NewBroadcastChannel creates a bindings-layer broadcast channel and starts +listening for new messages. + +Parameters: + - cmixId - internal ID of cmix + - channelDefinition - JSON marshalled ChannelDef object + */ +FOUNDATION_EXPORT BindingsChannel* _Nullable BindingsNewBroadcastChannel(long cmixId, NSData* _Nullable channelDefinition, NSError* _Nullable* _Nullable error); + +/** + * NewCmix creates user storage, generates keys, connects, and registers with +the network. Note that this does not register a username/identity, but merely +creates a new cryptographic identity for adding such information at a later +date. + +Users of this function should delete the storage directory on error. + */ +FOUNDATION_EXPORT BOOL BindingsNewCmix(NSString* _Nullable ndfJSON, NSString* _Nullable storageDir, NSData* _Nullable password, NSString* _Nullable registrationCode, NSError* _Nullable* _Nullable error); + +/** + * NewCmixFromBackup initializes a new e2e storage from an encrypted +backup. Users of this function should delete the storage directory on error. +Users of this function should call LoadCmix as normal once this call succeeds. + +Parameters: + - ndfJSON - JSON of the NDF. + - storageDir - directory for the storage files. + - sessionPassword - password to decrypt the data in the storageDir. + - backupPassphrase - backup passphrase provided by the user. Used to decrypt backup. + - backupFileContents - the file contents of the backup. + +Returns: + - []byte - the JSON marshalled bytes of the BackupReport object. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsNewCmixFromBackup(NSString* _Nullable ndfJSON, NSString* _Nullable storageDir, NSString* _Nullable backupPassphrase, NSData* _Nullable sessionPassword, NSData* _Nullable backupFileContents, NSError* _Nullable* _Nullable error); + +/** + * NewDummyTrafficManager creates a DummyTraffic manager and initialises the +dummy traffic sending thread. Note that the manager does not start sending +dummy traffic until true is passed into DummyTraffic.SetStatus. The time +duration between each sending operation and the amount of messages sent each +interval are randomly generated values with bounds defined by the given +parameters below. + +Parameters: + - cmixId - a Cmix object ID in the tracker. + - maxNumMessages - the upper bound of the random number of messages sent + each sending cycle. + - avgSendDeltaMS - the average duration, in milliseconds, to wait between + sends. + - randomRangeMS - the upper bound of the interval between sending cycles, in + milliseconds. Sends occur every avgSendDeltaMS +/- a random duration with + an upper bound of randomRangeMS. + */ +FOUNDATION_EXPORT BindingsDummyTraffic* _Nullable BindingsNewDummyTrafficManager(long cmixId, long maxNumMessages, long avgSendDeltaMS, long randomRangeMS, NSError* _Nullable* _Nullable error); + +/** + * NewGroupChat creates a bindings-layer group chat manager. + +Parameters: + - e2eID - e2e object ID in the tracker. + - requestFunc - a callback to handle group chat requests. + - processor - the group chat message processor. + */ +FOUNDATION_EXPORT BindingsGroupChat* _Nullable BindingsNewGroupChat(long e2eID, id<BindingsGroupRequest> _Nullable requestFunc, id<BindingsGroupChatProcessor> _Nullable processor, NSError* _Nullable* _Nullable error); + +/** + * NewOrLoadUd loads an existing UserDiscovery from storage or creates a new +UserDiscovery if there is no storage data. Regardless of storage state, +the UserDiscovery object returned will be registered with the +User Discovery service. If the user is not already registered, a call +to register will occur internally. If the user is already registered, +this call will simply load state and return to you a UserDiscovery object. +Some parameters are required for registering with the service, but are not required +if the user is already registered. These will be noted in the parameters section as +"SEMI-REQUIRED". + +Certain parameters are required every call to this function. These parameters are listed below +as "REQUIRED". For example, parameters need be provided to specify how to connect to the +User Discovery service. These parameters specifically may be used to contact either the UD +server hosted by the xx network team or a custom third-party operated server. For the former, +all the information may be fetched from the NDF using the bindings. These fetch +methods are detailed in the parameters section. + +Params + - e2eID - REQUIRED. The tracked e2e object ID. This is returned by [E2e.GetID]. + - follower - REQUIRED. Network follower function. This will check if the network + follower is running. + - username - SEMI-REQUIRED. The username the user wants to register with UD. + If the user is already registered, this field may be blank. If the user is not + already registered, these field must be populated with a username that meets the + requirements of the UD service. For example, in the xx network's UD service, + the username must not be registered by another user. + - registrationValidationSignature - SEMI-REQUIRED. A signature provided by the xx network + (i.e. the client registrar). If the user is not already registered, this field is required + in order to register with the xx network. This may be nil if the user is already registered + or connecting to a third-party UD service unassociated with the xx network. + - cert - REQUIRED. The TLS certificate for the UD server this call will connect with. + If this is nil, you may not contact the UD server hosted by the xx network. + Third-party services may vary. + You may use the UD server run by the xx network team by using [E2e.GetUdCertFromNdf]. + - contactFile - REQUIRED. The data within a marshalled [contact.Contact]. This represents the + contact file of the server this call will connect with. + If this is nil, you may not contact the UD server hosted by the xx network. + Third-party services may vary. + You may use the UD server run by the xx network team by using [E2e.GetUdContactFromNdf]. + - address - REQUIRED. The IP address of the UD server this call will connect with. + You may use the UD server run by the xx network team by using [E2e.GetUdAddressFromNdf]. + If this is nil, you may not contact the UD server hosted by the xx network. + Third-party services may vary. + +Returns + - A Manager object which is registered to the specified UD service. + */ +FOUNDATION_EXPORT BindingsUserDiscovery* _Nullable BindingsNewOrLoadUd(long e2eID, id<BindingsUdNetworkStatus> _Nullable follower, NSString* _Nullable username, NSData* _Nullable registrationValidationSignature, NSData* _Nullable cert, NSData* _Nullable contactFile, NSString* _Nullable address, NSError* _Nullable* _Nullable error); + +/** + * NewUdManagerFromBackup builds a new user discover manager from a backup. It +will construct a manager that is already registered and restore already +registered facts into store. + +Parameters: + - e2eID - e2e object ID in the tracker + - follower - network follower func wrapped in UdNetworkStatus + - username - The username this user registered with initially. This should + not be nullable, and be JSON marshalled as retrieved from + UserDiscovery.GetFacts(). + - emailFactJson - nullable JSON marshalled email [fact.Fact] + - phoneFactJson - nullable JSON marshalled phone [fact.Fact] + - cert - the TLS certificate for the UD server this call will connect with. + You may use the UD server run by the xx network team by using + E2e.GetUdCertFromNdf. + - contactFile - the data within a marshalled contact.Contact. This + represents the contact file of the server this call will connect with. You + may use the UD server run by the xx network team by using + E2e.GetUdContactFromNdf. + - address - the IP address of the UD server this call will connect with. You + may use the UD server run by the xx network team by using + E2e.GetUdAddressFromNdf. + */ +FOUNDATION_EXPORT BindingsUserDiscovery* _Nullable BindingsNewUdManagerFromBackup(long e2eID, id<BindingsUdNetworkStatus> _Nullable follower, NSData* _Nullable usernameJson, NSData* _Nullable emailFactJson, NSData* _Nullable phoneFactJson, NSData* _Nullable cert, NSData* _Nullable contactFile, NSString* _Nullable address, NSError* _Nullable* _Nullable error); + +/** + * RegisterForNotifications allows a client to register for push notifications. +The token is a firebase messaging token. + +Parameters: + - e2eId - ID of the E2E object in the E2E tracker + */ +FOUNDATION_EXPORT BOOL BindingsRegisterForNotifications(long e2eId, NSString* _Nullable token, NSError* _Nullable* _Nullable error); + +/** + * RegisterLogWriter registers a callback on which logs are written. + */ +FOUNDATION_EXPORT void BindingsRegisterLogWriter(id<BindingsLogWriter> _Nullable writer); + +/** + * RequestRestLike sends a restlike request to a given contact. + +Parameters: + - e2eID - ID of the e2e object in the tracker + - recipient - marshalled contact.Contact object + - request - JSON marshalled RestlikeMessage + - paramsJSON - JSON marshalled single.RequestParams + +Returns: + - []byte - JSON marshalled restlike.Message + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsRequestRestLike(long e2eID, NSData* _Nullable recipient, NSData* _Nullable request, NSData* _Nullable paramsJSON, NSError* _Nullable* _Nullable error); + +/** + * RestlikeRequest performs a normal restlike request. + +Parameters: + - cmixId - ID of the cMix object in the tracker + - connectionID - ID of the connection in the tracker + - request - JSON marshalled RestlikeMessage + - e2eParamsJSON - JSON marshalled xxdk.E2EParams + +Returns: + - []byte - JSON marshalled RestlikeMessage + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsRestlikeRequest(long cmixId, long connectionID, NSData* _Nullable request, NSData* _Nullable e2eParamsJSON, NSError* _Nullable* _Nullable error); + +/** + * RestlikeRequestAuth performs an authenticated restlike request. + +Parameters: + - cmixId - ID of the cMix object in the tracker + - authConnectionID - ID of the authenticated connection in the tracker + - request - JSON marshalled RestlikeMessage + - e2eParamsJSON - JSON marshalled xxdk.E2EParams + +Returns: + - []byte - JSON marshalled RestlikeMessage + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsRestlikeRequestAuth(long cmixId, long authConnectionID, NSData* _Nullable request, NSData* _Nullable e2eParamsJSON, NSError* _Nullable* _Nullable error); + +/** + * ResumeBackup resumes the backup processes with a new callback. +Call this function only when resuming a backup that has already been +initialized or to replace the callback. +To start the backup for the first time or to use a new password, use +InitializeBackup. + +Parameters: + - e2eID - ID of the E2e object in the e2e tracker. + - udID - ID of the UserDiscovery object in the ud tracker. + - cb - the callback to be called when a backup is triggered. + This will replace any callback that has been passed into InitializeBackup. + */ +FOUNDATION_EXPORT BindingsBackup* _Nullable BindingsResumeBackup(long e2eID, long udID, id<BindingsUpdateBackupFunc> _Nullable cb, NSError* _Nullable* _Nullable error); + +/** + * SearchUD searches user discovery for the passed Facts. The searchCallback +will return a list of contacts, each having the facts it hit against. This is +NOT intended to be used to search for multiple users at once; that can have a +privacy reduction. Instead, it is intended to be used to search for a user +where multiple pieces of information is known. + +Parameters: + - e2eID - e2e object ID in the tracker + - udContact - the marshalled bytes of the contact.Contact for the user + discovery server + - factListJSON - the JSON marshalled bytes of [fact.FactList] + - 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 + operation succeeded. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsSearchUD(long e2eID, NSData* _Nullable udContact, id<BindingsUdSearchCallback> _Nullable cb, NSData* _Nullable factListJSON, NSData* _Nullable singleRequestParamsJSON, NSError* _Nullable* _Nullable error); + +/** + * SetFactsOnContact replaces the facts on the contact with the passed in facts +pass in empty facts in order to clear the facts. + +Parameters: + - marshaledContact - the JSON marshalled bytes of [contact.Contact] + - factListJSON - the JSON marshalled bytes of [fact.FactList] + +Returns: + - []byte - marshalled bytes of the modified [contact.Contact] + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsSetFactsOnContact(NSData* _Nullable marshaledContact, NSData* _Nullable factListJSON, NSError* _Nullable* _Nullable error); + +/** + * StoreReceptionIdentity stores the given identity in Cmix storage with the +given key. This is the ideal way to securely store identities, as the caller +of this function is only required to store the given key separately rather +than the keying material. + */ +FOUNDATION_EXPORT BOOL BindingsStoreReceptionIdentity(NSString* _Nullable key, NSData* _Nullable identity, long cmixId, NSError* _Nullable* _Nullable error); + +/** + * TransmitSingleUse transmits payload to recipient via single-use. + +Parameters: + - e2eID - ID of the e2e object in the tracker + - recipient - marshalled contact.Contact object + - tag - identifies the single-use message + - payload - message contents + - paramsJSON - JSON marshalled single.RequestParams + - responseCB - the callback that will be called when a response is received + +Returns: + - []byte - the JSON marshalled bytes of the SingleUseSendReport object, + which can be passed into WaitForRoundResult to see if the send succeeded. + */ +FOUNDATION_EXPORT NSData* _Nullable BindingsTransmitSingleUse(long e2eID, NSData* _Nullable recipient, NSString* _Nullable tag, NSData* _Nullable payload, NSData* _Nullable paramsJSON, id<BindingsSingleUseResponse> _Nullable responseCB, NSError* _Nullable* _Nullable error); + +/** + * UnregisterForNotifications turns off notifications for this client. + +Parameters: + - e2eId - ID of the E2E object in the E2E tracker + */ +FOUNDATION_EXPORT BOOL BindingsUnregisterForNotifications(long e2eId, NSError* _Nullable* _Nullable error); + +/** + * UpdateCommonErrors updates the internal error mapping database. This internal +database maps errors returned from the backend to user-friendly error +messages. + +Parameters: + - jsonFile - contents of a JSON file whose format conforms to the example below. + +Example Input: + { + "Failed to Unmarshal Conversation": "Could not retrieve conversation", + "Failed to unmarshal SentRequestMap": "Failed to pull up friend requests", + "cannot create username when network is not health": "Cannot create username, unable to connect to network", + } + */ +FOUNDATION_EXPORT BOOL BindingsUpdateCommonErrors(NSString* _Nullable jsonFile, NSError* _Nullable* _Nullable error); + +@class BindingsAuthCallbacks; + +@class BindingsBroadcastListener; + +@class BindingsClientError; + +@class BindingsFileTransferReceiveProgressCallback; + +@class BindingsFileTransferSentProgressCallback; + +@class BindingsGroupChatProcessor; + +@class BindingsGroupRequest; + +@class BindingsListener; + +@class BindingsLogWriter; + +@class BindingsMessageDeliveryCallback; + +@class BindingsNetworkHealthCallback; + +@class BindingsProcessor; + +@class BindingsReceiveFileCallback; + +@class BindingsReporterFunc; + +@class BindingsRestlikeCallback; + +@class BindingsSingleUseCallback; + +@class BindingsSingleUseResponse; + +@class BindingsStopper; + +@class BindingsUdLookupCallback; + +@class BindingsUdNetworkStatus; + +@class BindingsUdSearchCallback; + +@class BindingsUpdateBackupFunc; + +/** + * AuthCallbacks is the bindings-specific interface for auth.Callbacks methods. + */ +@interface BindingsAuthCallbacks : NSObject <goSeqRefInterface, BindingsAuthCallbacks> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)confirm:(NSData* _Nullable)contact receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +- (void)request:(NSData* _Nullable)contact receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +- (void)reset:(NSData* _Nullable)contact receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +@end + +/** + * BroadcastListener is the public function type bindings can use to listen for +broadcast messages. + +Parameters: + - []byte - the JSON marshalled bytes of the BroadcastMessage object, which + can be passed into WaitForRoundResult to see if the broadcast succeeded. + */ +@interface BindingsBroadcastListener : NSObject <goSeqRefInterface, BindingsBroadcastListener> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)p0 p1:(NSError* _Nullable)p1; +@end + +@interface BindingsClientError : NSObject <goSeqRefInterface, BindingsClientError> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)report:(NSString* _Nullable)source message:(NSString* _Nullable)message trace:(NSString* _Nullable)trace; +@end + +/** + * FileTransferReceiveProgressCallback is a bindings-layer interface that is +called with the progress of a received file. + */ +@interface BindingsFileTransferReceiveProgressCallback : NSObject <goSeqRefInterface, BindingsFileTransferReceiveProgressCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +/** + * Callback is called when a file part is sent or an error occurs. + +Parameters: + - payload - the JSON marshalled bytes of a Progress object. + - t - tracker that allows the lookup of the status of any file part + - err - any errors that occurred during sending + */ +- (void)callback:(NSData* _Nullable)payload t:(BindingsFilePartTracker* _Nullable)t err:(NSError* _Nullable)err; +@end + +/** + * FileTransferSentProgressCallback is a bindings-layer interface that contains +a callback that is called when the sent progress updates. + */ +@interface BindingsFileTransferSentProgressCallback : NSObject <goSeqRefInterface, BindingsFileTransferSentProgressCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +/** + * Callback is called when a file part is sent or an error occurs. + +Parameters: + - payload - the JSON marshalled bytes of a Progress object. + - t - tracker that allows the lookup of the status of any file part + - err - any errors that occurred during sending + */ +- (void)callback:(NSData* _Nullable)payload t:(BindingsFilePartTracker* _Nullable)t err:(NSError* _Nullable)err; +@end + +/** + * GroupChatProcessor manages the handling of received group chat messages. + */ +@interface BindingsGroupChatProcessor : NSObject <goSeqRefInterface, BindingsGroupChatProcessor> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)process:(NSData* _Nullable)decryptedMessage msg:(NSData* _Nullable)msg receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId err:(NSError* _Nullable)err; +- (NSString* _Nonnull)string; +@end + +/** + * GroupRequest is a bindings-layer interface that handles a group reception. + +Parameters: + - trackedGroupId - a bindings layer Group object. + */ +@interface BindingsGroupRequest : NSObject <goSeqRefInterface, BindingsGroupRequest> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(BindingsGroup* _Nullable)g; +@end + +/** + * Listener provides a callback to hear a message. + +An object implementing this interface can be called back when the client gets +a message of the type that the registerer specified at registration time. + */ +@interface BindingsListener : NSObject <goSeqRefInterface, BindingsListener> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +/** + * Hear is called to receive a message in the UI. + +Parameters: + - item - JSON marshalled Message object + */ +- (void)hear:(NSData* _Nullable)item; +/** + * Name returns a name; used for debugging. + */ +- (NSString* _Nonnull)name; +@end + +@interface BindingsLogWriter : NSObject <goSeqRefInterface, BindingsLogWriter> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)log:(NSString* _Nullable)p0; +@end + +/** + * MessageDeliveryCallback gets called on the determination if all events +related to a message send were successful. + +If delivered == true, timedOut == false && roundResults != nil + +If delivered == false, roundResults == nil + +If timedOut == true, delivered == false && roundResults == nil + */ +@interface BindingsMessageDeliveryCallback : NSObject <goSeqRefInterface, BindingsMessageDeliveryCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)eventCallback:(BOOL)delivered timedOut:(BOOL)timedOut roundResults:(NSData* _Nullable)roundResults; +@end + +/** + * NetworkHealthCallback contains a callback that is used to receive +notification if network health changes. + */ +@interface BindingsNetworkHealthCallback : NSObject <goSeqRefInterface, BindingsNetworkHealthCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(BOOL)p0; +@end + +/** + * Processor is the bindings-specific interface for message.Processor methods. + */ +@interface BindingsProcessor : NSObject <goSeqRefInterface, BindingsProcessor> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)process:(NSData* _Nullable)message receptionId:(NSData* _Nullable)receptionId ephemeralId:(int64_t)ephemeralId roundId:(int64_t)roundId; +- (NSString* _Nonnull)string; +@end + +/** + * ReceiveFileCallback is a bindings-layer interface that contains a callback +that is called when a file is received. + */ +@interface BindingsReceiveFileCallback : NSObject <goSeqRefInterface, BindingsReceiveFileCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +/** + * Callback is called when a new file transfer is received. + +Parameters: + - payload - the JSON marshalled bytes of a ReceivedFile object. + - err - any errors that occurred during reception + */ +- (void)callback:(NSData* _Nullable)payload err:(NSError* _Nullable)err; +@end + +/** + * ReporterFunc is a bindings-layer interface that receives info from the Event +Manager. + +Parameters: + - payload - JSON marshalled EventReport object + */ +@interface BindingsReporterFunc : NSObject <goSeqRefInterface, BindingsReporterFunc> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)report:(NSData* _Nullable)payload err:(NSError* _Nullable)err; +@end + +/** + * RestlikeCallback is the public function type bindings can use to make an +asynchronous restlike request. + +Parameters: + - []byte - JSON marshalled restlike.Message + - error - an error (the results of calling json.Marshal on the message) + */ +@interface BindingsRestlikeCallback : NSObject <goSeqRefInterface, BindingsRestlikeCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)p0 p1:(NSError* _Nullable)p1; +@end + +/** + * SingleUseCallback func is passed into Listen and called when messages are +received. + +Parameters: + - callbackReport - the JSON marshalled bytes of the SingleUseCallbackReport + object, which can be passed into Cmix.WaitForRoundResult to see if the + send operation succeeded. + */ +@interface BindingsSingleUseCallback : NSObject <goSeqRefInterface, BindingsSingleUseCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)callbackReport err:(NSError* _Nullable)err; +@end + +/** + * SingleUseResponse is the public facing callback function passed by bindings +clients into TransmitSingleUse. + +Parameters: + - callbackReport - the JSON marshalled bytes of the SingleUseResponseReport + object, which can be passed into Cmix.WaitForRoundResult to see if the + send operation succeeded. + */ +@interface BindingsSingleUseResponse : NSObject <goSeqRefInterface, BindingsSingleUseResponse> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)responseReport err:(NSError* _Nullable)err; +@end + +/** + * Stopper is a public interface returned by Listen, allowing users to stop the +registered listener. + */ +@interface BindingsStopper : NSObject <goSeqRefInterface, BindingsStopper> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)stop; +@end + +/** + * UdLookupCallback contains the callback called by LookupUD that returns the +contact that matches the passed in ID. + +Parameters: + - contactBytes - the marshalled bytes of contact.Contact returned from the + lookup, or nil if an error occurs + - err - any errors that occurred in the lookup + */ +@interface BindingsUdLookupCallback : NSObject <goSeqRefInterface, BindingsUdLookupCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)contactBytes err:(NSError* _Nullable)err; +@end + +/** + * UdNetworkStatus contains the UdNetworkStatus, which is a bindings-level +interface for ud.udNetworkStatus. + */ +@interface BindingsUdNetworkStatus : NSObject <goSeqRefInterface, BindingsUdNetworkStatus> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +/** + * UdNetworkStatus returns: +- int - a xxdk.Status int + */ +- (long)udNetworkStatus; +@end + +/** + * UdSearchCallback contains the callback called by SearchUD that returns a list +of contact.Contact objects that match the list of facts passed into +SearchUD. + +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>" + } + - err - any errors that occurred in the search. + */ +@interface BindingsUdSearchCallback : NSObject <goSeqRefInterface, BindingsUdSearchCallback> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)callback:(NSData* _Nullable)contactListJSON err:(NSError* _Nullable)err; +@end + +/** + * UpdateBackupFunc contains a function callback that returns new backups. + */ +@interface BindingsUpdateBackupFunc : NSObject <goSeqRefInterface, BindingsUpdateBackupFunc> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)updateBackup:(NSData* _Nullable)encryptedBackup; +@end + +#endif diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Universe.objc.h b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Universe.objc.h new file mode 100644 index 0000000000000000000000000000000000000000..019e7502d581983722a15bf30799e85cbc5dd766 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/Universe.objc.h @@ -0,0 +1,29 @@ +// Objective-C API for talking to Go package. +// gobind -lang=objc +// +// File is generated by gobind. Do not edit. + +#ifndef __Universe_H__ +#define __Universe_H__ + +@import Foundation; +#include "ref.h" + +@protocol Universeerror; +@class Universeerror; + +@protocol Universeerror <NSObject> +- (NSString* _Nonnull)error; +@end + +@class Universeerror; + +@interface Universeerror : NSError <goSeqRefInterface, Universeerror> { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (NSString* _Nonnull)error; +@end + +#endif diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/ref.h b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/ref.h new file mode 100644 index 0000000000000000000000000000000000000000..b8036a4d85c7387f3def61473a071b5d8c4c8208 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Headers/ref.h @@ -0,0 +1,35 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#ifndef __GO_REF_HDR__ +#define __GO_REF_HDR__ + +#include <Foundation/Foundation.h> + +// GoSeqRef is an object tagged with an integer for passing back and +// forth across the language boundary. A GoSeqRef may represent either +// an instance of a Go object, or an Objective-C object passed to Go. +// The explicit allocation of a GoSeqRef is used to pin a Go object +// when it is passed to Objective-C. The Go seq package maintains a +// reference to the Go object in a map keyed by the refnum along with +// a reference count. When the reference count reaches zero, the Go +// seq package will clear the corresponding entry in the map. +@interface GoSeqRef : NSObject { +} +@property(readonly) int32_t refnum; +@property(strong) id obj; // NULL when representing a Go object. + +// new GoSeqRef object to proxy a Go object. The refnum must be +// provided from Go side. +- (instancetype)initWithRefnum:(int32_t)refnum obj:(id)obj; + +- (int32_t)incNum; + +@end + +@protocol goSeqRefInterface +-(GoSeqRef*) _ref; +@end + +#endif diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Modules/module.modulemap b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Modules/module.modulemap new file mode 100644 index 0000000000000000000000000000000000000000..4316a5b24058edfc18ffb2dc7f7a982e8353441a --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,8 @@ +framework module "Bindings" { + header "ref.h" + header "Bindings.objc.h" + header "Universe.objc.h" + header "Bindings.h" + + export * +} \ No newline at end of file diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Resources/Info.plist b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..0d1a4b8ab9b1fc8e9357197398f73353470cb636 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> + <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> + <plist version="1.0"> + <dict> + </dict> + </plist> diff --git a/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/Current b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/Current new file mode 120000 index 0000000000000000000000000000000000000000..8c7e5a667f1b771847fe88c01c3de34413a1b220 --- /dev/null +++ b/Frameworks/Bindings.xcframework/macos-arm64_x86_64/Bindings.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/Package.swift b/Package.swift index 342399b818b42e70e9556a3ef7b23b9466484478..30e5c604ce0c444f011056ca371ffb100c704351 100644 --- a/Package.swift +++ b/Package.swift @@ -17,6 +17,7 @@ let package = Package( defaultLocalization: "en", platforms: [ .iOS(.v14), + .macOS(.v12), ], products: [ .library(name: "XXClient", targets: ["XXClient"]), diff --git a/README.md b/README.md index a6f30248b2545b148158e9aba4eda7ea50dc0515..78d7e034d8833ace12c5c2959ee138baa5f1ada5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Elixxir dApps Swift SDK  - + ## 📖 Documentation @@ -14,7 +14,7 @@ Check out included [examples](Examples). ## 🛠Development -Open `Package.swift` in Xcode (≥13.4). +Open `Package.swift` in Xcode (≥13.4.1). ### Project structure diff --git a/build-bindings.sh b/build-bindings.sh index 9d5bde8be9abdcbc6126b1464148d76b8b5e4e5c..9e1b6cd1909ddf471583e4610e013a7bd634ce44 100755 --- a/build-bindings.sh +++ b/build-bindings.sh @@ -9,7 +9,7 @@ temp_dir="$(dirname $(realpath $0))/.build-bindings" client_git_url="https://gitlab.com/elixxir/client.git" client_git_dir="$temp_dir/client" client_git_commit="$1" -framework_target="ios" +framework_target="ios,iossimulator,macos" frameworks_dir="$(dirname $(realpath $0))/Frameworks" #======================================= diff --git a/run-tests.sh b/run-tests.sh index 5e029cdc237524c958ef1f7b259d0e6a66b3c808..1f9d60c4075a3a06dd1bce6e6f0fb82fc647530a 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -4,12 +4,17 @@ set -e echo "\n\033[1;32m▶ Xcode version\033[0m" xcodebuild -version -if [ ! -n "$1" ]; then +if [ "$1" = "macos" ]; then + + echo "\n\033[1;32m▶ Running package tests on macOS...\033[0m" + set -o pipefail && swift test 2>&1 | ./xcbeautify + +elif [ "$1" = "ios" ]; then echo "\n\033[1;32m▶ Running package tests on iOS Simulator...\033[0m" set -o pipefail && xcodebuild -scheme 'elixxir-dapps-sdk-swift-Package' -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=15.5,name=iPhone 13' test | ./xcbeautify -elif [ "$1" = "examples" ]; then +elif [ "$1" = "examples-ios" ]; then echo "\n\033[1;32m▶ Running XXMessenger example tests on iOS Simulator...\033[0m" set -o pipefail && xcodebuild -workspace 'Examples/xx-messenger/XXMessenger.xcworkspace' -scheme 'XXMessenger' -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=15.5,name=iPhone 13' test | ./xcbeautify @@ -17,8 +22,9 @@ elif [ "$1" = "examples" ]; then else echo "\n\033[1;31m▶ Invalid option.\033[0m Usage:" - echo " run-tests.sh - Run package tests" - echo " run-tests.sh examples - Run examples tests" + echo " run-tests.sh macos - Run package tests on macOS" + echo " run-tests.sh ios - Run package tests on iOS Simulator" + echo " run-tests.sh examples-ios - Run iOS examples tests" exit 1 fi