diff --git a/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift b/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift index bf6bc9458..70befc145 100644 --- a/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift +++ b/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift @@ -650,8 +650,8 @@ open class FileProperties { case notFile /// We were expecting a folder, but the given path refers to something that isn't a folder. case notFolder - /// The file cannot be transferred because the content is restricted. For example, sometimes there are legal - /// restrictions due to copyright claims. + /// The file cannot be transferred because the content is restricted. For example, we might restrict a file due + /// to legal requirements. case restrictedContent /// An unspecified error. case other diff --git a/Source/SwiftyDropbox/Shared/Generated/Files.swift b/Source/SwiftyDropbox/Shared/Generated/Files.swift index 599ac86a1..bfd129a4f 100644 --- a/Source/SwiftyDropbox/Shared/Generated/Files.swift +++ b/Source/SwiftyDropbox/Shared/Generated/Files.swift @@ -388,43 +388,6 @@ open class Files { } } - /// The CommitInfoWithProperties struct - open class CommitInfoWithProperties: Files.CommitInfo { - open override var description: String { - return "\(SerializeUtil.prepareJSONForSerialization(CommitInfoWithPropertiesSerializer().serialize(self)))" - } - } - open class CommitInfoWithPropertiesSerializer: JSONSerializer { - public init() { } - open func serialize(_ value: CommitInfoWithProperties) -> JSON { - let output = [ - "path": Serialization._StringSerializer.serialize(value.path), - "mode": Files.WriteModeSerializer().serialize(value.mode), - "autorename": Serialization._BoolSerializer.serialize(value.autorename), - "client_modified": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.clientModified), - "mute": Serialization._BoolSerializer.serialize(value.mute), - "property_groups": NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).serialize(value.propertyGroups), - "strict_conflict": Serialization._BoolSerializer.serialize(value.strictConflict), - ] - return .dictionary(output) - } - open func deserialize(_ json: JSON) -> CommitInfoWithProperties { - switch json { - case .dictionary(let dict): - let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) - let mode = Files.WriteModeSerializer().deserialize(dict["mode"] ?? Files.WriteModeSerializer().serialize(.add)) - let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) - let clientModified = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["client_modified"] ?? .null) - let mute = Serialization._BoolSerializer.deserialize(dict["mute"] ?? .number(0)) - let propertyGroups = NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).deserialize(dict["property_groups"] ?? .null) - let strictConflict = Serialization._BoolSerializer.deserialize(dict["strict_conflict"] ?? .number(0)) - return CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) - default: - fatalError("Type error deserializing") - } - } - } - /// The ContentSyncSetting struct open class ContentSyncSetting: CustomStringConvertible { /// Id of the item this setting is applied to. @@ -1423,7 +1386,9 @@ open class Files { public let pathDisplay: String? /// Please use parentSharedFolderId in FileSharingInfo or parentSharedFolderId in FolderSharingInfo instead. public let parentSharedFolderId: String? - public init(name: String, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil) { + /// The preview URL of the file. + public let previewUrl: String? + public init(name: String, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil, previewUrl: String? = nil) { stringValidator()(name) self.name = name nullableValidator(stringValidator())(pathLower) @@ -1432,6 +1397,8 @@ open class Files { self.pathDisplay = pathDisplay nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(parentSharedFolderId) self.parentSharedFolderId = parentSharedFolderId + nullableValidator(stringValidator())(previewUrl) + self.previewUrl = previewUrl } open var description: String { return "\(SerializeUtil.prepareJSONForSerialization(MetadataSerializer().serialize(self)))" @@ -1445,6 +1412,7 @@ open class Files { "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "preview_url": NullableSerializer(Serialization._StringSerializer).serialize(value.previewUrl), ] switch value { case let file as Files.FileMetadata: @@ -1500,6 +1468,7 @@ open class Files { "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "preview_url": NullableSerializer(Serialization._StringSerializer).serialize(value.previewUrl), ] return .dictionary(output) } @@ -1510,7 +1479,8 @@ open class Files { let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) let pathDisplay = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_display"] ?? .null) let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) - return DeletedMetadata(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId) + let previewUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["preview_url"] ?? .null) + return DeletedMetadata(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, previewUrl: previewUrl) default: fatalError("Type error deserializing") } @@ -2279,7 +2249,7 @@ open class Files { public let contentHash: String? /// If present, the metadata associated with the file's current lock. public let fileLockInfo: Files.FileLockMetadata? - public init(name: String, id: String, clientModified: Date, serverModified: Date, rev: String, size: UInt64, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil, mediaInfo: Files.MediaInfo? = nil, symlinkInfo: Files.SymlinkInfo? = nil, sharingInfo: Files.FileSharingInfo? = nil, isDownloadable: Bool = true, exportInfo: Files.ExportInfo? = nil, propertyGroups: Array? = nil, hasExplicitSharedMembers: Bool? = nil, contentHash: String? = nil, fileLockInfo: Files.FileLockMetadata? = nil) { + public init(name: String, id: String, clientModified: Date, serverModified: Date, rev: String, size: UInt64, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil, previewUrl: String? = nil, mediaInfo: Files.MediaInfo? = nil, symlinkInfo: Files.SymlinkInfo? = nil, sharingInfo: Files.FileSharingInfo? = nil, isDownloadable: Bool = true, exportInfo: Files.ExportInfo? = nil, propertyGroups: Array? = nil, hasExplicitSharedMembers: Bool? = nil, contentHash: String? = nil, fileLockInfo: Files.FileLockMetadata? = nil) { stringValidator(minLength: 1)(id) self.id = id self.clientModified = clientModified @@ -2298,7 +2268,7 @@ open class Files { nullableValidator(stringValidator(minLength: 64, maxLength: 64))(contentHash) self.contentHash = contentHash self.fileLockInfo = fileLockInfo - super.init(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId) + super.init(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, previewUrl: previewUrl) } open override var description: String { return "\(SerializeUtil.prepareJSONForSerialization(FileMetadataSerializer().serialize(self)))" @@ -2317,6 +2287,7 @@ open class Files { "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "preview_url": NullableSerializer(Serialization._StringSerializer).serialize(value.previewUrl), "media_info": NullableSerializer(Files.MediaInfoSerializer()).serialize(value.mediaInfo), "symlink_info": NullableSerializer(Files.SymlinkInfoSerializer()).serialize(value.symlinkInfo), "sharing_info": NullableSerializer(Files.FileSharingInfoSerializer()).serialize(value.sharingInfo), @@ -2341,6 +2312,7 @@ open class Files { let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) let pathDisplay = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_display"] ?? .null) let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let previewUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["preview_url"] ?? .null) let mediaInfo = NullableSerializer(Files.MediaInfoSerializer()).deserialize(dict["media_info"] ?? .null) let symlinkInfo = NullableSerializer(Files.SymlinkInfoSerializer()).deserialize(dict["symlink_info"] ?? .null) let sharingInfo = NullableSerializer(Files.FileSharingInfoSerializer()).deserialize(dict["sharing_info"] ?? .null) @@ -2350,7 +2322,7 @@ open class Files { let hasExplicitSharedMembers = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["has_explicit_shared_members"] ?? .null) let contentHash = NullableSerializer(Serialization._StringSerializer).deserialize(dict["content_hash"] ?? .null) let fileLockInfo = NullableSerializer(Files.FileLockMetadataSerializer()).deserialize(dict["file_lock_info"] ?? .null) - return FileMetadata(name: name, id: id, clientModified: clientModified, serverModified: serverModified, rev: rev, size: size, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, mediaInfo: mediaInfo, symlinkInfo: symlinkInfo, sharingInfo: sharingInfo, isDownloadable: isDownloadable, exportInfo: exportInfo, propertyGroups: propertyGroups, hasExplicitSharedMembers: hasExplicitSharedMembers, contentHash: contentHash, fileLockInfo: fileLockInfo) + return FileMetadata(name: name, id: id, clientModified: clientModified, serverModified: serverModified, rev: rev, size: size, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, previewUrl: previewUrl, mediaInfo: mediaInfo, symlinkInfo: symlinkInfo, sharingInfo: sharingInfo, isDownloadable: isDownloadable, exportInfo: exportInfo, propertyGroups: propertyGroups, hasExplicitSharedMembers: hasExplicitSharedMembers, contentHash: contentHash, fileLockInfo: fileLockInfo) default: fatalError("Type error deserializing") } @@ -2489,14 +2461,14 @@ open class Files { /// Additional information if the file has custom properties with the property template specified. Note that /// only properties associated with user-owned templates, not team-owned templates, can be attached to folders. public let propertyGroups: Array? - public init(name: String, id: String, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil, sharedFolderId: String? = nil, sharingInfo: Files.FolderSharingInfo? = nil, propertyGroups: Array? = nil) { + public init(name: String, id: String, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil, previewUrl: String? = nil, sharedFolderId: String? = nil, sharingInfo: Files.FolderSharingInfo? = nil, propertyGroups: Array? = nil) { stringValidator(minLength: 1)(id) self.id = id nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(sharedFolderId) self.sharedFolderId = sharedFolderId self.sharingInfo = sharingInfo self.propertyGroups = propertyGroups - super.init(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId) + super.init(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, previewUrl: previewUrl) } open override var description: String { return "\(SerializeUtil.prepareJSONForSerialization(FolderMetadataSerializer().serialize(self)))" @@ -2511,6 +2483,7 @@ open class Files { "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "preview_url": NullableSerializer(Serialization._StringSerializer).serialize(value.previewUrl), "shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.sharedFolderId), "sharing_info": NullableSerializer(Files.FolderSharingInfoSerializer()).serialize(value.sharingInfo), "property_groups": NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).serialize(value.propertyGroups), @@ -2525,10 +2498,11 @@ open class Files { let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) let pathDisplay = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_display"] ?? .null) let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let previewUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["preview_url"] ?? .null) let sharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["shared_folder_id"] ?? .null) let sharingInfo = NullableSerializer(Files.FolderSharingInfoSerializer()).deserialize(dict["sharing_info"] ?? .null) let propertyGroups = NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).deserialize(dict["property_groups"] ?? .null) - return FolderMetadata(name: name, id: id, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, sharedFolderId: sharedFolderId, sharingInfo: sharingInfo, propertyGroups: propertyGroups) + return FolderMetadata(name: name, id: id, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, previewUrl: previewUrl, sharedFolderId: sharedFolderId, sharingInfo: sharingInfo, propertyGroups: propertyGroups) default: fatalError("Type error deserializing") } @@ -4203,8 +4177,8 @@ open class Files { case notFile /// We were expecting a folder, but the given path refers to something that isn't a folder. case notFolder - /// The file cannot be transferred because the content is restricted. For example, sometimes there are legal - /// restrictions due to copyright claims. + /// The file cannot be transferred because the content is restricted. For example, we might restrict a file due + /// to legal requirements. case restrictedContent /// This operation is not supported for this content type. case unsupportedContentType @@ -4555,6 +4529,49 @@ open class Files { } } + /// The MoveIntoFamilyError union + public enum MoveIntoFamilyError: CustomStringConvertible { + /// Moving shared folder into Family Room folder is not allowed. + case isSharedFolder + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MoveIntoFamilyErrorSerializer().serialize(self)))" + } + } + open class MoveIntoFamilyErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MoveIntoFamilyError) -> JSON { + switch value { + case .isSharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("is_shared_folder") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MoveIntoFamilyError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "is_shared_folder": + return MoveIntoFamilyError.isSharedFolder + case "other": + return MoveIntoFamilyError.other + default: + return MoveIntoFamilyError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + /// The MoveIntoVaultError union public enum MoveIntoVaultError: CustomStringConvertible { /// Moving shared folder into Vault is not allowed. @@ -5506,6 +5523,8 @@ open class Files { case cantMoveSharedFolder /// Some content cannot be moved into Vault under certain circumstances, see detailed error. case cantMoveIntoVault(Files.MoveIntoVaultError) + /// Some content cannot be moved into the Family Room folder under certain circumstances, see detailed error. + case cantMoveIntoFamily(Files.MoveIntoFamilyError) /// An unspecified error. case other @@ -5569,6 +5588,10 @@ open class Files { var d = ["cant_move_into_vault": Files.MoveIntoVaultErrorSerializer().serialize(arg)] d[".tag"] = .str("cant_move_into_vault") return .dictionary(d) + case .cantMoveIntoFamily(let arg): + var d = ["cant_move_into_family": Files.MoveIntoFamilyErrorSerializer().serialize(arg)] + d[".tag"] = .str("cant_move_into_family") + return .dictionary(d) case .other: var d = [String: JSON]() d[".tag"] = .str("other") @@ -5610,6 +5633,9 @@ open class Files { case "cant_move_into_vault": let v = Files.MoveIntoVaultErrorSerializer().deserialize(d["cant_move_into_vault"] ?? .null) return RelocationError.cantMoveIntoVault(v) + case "cant_move_into_family": + let v = Files.MoveIntoFamilyErrorSerializer().deserialize(d["cant_move_into_family"] ?? .null) + return RelocationError.cantMoveIntoFamily(v) case "other": return RelocationError.other default: @@ -5651,6 +5677,8 @@ open class Files { case cantMoveSharedFolder /// Some content cannot be moved into Vault under certain circumstances, see detailed error. case cantMoveIntoVault(Files.MoveIntoVaultError) + /// Some content cannot be moved into the Family Room folder under certain circumstances, see detailed error. + case cantMoveIntoFamily(Files.MoveIntoFamilyError) /// An unspecified error. case other /// There are too many write operations in user's Dropbox. Please retry this request. @@ -5716,6 +5744,10 @@ open class Files { var d = ["cant_move_into_vault": Files.MoveIntoVaultErrorSerializer().serialize(arg)] d[".tag"] = .str("cant_move_into_vault") return .dictionary(d) + case .cantMoveIntoFamily(let arg): + var d = ["cant_move_into_family": Files.MoveIntoFamilyErrorSerializer().serialize(arg)] + d[".tag"] = .str("cant_move_into_family") + return .dictionary(d) case .other: var d = [String: JSON]() d[".tag"] = .str("other") @@ -5761,6 +5793,9 @@ open class Files { case "cant_move_into_vault": let v = Files.MoveIntoVaultErrorSerializer().deserialize(d["cant_move_into_vault"] ?? .null) return RelocationBatchError.cantMoveIntoVault(v) + case "cant_move_into_family": + let v = Files.MoveIntoFamilyErrorSerializer().deserialize(d["cant_move_into_family"] ?? .null) + return RelocationBatchError.cantMoveIntoFamily(v) case "other": return RelocationBatchError.other case "too_many_write_operations": @@ -8287,12 +8322,64 @@ open class Files { } } + /// The UploadArg struct + open class UploadArg: Files.CommitInfo { + /// A hash of the file content uploaded in this call. If provided and the uploaded content does not match this + /// hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. + public let contentHash: String? + public init(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, contentHash: String? = nil) { + nullableValidator(stringValidator(minLength: 64, maxLength: 64))(contentHash) + self.contentHash = contentHash + super.init(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadArgSerializer().serialize(self)))" + } + } + open class UploadArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "mode": Files.WriteModeSerializer().serialize(value.mode), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + "client_modified": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.clientModified), + "mute": Serialization._BoolSerializer.serialize(value.mute), + "property_groups": NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).serialize(value.propertyGroups), + "strict_conflict": Serialization._BoolSerializer.serialize(value.strictConflict), + "content_hash": NullableSerializer(Serialization._StringSerializer).serialize(value.contentHash), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let mode = Files.WriteModeSerializer().deserialize(dict["mode"] ?? Files.WriteModeSerializer().serialize(.add)) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + let clientModified = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["client_modified"] ?? .null) + let mute = Serialization._BoolSerializer.deserialize(dict["mute"] ?? .number(0)) + let propertyGroups = NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).deserialize(dict["property_groups"] ?? .null) + let strictConflict = Serialization._BoolSerializer.deserialize(dict["strict_conflict"] ?? .number(0)) + let contentHash = NullableSerializer(Serialization._StringSerializer).deserialize(dict["content_hash"] ?? .null) + return UploadArg(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict, contentHash: contentHash) + default: + fatalError("Type error deserializing") + } + } + } + /// The UploadError union public enum UploadError: CustomStringConvertible { /// Unable to save the uploaded contents to a file. case path(Files.UploadWriteFailed) /// The supplied property group is invalid. The file has uploaded without property groups. case propertiesError(FileProperties.InvalidPropertyGroupError) + /// The request payload must be at most 150 MB. + case payloadTooLarge + /// The content received by the Dropbox server in this call does not match the provided content hash. + case contentHashMismatch /// An unspecified error. case other @@ -8312,6 +8399,14 @@ open class Files { var d = ["properties_error": FileProperties.InvalidPropertyGroupErrorSerializer().serialize(arg)] d[".tag"] = .str("properties_error") return .dictionary(d) + case .payloadTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("payload_too_large") + return .dictionary(d) + case .contentHashMismatch: + var d = [String: JSON]() + d[".tag"] = .str("content_hash_mismatch") + return .dictionary(d) case .other: var d = [String: JSON]() d[".tag"] = .str("other") @@ -8329,6 +8424,10 @@ open class Files { case "properties_error": let v = FileProperties.InvalidPropertyGroupErrorSerializer().deserialize(d["properties_error"] ?? .null) return UploadError.propertiesError(v) + case "payload_too_large": + return UploadError.payloadTooLarge + case "content_hash_mismatch": + return UploadError.contentHashMismatch case "other": return UploadError.other default: @@ -8340,30 +8439,113 @@ open class Files { } } - /// The UploadErrorWithProperties union - public enum UploadErrorWithProperties: CustomStringConvertible { - /// Unable to save the uploaded contents to a file. - case path(Files.UploadWriteFailed) - /// The supplied property group is invalid. The file has uploaded without property groups. - case propertiesError(FileProperties.InvalidPropertyGroupError) + /// The UploadSessionAppendArg struct + open class UploadSessionAppendArg: CustomStringConvertible { + /// Contains the upload session ID and the offset. + public let cursor: Files.UploadSessionCursor + /// If true, the current session will be closed, at which point you won't be able to call uploadSessionAppendV2 + /// anymore with the current session. + public let close: Bool + /// A hash of the file content uploaded in this call. If provided and the uploaded content does not match this + /// hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. + public let contentHash: String? + public init(cursor: Files.UploadSessionCursor, close: Bool = false, contentHash: String? = nil) { + self.cursor = cursor + self.close = close + nullableValidator(stringValidator(minLength: 64, maxLength: 64))(contentHash) + self.contentHash = contentHash + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionAppendArgSerializer().serialize(self)))" + } + } + open class UploadSessionAppendArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionAppendArg) -> JSON { + let output = [ + "cursor": Files.UploadSessionCursorSerializer().serialize(value.cursor), + "close": Serialization._BoolSerializer.serialize(value.close), + "content_hash": NullableSerializer(Serialization._StringSerializer).serialize(value.contentHash), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionAppendArg { + switch json { + case .dictionary(let dict): + let cursor = Files.UploadSessionCursorSerializer().deserialize(dict["cursor"] ?? .null) + let close = Serialization._BoolSerializer.deserialize(dict["close"] ?? .number(0)) + let contentHash = NullableSerializer(Serialization._StringSerializer).deserialize(dict["content_hash"] ?? .null) + return UploadSessionAppendArg(cursor: cursor, close: close, contentHash: contentHash) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionLookupError union + public enum UploadSessionLookupError: CustomStringConvertible { + /// The upload session ID was not found or has expired. Upload sessions are valid for 7 days. + case notFound + /// The specified offset was incorrect. See the value for the correct offset. This error may occur when a + /// previous request was received and processed successfully but the client did not receive the response, e.g. + /// due to a network error. + case incorrectOffset(Files.UploadSessionOffsetError) + /// You are attempting to append data to an upload session that has already been closed (i.e. committed). + case closed + /// The session must be closed before calling upload_session/finish_batch. + case notClosed + /// You can not append to the upload session because the size of a file should not reach the max file size limit + /// (i.e. 350GB). + case tooLarge + /// For concurrent upload sessions, offset needs to be multiple of 4194304 bytes. + case concurrentSessionInvalidOffset + /// For concurrent upload sessions, only chunks with size multiple of 4194304 bytes can be uploaded. + case concurrentSessionInvalidDataSize + /// The request payload must be at most 150 MB. + case payloadTooLarge /// An unspecified error. case other public var description: String { - return "\(SerializeUtil.prepareJSONForSerialization(UploadErrorWithPropertiesSerializer().serialize(self)))" + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionLookupErrorSerializer().serialize(self)))" } } - open class UploadErrorWithPropertiesSerializer: JSONSerializer { + open class UploadSessionLookupErrorSerializer: JSONSerializer { public init() { } - open func serialize(_ value: UploadErrorWithProperties) -> JSON { + open func serialize(_ value: UploadSessionLookupError) -> JSON { switch value { - case .path(let arg): - var d = Serialization.getFields(Files.UploadWriteFailedSerializer().serialize(arg)) - d[".tag"] = .str("path") + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") return .dictionary(d) - case .propertiesError(let arg): - var d = ["properties_error": FileProperties.InvalidPropertyGroupErrorSerializer().serialize(arg)] - d[".tag"] = .str("properties_error") + case .incorrectOffset(let arg): + var d = Serialization.getFields(Files.UploadSessionOffsetErrorSerializer().serialize(arg)) + d[".tag"] = .str("incorrect_offset") + return .dictionary(d) + case .closed: + var d = [String: JSON]() + d[".tag"] = .str("closed") + return .dictionary(d) + case .notClosed: + var d = [String: JSON]() + d[".tag"] = .str("not_closed") + return .dictionary(d) + case .tooLarge: + var d = [String: JSON]() + d[".tag"] = .str("too_large") + return .dictionary(d) + case .concurrentSessionInvalidOffset: + var d = [String: JSON]() + d[".tag"] = .str("concurrent_session_invalid_offset") + return .dictionary(d) + case .concurrentSessionInvalidDataSize: + var d = [String: JSON]() + d[".tag"] = .str("concurrent_session_invalid_data_size") + return .dictionary(d) + case .payloadTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("payload_too_large") return .dictionary(d) case .other: var d = [String: JSON]() @@ -8371,21 +8553,32 @@ open class Files { return .dictionary(d) } } - open func deserialize(_ json: JSON) -> UploadErrorWithProperties { + open func deserialize(_ json: JSON) -> UploadSessionLookupError { switch json { case .dictionary(let d): let tag = Serialization.getTag(d) switch tag { - case "path": - let v = Files.UploadWriteFailedSerializer().deserialize(json) - return UploadErrorWithProperties.path(v) - case "properties_error": - let v = FileProperties.InvalidPropertyGroupErrorSerializer().deserialize(d["properties_error"] ?? .null) - return UploadErrorWithProperties.propertiesError(v) + case "not_found": + return UploadSessionLookupError.notFound + case "incorrect_offset": + let v = Files.UploadSessionOffsetErrorSerializer().deserialize(json) + return UploadSessionLookupError.incorrectOffset(v) + case "closed": + return UploadSessionLookupError.closed + case "not_closed": + return UploadSessionLookupError.notClosed + case "too_large": + return UploadSessionLookupError.tooLarge + case "concurrent_session_invalid_offset": + return UploadSessionLookupError.concurrentSessionInvalidOffset + case "concurrent_session_invalid_data_size": + return UploadSessionLookupError.concurrentSessionInvalidDataSize + case "payload_too_large": + return UploadSessionLookupError.payloadTooLarge case "other": - return UploadErrorWithProperties.other + return UploadSessionLookupError.other default: - fatalError("Unknown tag \(tag)") + return UploadSessionLookupError.other } default: fatalError("Failed to deserialize") @@ -8393,38 +8586,113 @@ open class Files { } } - /// The UploadSessionAppendArg struct - open class UploadSessionAppendArg: CustomStringConvertible { - /// Contains the upload session ID and the offset. - public let cursor: Files.UploadSessionCursor - /// If true, the current session will be closed, at which point you won't be able to call uploadSessionAppendV2 - /// anymore with the current session. - public let close: Bool - public init(cursor: Files.UploadSessionCursor, close: Bool = false) { - self.cursor = cursor - self.close = close - } - open var description: String { - return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionAppendArgSerializer().serialize(self)))" + /// The UploadSessionAppendError union + public enum UploadSessionAppendError: CustomStringConvertible { + /// The upload session ID was not found or has expired. Upload sessions are valid for 7 days. + case notFound + /// The specified offset was incorrect. See the value for the correct offset. This error may occur when a + /// previous request was received and processed successfully but the client did not receive the response, e.g. + /// due to a network error. + case incorrectOffset(Files.UploadSessionOffsetError) + /// You are attempting to append data to an upload session that has already been closed (i.e. committed). + case closed + /// The session must be closed before calling upload_session/finish_batch. + case notClosed + /// You can not append to the upload session because the size of a file should not reach the max file size limit + /// (i.e. 350GB). + case tooLarge + /// For concurrent upload sessions, offset needs to be multiple of 4194304 bytes. + case concurrentSessionInvalidOffset + /// For concurrent upload sessions, only chunks with size multiple of 4194304 bytes can be uploaded. + case concurrentSessionInvalidDataSize + /// The request payload must be at most 150 MB. + case payloadTooLarge + /// An unspecified error. + case other + /// The content received by the Dropbox server in this call does not match the provided content hash. + case contentHashMismatch + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionAppendErrorSerializer().serialize(self)))" } } - open class UploadSessionAppendArgSerializer: JSONSerializer { + open class UploadSessionAppendErrorSerializer: JSONSerializer { public init() { } - open func serialize(_ value: UploadSessionAppendArg) -> JSON { - let output = [ - "cursor": Files.UploadSessionCursorSerializer().serialize(value.cursor), - "close": Serialization._BoolSerializer.serialize(value.close), - ] - return .dictionary(output) + open func serialize(_ value: UploadSessionAppendError) -> JSON { + switch value { + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .incorrectOffset(let arg): + var d = Serialization.getFields(Files.UploadSessionOffsetErrorSerializer().serialize(arg)) + d[".tag"] = .str("incorrect_offset") + return .dictionary(d) + case .closed: + var d = [String: JSON]() + d[".tag"] = .str("closed") + return .dictionary(d) + case .notClosed: + var d = [String: JSON]() + d[".tag"] = .str("not_closed") + return .dictionary(d) + case .tooLarge: + var d = [String: JSON]() + d[".tag"] = .str("too_large") + return .dictionary(d) + case .concurrentSessionInvalidOffset: + var d = [String: JSON]() + d[".tag"] = .str("concurrent_session_invalid_offset") + return .dictionary(d) + case .concurrentSessionInvalidDataSize: + var d = [String: JSON]() + d[".tag"] = .str("concurrent_session_invalid_data_size") + return .dictionary(d) + case .payloadTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("payload_too_large") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .contentHashMismatch: + var d = [String: JSON]() + d[".tag"] = .str("content_hash_mismatch") + return .dictionary(d) + } } - open func deserialize(_ json: JSON) -> UploadSessionAppendArg { + open func deserialize(_ json: JSON) -> UploadSessionAppendError { switch json { - case .dictionary(let dict): - let cursor = Files.UploadSessionCursorSerializer().deserialize(dict["cursor"] ?? .null) - let close = Serialization._BoolSerializer.deserialize(dict["close"] ?? .number(0)) - return UploadSessionAppendArg(cursor: cursor, close: close) + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "not_found": + return UploadSessionAppendError.notFound + case "incorrect_offset": + let v = Files.UploadSessionOffsetErrorSerializer().deserialize(json) + return UploadSessionAppendError.incorrectOffset(v) + case "closed": + return UploadSessionAppendError.closed + case "not_closed": + return UploadSessionAppendError.notClosed + case "too_large": + return UploadSessionAppendError.tooLarge + case "concurrent_session_invalid_offset": + return UploadSessionAppendError.concurrentSessionInvalidOffset + case "concurrent_session_invalid_data_size": + return UploadSessionAppendError.concurrentSessionInvalidDataSize + case "payload_too_large": + return UploadSessionAppendError.payloadTooLarge + case "other": + return UploadSessionAppendError.other + case "content_hash_mismatch": + return UploadSessionAppendError.contentHashMismatch + default: + fatalError("Unknown tag \(tag)") + } default: - fatalError("Type error deserializing") + fatalError("Failed to deserialize") } } } @@ -8473,9 +8741,15 @@ open class Files { public let cursor: Files.UploadSessionCursor /// Contains the path and other optional modifiers for the commit. public let commit: Files.CommitInfo - public init(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo) { + /// A hash of the file content uploaded in this call. If provided and the uploaded content does not match this + /// hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. + public let contentHash: String? + public init(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, contentHash: String? = nil) { self.cursor = cursor self.commit = commit + nullableValidator(stringValidator(minLength: 64, maxLength: 64))(contentHash) + self.contentHash = contentHash } open var description: String { return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishArgSerializer().serialize(self)))" @@ -8487,6 +8761,7 @@ open class Files { let output = [ "cursor": Files.UploadSessionCursorSerializer().serialize(value.cursor), "commit": Files.CommitInfoSerializer().serialize(value.commit), + "content_hash": NullableSerializer(Serialization._StringSerializer).serialize(value.contentHash), ] return .dictionary(output) } @@ -8495,7 +8770,8 @@ open class Files { case .dictionary(let dict): let cursor = Files.UploadSessionCursorSerializer().deserialize(dict["cursor"] ?? .null) let commit = Files.CommitInfoSerializer().deserialize(dict["commit"] ?? .null) - return UploadSessionFinishArg(cursor: cursor, commit: commit) + let contentHash = NullableSerializer(Serialization._StringSerializer).deserialize(dict["content_hash"] ?? .null) + return UploadSessionFinishArg(cursor: cursor, commit: commit, contentHash: contentHash) default: fatalError("Type error deserializing") } @@ -8727,6 +9003,10 @@ open class Files { case concurrentSessionNotClosed /// Not all pieces of data were uploaded before trying to finish the session. case concurrentSessionMissingData + /// The request payload must be at most 150 MB. + case payloadTooLarge + /// The content received by the Dropbox server in this call does not match the provided content hash. + case contentHashMismatch /// An unspecified error. case other @@ -8770,6 +9050,14 @@ open class Files { var d = [String: JSON]() d[".tag"] = .str("concurrent_session_missing_data") return .dictionary(d) + case .payloadTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("payload_too_large") + return .dictionary(d) + case .contentHashMismatch: + var d = [String: JSON]() + d[".tag"] = .str("content_hash_mismatch") + return .dictionary(d) case .other: var d = [String: JSON]() d[".tag"] = .str("other") @@ -8800,6 +9088,10 @@ open class Files { return UploadSessionFinishError.concurrentSessionNotClosed case "concurrent_session_missing_data": return UploadSessionFinishError.concurrentSessionMissingData + case "payload_too_large": + return UploadSessionFinishError.payloadTooLarge + case "content_hash_mismatch": + return UploadSessionFinishError.contentHashMismatch case "other": return UploadSessionFinishError.other default: @@ -8811,101 +9103,6 @@ open class Files { } } - /// The UploadSessionLookupError union - public enum UploadSessionLookupError: CustomStringConvertible { - /// The upload session ID was not found or has expired. Upload sessions are valid for 7 days. - case notFound - /// The specified offset was incorrect. See the value for the correct offset. This error may occur when a - /// previous request was received and processed successfully but the client did not receive the response, e.g. - /// due to a network error. - case incorrectOffset(Files.UploadSessionOffsetError) - /// You are attempting to append data to an upload session that has already been closed (i.e. committed). - case closed - /// The session must be closed before calling upload_session/finish_batch. - case notClosed - /// You can not append to the upload session because the size of a file should not reach the max file size limit - /// (i.e. 350GB). - case tooLarge - /// For concurrent upload sessions, offset needs to be multiple of 4194304 bytes. - case concurrentSessionInvalidOffset - /// For concurrent upload sessions, only chunks with size multiple of 4194304 bytes can be uploaded. - case concurrentSessionInvalidDataSize - /// An unspecified error. - case other - - public var description: String { - return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionLookupErrorSerializer().serialize(self)))" - } - } - open class UploadSessionLookupErrorSerializer: JSONSerializer { - public init() { } - open func serialize(_ value: UploadSessionLookupError) -> JSON { - switch value { - case .notFound: - var d = [String: JSON]() - d[".tag"] = .str("not_found") - return .dictionary(d) - case .incorrectOffset(let arg): - var d = Serialization.getFields(Files.UploadSessionOffsetErrorSerializer().serialize(arg)) - d[".tag"] = .str("incorrect_offset") - return .dictionary(d) - case .closed: - var d = [String: JSON]() - d[".tag"] = .str("closed") - return .dictionary(d) - case .notClosed: - var d = [String: JSON]() - d[".tag"] = .str("not_closed") - return .dictionary(d) - case .tooLarge: - var d = [String: JSON]() - d[".tag"] = .str("too_large") - return .dictionary(d) - case .concurrentSessionInvalidOffset: - var d = [String: JSON]() - d[".tag"] = .str("concurrent_session_invalid_offset") - return .dictionary(d) - case .concurrentSessionInvalidDataSize: - var d = [String: JSON]() - d[".tag"] = .str("concurrent_session_invalid_data_size") - return .dictionary(d) - case .other: - var d = [String: JSON]() - d[".tag"] = .str("other") - return .dictionary(d) - } - } - open func deserialize(_ json: JSON) -> UploadSessionLookupError { - switch json { - case .dictionary(let d): - let tag = Serialization.getTag(d) - switch tag { - case "not_found": - return UploadSessionLookupError.notFound - case "incorrect_offset": - let v = Files.UploadSessionOffsetErrorSerializer().deserialize(json) - return UploadSessionLookupError.incorrectOffset(v) - case "closed": - return UploadSessionLookupError.closed - case "not_closed": - return UploadSessionLookupError.notClosed - case "too_large": - return UploadSessionLookupError.tooLarge - case "concurrent_session_invalid_offset": - return UploadSessionLookupError.concurrentSessionInvalidOffset - case "concurrent_session_invalid_data_size": - return UploadSessionLookupError.concurrentSessionInvalidDataSize - case "other": - return UploadSessionLookupError.other - default: - return UploadSessionLookupError.other - } - default: - fatalError("Failed to deserialize") - } - } - } - /// The UploadSessionOffsetError struct open class UploadSessionOffsetError: CustomStringConvertible { /// The offset up to which data has been collected. @@ -8944,9 +9141,15 @@ open class Files { public let close: Bool /// Type of upload session you want to start. If not specified, default is sequential in UploadSessionType. public let sessionType: Files.UploadSessionType? - public init(close: Bool = false, sessionType: Files.UploadSessionType? = nil) { + /// A hash of the file content uploaded in this call. If provided and the uploaded content does not match this + /// hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. + public let contentHash: String? + public init(close: Bool = false, sessionType: Files.UploadSessionType? = nil, contentHash: String? = nil) { self.close = close self.sessionType = sessionType + nullableValidator(stringValidator(minLength: 64, maxLength: 64))(contentHash) + self.contentHash = contentHash } open var description: String { return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionStartArgSerializer().serialize(self)))" @@ -8958,6 +9161,7 @@ open class Files { let output = [ "close": Serialization._BoolSerializer.serialize(value.close), "session_type": NullableSerializer(Files.UploadSessionTypeSerializer()).serialize(value.sessionType), + "content_hash": NullableSerializer(Serialization._StringSerializer).serialize(value.contentHash), ] return .dictionary(output) } @@ -8966,7 +9170,8 @@ open class Files { case .dictionary(let dict): let close = Serialization._BoolSerializer.deserialize(dict["close"] ?? .number(0)) let sessionType = NullableSerializer(Files.UploadSessionTypeSerializer()).deserialize(dict["session_type"] ?? .null) - return UploadSessionStartArg(close: close, sessionType: sessionType) + let contentHash = NullableSerializer(Serialization._StringSerializer).deserialize(dict["content_hash"] ?? .null) + return UploadSessionStartArg(close: close, sessionType: sessionType, contentHash: contentHash) default: fatalError("Type error deserializing") } @@ -8979,6 +9184,10 @@ open class Files { case concurrentSessionDataNotAllowed /// Can not start a closed concurrent upload session. case concurrentSessionCloseNotAllowed + /// The request payload must be at most 150 MB. + case payloadTooLarge + /// The content received by the Dropbox server in this call does not match the provided content hash. + case contentHashMismatch /// An unspecified error. case other @@ -8998,6 +9207,14 @@ open class Files { var d = [String: JSON]() d[".tag"] = .str("concurrent_session_close_not_allowed") return .dictionary(d) + case .payloadTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("payload_too_large") + return .dictionary(d) + case .contentHashMismatch: + var d = [String: JSON]() + d[".tag"] = .str("content_hash_mismatch") + return .dictionary(d) case .other: var d = [String: JSON]() d[".tag"] = .str("other") @@ -9013,6 +9230,10 @@ open class Files { return UploadSessionStartError.concurrentSessionDataNotAllowed case "concurrent_session_close_not_allowed": return UploadSessionStartError.concurrentSessionCloseNotAllowed + case "payload_too_large": + return UploadSessionStartError.payloadTooLarge + case "content_hash_mismatch": + return UploadSessionStartError.contentHashMismatch case "other": return UploadSessionStartError.other default: @@ -9456,9 +9677,9 @@ open class Files { version: 1, namespace: "files", deprecated: true, - argSerializer: Files.CommitInfoWithPropertiesSerializer(), + argSerializer: Files.UploadArgSerializer(), responseSerializer: Files.FileMetadataSerializer(), - errorSerializer: Files.UploadErrorWithPropertiesSerializer(), + errorSerializer: Files.UploadErrorSerializer(), attrs: ["auth": "user", "host": "content", "style": "upload"] @@ -10164,7 +10385,7 @@ open class Files { version: 1, namespace: "files", deprecated: false, - argSerializer: Files.CommitInfoSerializer(), + argSerializer: Files.UploadArgSerializer(), responseSerializer: Files.FileMetadataSerializer(), errorSerializer: Files.UploadErrorSerializer(), attrs: ["auth": "user", @@ -10178,7 +10399,7 @@ open class Files { deprecated: false, argSerializer: Files.UploadSessionAppendArgSerializer(), responseSerializer: Serialization._VoidSerializer, - errorSerializer: Files.UploadSessionLookupErrorSerializer(), + errorSerializer: Files.UploadSessionAppendErrorSerializer(), attrs: ["auth": "user", "host": "content", "style": "upload"] @@ -10190,7 +10411,7 @@ open class Files { deprecated: true, argSerializer: Files.UploadSessionCursorSerializer(), responseSerializer: Serialization._VoidSerializer, - errorSerializer: Files.UploadSessionLookupErrorSerializer(), + errorSerializer: Files.UploadSessionAppendErrorSerializer(), attrs: ["auth": "user", "host": "content", "style": "upload"] diff --git a/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift b/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift index 5455552ee..3ad5a093e 100644 --- a/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift +++ b/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift @@ -28,48 +28,57 @@ open class FilesRoutes { return client.request(route, serverArgs: serverArgs) } - /// Create a new file with the contents provided in the request. Note that this endpoint is part of the properties - /// API alpha and is slightly different from upload. Do not use this to upload a file larger than 150 MB. Instead, - /// create an upload session with uploadSessionStart. + /// Create a new file with the contents provided in the request. Note that the behavior of this alpha endpoint is + /// unstable and subject to change. Do not use this to upload a file larger than 150 MB. Instead, create an upload + /// session with uploadSessionStart. /// + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an Data object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a - /// `Files.UploadErrorWithProperties` object on failure. - @available(*, unavailable, message:"alphaUpload is deprecated. Use alphaUpload.") - @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: Data) -> UploadRequest { + /// `Files.UploadError` object on failure. + @available(*, unavailable, message:"alphaUpload is deprecated. Use upload.") + @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, contentHash: String? = nil, input: Data) -> UploadRequest { let route = Files.alphaUpload - let serverArgs = Files.CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + let serverArgs = Files.UploadArg(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .data(input)) } - /// Create a new file with the contents provided in the request. Note that this endpoint is part of the properties - /// API alpha and is slightly different from upload. Do not use this to upload a file larger than 150 MB. Instead, - /// create an upload session with uploadSessionStart. + /// Create a new file with the contents provided in the request. Note that the behavior of this alpha endpoint is + /// unstable and subject to change. Do not use this to upload a file larger than 150 MB. Instead, create an upload + /// session with uploadSessionStart. /// + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an URL object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a - /// `Files.UploadErrorWithProperties` object on failure. - @available(*, unavailable, message:"alphaUpload is deprecated. Use alphaUpload.") - @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: URL) -> UploadRequest { + /// `Files.UploadError` object on failure. + @available(*, unavailable, message:"alphaUpload is deprecated. Use upload.") + @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, contentHash: String? = nil, input: URL) -> UploadRequest { let route = Files.alphaUpload - let serverArgs = Files.CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + let serverArgs = Files.UploadArg(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .file(input)) } - /// Create a new file with the contents provided in the request. Note that this endpoint is part of the properties - /// API alpha and is slightly different from upload. Do not use this to upload a file larger than 150 MB. Instead, - /// create an upload session with uploadSessionStart. + /// Create a new file with the contents provided in the request. Note that the behavior of this alpha endpoint is + /// unstable and subject to change. Do not use this to upload a file larger than 150 MB. Instead, create an upload + /// session with uploadSessionStart. /// + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an InputStream object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a - /// `Files.UploadErrorWithProperties` object on failure. - @available(*, unavailable, message:"alphaUpload is deprecated. Use alphaUpload.") - @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: InputStream) -> UploadRequest { + /// `Files.UploadError` object on failure. + @available(*, unavailable, message:"alphaUpload is deprecated. Use upload.") + @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, contentHash: String? = nil, input: InputStream) -> UploadRequest { let route = Files.alphaUpload - let serverArgs = Files.CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + let serverArgs = Files.UploadArg(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .stream(input)) } @@ -1159,7 +1168,8 @@ open class FilesRoutes { return client.request(route, serverArgs: serverArgs) } - /// Add a tag to an item. A tag is a string. No more than 20 tags can be added to a given item. + /// Add a tag to an item. A tag is a string. The strings are automatically converted to lowercase letters. No more + /// than 20 tags can be added to a given item. /// /// - parameter path: Path to the item to be tagged. /// - parameter tagText: The value of the tag to add. @@ -1218,29 +1228,16 @@ open class FilesRoutes { /// month. For more information, see the Data transport limit page /// https://www.dropbox.com/developers/reference/data-transport-limit. /// - /// - parameter path: Path in the user's Dropbox to save the file. - /// - parameter mode: Selects what to do if the file already exists. - /// - parameter autorename: If there's a conflict, as determined by mode, have the Dropbox server try to autorename - /// the file to avoid conflict. - /// - parameter clientModified: The value to store as the clientModified timestamp. Dropbox automatically records - /// the time at which the file was written to the Dropbox servers. It can also record an additional timestamp, - /// provided by Dropbox desktop clients, mobile clients, and API apps of when the file was actually created or - /// modified. - /// - parameter mute: Normally, users are made aware of any file modifications in their Dropbox account via - /// notifications in the client software. If true, this tells the clients that this modification shouldn't result in - /// a user notification. - /// - parameter propertyGroups: List of custom properties to add to file. - /// - parameter strictConflict: Be more strict about how each WriteMode detects conflict. For example, always return - /// a conflict error when mode = update in WriteMode and the given "rev" doesn't match the existing file's "rev", - /// even if the existing file has been deleted. This also forces a conflict even when the target path refers to a - /// file with identical contents. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an Data object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a /// `Files.UploadError` object on failure. - @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: Data) -> UploadRequest { + @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, contentHash: String? = nil, input: Data) -> UploadRequest { let route = Files.upload - let serverArgs = Files.CommitInfo(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + let serverArgs = Files.UploadArg(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .data(input)) } @@ -1250,29 +1247,16 @@ open class FilesRoutes { /// month. For more information, see the Data transport limit page /// https://www.dropbox.com/developers/reference/data-transport-limit. /// - /// - parameter path: Path in the user's Dropbox to save the file. - /// - parameter mode: Selects what to do if the file already exists. - /// - parameter autorename: If there's a conflict, as determined by mode, have the Dropbox server try to autorename - /// the file to avoid conflict. - /// - parameter clientModified: The value to store as the clientModified timestamp. Dropbox automatically records - /// the time at which the file was written to the Dropbox servers. It can also record an additional timestamp, - /// provided by Dropbox desktop clients, mobile clients, and API apps of when the file was actually created or - /// modified. - /// - parameter mute: Normally, users are made aware of any file modifications in their Dropbox account via - /// notifications in the client software. If true, this tells the clients that this modification shouldn't result in - /// a user notification. - /// - parameter propertyGroups: List of custom properties to add to file. - /// - parameter strictConflict: Be more strict about how each WriteMode detects conflict. For example, always return - /// a conflict error when mode = update in WriteMode and the given "rev" doesn't match the existing file's "rev", - /// even if the existing file has been deleted. This also forces a conflict even when the target path refers to a - /// file with identical contents. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an URL object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a /// `Files.UploadError` object on failure. - @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: URL) -> UploadRequest { + @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, contentHash: String? = nil, input: URL) -> UploadRequest { let route = Files.upload - let serverArgs = Files.CommitInfo(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + let serverArgs = Files.UploadArg(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .file(input)) } @@ -1282,29 +1266,16 @@ open class FilesRoutes { /// month. For more information, see the Data transport limit page /// https://www.dropbox.com/developers/reference/data-transport-limit. /// - /// - parameter path: Path in the user's Dropbox to save the file. - /// - parameter mode: Selects what to do if the file already exists. - /// - parameter autorename: If there's a conflict, as determined by mode, have the Dropbox server try to autorename - /// the file to avoid conflict. - /// - parameter clientModified: The value to store as the clientModified timestamp. Dropbox automatically records - /// the time at which the file was written to the Dropbox servers. It can also record an additional timestamp, - /// provided by Dropbox desktop clients, mobile clients, and API apps of when the file was actually created or - /// modified. - /// - parameter mute: Normally, users are made aware of any file modifications in their Dropbox account via - /// notifications in the client software. If true, this tells the clients that this modification shouldn't result in - /// a user notification. - /// - parameter propertyGroups: List of custom properties to add to file. - /// - parameter strictConflict: Be more strict about how each WriteMode detects conflict. For example, always return - /// a conflict error when mode = update in WriteMode and the given "rev" doesn't match the existing file's "rev", - /// even if the existing file has been deleted. This also forces a conflict even when the target path refers to a - /// file with identical contents. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an InputStream object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a /// `Files.UploadError` object on failure. - @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: InputStream) -> UploadRequest { + @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, contentHash: String? = nil, input: InputStream) -> UploadRequest { let route = Files.upload - let serverArgs = Files.CommitInfo(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + let serverArgs = Files.UploadArg(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .stream(input)) } @@ -1317,13 +1288,16 @@ open class FilesRoutes { /// - parameter cursor: Contains the upload session ID and the offset. /// - parameter close: If true, the current session will be closed, at which point you won't be able to call /// uploadSessionAppendV2 anymore with the current session. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an Data object. /// /// - returns: Through the response callback, the caller will receive a `Void` object on success or a - /// `Files.UploadSessionLookupError` object on failure. - @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, input: Data) -> UploadRequest { + /// `Files.UploadSessionAppendError` object on failure. + @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, contentHash: String? = nil, input: Data) -> UploadRequest { let route = Files.uploadSessionAppendV2 - let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close) + let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .data(input)) } @@ -1336,13 +1310,16 @@ open class FilesRoutes { /// - parameter cursor: Contains the upload session ID and the offset. /// - parameter close: If true, the current session will be closed, at which point you won't be able to call /// uploadSessionAppendV2 anymore with the current session. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an URL object. /// /// - returns: Through the response callback, the caller will receive a `Void` object on success or a - /// `Files.UploadSessionLookupError` object on failure. - @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, input: URL) -> UploadRequest { + /// `Files.UploadSessionAppendError` object on failure. + @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, contentHash: String? = nil, input: URL) -> UploadRequest { let route = Files.uploadSessionAppendV2 - let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close) + let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .file(input)) } @@ -1355,13 +1332,16 @@ open class FilesRoutes { /// - parameter cursor: Contains the upload session ID and the offset. /// - parameter close: If true, the current session will be closed, at which point you won't be able to call /// uploadSessionAppendV2 anymore with the current session. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an InputStream object. /// /// - returns: Through the response callback, the caller will receive a `Void` object on success or a - /// `Files.UploadSessionLookupError` object on failure. - @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, input: InputStream) -> UploadRequest { + /// `Files.UploadSessionAppendError` object on failure. + @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, contentHash: String? = nil, input: InputStream) -> UploadRequest { let route = Files.uploadSessionAppendV2 - let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close) + let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .stream(input)) } @@ -1377,9 +1357,9 @@ open class FilesRoutes { /// - parameter input: The file to upload, as an Data object. /// /// - returns: Through the response callback, the caller will receive a `Void` object on success or a - /// `Files.UploadSessionLookupError` object on failure. + /// `Files.UploadSessionAppendError` object on failure. @available(*, unavailable, message:"uploadSessionAppend is deprecated. Use uploadSessionAppendV2.") - @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: Data) -> UploadRequest { + @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: Data) -> UploadRequest { let route = Files.uploadSessionAppend let serverArgs = Files.UploadSessionCursor(sessionId: sessionId, offset: offset) return client.request(route, serverArgs: serverArgs, input: .data(input)) @@ -1397,9 +1377,9 @@ open class FilesRoutes { /// - parameter input: The file to upload, as an URL object. /// /// - returns: Through the response callback, the caller will receive a `Void` object on success or a - /// `Files.UploadSessionLookupError` object on failure. + /// `Files.UploadSessionAppendError` object on failure. @available(*, unavailable, message:"uploadSessionAppend is deprecated. Use uploadSessionAppendV2.") - @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: URL) -> UploadRequest { + @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: URL) -> UploadRequest { let route = Files.uploadSessionAppend let serverArgs = Files.UploadSessionCursor(sessionId: sessionId, offset: offset) return client.request(route, serverArgs: serverArgs, input: .file(input)) @@ -1417,9 +1397,9 @@ open class FilesRoutes { /// - parameter input: The file to upload, as an InputStream object. /// /// - returns: Through the response callback, the caller will receive a `Void` object on success or a - /// `Files.UploadSessionLookupError` object on failure. + /// `Files.UploadSessionAppendError` object on failure. @available(*, unavailable, message:"uploadSessionAppend is deprecated. Use uploadSessionAppendV2.") - @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: InputStream) -> UploadRequest { + @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: InputStream) -> UploadRequest { let route = Files.uploadSessionAppend let serverArgs = Files.UploadSessionCursor(sessionId: sessionId, offset: offset) return client.request(route, serverArgs: serverArgs, input: .stream(input)) @@ -1433,13 +1413,16 @@ open class FilesRoutes { /// /// - parameter cursor: Contains the upload session ID and the offset. /// - parameter commit: Contains the path and other optional modifiers for the commit. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an Data object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a /// `Files.UploadSessionFinishError` object on failure. - @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, input: Data) -> UploadRequest { + @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, contentHash: String? = nil, input: Data) -> UploadRequest { let route = Files.uploadSessionFinish - let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit) + let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .data(input)) } @@ -1451,13 +1434,16 @@ open class FilesRoutes { /// /// - parameter cursor: Contains the upload session ID and the offset. /// - parameter commit: Contains the path and other optional modifiers for the commit. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an URL object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a /// `Files.UploadSessionFinishError` object on failure. - @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, input: URL) -> UploadRequest { + @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, contentHash: String? = nil, input: URL) -> UploadRequest { let route = Files.uploadSessionFinish - let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit) + let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .file(input)) } @@ -1469,13 +1455,16 @@ open class FilesRoutes { /// /// - parameter cursor: Contains the upload session ID and the offset. /// - parameter commit: Contains the path and other optional modifiers for the commit. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an InputStream object. /// /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a /// `Files.UploadSessionFinishError` object on failure. - @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, input: InputStream) -> UploadRequest { + @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, contentHash: String? = nil, input: InputStream) -> UploadRequest { let route = Files.uploadSessionFinish - let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit) + let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .stream(input)) } @@ -1561,13 +1550,16 @@ open class FilesRoutes { /// uploadSessionAppendV2 anymore with the current session. /// - parameter sessionType: Type of upload session you want to start. If not specified, default is sequential in /// UploadSessionType. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an Data object. /// /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionStartResult` object on /// success or a `Files.UploadSessionStartError` object on failure. - @discardableResult open func uploadSessionStart(close: Bool = false, sessionType: Files.UploadSessionType? = nil, input: Data) -> UploadRequest { + @discardableResult open func uploadSessionStart(close: Bool = false, sessionType: Files.UploadSessionType? = nil, contentHash: String? = nil, input: Data) -> UploadRequest { let route = Files.uploadSessionStart - let serverArgs = Files.UploadSessionStartArg(close: close, sessionType: sessionType) + let serverArgs = Files.UploadSessionStartArg(close: close, sessionType: sessionType, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .data(input)) } @@ -1595,13 +1587,16 @@ open class FilesRoutes { /// uploadSessionAppendV2 anymore with the current session. /// - parameter sessionType: Type of upload session you want to start. If not specified, default is sequential in /// UploadSessionType. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an URL object. /// /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionStartResult` object on /// success or a `Files.UploadSessionStartError` object on failure. - @discardableResult open func uploadSessionStart(close: Bool = false, sessionType: Files.UploadSessionType? = nil, input: URL) -> UploadRequest { + @discardableResult open func uploadSessionStart(close: Bool = false, sessionType: Files.UploadSessionType? = nil, contentHash: String? = nil, input: URL) -> UploadRequest { let route = Files.uploadSessionStart - let serverArgs = Files.UploadSessionStartArg(close: close, sessionType: sessionType) + let serverArgs = Files.UploadSessionStartArg(close: close, sessionType: sessionType, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .file(input)) } @@ -1629,13 +1624,16 @@ open class FilesRoutes { /// uploadSessionAppendV2 anymore with the current session. /// - parameter sessionType: Type of upload session you want to start. If not specified, default is sequential in /// UploadSessionType. + /// - parameter contentHash: A hash of the file content uploaded in this call. If provided and the uploaded content + /// does not match this hash, an error will be returned. For more information see our Content hash + /// https://www.dropbox.com/developers/reference/content-hash page. /// - parameter input: The file to upload, as an InputStream object. /// /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionStartResult` object on /// success or a `Files.UploadSessionStartError` object on failure. - @discardableResult open func uploadSessionStart(close: Bool = false, sessionType: Files.UploadSessionType? = nil, input: InputStream) -> UploadRequest { + @discardableResult open func uploadSessionStart(close: Bool = false, sessionType: Files.UploadSessionType? = nil, contentHash: String? = nil, input: InputStream) -> UploadRequest { let route = Files.uploadSessionStart - let serverArgs = Files.UploadSessionStartArg(close: close, sessionType: sessionType) + let serverArgs = Files.UploadSessionStartArg(close: close, sessionType: sessionType, contentHash: contentHash) return client.request(route, serverArgs: serverArgs, input: .stream(input)) } diff --git a/Source/SwiftyDropbox/Shared/Generated/Sharing.swift b/Source/SwiftyDropbox/Shared/Generated/Sharing.swift index a03debc79..147dcf15d 100644 --- a/Source/SwiftyDropbox/Shared/Generated/Sharing.swift +++ b/Source/SwiftyDropbox/Shared/Generated/Sharing.swift @@ -70,6 +70,8 @@ open class Sharing { case viewer /// The collaborator can only view the shared folder and does not have any access to comments. case viewerNoComment + /// The collaborator can only view the shared folder that they have access to. + case traverse /// An unspecified error. case other @@ -97,6 +99,10 @@ open class Sharing { var d = [String: JSON]() d[".tag"] = .str("viewer_no_comment") return .dictionary(d) + case .traverse: + var d = [String: JSON]() + d[".tag"] = .str("traverse") + return .dictionary(d) case .other: var d = [String: JSON]() d[".tag"] = .str("other") @@ -116,6 +122,8 @@ open class Sharing { return AccessLevel.viewer case "viewer_no_comment": return AccessLevel.viewerNoComment + case "traverse": + return AccessLevel.traverse case "other": return AccessLevel.other default: @@ -188,7 +196,7 @@ open class Sharing { public let members: Array /// Message to send to added members in their invitation. public let customMessage: String? - /// Whether added members should be notified via device notifications of their invitation. + /// Whether added members should be notified via email and device notifications of their invitation. public let quiet: Bool /// AccessLevel union object, describing what access level we want to give new members. public let accessLevel: Sharing.AccessLevel diff --git a/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift b/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift index a6f673ad1..88cb8ece2 100644 --- a/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift +++ b/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift @@ -19,7 +19,8 @@ open class SharingRoutes { /// - parameter members: Members to add. Note that even an email address is given, this may result in a user being /// directly added to the membership if that email is the user's main account email. /// - parameter customMessage: Message to send to added members in their invitation. - /// - parameter quiet: Whether added members should be notified via device notifications of their invitation. + /// - parameter quiet: Whether added members should be notified via email and device notifications of their + /// invitation. /// - parameter accessLevel: AccessLevel union object, describing what access level we want to give new members. /// - parameter addMessageAsComment: If the custom message should be added as a comment on the file. /// diff --git a/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift b/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift index dca143c25..fe43684b3 100644 --- a/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift +++ b/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift @@ -4658,6 +4658,116 @@ open class TeamLog { } } + /// Requested data residency migration for team data. + open class DataResidencyMigrationRequestSuccessfulDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataResidencyMigrationRequestSuccessfulDetailsSerializer().serialize(self)))" + } + } + open class DataResidencyMigrationRequestSuccessfulDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataResidencyMigrationRequestSuccessfulDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataResidencyMigrationRequestSuccessfulDetails { + switch json { + case .dictionary(_): + return DataResidencyMigrationRequestSuccessfulDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DataResidencyMigrationRequestSuccessfulType struct + open class DataResidencyMigrationRequestSuccessfulType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataResidencyMigrationRequestSuccessfulTypeSerializer().serialize(self)))" + } + } + open class DataResidencyMigrationRequestSuccessfulTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataResidencyMigrationRequestSuccessfulType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataResidencyMigrationRequestSuccessfulType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DataResidencyMigrationRequestSuccessfulType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Request for data residency migration for team data has failed. + open class DataResidencyMigrationRequestUnsuccessfulDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataResidencyMigrationRequestUnsuccessfulDetailsSerializer().serialize(self)))" + } + } + open class DataResidencyMigrationRequestUnsuccessfulDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataResidencyMigrationRequestUnsuccessfulDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataResidencyMigrationRequestUnsuccessfulDetails { + switch json { + case .dictionary(_): + return DataResidencyMigrationRequestUnsuccessfulDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DataResidencyMigrationRequestUnsuccessfulType struct + open class DataResidencyMigrationRequestUnsuccessfulType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataResidencyMigrationRequestUnsuccessfulTypeSerializer().serialize(self)))" + } + } + open class DataResidencyMigrationRequestUnsuccessfulTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataResidencyMigrationRequestUnsuccessfulType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataResidencyMigrationRequestUnsuccessfulType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DataResidencyMigrationRequestUnsuccessfulType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + /// Policy for the default number of days until an externally shared link expires public enum DefaultLinkExpirationDaysPolicy: CustomStringConvertible { /// An unspecified error. @@ -7213,6 +7323,131 @@ open class TeamLog { } } + /// Policy for deciding whether team users can use Dropbox Passwords + public enum DropboxPasswordsPolicy: CustomStringConvertible { + /// An unspecified error. + case default_ + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DropboxPasswordsPolicySerializer().serialize(self)))" + } + } + open class DropboxPasswordsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DropboxPasswordsPolicy) -> JSON { + switch value { + case .default_: + var d = [String: JSON]() + d[".tag"] = .str("default") + return .dictionary(d) + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DropboxPasswordsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "default": + return DropboxPasswordsPolicy.default_ + case "disabled": + return DropboxPasswordsPolicy.disabled + case "enabled": + return DropboxPasswordsPolicy.enabled + case "other": + return DropboxPasswordsPolicy.other + default: + return DropboxPasswordsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Changed Dropbox Passwords policy for team. + open class DropboxPasswordsPolicyChangedDetails: CustomStringConvertible { + /// To. + public let newValue: TeamLog.DropboxPasswordsPolicy + /// From. + public let previousValue: TeamLog.DropboxPasswordsPolicy + public init(newValue: TeamLog.DropboxPasswordsPolicy, previousValue: TeamLog.DropboxPasswordsPolicy) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DropboxPasswordsPolicyChangedDetailsSerializer().serialize(self)))" + } + } + open class DropboxPasswordsPolicyChangedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DropboxPasswordsPolicyChangedDetails) -> JSON { + let output = [ + "new_value": TeamLog.DropboxPasswordsPolicySerializer().serialize(value.newValue), + "previous_value": TeamLog.DropboxPasswordsPolicySerializer().serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DropboxPasswordsPolicyChangedDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.DropboxPasswordsPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = TeamLog.DropboxPasswordsPolicySerializer().deserialize(dict["previous_value"] ?? .null) + return DropboxPasswordsPolicyChangedDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DropboxPasswordsPolicyChangedType struct + open class DropboxPasswordsPolicyChangedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DropboxPasswordsPolicyChangedTypeSerializer().serialize(self)))" + } + } + open class DropboxPasswordsPolicyChangedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DropboxPasswordsPolicyChangedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DropboxPasswordsPolicyChangedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DropboxPasswordsPolicyChangedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + /// Represents a time duration: unit and amount open class DurationLogInfo: CustomStringConvertible { /// Time unit. @@ -7249,7 +7484,7 @@ open class TeamLog { } } - /// Policy for deciding whether a team can use Email to my Dropbox feature + /// Policy for deciding whether a team can use Email to Dropbox feature public enum EmailIngestPolicy: CustomStringConvertible { /// An unspecified error. case disabled @@ -7300,7 +7535,7 @@ open class TeamLog { } } - /// Changed email to my Dropbox policy for team. + /// Changed email to Dropbox policy for team. open class EmailIngestPolicyChangedDetails: CustomStringConvertible { /// To. public let newValue: TeamLog.EmailIngestPolicy @@ -7366,7 +7601,7 @@ open class TeamLog { } } - /// Received files via Email to my Dropbox. + /// Received files via Email to Dropbox. open class EmailIngestReceiveFileDetails: CustomStringConvertible { /// Inbox name. public let inboxName: String @@ -9110,6 +9345,8 @@ open class TeamLog { /// An unspecified error. case directoryRestrictionsRemoveMembersDetails(TeamLog.DirectoryRestrictionsRemoveMembersDetails) /// An unspecified error. + case dropboxPasswordsPolicyChangedDetails(TeamLog.DropboxPasswordsPolicyChangedDetails) + /// An unspecified error. case emailIngestPolicyChangedDetails(TeamLog.EmailIngestPolicyChangedDetails) /// An unspecified error. case emmAddExceptionDetails(TeamLog.EmmAddExceptionDetails) @@ -9240,6 +9477,10 @@ open class TeamLog { /// An unspecified error. case webSessionsChangeIdleLengthPolicyDetails(TeamLog.WebSessionsChangeIdleLengthPolicyDetails) /// An unspecified error. + case dataResidencyMigrationRequestSuccessfulDetails(TeamLog.DataResidencyMigrationRequestSuccessfulDetails) + /// An unspecified error. + case dataResidencyMigrationRequestUnsuccessfulDetails(TeamLog.DataResidencyMigrationRequestUnsuccessfulDetails) + /// An unspecified error. case teamMergeFromDetails(TeamLog.TeamMergeFromDetails) /// An unspecified error. case teamMergeToDetails(TeamLog.TeamMergeToDetails) @@ -10812,6 +11053,10 @@ open class TeamLog { var d = Serialization.getFields(TeamLog.DirectoryRestrictionsRemoveMembersDetailsSerializer().serialize(arg)) d[".tag"] = .str("directory_restrictions_remove_members_details") return .dictionary(d) + case .dropboxPasswordsPolicyChangedDetails(let arg): + var d = Serialization.getFields(TeamLog.DropboxPasswordsPolicyChangedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("dropbox_passwords_policy_changed_details") + return .dictionary(d) case .emailIngestPolicyChangedDetails(let arg): var d = Serialization.getFields(TeamLog.EmailIngestPolicyChangedDetailsSerializer().serialize(arg)) d[".tag"] = .str("email_ingest_policy_changed_details") @@ -11072,6 +11317,14 @@ open class TeamLog { var d = Serialization.getFields(TeamLog.WebSessionsChangeIdleLengthPolicyDetailsSerializer().serialize(arg)) d[".tag"] = .str("web_sessions_change_idle_length_policy_details") return .dictionary(d) + case .dataResidencyMigrationRequestSuccessfulDetails(let arg): + var d = Serialization.getFields(TeamLog.DataResidencyMigrationRequestSuccessfulDetailsSerializer().serialize(arg)) + d[".tag"] = .str("data_residency_migration_request_successful_details") + return .dictionary(d) + case .dataResidencyMigrationRequestUnsuccessfulDetails(let arg): + var d = Serialization.getFields(TeamLog.DataResidencyMigrationRequestUnsuccessfulDetailsSerializer().serialize(arg)) + d[".tag"] = .str("data_residency_migration_request_unsuccessful_details") + return .dictionary(d) case .teamMergeFromDetails(let arg): var d = Serialization.getFields(TeamLog.TeamMergeFromDetailsSerializer().serialize(arg)) d[".tag"] = .str("team_merge_from_details") @@ -12362,6 +12615,9 @@ open class TeamLog { case "directory_restrictions_remove_members_details": let v = TeamLog.DirectoryRestrictionsRemoveMembersDetailsSerializer().deserialize(json) return EventDetails.directoryRestrictionsRemoveMembersDetails(v) + case "dropbox_passwords_policy_changed_details": + let v = TeamLog.DropboxPasswordsPolicyChangedDetailsSerializer().deserialize(json) + return EventDetails.dropboxPasswordsPolicyChangedDetails(v) case "email_ingest_policy_changed_details": let v = TeamLog.EmailIngestPolicyChangedDetailsSerializer().deserialize(json) return EventDetails.emailIngestPolicyChangedDetails(v) @@ -12557,6 +12813,12 @@ open class TeamLog { case "web_sessions_change_idle_length_policy_details": let v = TeamLog.WebSessionsChangeIdleLengthPolicyDetailsSerializer().deserialize(json) return EventDetails.webSessionsChangeIdleLengthPolicyDetails(v) + case "data_residency_migration_request_successful_details": + let v = TeamLog.DataResidencyMigrationRequestSuccessfulDetailsSerializer().deserialize(json) + return EventDetails.dataResidencyMigrationRequestSuccessfulDetails(v) + case "data_residency_migration_request_unsuccessful_details": + let v = TeamLog.DataResidencyMigrationRequestUnsuccessfulDetailsSerializer().deserialize(json) + return EventDetails.dataResidencyMigrationRequestUnsuccessfulDetails(v) case "team_merge_from_details": let v = TeamLog.TeamMergeFromDetailsSerializer().deserialize(json) return EventDetails.teamMergeFromDetails(v) @@ -12897,7 +13159,7 @@ open class TeamLog { case userTagsAdded(TeamLog.UserTagsAddedType) /// (file_operations) Removed tags case userTagsRemoved(TeamLog.UserTagsRemovedType) - /// (file_requests) Received files via Email to my Dropbox + /// (file_requests) Received files via Email to Dropbox case emailIngestReceiveFile(TeamLog.EmailIngestReceiveFileType) /// (file_requests) Changed file request case fileRequestChange(TeamLog.FileRequestChangeType) @@ -13439,7 +13701,9 @@ open class TeamLog { case directoryRestrictionsAddMembers(TeamLog.DirectoryRestrictionsAddMembersType) /// (team_policies) Removed members from directory restrictions list case directoryRestrictionsRemoveMembers(TeamLog.DirectoryRestrictionsRemoveMembersType) - /// (team_policies) Changed email to my Dropbox policy for team + /// (team_policies) Changed Dropbox Passwords policy for team + case dropboxPasswordsPolicyChanged(TeamLog.DropboxPasswordsPolicyChangedType) + /// (team_policies) Changed email to Dropbox policy for team case emailIngestPolicyChanged(TeamLog.EmailIngestPolicyChangedType) /// (team_policies) Added members to EMM exception list case emmAddException(TeamLog.EmmAddExceptionType) @@ -13574,6 +13838,10 @@ open class TeamLog { case webSessionsChangeFixedLengthPolicy(TeamLog.WebSessionsChangeFixedLengthPolicyType) /// (team_policies) Changed how long team members can be idle while signed in to Dropbox.com case webSessionsChangeIdleLengthPolicy(TeamLog.WebSessionsChangeIdleLengthPolicyType) + /// (team_profile) Requested data residency migration for team data + case dataResidencyMigrationRequestSuccessful(TeamLog.DataResidencyMigrationRequestSuccessfulType) + /// (team_profile) Request for data residency migration for team data has failed + case dataResidencyMigrationRequestUnsuccessful(TeamLog.DataResidencyMigrationRequestUnsuccessfulType) /// (team_profile) Merged another team into this team case teamMergeFrom(TeamLog.TeamMergeFromType) /// (team_profile) Merged this team into another team @@ -15147,6 +15415,10 @@ open class TeamLog { var d = Serialization.getFields(TeamLog.DirectoryRestrictionsRemoveMembersTypeSerializer().serialize(arg)) d[".tag"] = .str("directory_restrictions_remove_members") return .dictionary(d) + case .dropboxPasswordsPolicyChanged(let arg): + var d = Serialization.getFields(TeamLog.DropboxPasswordsPolicyChangedTypeSerializer().serialize(arg)) + d[".tag"] = .str("dropbox_passwords_policy_changed") + return .dictionary(d) case .emailIngestPolicyChanged(let arg): var d = Serialization.getFields(TeamLog.EmailIngestPolicyChangedTypeSerializer().serialize(arg)) d[".tag"] = .str("email_ingest_policy_changed") @@ -15407,6 +15679,14 @@ open class TeamLog { var d = Serialization.getFields(TeamLog.WebSessionsChangeIdleLengthPolicyTypeSerializer().serialize(arg)) d[".tag"] = .str("web_sessions_change_idle_length_policy") return .dictionary(d) + case .dataResidencyMigrationRequestSuccessful(let arg): + var d = Serialization.getFields(TeamLog.DataResidencyMigrationRequestSuccessfulTypeSerializer().serialize(arg)) + d[".tag"] = .str("data_residency_migration_request_successful") + return .dictionary(d) + case .dataResidencyMigrationRequestUnsuccessful(let arg): + var d = Serialization.getFields(TeamLog.DataResidencyMigrationRequestUnsuccessfulTypeSerializer().serialize(arg)) + d[".tag"] = .str("data_residency_migration_request_unsuccessful") + return .dictionary(d) case .teamMergeFrom(let arg): var d = Serialization.getFields(TeamLog.TeamMergeFromTypeSerializer().serialize(arg)) d[".tag"] = .str("team_merge_from") @@ -16693,6 +16973,9 @@ open class TeamLog { case "directory_restrictions_remove_members": let v = TeamLog.DirectoryRestrictionsRemoveMembersTypeSerializer().deserialize(json) return EventType.directoryRestrictionsRemoveMembers(v) + case "dropbox_passwords_policy_changed": + let v = TeamLog.DropboxPasswordsPolicyChangedTypeSerializer().deserialize(json) + return EventType.dropboxPasswordsPolicyChanged(v) case "email_ingest_policy_changed": let v = TeamLog.EmailIngestPolicyChangedTypeSerializer().deserialize(json) return EventType.emailIngestPolicyChanged(v) @@ -16888,6 +17171,12 @@ open class TeamLog { case "web_sessions_change_idle_length_policy": let v = TeamLog.WebSessionsChangeIdleLengthPolicyTypeSerializer().deserialize(json) return EventType.webSessionsChangeIdleLengthPolicy(v) + case "data_residency_migration_request_successful": + let v = TeamLog.DataResidencyMigrationRequestSuccessfulTypeSerializer().deserialize(json) + return EventType.dataResidencyMigrationRequestSuccessful(v) + case "data_residency_migration_request_unsuccessful": + let v = TeamLog.DataResidencyMigrationRequestUnsuccessfulTypeSerializer().deserialize(json) + return EventType.dataResidencyMigrationRequestUnsuccessful(v) case "team_merge_from": let v = TeamLog.TeamMergeFromTypeSerializer().deserialize(json) return EventType.teamMergeFrom(v) @@ -17225,7 +17514,7 @@ open class TeamLog { case userTagsAdded /// (file_operations) Removed tags case userTagsRemoved - /// (file_requests) Received files via Email to my Dropbox + /// (file_requests) Received files via Email to Dropbox case emailIngestReceiveFile /// (file_requests) Changed file request case fileRequestChange @@ -17767,7 +18056,9 @@ open class TeamLog { case directoryRestrictionsAddMembers /// (team_policies) Removed members from directory restrictions list case directoryRestrictionsRemoveMembers - /// (team_policies) Changed email to my Dropbox policy for team + /// (team_policies) Changed Dropbox Passwords policy for team + case dropboxPasswordsPolicyChanged + /// (team_policies) Changed email to Dropbox policy for team case emailIngestPolicyChanged /// (team_policies) Added members to EMM exception list case emmAddException @@ -17902,6 +18193,10 @@ open class TeamLog { case webSessionsChangeFixedLengthPolicy /// (team_policies) Changed how long team members can be idle while signed in to Dropbox.com case webSessionsChangeIdleLengthPolicy + /// (team_profile) Requested data residency migration for team data + case dataResidencyMigrationRequestSuccessful + /// (team_profile) Request for data residency migration for team data has failed + case dataResidencyMigrationRequestUnsuccessful /// (team_profile) Merged another team into this team case teamMergeFrom /// (team_profile) Merged this team into another team @@ -19475,6 +19770,10 @@ open class TeamLog { var d = [String: JSON]() d[".tag"] = .str("directory_restrictions_remove_members") return .dictionary(d) + case .dropboxPasswordsPolicyChanged: + var d = [String: JSON]() + d[".tag"] = .str("dropbox_passwords_policy_changed") + return .dictionary(d) case .emailIngestPolicyChanged: var d = [String: JSON]() d[".tag"] = .str("email_ingest_policy_changed") @@ -19735,6 +20034,14 @@ open class TeamLog { var d = [String: JSON]() d[".tag"] = .str("web_sessions_change_idle_length_policy") return .dictionary(d) + case .dataResidencyMigrationRequestSuccessful: + var d = [String: JSON]() + d[".tag"] = .str("data_residency_migration_request_successful") + return .dictionary(d) + case .dataResidencyMigrationRequestUnsuccessful: + var d = [String: JSON]() + d[".tag"] = .str("data_residency_migration_request_unsuccessful") + return .dictionary(d) case .teamMergeFrom: var d = [String: JSON]() d[".tag"] = .str("team_merge_from") @@ -20652,6 +20959,8 @@ open class TeamLog { return EventTypeArg.directoryRestrictionsAddMembers case "directory_restrictions_remove_members": return EventTypeArg.directoryRestrictionsRemoveMembers + case "dropbox_passwords_policy_changed": + return EventTypeArg.dropboxPasswordsPolicyChanged case "email_ingest_policy_changed": return EventTypeArg.emailIngestPolicyChanged case "emm_add_exception": @@ -20782,6 +21091,10 @@ open class TeamLog { return EventTypeArg.webSessionsChangeFixedLengthPolicy case "web_sessions_change_idle_length_policy": return EventTypeArg.webSessionsChangeIdleLengthPolicy + case "data_residency_migration_request_successful": + return EventTypeArg.dataResidencyMigrationRequestSuccessful + case "data_residency_migration_request_unsuccessful": + return EventTypeArg.dataResidencyMigrationRequestUnsuccessful case "team_merge_from": return EventTypeArg.teamMergeFrom case "team_merge_to": diff --git a/Source/SwiftyDropbox/SwiftyDropbox.xcodeproj/project.pbxproj b/Source/SwiftyDropbox/SwiftyDropbox.xcodeproj/project.pbxproj index dc6c45be3..4b0d5995e 100644 --- a/Source/SwiftyDropbox/SwiftyDropbox.xcodeproj/project.pbxproj +++ b/Source/SwiftyDropbox/SwiftyDropbox.xcodeproj/project.pbxproj @@ -7,78 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 0E152892277BD81D003813C2 /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15286E277BD81C003813C2 /* Auth.swift */; }; - 0E152893277BD81D003813C2 /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15286E277BD81C003813C2 /* Auth.swift */; }; - 0E152894277BD81D003813C2 /* SecondaryEmails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15286F277BD81C003813C2 /* SecondaryEmails.swift */; }; - 0E152895277BD81D003813C2 /* SecondaryEmails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15286F277BD81C003813C2 /* SecondaryEmails.swift */; }; - 0E152896277BD81D003813C2 /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152870277BD81C003813C2 /* PaperRoutes.swift */; }; - 0E152897277BD81D003813C2 /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152870277BD81C003813C2 /* PaperRoutes.swift */; }; - 0E152898277BD81D003813C2 /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152871277BD81C003813C2 /* SharingRoutes.swift */; }; - 0E152899277BD81D003813C2 /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152871277BD81C003813C2 /* SharingRoutes.swift */; }; - 0E15289A277BD81D003813C2 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152872277BD81C003813C2 /* Base.swift */; }; - 0E15289B277BD81D003813C2 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152872277BD81C003813C2 /* Base.swift */; }; - 0E15289C277BD81D003813C2 /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152873277BD81C003813C2 /* StoneBase.swift */; }; - 0E15289D277BD81D003813C2 /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152873277BD81C003813C2 /* StoneBase.swift */; }; - 0E15289E277BD81D003813C2 /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152874277BD81C003813C2 /* ContactsRoutes.swift */; }; - 0E15289F277BD81D003813C2 /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152874277BD81C003813C2 /* ContactsRoutes.swift */; }; - 0E1528A0277BD81D003813C2 /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152875277BD81C003813C2 /* Paper.swift */; }; - 0E1528A1277BD81D003813C2 /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152875277BD81C003813C2 /* Paper.swift */; }; - 0E1528A2277BD81D003813C2 /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152876277BD81C003813C2 /* FilePropertiesRoutes.swift */; }; - 0E1528A3277BD81D003813C2 /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152876277BD81C003813C2 /* FilePropertiesRoutes.swift */; }; - 0E1528A4277BD81D003813C2 /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152877277BD81C003813C2 /* Common.swift */; }; - 0E1528A5277BD81D003813C2 /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152877277BD81C003813C2 /* Common.swift */; }; - 0E1528A6277BD81D003813C2 /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152878277BD81C003813C2 /* TeamRoutes.swift */; }; - 0E1528A7277BD81D003813C2 /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152878277BD81C003813C2 /* TeamRoutes.swift */; }; - 0E1528A8277BD81D003813C2 /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152879277BD81C003813C2 /* UsersCommon.swift */; }; - 0E1528A9277BD81D003813C2 /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152879277BD81C003813C2 /* UsersCommon.swift */; }; - 0E1528AA277BD81D003813C2 /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287A277BD81C003813C2 /* TeamPolicies.swift */; }; - 0E1528AB277BD81D003813C2 /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287A277BD81C003813C2 /* TeamPolicies.swift */; }; - 0E1528AC277BD81D003813C2 /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287B277BD81C003813C2 /* UsersRoutes.swift */; }; - 0E1528AD277BD81D003813C2 /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287B277BD81C003813C2 /* UsersRoutes.swift */; }; - 0E1528AE277BD81D003813C2 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287C277BD81C003813C2 /* Files.swift */; }; - 0E1528AF277BD81D003813C2 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287C277BD81C003813C2 /* Files.swift */; }; - 0E1528B0277BD81D003813C2 /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287D277BD81C003813C2 /* StoneValidators.swift */; }; - 0E1528B1277BD81D003813C2 /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287D277BD81C003813C2 /* StoneValidators.swift */; }; - 0E1528B2277BD81D003813C2 /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287E277BD81C003813C2 /* TeamLog.swift */; }; - 0E1528B3277BD81D003813C2 /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287E277BD81C003813C2 /* TeamLog.swift */; }; - 0E1528B4277BD81D003813C2 /* CheckRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287F277BD81C003813C2 /* CheckRoutes.swift */; }; - 0E1528B5277BD81D003813C2 /* CheckRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15287F277BD81C003813C2 /* CheckRoutes.swift */; }; - 0E1528B6277BD81D003813C2 /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152880277BD81C003813C2 /* AuthRoutes.swift */; }; - 0E1528B7277BD81D003813C2 /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152880277BD81C003813C2 /* AuthRoutes.swift */; }; - 0E1528B8277BD81D003813C2 /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152881277BD81C003813C2 /* TeamLogRoutes.swift */; }; - 0E1528B9277BD81D003813C2 /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152881277BD81C003813C2 /* TeamLogRoutes.swift */; }; - 0E1528BA277BD81D003813C2 /* Check.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152882277BD81D003813C2 /* Check.swift */; }; - 0E1528BB277BD81D003813C2 /* Check.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152882277BD81D003813C2 /* Check.swift */; }; - 0E1528BC277BD81D003813C2 /* AccountRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152883277BD81D003813C2 /* AccountRoutes.swift */; }; - 0E1528BD277BD81D003813C2 /* AccountRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152883277BD81D003813C2 /* AccountRoutes.swift */; }; - 0E1528BE277BD81D003813C2 /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152884277BD81D003813C2 /* SeenState.swift */; }; - 0E1528BF277BD81D003813C2 /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152884277BD81D003813C2 /* SeenState.swift */; }; - 0E1528C0277BD81D003813C2 /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152885277BD81D003813C2 /* TeamCommon.swift */; }; - 0E1528C1277BD81D003813C2 /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152885277BD81D003813C2 /* TeamCommon.swift */; }; - 0E1528C2277BD81D003813C2 /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152886277BD81D003813C2 /* Users.swift */; }; - 0E1528C3277BD81D003813C2 /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152886277BD81D003813C2 /* Users.swift */; }; - 0E1528C4277BD81D003813C2 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152887277BD81D003813C2 /* Team.swift */; }; - 0E1528C5277BD81D003813C2 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152887277BD81D003813C2 /* Team.swift */; }; - 0E1528C6277BD81D003813C2 /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152888277BD81D003813C2 /* FilesRoutes.swift */; }; - 0E1528C7277BD81D003813C2 /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152888277BD81D003813C2 /* FilesRoutes.swift */; }; - 0E1528C8277BD81D003813C2 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152889277BD81D003813C2 /* Contacts.swift */; }; - 0E1528C9277BD81D003813C2 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152889277BD81D003813C2 /* Contacts.swift */; }; - 0E1528CA277BD81D003813C2 /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288A277BD81D003813C2 /* BaseTeam.swift */; }; - 0E1528CB277BD81D003813C2 /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288A277BD81D003813C2 /* BaseTeam.swift */; }; - 0E1528CC277BD81D003813C2 /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288B277BD81D003813C2 /* FileRequests.swift */; }; - 0E1528CD277BD81D003813C2 /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288B277BD81D003813C2 /* FileRequests.swift */; }; - 0E1528CE277BD81D003813C2 /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288C277BD81D003813C2 /* FileRequestsRoutes.swift */; }; - 0E1528CF277BD81D003813C2 /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288C277BD81D003813C2 /* FileRequestsRoutes.swift */; }; - 0E1528D0277BD81D003813C2 /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288D277BD81D003813C2 /* Sharing.swift */; }; - 0E1528D1277BD81D003813C2 /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288D277BD81D003813C2 /* Sharing.swift */; }; - 0E1528D2277BD81D003813C2 /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288E277BD81D003813C2 /* FileProperties.swift */; }; - 0E1528D3277BD81D003813C2 /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288E277BD81D003813C2 /* FileProperties.swift */; }; - 0E1528D4277BD81D003813C2 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288F277BD81D003813C2 /* Account.swift */; }; - 0E1528D5277BD81D003813C2 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E15288F277BD81D003813C2 /* Account.swift */; }; - 0E1528D6277BD81D003813C2 /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152890277BD81D003813C2 /* StoneSerializers.swift */; }; - 0E1528D7277BD81D003813C2 /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152890277BD81D003813C2 /* StoneSerializers.swift */; }; - 0E1528D8277BD81D003813C2 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152891277BD81D003813C2 /* Async.swift */; }; - 0E1528D9277BD81D003813C2 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E152891277BD81D003813C2 /* Async.swift */; }; 8529B7C925FAC97F00F5F6E9 /* Alamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8529B7C825FAC97F00F5F6E9 /* Alamofire.xcframework */; }; 8529B7CA25FAC97F00F5F6E9 /* Alamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8529B7C825FAC97F00F5F6E9 /* Alamofire.xcframework */; }; BF082C242464B7C6000C8469 /* AuthSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF082C232464B7C6000C8469 /* AuthSession.swift */; }; @@ -122,45 +50,81 @@ F2C6FD391D89E37A00E0DD9E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C6FD381D89E37A00E0DD9E /* UIKit.framework */; }; F2C6FD3B1D89E38200E0DD9E /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C6FD3A1D89E38200E0DD9E /* AppKit.framework */; }; F2C6FD3D1D89E38800E0DD9E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C6FD3C1D89E38800E0DD9E /* Foundation.framework */; }; + F987B99A2808D35400519A8E /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9762808D35400519A8E /* Async.swift */; }; + F987B99B2808D35400519A8E /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9762808D35400519A8E /* Async.swift */; }; + F987B99C2808D35400519A8E /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9772808D35400519A8E /* Base.swift */; }; + F987B99D2808D35400519A8E /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9772808D35400519A8E /* Base.swift */; }; + F987B99E2808D35400519A8E /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9782808D35400519A8E /* Files.swift */; }; + F987B99F2808D35400519A8E /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9782808D35400519A8E /* Files.swift */; }; + F987B9A02808D35400519A8E /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9792808D35400519A8E /* AuthRoutes.swift */; }; + F987B9A12808D35400519A8E /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9792808D35400519A8E /* AuthRoutes.swift */; }; + F987B9A22808D35400519A8E /* Check.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97A2808D35400519A8E /* Check.swift */; }; + F987B9A32808D35400519A8E /* Check.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97A2808D35400519A8E /* Check.swift */; }; + F987B9A42808D35400519A8E /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97B2808D35400519A8E /* TeamLogRoutes.swift */; }; + F987B9A52808D35500519A8E /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97B2808D35400519A8E /* TeamLogRoutes.swift */; }; + F987B9A62808D35500519A8E /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97C2808D35400519A8E /* Users.swift */; }; + F987B9A72808D35500519A8E /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97C2808D35400519A8E /* Users.swift */; }; + F987B9A82808D35500519A8E /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97D2808D35400519A8E /* SeenState.swift */; }; + F987B9A92808D35500519A8E /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97D2808D35400519A8E /* SeenState.swift */; }; + F987B9AA2808D35500519A8E /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97E2808D35400519A8E /* FileRequests.swift */; }; + F987B9AB2808D35500519A8E /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97E2808D35400519A8E /* FileRequests.swift */; }; + F987B9AC2808D35500519A8E /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97F2808D35400519A8E /* StoneValidators.swift */; }; + F987B9AD2808D35500519A8E /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B97F2808D35400519A8E /* StoneValidators.swift */; }; + F987B9AE2808D35500519A8E /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9802808D35400519A8E /* TeamLog.swift */; }; + F987B9AF2808D35500519A8E /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9802808D35400519A8E /* TeamLog.swift */; }; + F987B9B02808D35500519A8E /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9812808D35400519A8E /* UsersRoutes.swift */; }; + F987B9B12808D35500519A8E /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9812808D35400519A8E /* UsersRoutes.swift */; }; + F987B9B22808D35500519A8E /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9822808D35400519A8E /* FileProperties.swift */; }; + F987B9B32808D35500519A8E /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9822808D35400519A8E /* FileProperties.swift */; }; + F987B9B42808D35500519A8E /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9832808D35400519A8E /* StoneSerializers.swift */; }; + F987B9B52808D35500519A8E /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9832808D35400519A8E /* StoneSerializers.swift */; }; + F987B9B62808D35500519A8E /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9842808D35400519A8E /* SharingRoutes.swift */; }; + F987B9B72808D35500519A8E /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9842808D35400519A8E /* SharingRoutes.swift */; }; + F987B9B82808D35500519A8E /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9852808D35400519A8E /* PaperRoutes.swift */; }; + F987B9B92808D35500519A8E /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9852808D35400519A8E /* PaperRoutes.swift */; }; + F987B9BA2808D35500519A8E /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9862808D35400519A8E /* Contacts.swift */; }; + F987B9BB2808D35500519A8E /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9862808D35400519A8E /* Contacts.swift */; }; + F987B9BC2808D35500519A8E /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9872808D35400519A8E /* Auth.swift */; }; + F987B9BD2808D35500519A8E /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9872808D35400519A8E /* Auth.swift */; }; + F987B9BE2808D35500519A8E /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9882808D35400519A8E /* FilePropertiesRoutes.swift */; }; + F987B9BF2808D35500519A8E /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9882808D35400519A8E /* FilePropertiesRoutes.swift */; }; + F987B9C02808D35500519A8E /* AccountRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9892808D35400519A8E /* AccountRoutes.swift */; }; + F987B9C12808D35500519A8E /* AccountRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9892808D35400519A8E /* AccountRoutes.swift */; }; + F987B9C22808D35500519A8E /* SecondaryEmails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98A2808D35400519A8E /* SecondaryEmails.swift */; }; + F987B9C32808D35500519A8E /* SecondaryEmails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98A2808D35400519A8E /* SecondaryEmails.swift */; }; + F987B9C42808D35500519A8E /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98B2808D35400519A8E /* BaseTeam.swift */; }; + F987B9C52808D35500519A8E /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98B2808D35400519A8E /* BaseTeam.swift */; }; + F987B9C62808D35500519A8E /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98C2808D35400519A8E /* StoneBase.swift */; }; + F987B9C72808D35500519A8E /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98C2808D35400519A8E /* StoneBase.swift */; }; + F987B9C82808D35500519A8E /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98D2808D35400519A8E /* Account.swift */; }; + F987B9C92808D35500519A8E /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98D2808D35400519A8E /* Account.swift */; }; + F987B9CA2808D35500519A8E /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98E2808D35400519A8E /* FileRequestsRoutes.swift */; }; + F987B9CB2808D35500519A8E /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98E2808D35400519A8E /* FileRequestsRoutes.swift */; }; + F987B9CC2808D35500519A8E /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98F2808D35400519A8E /* FilesRoutes.swift */; }; + F987B9CD2808D35500519A8E /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B98F2808D35400519A8E /* FilesRoutes.swift */; }; + F987B9CE2808D35500519A8E /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9902808D35400519A8E /* UsersCommon.swift */; }; + F987B9CF2808D35500519A8E /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9902808D35400519A8E /* UsersCommon.swift */; }; + F987B9D02808D35500519A8E /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9912808D35400519A8E /* Sharing.swift */; }; + F987B9D12808D35500519A8E /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9912808D35400519A8E /* Sharing.swift */; }; + F987B9D22808D35500519A8E /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9922808D35400519A8E /* TeamRoutes.swift */; }; + F987B9D32808D35500519A8E /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9922808D35400519A8E /* TeamRoutes.swift */; }; + F987B9D42808D35500519A8E /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9932808D35400519A8E /* ContactsRoutes.swift */; }; + F987B9D52808D35500519A8E /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9932808D35400519A8E /* ContactsRoutes.swift */; }; + F987B9D62808D35500519A8E /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9942808D35400519A8E /* Team.swift */; }; + F987B9D72808D35500519A8E /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9942808D35400519A8E /* Team.swift */; }; + F987B9D82808D35500519A8E /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9952808D35400519A8E /* Paper.swift */; }; + F987B9D92808D35500519A8E /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9952808D35400519A8E /* Paper.swift */; }; + F987B9DA2808D35500519A8E /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9962808D35400519A8E /* TeamCommon.swift */; }; + F987B9DB2808D35500519A8E /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9962808D35400519A8E /* TeamCommon.swift */; }; + F987B9DC2808D35500519A8E /* CheckRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9972808D35400519A8E /* CheckRoutes.swift */; }; + F987B9DD2808D35500519A8E /* CheckRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9972808D35400519A8E /* CheckRoutes.swift */; }; + F987B9DE2808D35500519A8E /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9982808D35400519A8E /* TeamPolicies.swift */; }; + F987B9DF2808D35500519A8E /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9982808D35400519A8E /* TeamPolicies.swift */; }; + F987B9E02808D35500519A8E /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9992808D35400519A8E /* Common.swift */; }; + F987B9E12808D35500519A8E /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987B9992808D35400519A8E /* Common.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 0E15286E277BD81C003813C2 /* Auth.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Auth.swift; sourceTree = ""; }; - 0E15286F277BD81C003813C2 /* SecondaryEmails.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecondaryEmails.swift; sourceTree = ""; }; - 0E152870277BD81C003813C2 /* PaperRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaperRoutes.swift; sourceTree = ""; }; - 0E152871277BD81C003813C2 /* SharingRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingRoutes.swift; sourceTree = ""; }; - 0E152872277BD81C003813C2 /* Base.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; - 0E152873277BD81C003813C2 /* StoneBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoneBase.swift; sourceTree = ""; }; - 0E152874277BD81C003813C2 /* ContactsRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsRoutes.swift; sourceTree = ""; }; - 0E152875277BD81C003813C2 /* Paper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Paper.swift; sourceTree = ""; }; - 0E152876277BD81C003813C2 /* FilePropertiesRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilePropertiesRoutes.swift; sourceTree = ""; }; - 0E152877277BD81C003813C2 /* Common.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Common.swift; sourceTree = ""; }; - 0E152878277BD81C003813C2 /* TeamRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamRoutes.swift; sourceTree = ""; }; - 0E152879277BD81C003813C2 /* UsersCommon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UsersCommon.swift; sourceTree = ""; }; - 0E15287A277BD81C003813C2 /* TeamPolicies.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamPolicies.swift; sourceTree = ""; }; - 0E15287B277BD81C003813C2 /* UsersRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UsersRoutes.swift; sourceTree = ""; }; - 0E15287C277BD81C003813C2 /* Files.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Files.swift; sourceTree = ""; }; - 0E15287D277BD81C003813C2 /* StoneValidators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoneValidators.swift; sourceTree = ""; }; - 0E15287E277BD81C003813C2 /* TeamLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamLog.swift; sourceTree = ""; }; - 0E15287F277BD81C003813C2 /* CheckRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckRoutes.swift; sourceTree = ""; }; - 0E152880277BD81C003813C2 /* AuthRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthRoutes.swift; sourceTree = ""; }; - 0E152881277BD81C003813C2 /* TeamLogRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamLogRoutes.swift; sourceTree = ""; }; - 0E152882277BD81D003813C2 /* Check.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Check.swift; sourceTree = ""; }; - 0E152883277BD81D003813C2 /* AccountRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountRoutes.swift; sourceTree = ""; }; - 0E152884277BD81D003813C2 /* SeenState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeenState.swift; sourceTree = ""; }; - 0E152885277BD81D003813C2 /* TeamCommon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamCommon.swift; sourceTree = ""; }; - 0E152886277BD81D003813C2 /* Users.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Users.swift; sourceTree = ""; }; - 0E152887277BD81D003813C2 /* Team.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Team.swift; sourceTree = ""; }; - 0E152888277BD81D003813C2 /* FilesRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilesRoutes.swift; sourceTree = ""; }; - 0E152889277BD81D003813C2 /* Contacts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contacts.swift; sourceTree = ""; }; - 0E15288A277BD81D003813C2 /* BaseTeam.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTeam.swift; sourceTree = ""; }; - 0E15288B277BD81D003813C2 /* FileRequests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileRequests.swift; sourceTree = ""; }; - 0E15288C277BD81D003813C2 /* FileRequestsRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileRequestsRoutes.swift; sourceTree = ""; }; - 0E15288D277BD81D003813C2 /* Sharing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sharing.swift; sourceTree = ""; }; - 0E15288E277BD81D003813C2 /* FileProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileProperties.swift; sourceTree = ""; }; - 0E15288F277BD81D003813C2 /* Account.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; - 0E152890277BD81D003813C2 /* StoneSerializers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoneSerializers.swift; sourceTree = ""; }; - 0E152891277BD81D003813C2 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; 8529B7C825FAC97F00F5F6E9 /* Alamofire.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Alamofire.xcframework; path = ../../Carthage/Build/Alamofire.xcframework; sourceTree = ""; }; BF082C232464B7C6000C8469 /* AuthSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthSession.swift; sourceTree = ""; }; BF082C252464BE7A000C8469 /* OAuthUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OAuthUtils.swift; sourceTree = ""; }; @@ -190,6 +154,42 @@ F2C6FD381D89E37A00E0DD9E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; F2C6FD3A1D89E38200E0DD9E /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; F2C6FD3C1D89E38800E0DD9E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + F987B9762808D35400519A8E /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; + F987B9772808D35400519A8E /* Base.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + F987B9782808D35400519A8E /* Files.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Files.swift; sourceTree = ""; }; + F987B9792808D35400519A8E /* AuthRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthRoutes.swift; sourceTree = ""; }; + F987B97A2808D35400519A8E /* Check.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Check.swift; sourceTree = ""; }; + F987B97B2808D35400519A8E /* TeamLogRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamLogRoutes.swift; sourceTree = ""; }; + F987B97C2808D35400519A8E /* Users.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Users.swift; sourceTree = ""; }; + F987B97D2808D35400519A8E /* SeenState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeenState.swift; sourceTree = ""; }; + F987B97E2808D35400519A8E /* FileRequests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileRequests.swift; sourceTree = ""; }; + F987B97F2808D35400519A8E /* StoneValidators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoneValidators.swift; sourceTree = ""; }; + F987B9802808D35400519A8E /* TeamLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamLog.swift; sourceTree = ""; }; + F987B9812808D35400519A8E /* UsersRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UsersRoutes.swift; sourceTree = ""; }; + F987B9822808D35400519A8E /* FileProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileProperties.swift; sourceTree = ""; }; + F987B9832808D35400519A8E /* StoneSerializers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoneSerializers.swift; sourceTree = ""; }; + F987B9842808D35400519A8E /* SharingRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingRoutes.swift; sourceTree = ""; }; + F987B9852808D35400519A8E /* PaperRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaperRoutes.swift; sourceTree = ""; }; + F987B9862808D35400519A8E /* Contacts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contacts.swift; sourceTree = ""; }; + F987B9872808D35400519A8E /* Auth.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Auth.swift; sourceTree = ""; }; + F987B9882808D35400519A8E /* FilePropertiesRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilePropertiesRoutes.swift; sourceTree = ""; }; + F987B9892808D35400519A8E /* AccountRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountRoutes.swift; sourceTree = ""; }; + F987B98A2808D35400519A8E /* SecondaryEmails.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecondaryEmails.swift; sourceTree = ""; }; + F987B98B2808D35400519A8E /* BaseTeam.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTeam.swift; sourceTree = ""; }; + F987B98C2808D35400519A8E /* StoneBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoneBase.swift; sourceTree = ""; }; + F987B98D2808D35400519A8E /* Account.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; + F987B98E2808D35400519A8E /* FileRequestsRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileRequestsRoutes.swift; sourceTree = ""; }; + F987B98F2808D35400519A8E /* FilesRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilesRoutes.swift; sourceTree = ""; }; + F987B9902808D35400519A8E /* UsersCommon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UsersCommon.swift; sourceTree = ""; }; + F987B9912808D35400519A8E /* Sharing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sharing.swift; sourceTree = ""; }; + F987B9922808D35400519A8E /* TeamRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamRoutes.swift; sourceTree = ""; }; + F987B9932808D35400519A8E /* ContactsRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsRoutes.swift; sourceTree = ""; }; + F987B9942808D35400519A8E /* Team.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Team.swift; sourceTree = ""; }; + F987B9952808D35400519A8E /* Paper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Paper.swift; sourceTree = ""; }; + F987B9962808D35400519A8E /* TeamCommon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamCommon.swift; sourceTree = ""; }; + F987B9972808D35400519A8E /* CheckRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckRoutes.swift; sourceTree = ""; }; + F987B9982808D35400519A8E /* TeamPolicies.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeamPolicies.swift; sourceTree = ""; }; + F987B9992808D35400519A8E /* Common.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Common.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -232,42 +232,42 @@ BFFF31D424DE68950029FC0C /* Generated */ = { isa = PBXGroup; children = ( - 0E15288F277BD81D003813C2 /* Account.swift */, - 0E152883277BD81D003813C2 /* AccountRoutes.swift */, - 0E152891277BD81D003813C2 /* Async.swift */, - 0E15286E277BD81C003813C2 /* Auth.swift */, - 0E152880277BD81C003813C2 /* AuthRoutes.swift */, - 0E152872277BD81C003813C2 /* Base.swift */, - 0E15288A277BD81D003813C2 /* BaseTeam.swift */, - 0E152882277BD81D003813C2 /* Check.swift */, - 0E15287F277BD81C003813C2 /* CheckRoutes.swift */, - 0E152877277BD81C003813C2 /* Common.swift */, - 0E152889277BD81D003813C2 /* Contacts.swift */, - 0E152874277BD81C003813C2 /* ContactsRoutes.swift */, - 0E15288E277BD81D003813C2 /* FileProperties.swift */, - 0E152876277BD81C003813C2 /* FilePropertiesRoutes.swift */, - 0E15288B277BD81D003813C2 /* FileRequests.swift */, - 0E15288C277BD81D003813C2 /* FileRequestsRoutes.swift */, - 0E15287C277BD81C003813C2 /* Files.swift */, - 0E152888277BD81D003813C2 /* FilesRoutes.swift */, - 0E152875277BD81C003813C2 /* Paper.swift */, - 0E152870277BD81C003813C2 /* PaperRoutes.swift */, - 0E15286F277BD81C003813C2 /* SecondaryEmails.swift */, - 0E152884277BD81D003813C2 /* SeenState.swift */, - 0E15288D277BD81D003813C2 /* Sharing.swift */, - 0E152871277BD81C003813C2 /* SharingRoutes.swift */, - 0E152873277BD81C003813C2 /* StoneBase.swift */, - 0E152890277BD81D003813C2 /* StoneSerializers.swift */, - 0E15287D277BD81C003813C2 /* StoneValidators.swift */, - 0E152887277BD81D003813C2 /* Team.swift */, - 0E152885277BD81D003813C2 /* TeamCommon.swift */, - 0E15287E277BD81C003813C2 /* TeamLog.swift */, - 0E152881277BD81C003813C2 /* TeamLogRoutes.swift */, - 0E15287A277BD81C003813C2 /* TeamPolicies.swift */, - 0E152878277BD81C003813C2 /* TeamRoutes.swift */, - 0E152886277BD81D003813C2 /* Users.swift */, - 0E152879277BD81C003813C2 /* UsersCommon.swift */, - 0E15287B277BD81C003813C2 /* UsersRoutes.swift */, + F987B98D2808D35400519A8E /* Account.swift */, + F987B9892808D35400519A8E /* AccountRoutes.swift */, + F987B9762808D35400519A8E /* Async.swift */, + F987B9872808D35400519A8E /* Auth.swift */, + F987B9792808D35400519A8E /* AuthRoutes.swift */, + F987B9772808D35400519A8E /* Base.swift */, + F987B98B2808D35400519A8E /* BaseTeam.swift */, + F987B97A2808D35400519A8E /* Check.swift */, + F987B9972808D35400519A8E /* CheckRoutes.swift */, + F987B9992808D35400519A8E /* Common.swift */, + F987B9862808D35400519A8E /* Contacts.swift */, + F987B9932808D35400519A8E /* ContactsRoutes.swift */, + F987B9822808D35400519A8E /* FileProperties.swift */, + F987B9882808D35400519A8E /* FilePropertiesRoutes.swift */, + F987B97E2808D35400519A8E /* FileRequests.swift */, + F987B98E2808D35400519A8E /* FileRequestsRoutes.swift */, + F987B9782808D35400519A8E /* Files.swift */, + F987B98F2808D35400519A8E /* FilesRoutes.swift */, + F987B9952808D35400519A8E /* Paper.swift */, + F987B9852808D35400519A8E /* PaperRoutes.swift */, + F987B98A2808D35400519A8E /* SecondaryEmails.swift */, + F987B97D2808D35400519A8E /* SeenState.swift */, + F987B9912808D35400519A8E /* Sharing.swift */, + F987B9842808D35400519A8E /* SharingRoutes.swift */, + F987B98C2808D35400519A8E /* StoneBase.swift */, + F987B9832808D35400519A8E /* StoneSerializers.swift */, + F987B97F2808D35400519A8E /* StoneValidators.swift */, + F987B9942808D35400519A8E /* Team.swift */, + F987B9962808D35400519A8E /* TeamCommon.swift */, + F987B9802808D35400519A8E /* TeamLog.swift */, + F987B97B2808D35400519A8E /* TeamLogRoutes.swift */, + F987B9982808D35400519A8E /* TeamPolicies.swift */, + F987B9922808D35400519A8E /* TeamRoutes.swift */, + F987B97C2808D35400519A8E /* Users.swift */, + F987B9902808D35400519A8E /* UsersCommon.swift */, + F987B9812808D35400519A8E /* UsersRoutes.swift */, ); path = Generated; sourceTree = ""; @@ -479,61 +479,61 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0E1528BC277BD81D003813C2 /* AccountRoutes.swift in Sources */, - 0E15289E277BD81D003813C2 /* ContactsRoutes.swift in Sources */, - 0E15289A277BD81D003813C2 /* Base.swift in Sources */, - 0E1528C6277BD81D003813C2 /* FilesRoutes.swift in Sources */, - 0E1528D0277BD81D003813C2 /* Sharing.swift in Sources */, - 0E1528CC277BD81D003813C2 /* FileRequests.swift in Sources */, - 0E1528C0277BD81D003813C2 /* TeamCommon.swift in Sources */, + F987B9B42808D35500519A8E /* StoneSerializers.swift in Sources */, BF082C262464BE7A000C8469 /* OAuthUtils.swift in Sources */, - 0E152894277BD81D003813C2 /* SecondaryEmails.swift in Sources */, - 0E1528D6277BD81D003813C2 /* StoneSerializers.swift in Sources */, - 0E1528A2277BD81D003813C2 /* FilePropertiesRoutes.swift in Sources */, - 0E1528A8277BD81D003813C2 /* UsersCommon.swift in Sources */, + F987B99E2808D35400519A8E /* Files.swift in Sources */, F2478F2C1ECCD0B300BAF014 /* DropboxClientsManager.swift in Sources */, - 0E1528D8277BD81D003813C2 /* Async.swift in Sources */, - 0E1528A6277BD81D003813C2 /* TeamRoutes.swift in Sources */, - 0E1528A0277BD81D003813C2 /* Paper.swift in Sources */, + F987B9A02808D35400519A8E /* AuthRoutes.swift in Sources */, BF4CC9A2247842250005CADF /* Request+TokenRefresh.swift in Sources */, F2478F361ECCD0B300BAF014 /* TransportConfig.swift in Sources */, - 0E1528B6277BD81D003813C2 /* AuthRoutes.swift in Sources */, - 0E1528BA277BD81D003813C2 /* Check.swift in Sources */, F2478F301ECCD0B300BAF014 /* DropboxTransportClient.swift in Sources */, - 0E1528AA277BD81D003813C2 /* TeamPolicies.swift in Sources */, + F987B9AE2808D35500519A8E /* TeamLog.swift in Sources */, F2478F241ECCD0B300BAF014 /* CustomTasks.swift in Sources */, - 0E1528C4277BD81D003813C2 /* Team.swift in Sources */, + F987B9CC2808D35500519A8E /* FilesRoutes.swift in Sources */, + F987B9CE2808D35500519A8E /* UsersCommon.swift in Sources */, + F987B9C42808D35500519A8E /* BaseTeam.swift in Sources */, + F987B9BC2808D35500519A8E /* Auth.swift in Sources */, + F987B9B62808D35500519A8E /* SharingRoutes.swift in Sources */, F265BD0B1E68072500CC38C8 /* OAuthMobile.swift in Sources */, - 0E1528A4277BD81D003813C2 /* Common.swift in Sources */, - 0E1528AC277BD81D003813C2 /* UsersRoutes.swift in Sources */, BF3A927424DE2EB7000BA354 /* OAuthTokenRequest.swift in Sources */, + F987B99A2808D35400519A8E /* Async.swift in Sources */, + F987B9D42808D35500519A8E /* ContactsRoutes.swift in Sources */, F2478F2E1ECCD0B300BAF014 /* DropboxTeamClient.swift in Sources */, + F987B9DE2808D35500519A8E /* TeamPolicies.swift in Sources */, + F987B9D82808D35500519A8E /* Paper.swift in Sources */, + F987B9DC2808D35500519A8E /* CheckRoutes.swift in Sources */, BF082C2A2464C4B7000C8469 /* LoadingViewController.swift in Sources */, - 0E152898277BD81D003813C2 /* SharingRoutes.swift in Sources */, - 0E1528B8277BD81D003813C2 /* TeamLogRoutes.swift in Sources */, + F987B9AC2808D35500519A8E /* StoneValidators.swift in Sources */, BF4CC99F247750E50005CADF /* AccessTokenProvider.swift in Sources */, - 0E152896277BD81D003813C2 /* PaperRoutes.swift in Sources */, + F987B9A82808D35500519A8E /* SeenState.swift in Sources */, + F987B9CA2808D35500519A8E /* FileRequestsRoutes.swift in Sources */, + F987B99C2808D35400519A8E /* Base.swift in Sources */, + F987B9C62808D35500519A8E /* StoneBase.swift in Sources */, + F987B9BA2808D35500519A8E /* Contacts.swift in Sources */, BF082C2C246620D2000C8469 /* OAuthConstants.swift in Sources */, - 0E1528B0277BD81D003813C2 /* StoneValidators.swift in Sources */, - 0E1528B4277BD81D003813C2 /* CheckRoutes.swift in Sources */, - 0E1528B2277BD81D003813C2 /* TeamLog.swift in Sources */, - 0E1528D2277BD81D003813C2 /* FileProperties.swift in Sources */, - 0E1528C2277BD81D003813C2 /* Users.swift in Sources */, + F987B9C82808D35500519A8E /* Account.swift in Sources */, + F987B9D02808D35500519A8E /* Sharing.swift in Sources */, F2478F391ECCD2FF00BAF014 /* SDKConstants.swift in Sources */, - 0E1528BE277BD81D003813C2 /* SeenState.swift in Sources */, - 0E1528C8277BD81D003813C2 /* Contacts.swift in Sources */, - 0E15289C277BD81D003813C2 /* StoneBase.swift in Sources */, - 0E1528D4277BD81D003813C2 /* Account.swift in Sources */, + F987B9C02808D35500519A8E /* AccountRoutes.swift in Sources */, F2478F201ECCD0B300BAF014 /* Custom.swift in Sources */, - 0E1528AE277BD81D003813C2 /* Files.swift in Sources */, F2478F321ECCD0B300BAF014 /* OAuth.swift in Sources */, - 0E152892277BD81D003813C2 /* Auth.swift in Sources */, - 0E1528CA277BD81D003813C2 /* BaseTeam.swift in Sources */, - 0E1528CE277BD81D003813C2 /* FileRequestsRoutes.swift in Sources */, + F987B9C22808D35500519A8E /* SecondaryEmails.swift in Sources */, BFDD66C9250310F7009D9B6D /* ChunkInputStream.swift in Sources */, + F987B9D22808D35500519A8E /* TeamRoutes.swift in Sources */, + F987B9D62808D35500519A8E /* Team.swift in Sources */, + F987B9A22808D35400519A8E /* Check.swift in Sources */, + F987B9BE2808D35500519A8E /* FilePropertiesRoutes.swift in Sources */, F2478F2A1ECCD0B300BAF014 /* DropboxClient.swift in Sources */, + F987B9A62808D35500519A8E /* Users.swift in Sources */, BF082C242464B7C6000C8469 /* AuthSession.swift in Sources */, + F987B9AA2808D35500519A8E /* FileRequests.swift in Sources */, + F987B9E02808D35500519A8E /* Common.swift in Sources */, + F987B9B22808D35500519A8E /* FileProperties.swift in Sources */, + F987B9B82808D35500519A8E /* PaperRoutes.swift in Sources */, F2478F221ECCD0B300BAF014 /* CustomRoutes.swift in Sources */, + F987B9B02808D35500519A8E /* UsersRoutes.swift in Sources */, + F987B9A42808D35400519A8E /* TeamLogRoutes.swift in Sources */, + F987B9DA2808D35500519A8E /* TeamCommon.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -541,60 +541,60 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0E1528AD277BD81D003813C2 /* UsersRoutes.swift in Sources */, - 0E1528D5277BD81D003813C2 /* Account.swift in Sources */, - 0E152899277BD81D003813C2 /* SharingRoutes.swift in Sources */, F2478F2D1ECCD0B300BAF014 /* DropboxClientsManager.swift in Sources */, + F987B9A52808D35500519A8E /* TeamLogRoutes.swift in Sources */, F2478F371ECCD0B400BAF014 /* TransportConfig.swift in Sources */, + F987B9CB2808D35500519A8E /* FileRequestsRoutes.swift in Sources */, + F987B9C52808D35500519A8E /* BaseTeam.swift in Sources */, + F987B99F2808D35400519A8E /* Files.swift in Sources */, F2478F311ECCD0B300BAF014 /* DropboxTransportClient.swift in Sources */, - 0E15289F277BD81D003813C2 /* ContactsRoutes.swift in Sources */, - 0E1528BF277BD81D003813C2 /* SeenState.swift in Sources */, - 0E1528A9277BD81D003813C2 /* UsersCommon.swift in Sources */, - 0E1528C5277BD81D003813C2 /* Team.swift in Sources */, - 0E152897277BD81D003813C2 /* PaperRoutes.swift in Sources */, - 0E1528C7277BD81D003813C2 /* FilesRoutes.swift in Sources */, - 0E1528D3277BD81D003813C2 /* FileProperties.swift in Sources */, - 0E1528B5277BD81D003813C2 /* CheckRoutes.swift in Sources */, BF4CC9A0247750E50005CADF /* AccessTokenProvider.swift in Sources */, + F987B9C72808D35500519A8E /* StoneBase.swift in Sources */, + F987B9D72808D35500519A8E /* Team.swift in Sources */, + F987B9B92808D35500519A8E /* PaperRoutes.swift in Sources */, + F987B9C12808D35500519A8E /* AccountRoutes.swift in Sources */, + F987B9A32808D35400519A8E /* Check.swift in Sources */, + F987B9B52808D35500519A8E /* StoneSerializers.swift in Sources */, F2478F251ECCD0B300BAF014 /* CustomTasks.swift in Sources */, - 0E1528D1277BD81D003813C2 /* Sharing.swift in Sources */, - 0E152893277BD81D003813C2 /* Auth.swift in Sources */, BFDD66CA250310F7009D9B6D /* ChunkInputStream.swift in Sources */, - 0E1528D7277BD81D003813C2 /* StoneSerializers.swift in Sources */, - 0E1528B9277BD81D003813C2 /* TeamLogRoutes.swift in Sources */, - 0E152895277BD81D003813C2 /* SecondaryEmails.swift in Sources */, F265BD101E68073A00CC38C8 /* OAuthDesktop.swift in Sources */, - 0E1528A7277BD81D003813C2 /* TeamRoutes.swift in Sources */, - 0E1528CF277BD81D003813C2 /* FileRequestsRoutes.swift in Sources */, + F987B9D12808D35500519A8E /* Sharing.swift in Sources */, + F987B9B32808D35500519A8E /* FileProperties.swift in Sources */, + F987B9AD2808D35500519A8E /* StoneValidators.swift in Sources */, F2478F2F1ECCD0B300BAF014 /* DropboxTeamClient.swift in Sources */, - 0E1528A3277BD81D003813C2 /* FilePropertiesRoutes.swift in Sources */, BF082C2D246620D5000C8469 /* OAuthConstants.swift in Sources */, - 0E1528C3277BD81D003813C2 /* Users.swift in Sources */, - 0E1528BB277BD81D003813C2 /* Check.swift in Sources */, - 0E1528BD277BD81D003813C2 /* AccountRoutes.swift in Sources */, - 0E1528C9277BD81D003813C2 /* Contacts.swift in Sources */, - 0E1528AB277BD81D003813C2 /* TeamPolicies.swift in Sources */, + F987B9CF2808D35500519A8E /* UsersCommon.swift in Sources */, + F987B9A72808D35500519A8E /* Users.swift in Sources */, F2478F3A1ECCD2FF00BAF014 /* SDKConstants.swift in Sources */, - 0E1528B7277BD81D003813C2 /* AuthRoutes.swift in Sources */, BF3A927224DE2DF1000BA354 /* AuthSession.swift in Sources */, + F987B9D92808D35500519A8E /* Paper.swift in Sources */, F2478F211ECCD0B300BAF014 /* Custom.swift in Sources */, + F987B9A12808D35400519A8E /* AuthRoutes.swift in Sources */, + F987B9CD2808D35500519A8E /* FilesRoutes.swift in Sources */, + F987B99D2808D35400519A8E /* Base.swift in Sources */, F2478F331ECCD0B300BAF014 /* OAuth.swift in Sources */, - 0E1528AF277BD81D003813C2 /* Files.swift in Sources */, + F987B9B72808D35500519A8E /* SharingRoutes.swift in Sources */, + F987B9DF2808D35500519A8E /* TeamPolicies.swift in Sources */, F2478F2B1ECCD0B300BAF014 /* DropboxClient.swift in Sources */, - 0E1528D9277BD81D003813C2 /* Async.swift in Sources */, - 0E1528A5277BD81D003813C2 /* Common.swift in Sources */, + F987B9D52808D35500519A8E /* ContactsRoutes.swift in Sources */, + F987B9A92808D35500519A8E /* SeenState.swift in Sources */, + F987B9AF2808D35500519A8E /* TeamLog.swift in Sources */, + F987B99B2808D35400519A8E /* Async.swift in Sources */, + F987B9D32808D35500519A8E /* TeamRoutes.swift in Sources */, + F987B9E12808D35500519A8E /* Common.swift in Sources */, BF4CC9A3247842250005CADF /* Request+TokenRefresh.swift in Sources */, - 0E15289B277BD81D003813C2 /* Base.swift in Sources */, + F987B9AB2808D35500519A8E /* FileRequests.swift in Sources */, BF3A927524DE2EB7000BA354 /* OAuthTokenRequest.swift in Sources */, - 0E1528A1277BD81D003813C2 /* Paper.swift in Sources */, - 0E1528B1277BD81D003813C2 /* StoneValidators.swift in Sources */, - 0E1528CD277BD81D003813C2 /* FileRequests.swift in Sources */, + F987B9BF2808D35500519A8E /* FilePropertiesRoutes.swift in Sources */, BF082C272464BE7A000C8469 /* OAuthUtils.swift in Sources */, - 0E1528B3277BD81D003813C2 /* TeamLog.swift in Sources */, - 0E1528C1277BD81D003813C2 /* TeamCommon.swift in Sources */, - 0E15289D277BD81D003813C2 /* StoneBase.swift in Sources */, - 0E1528CB277BD81D003813C2 /* BaseTeam.swift in Sources */, + F987B9DD2808D35500519A8E /* CheckRoutes.swift in Sources */, + F987B9B12808D35500519A8E /* UsersRoutes.swift in Sources */, + F987B9DB2808D35500519A8E /* TeamCommon.swift in Sources */, F2478F231ECCD0B300BAF014 /* CustomRoutes.swift in Sources */, + F987B9BB2808D35500519A8E /* Contacts.swift in Sources */, + F987B9C32808D35500519A8E /* SecondaryEmails.swift in Sources */, + F987B9BD2808D35500519A8E /* Auth.swift in Sources */, + F987B9C92808D35500519A8E /* Account.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/spec b/spec index 4c1da4778..eec4b4368 160000 --- a/spec +++ b/spec @@ -1 +1 @@ -Subproject commit 4c1da4778bc4bd3dbc6b55e11788a40aa896b3dc +Subproject commit eec4b43685b7af842d320efaaa86db27232cb465 diff --git a/stone b/stone index e2f4be2ae..bdd49bc10 160000 --- a/stone +++ b/stone @@ -1 +1 @@ -Subproject commit e2f4be2aebb0c708b3ad7b0d54122d1a121d8067 +Subproject commit bdd49bc1017dcea2d193beb1925cded33a276d54