fix(ios): add AI privacy consent alert (#14421)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Added AI feature consent flow requiring user agreement before enabling
AI capabilities.
* Added calendar integration support including CalDAV account linking
and management.
* Expanded workspace administration capabilities with detailed workspace
analytics and configuration options.

* **Improvements**
  * Enhanced workspace sharing and configuration controls.
  * Added support for calendar provider presets and subscriptions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Lakr
2026-02-12 19:25:18 +09:00
committed by GitHub
parent 3ad482351b
commit b46bf91575
54 changed files with 2197 additions and 177 deletions

View File

@@ -7,4 +7,5 @@
import ApolloAPI
public typealias JSON = JSONObject
/// The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
public typealias JSON = String

View File

@@ -7,35 +7,5 @@
import ApolloAPI
public typealias JSONObject = CustomJSON
public enum CustomJSON: CustomScalarType, Hashable {
case dictionary([String: AnyHashable])
case array([AnyHashable])
public init(_jsonValue value: JSONValue) throws {
if let dict = value as? [String: AnyHashable] {
self = .dictionary(dict)
} else if let array = value as? [AnyHashable] {
self = .array(array)
} else {
throw JSONDecodingError.couldNotConvert(value: value, to: CustomJSON.self)
}
}
public var _jsonValue: JSONValue {
switch self {
case let .dictionary(json as AnyHashable),
let .array(json as AnyHashable):
json
}
}
public static func == (lhs: CustomJSON, rhs: CustomJSON) -> Bool {
lhs._jsonValue == rhs._jsonValue
}
public func hash(into hasher: inout Hasher) {
hasher.combine(_jsonValue)
}
}
/// The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
public typealias JSONObject = String

View File

@@ -0,0 +1,14 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public enum AdminWorkspaceSort: String, EnumType {
case blobCount = "BlobCount"
case blobSize = "BlobSize"
case createdAt = "CreatedAt"
case memberCount = "MemberCount"
case publicPageCount = "PublicPageCount"
case snapshotCount = "SnapshotCount"
case snapshotSize = "SnapshotSize"
}

View File

@@ -0,0 +1,9 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public enum CalendarProviderType: String, EnumType {
case calDAV = "CalDAV"
case google = "Google"
}

View File

@@ -11,20 +11,13 @@ public struct AddContextFileInput: InputObject {
}
public init(
blobId: GraphQLNullable<String> = nil,
contextId: String
) {
__data = InputDict([
"blobId": blobId,
"contextId": contextId
])
}
public var blobId: GraphQLNullable<String> {
get { __data["blobId"] }
set { __data["blobId"] = newValue }
}
public var contextId: String {
get { __data["contextId"] }
set { __data["contextId"] = newValue }

View File

@@ -0,0 +1,81 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public struct AdminUpdateWorkspaceInput: InputObject {
public private(set) var __data: InputDict
public init(_ data: InputDict) {
__data = data
}
public init(
avatarKey: GraphQLNullable<String> = nil,
enableAi: GraphQLNullable<Bool> = nil,
enableDocEmbedding: GraphQLNullable<Bool> = nil,
enableSharing: GraphQLNullable<Bool> = nil,
enableUrlPreview: GraphQLNullable<Bool> = nil,
features: GraphQLNullable<[GraphQLEnum<FeatureType>]> = nil,
id: String,
name: GraphQLNullable<String> = nil,
`public`: GraphQLNullable<Bool> = nil
) {
__data = InputDict([
"avatarKey": avatarKey,
"enableAi": enableAi,
"enableDocEmbedding": enableDocEmbedding,
"enableSharing": enableSharing,
"enableUrlPreview": enableUrlPreview,
"features": features,
"id": id,
"name": name,
"public": `public`
])
}
public var avatarKey: GraphQLNullable<String> {
get { __data["avatarKey"] }
set { __data["avatarKey"] = newValue }
}
public var enableAi: GraphQLNullable<Bool> {
get { __data["enableAi"] }
set { __data["enableAi"] = newValue }
}
public var enableDocEmbedding: GraphQLNullable<Bool> {
get { __data["enableDocEmbedding"] }
set { __data["enableDocEmbedding"] = newValue }
}
public var enableSharing: GraphQLNullable<Bool> {
get { __data["enableSharing"] }
set { __data["enableSharing"] = newValue }
}
public var enableUrlPreview: GraphQLNullable<Bool> {
get { __data["enableUrlPreview"] }
set { __data["enableUrlPreview"] = newValue }
}
public var features: GraphQLNullable<[GraphQLEnum<FeatureType>]> {
get { __data["features"] }
set { __data["features"] = newValue }
}
public var id: String {
get { __data["id"] }
set { __data["id"] = newValue }
}
public var name: GraphQLNullable<String> {
get { __data["name"] }
set { __data["name"] = newValue }
}
public var `public`: GraphQLNullable<Bool> {
get { __data["public"] }
set { __data["public"] = newValue }
}
}

View File

@@ -0,0 +1,46 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public struct LinkCalDAVAccountInput: InputObject {
public private(set) var __data: InputDict
public init(_ data: InputDict) {
__data = data
}
public init(
displayName: GraphQLNullable<String> = nil,
password: String,
providerPresetId: String,
username: String
) {
__data = InputDict([
"displayName": displayName,
"password": password,
"providerPresetId": providerPresetId,
"username": username
])
}
public var displayName: GraphQLNullable<String> {
get { __data["displayName"] }
set { __data["displayName"] = newValue }
}
public var password: String {
get { __data["password"] }
set { __data["password"] = newValue }
}
public var providerPresetId: String {
get { __data["providerPresetId"] }
set { __data["providerPresetId"] = newValue }
}
public var username: String {
get { __data["username"] }
set { __data["username"] = newValue }
}
}

View File

@@ -0,0 +1,32 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public struct LinkCalendarAccountInput: InputObject {
public private(set) var __data: InputDict
public init(_ data: InputDict) {
__data = data
}
public init(
provider: GraphQLEnum<CalendarProviderType>,
redirectUri: GraphQLNullable<String> = nil
) {
__data = InputDict([
"provider": provider,
"redirectUri": redirectUri
])
}
public var provider: GraphQLEnum<CalendarProviderType> {
get { __data["provider"] }
set { __data["provider"] = newValue }
}
public var redirectUri: GraphQLNullable<String> {
get { __data["redirectUri"] }
set { __data["redirectUri"] = newValue }
}
}

View File

@@ -11,20 +11,34 @@ public struct ListUserInput: InputObject {
}
public init(
features: GraphQLNullable<[GraphQLEnum<FeatureType>]> = nil,
first: GraphQLNullable<Int> = nil,
keyword: GraphQLNullable<String> = nil,
skip: GraphQLNullable<Int> = nil
) {
__data = InputDict([
"features": features,
"first": first,
"keyword": keyword,
"skip": skip
])
}
public var features: GraphQLNullable<[GraphQLEnum<FeatureType>]> {
get { __data["features"] }
set { __data["features"] = newValue }
}
public var first: GraphQLNullable<Int> {
get { __data["first"] }
set { __data["first"] = newValue }
}
public var keyword: GraphQLNullable<String> {
get { __data["keyword"] }
set { __data["keyword"] = newValue }
}
public var skip: GraphQLNullable<Int> {
get { __data["skip"] }
set { __data["skip"] = newValue }

View File

@@ -0,0 +1,88 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public struct ListWorkspaceInput: InputObject {
public private(set) var __data: InputDict
public init(_ data: InputDict) {
__data = data
}
public init(
enableAi: GraphQLNullable<Bool> = nil,
enableDocEmbedding: GraphQLNullable<Bool> = nil,
enableSharing: GraphQLNullable<Bool> = nil,
enableUrlPreview: GraphQLNullable<Bool> = nil,
features: GraphQLNullable<[GraphQLEnum<FeatureType>]> = nil,
first: Int? = nil,
keyword: GraphQLNullable<String> = nil,
orderBy: GraphQLNullable<GraphQLEnum<AdminWorkspaceSort>> = nil,
`public`: GraphQLNullable<Bool> = nil,
skip: Int? = nil
) {
__data = InputDict([
"enableAi": enableAi,
"enableDocEmbedding": enableDocEmbedding,
"enableSharing": enableSharing,
"enableUrlPreview": enableUrlPreview,
"features": features,
"first": first,
"keyword": keyword,
"orderBy": orderBy,
"public": `public`,
"skip": skip
])
}
public var enableAi: GraphQLNullable<Bool> {
get { __data["enableAi"] }
set { __data["enableAi"] = newValue }
}
public var enableDocEmbedding: GraphQLNullable<Bool> {
get { __data["enableDocEmbedding"] }
set { __data["enableDocEmbedding"] = newValue }
}
public var enableSharing: GraphQLNullable<Bool> {
get { __data["enableSharing"] }
set { __data["enableSharing"] = newValue }
}
public var enableUrlPreview: GraphQLNullable<Bool> {
get { __data["enableUrlPreview"] }
set { __data["enableUrlPreview"] = newValue }
}
public var features: GraphQLNullable<[GraphQLEnum<FeatureType>]> {
get { __data["features"] }
set { __data["features"] = newValue }
}
public var first: Int? {
get { __data["first"] }
set { __data["first"] = newValue }
}
public var keyword: GraphQLNullable<String> {
get { __data["keyword"] }
set { __data["keyword"] = newValue }
}
public var orderBy: GraphQLNullable<GraphQLEnum<AdminWorkspaceSort>> {
get { __data["orderBy"] }
set { __data["orderBy"] = newValue }
}
public var `public`: GraphQLNullable<Bool> {
get { __data["public"] }
set { __data["public"] = newValue }
}
public var skip: Int? {
get { __data["skip"] }
set { __data["skip"] = newValue }
}
}

View File

@@ -0,0 +1,32 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public struct UpdateWorkspaceCalendarsInput: InputObject {
public private(set) var __data: InputDict
public init(_ data: InputDict) {
__data = data
}
public init(
items: [WorkspaceCalendarItemInput],
workspaceId: String
) {
__data = InputDict([
"items": items,
"workspaceId": workspaceId
])
}
public var items: [WorkspaceCalendarItemInput] {
get { __data["items"] }
set { __data["items"] = newValue }
}
public var workspaceId: String {
get { __data["workspaceId"] }
set { __data["workspaceId"] = newValue }
}
}

View File

@@ -0,0 +1,39 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public struct WorkspaceCalendarItemInput: InputObject {
public private(set) var __data: InputDict
public init(_ data: InputDict) {
__data = data
}
public init(
colorOverride: GraphQLNullable<String> = nil,
sortOrder: GraphQLNullable<Int> = nil,
subscriptionId: String
) {
__data = InputDict([
"colorOverride": colorOverride,
"sortOrder": sortOrder,
"subscriptionId": subscriptionId
])
}
public var colorOverride: GraphQLNullable<String> {
get { __data["colorOverride"] }
set { __data["colorOverride"] = newValue }
}
public var sortOrder: GraphQLNullable<Int> {
get { __data["sortOrder"] }
set { __data["sortOrder"] = newValue }
}
public var subscriptionId: String {
get { __data["subscriptionId"] }
set { __data["subscriptionId"] = newValue }
}
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let AdminWorkspace = ApolloAPI.Object(
typename: "AdminWorkspace",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let AdminWorkspaceMember = ApolloAPI.Object(
typename: "AdminWorkspaceMember",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let AdminWorkspaceSharedLink = ApolloAPI.Object(
typename: "AdminWorkspaceSharedLink",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let CalendarAccountObjectType = ApolloAPI.Object(
typename: "CalendarAccountObjectType",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let CalendarCalDAVProviderPresetObjectType = ApolloAPI.Object(
typename: "CalendarCalDAVProviderPresetObjectType",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let CalendarEventObjectType = ApolloAPI.Object(
typename: "CalendarEventObjectType",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let CalendarSubscriptionObjectType = ApolloAPI.Object(
typename: "CalendarSubscriptionObjectType",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let WorkspaceCalendarItemObjectType = ApolloAPI.Object(
typename: "WorkspaceCalendarItemObjectType",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -0,0 +1,12 @@
// @generated
// This file was automatically generated and should not be edited.
import ApolloAPI
public extension Objects {
static let WorkspaceCalendarObjectType = ApolloAPI.Object(
typename: "WorkspaceCalendarObjectType",
implementedInterfaces: [],
keyFields: nil
)
}

View File

@@ -20,6 +20,9 @@ public enum SchemaMetadata: ApolloAPI.SchemaMetadata {
public static func objectType(forTypename typename: String) -> ApolloAPI.Object? {
switch typename {
case "AdminWorkspace": return AffineGraphQL.Objects.AdminWorkspace
case "AdminWorkspaceMember": return AffineGraphQL.Objects.AdminWorkspaceMember
case "AdminWorkspaceSharedLink": return AffineGraphQL.Objects.AdminWorkspaceSharedLink
case "AggregateBucketHitsObjectType": return AffineGraphQL.Objects.AggregateBucketHitsObjectType
case "AggregateBucketObjectType": return AffineGraphQL.Objects.AggregateBucketObjectType
case "AggregateResultObjectType": return AffineGraphQL.Objects.AggregateResultObjectType
@@ -27,6 +30,10 @@ public enum SchemaMetadata: ApolloAPI.SchemaMetadata {
case "BlobUploadInit": return AffineGraphQL.Objects.BlobUploadInit
case "BlobUploadPart": return AffineGraphQL.Objects.BlobUploadPart
case "BlobUploadedPart": return AffineGraphQL.Objects.BlobUploadedPart
case "CalendarAccountObjectType": return AffineGraphQL.Objects.CalendarAccountObjectType
case "CalendarCalDAVProviderPresetObjectType": return AffineGraphQL.Objects.CalendarCalDAVProviderPresetObjectType
case "CalendarEventObjectType": return AffineGraphQL.Objects.CalendarEventObjectType
case "CalendarSubscriptionObjectType": return AffineGraphQL.Objects.CalendarSubscriptionObjectType
case "ChatMessage": return AffineGraphQL.Objects.ChatMessage
case "CommentChangeObjectType": return AffineGraphQL.Objects.CommentChangeObjectType
case "CommentChangeObjectTypeEdge": return AffineGraphQL.Objects.CommentChangeObjectTypeEdge
@@ -107,6 +114,8 @@ public enum SchemaMetadata: ApolloAPI.SchemaMetadata {
case "UserQuotaUsageType": return AffineGraphQL.Objects.UserQuotaUsageType
case "UserSettingsType": return AffineGraphQL.Objects.UserSettingsType
case "UserType": return AffineGraphQL.Objects.UserType
case "WorkspaceCalendarItemObjectType": return AffineGraphQL.Objects.WorkspaceCalendarItemObjectType
case "WorkspaceCalendarObjectType": return AffineGraphQL.Objects.WorkspaceCalendarObjectType
case "WorkspaceDocMeta": return AffineGraphQL.Objects.WorkspaceDocMeta
case "WorkspacePermissions": return AffineGraphQL.Objects.WorkspacePermissions
case "WorkspaceQuotaHumanReadableType": return AffineGraphQL.Objects.WorkspaceQuotaHumanReadableType