added iOS source code
[wl-app.git] / iOS / Pods / Realm / include / RLMSyncUtil.h
diff --git a/iOS/Pods/Realm/include/RLMSyncUtil.h b/iOS/Pods/Realm/include/RLMSyncUtil.h
new file mode 100644 (file)
index 0000000..ab911c2
--- /dev/null
@@ -0,0 +1,216 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2016 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#import <Realm/RLMConstants.h>
+
+/// A token originating from the Realm Object Server.
+typedef NSString* RLMServerToken;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A user info key for use with `RLMSyncErrorClientResetError`.
+extern NSString *const kRLMSyncPathOfRealmBackupCopyKey;
+
+/// A user info key for use with certain error types.
+extern NSString *const kRLMSyncErrorActionTokenKey;
+
+/**
+ The error domain string for all SDK errors related to errors reported
+ by the synchronization manager error handler, as well as general sync
+ errors that don't fall into any of the other categories.
+ */
+extern NSString *const RLMSyncErrorDomain;
+
+/**
+ The error domain string for all SDK errors related to the authentication
+ endpoint.
+ */
+extern NSString *const RLMSyncAuthErrorDomain;
+
+/**
+ The error domain string for all SDK errors related to the permissions
+ system and APIs.
+ */
+extern NSString *const RLMSyncPermissionErrorDomain;
+
+/**
+ An error related to a problem that might be reported by the synchronization manager
+ error handler, or a callback on a sync-related API that performs asynchronous work.
+ */
+typedef RLM_ERROR_ENUM(NSInteger, RLMSyncError, RLMSyncErrorDomain) {
+
+    /// An error that indicates a problem with the session (a specific Realm opened for sync).
+    RLMSyncErrorClientSessionError      = 4,
+
+    /// An error that indicates a problem with a specific user.
+    RLMSyncErrorClientUserError         = 5,
+
+    /**
+     An error that indicates an internal, unrecoverable problem
+     with the underlying synchronization engine.
+     */
+    RLMSyncErrorClientInternalError     = 6,
+
+    /**
+     An error that indicates the Realm needs to be reset.
+
+     A synced Realm may need to be reset because the Realm Object Server encountered an
+     error and had to be restored from a backup. If the backup copy of the remote Realm
+     is of an earlier version than the local copy of the Realm, the server will ask the
+     client to reset the Realm.
+
+     The reset process is as follows: the local copy of the Realm is copied into a recovery
+     directory for safekeeping, and then deleted from the original location. The next time
+     the Realm for that URL is opened, the Realm will automatically be re-downloaded from the
+     Realm Object Server, and can be used as normal.
+
+     Data written to the Realm after the local copy of the Realm diverged from the backup
+     remote copy will be present in the local recovery copy of the Realm file. The
+     re-downloaded Realm will initially contain only the data present at the time the Realm
+     was backed up on the server.
+
+     The client reset process can be initiated in one of two ways.
+     
+     The `userInfo` dictionary contains an opaque token object under the key
+     `kRLMSyncErrorActionTokenKey`. This token can be passed into
+     `+[RLMSyncSession immediatelyHandleError:]` in order to immediately perform the client
+     reset process. This should only be done after your app closes and invalidates every
+     instance of the offending Realm on all threads (note that autorelease pools may make this
+     difficult to guarantee).
+
+     If `+[RLMSyncSession immediatelyHandleError:]` is not called, the client reset process
+     will be automatically carried out the next time the app is launched and the
+     `RLMSyncManager` singleton is accessed.
+
+     The value for the `kRLMSyncPathOfRealmBackupCopyKey` key in the `userInfo` dictionary
+     describes the path of the recovered copy of the Realm. This copy will not actually be
+     created until the client reset process is initiated.
+
+     @see `-[NSError rlmSync_errorActionToken]`, `-[NSError rlmSync_clientResetBackedUpRealmPath]`
+     */
+    RLMSyncErrorClientResetError        = 7,
+
+    /**
+     An error that indicates an authentication error occurred.
+
+     The `kRLMSyncUnderlyingErrorKey` key in the user info dictionary will contain the
+     underlying error, which is guaranteed to be under the `RLMSyncAuthErrorDomain`
+     error domain.
+     */
+    RLMSyncErrorUnderlyingAuthError     = 8,
+
+    /**
+     An error that indicates the user does not have permission to perform an operation
+     upon a synced Realm. For example, a user may receive this error if they attempt to
+     open a Realm they do not have at least read access to, or write to a Realm they only
+     have read access to.
+     
+     This error may also occur if a user incorrectly opens a Realm they have read-only
+     permissions to without using the `asyncOpen()` APIs.
+
+     A Realm that suffers a permission denied error is, by default, flagged so that its
+     local copy will be deleted the next time the application starts.
+     
+     The `userInfo` dictionary contains an opaque token object under the key
+     `kRLMSyncErrorActionTokenKey`. This token can be passed into
+     `+[RLMSyncSession immediatelyHandleError:]` in order to immediately delete the local
+     copy. This should only be done after your app closes and invalidates every instance
+     of the offending Realm on all threads (note that autorelease pools may make this
+     difficult to guarantee).
+
+     @warning It is strongly recommended that, if a Realm has encountered a permission denied
+              error, its files be deleted before attempting to re-open it.
+     
+     @see `-[NSError rlmSync_errorActionToken]`
+     */
+    RLMSyncErrorPermissionDeniedError   = 9,
+};
+
+/// An error which is related to authentication to a Realm Object Server.
+typedef RLM_ERROR_ENUM(NSInteger, RLMSyncAuthError, RLMSyncAuthErrorDomain) {
+    /// An error that indicates that the response received from the authentication server was malformed.
+    RLMSyncAuthErrorBadResponse                     = 1,
+
+    /// An error that indicates that the supplied Realm path was invalid, or could not be resolved by the authentication
+    /// server.
+    RLMSyncAuthErrorBadRemoteRealmPath              = 2,
+
+    /// An error that indicates that the response received from the authentication server was an HTTP error code. The
+    /// `userInfo` dictionary contains the actual error code value.
+    RLMSyncAuthErrorHTTPStatusCodeError             = 3,
+
+    /// An error that indicates a problem with the session (a specific Realm opened for sync).
+    RLMSyncAuthErrorClientSessionError              = 4,
+
+    /// An error that indicates that the provided credentials are invalid.
+    RLMSyncAuthErrorInvalidCredential               = 611,
+
+    /// An error that indicates that the user with provided credentials does not exist.
+    RLMSyncAuthErrorUserDoesNotExist                = 612,
+
+    /// An error that indicates that the user cannot be registered as it exists already.
+    RLMSyncAuthErrorUserAlreadyExists               = 613,
+
+    /// An error that indicates the path is invalid or the user doesn't have access to that Realm.
+    RLMSyncAuthErrorAccessDeniedOrInvalidPath       = 614,
+
+    /// An error that indicates the refresh token was invalid.
+    RLMSyncAuthErrorInvalidAccessToken              = 615,
+
+    /// An error that indicates the permission offer is expired.
+    RLMSyncAuthErrorExpiredPermissionOffer          = 701,
+
+    /// An error that indicates the permission offer is ambiguous.
+    RLMSyncAuthErrorAmbiguousPermissionOffer        = 702,
+
+    /// An error that indicates the file at the given path can't be shared.
+    RLMSyncAuthErrorFileCannotBeShared              = 703,
+};
+
+/**
+ An error related to the permissions subsystem.
+ */
+typedef RLM_ERROR_ENUM(NSInteger, RLMSyncPermissionError, RLMSyncPermissionErrorDomain) {
+    /**
+     An error that indicates a permission change operation failed. The `userInfo`
+     dictionary contains the underlying error code and a message (if any).
+     */
+    RLMSyncPermissionErrorChangeFailed          = 1,
+
+    /**
+     An error that indicates that attempting to retrieve permissions failed.
+     */
+    RLMSyncPermissionErrorGetFailed             = 2,
+
+    /**
+     An error that indicates that trying to create a permission offer failed.
+     */
+    RLMSyncPermissionErrorOfferFailed           = 3,
+
+    /**
+     An error that indicates that trying to accept a permission offer failed.
+     */
+    RLMSyncPermissionErrorAcceptOfferFailed     = 4,
+
+    /**
+     An error that indicates that an internal error occurred.
+     */
+    RLMSyncPermissionErrorInternal              = 5,
+};
+
+NS_ASSUME_NONNULL_END