Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> [CI]
504 lines
13 KiB
TypeScript
504 lines
13 KiB
TypeScript
// Generated from backend DTOs; do not edit.
|
|
// backend-contract-sha256: 89c6298b865197835486f01891acc597802367a7ae1b89f21ba882a52935df3b
|
|
|
|
export interface AccountChannelBody {
|
|
channel_id: string;
|
|
created_at: number;
|
|
payload: string;
|
|
role: string;
|
|
}
|
|
export interface AccountDeviceBody {
|
|
created_at: number;
|
|
current: boolean;
|
|
id: string;
|
|
last_seen: number;
|
|
name: string;
|
|
}
|
|
export interface AccountDeviceNameRequest {
|
|
name: string;
|
|
}
|
|
export interface AccountDeviceSigningRequest {
|
|
device_id: string;
|
|
public_key: string;
|
|
signature: string;
|
|
}
|
|
export interface AccountProfile {
|
|
avatar?: string | null;
|
|
displayName: string;
|
|
hasAvatar: boolean;
|
|
modifiedAt: number;
|
|
username: string;
|
|
}
|
|
export interface AccountProfileRequest {
|
|
avatar?: string | null;
|
|
avatarThumb?: string | null;
|
|
displayName: string;
|
|
keepAvatar: boolean;
|
|
}
|
|
export interface AccountRegisterRequest {
|
|
public_key: string;
|
|
salt: string;
|
|
signing_public_key: string;
|
|
username: string;
|
|
vault: string;
|
|
verifier: string;
|
|
}
|
|
export interface AccountSaltBody {
|
|
salt: string;
|
|
}
|
|
export interface AccountSaltRequest {
|
|
username: string;
|
|
}
|
|
export interface AccountSessionBody {
|
|
token: string;
|
|
username: string;
|
|
}
|
|
export interface AccountSessionRequest {
|
|
device_id?: string | null;
|
|
device_name?: string | null;
|
|
username: string;
|
|
verifier: string;
|
|
}
|
|
export interface AccountVaultBody {
|
|
revision: number;
|
|
vault: string;
|
|
}
|
|
export interface AccountVaultRequest {
|
|
revision: number;
|
|
vault: string;
|
|
}
|
|
export interface AppendResult {
|
|
seq: number;
|
|
}
|
|
export interface ChannelHistoryRequest {
|
|
chatHistory: boolean;
|
|
filesHistory: boolean;
|
|
}
|
|
export interface ChannelInfo {
|
|
avatar_version?: string | null;
|
|
can_create_channel: boolean;
|
|
can_delete_any: boolean;
|
|
can_delete_own: boolean;
|
|
can_edit_settings: boolean;
|
|
can_invite: boolean;
|
|
can_manage_folders: boolean;
|
|
can_manage_roles: boolean;
|
|
can_manage_structure: boolean;
|
|
can_remove_members: boolean;
|
|
can_upload: boolean;
|
|
created_at: number;
|
|
creator_account?: string | null;
|
|
expires_at: number;
|
|
id: string;
|
|
is_owner: boolean;
|
|
last_seq: number;
|
|
members_used: number;
|
|
mode: ChannelMode;
|
|
oldest_seq: number;
|
|
password_required: boolean;
|
|
settings: ChannelSettings;
|
|
}
|
|
export type ChannelMode = 'enc' | 'raw';
|
|
export const ChannelMode = { Enc: 'enc', Raw: 'raw' } as const;
|
|
|
|
export interface ChannelSettings {
|
|
delete_policy: DeletePolicy;
|
|
file_max_downloads: number;
|
|
join_policy: JoinPolicy;
|
|
max_items: number;
|
|
max_members: number;
|
|
members_can_upload: boolean;
|
|
name?: string | null;
|
|
ttl_seconds: number;
|
|
ui_restrict_copy_download: boolean;
|
|
}
|
|
export interface ChannelSettingsPatch {
|
|
avatar?: string | null;
|
|
avatar_thumb?: string | null;
|
|
delete_policy?: DeletePolicy | null;
|
|
file_max_downloads?: number | null;
|
|
join_password?: string | null;
|
|
join_policy?: JoinPolicy | null;
|
|
max_items?: number | null;
|
|
max_members?: number | null;
|
|
members_can_upload?: boolean | null;
|
|
name?: string | null;
|
|
ttl_seconds?: number | null;
|
|
ui_restrict_copy_download?: boolean | null;
|
|
}
|
|
export interface CreateChannelRequest {
|
|
id?: string | null;
|
|
join_password?: string | null;
|
|
key_package?: string | null;
|
|
mode?: ChannelMode | null;
|
|
owner_hash?: string | null;
|
|
read_hash?: string | null;
|
|
settings?: ChannelSettings | null;
|
|
write_hash?: string | null;
|
|
}
|
|
export interface CreateShareRequest {
|
|
id?: string | null;
|
|
owner_hash?: string | null;
|
|
read_hash?: string | null;
|
|
settings?: ShareSettings | null;
|
|
}
|
|
export interface CryptoState {
|
|
access: ChannelAccess[];
|
|
envelopes: DomainEnvelope[];
|
|
objects: ObjectEnvelope[];
|
|
revision: number;
|
|
}
|
|
export interface ChannelAccess {
|
|
channelId: string;
|
|
chatFromRevision: number;
|
|
chatRead: boolean;
|
|
chatWrite: boolean;
|
|
filesFromRevision: number;
|
|
filesRead: boolean;
|
|
filesUpload: boolean;
|
|
username: string;
|
|
}
|
|
export type DeletePolicy = 'owner_only' | 'own' | 'anyone';
|
|
export const DeletePolicy = { OwnerOnly: 'owner_only', Own: 'own', Anyone: 'anyone' } as const;
|
|
|
|
export interface DomainEnvelope {
|
|
channelId: string;
|
|
domain: CryptoDomain;
|
|
epoch: number;
|
|
payload: string;
|
|
username: string;
|
|
}
|
|
export type CryptoDomain = 'chat' | 'files';
|
|
export const CryptoDomain = { Chat: 'chat', Files: 'files' } as const;
|
|
|
|
export interface DomainPublishRequest {
|
|
channelId: string;
|
|
domain: CryptoDomain;
|
|
envelopes: DomainEnvelope[];
|
|
epoch: number;
|
|
}
|
|
export interface ErrorBody {
|
|
error: string;
|
|
}
|
|
export interface FileGrantBody {
|
|
domain: string;
|
|
expires_at: number;
|
|
ticket: string;
|
|
url: string;
|
|
}
|
|
export interface FileGrantRequest {
|
|
channel?: string | null;
|
|
from: number;
|
|
item?: string | null;
|
|
op: string;
|
|
}
|
|
export interface FinishShareRequest {
|
|
manifest_item_id?: string | null;
|
|
}
|
|
export interface GoneLogBody {
|
|
error: string;
|
|
oldest_seq: number;
|
|
}
|
|
export interface InvitationBody {
|
|
can_revoke: boolean;
|
|
channel_id: string;
|
|
created_at: number;
|
|
payload: string;
|
|
username: string;
|
|
}
|
|
export interface InvitationCryptoPlan {
|
|
batches: CryptoGrantBatch[];
|
|
channelId: string;
|
|
username: string;
|
|
}
|
|
export interface CryptoGrantBatch {
|
|
domain: CryptoDomain;
|
|
epoch: number;
|
|
recipients: string[];
|
|
rotate: boolean;
|
|
}
|
|
export interface InvitationRequest {
|
|
domain_envelopes?: DomainEnvelope[] | null;
|
|
payload: string;
|
|
username: string;
|
|
}
|
|
export type JoinPolicy = 'open' | 'invite';
|
|
export const JoinPolicy = { Open: 'open', Invite: 'invite' } as const;
|
|
|
|
export interface JoinRequest {
|
|
password?: string | null;
|
|
}
|
|
export interface JoinResult {
|
|
joined_at: number;
|
|
members_max: number;
|
|
members_used: number;
|
|
}
|
|
export interface KeyPackageRequest {
|
|
payload: string;
|
|
}
|
|
export interface MemberBody {
|
|
can_remove: boolean;
|
|
devices: number;
|
|
joined_at: number;
|
|
last_seen: number;
|
|
online: boolean;
|
|
online_devices: number;
|
|
role: string;
|
|
username: string;
|
|
}
|
|
export interface ObjectEnvelope {
|
|
authorAccount?: string | null;
|
|
channelId: string;
|
|
createdRevision: number;
|
|
deleteEvent?: SignedContentEventRecord | null;
|
|
domain: CryptoDomain;
|
|
epoch: number;
|
|
event?: SignedContentEventRecord | null;
|
|
itemId: string;
|
|
keyEnvelope: string;
|
|
}
|
|
export interface PasskeyBeginRequest {
|
|
username: string;
|
|
verifier?: string | null;
|
|
}
|
|
export interface PasskeyEnvelopeRequest {
|
|
credential: string;
|
|
id: string;
|
|
key_envelope: string;
|
|
username: string;
|
|
}
|
|
export interface PasskeyFinishRequest {
|
|
credential: string;
|
|
device_id?: string | null;
|
|
device_name?: string | null;
|
|
id: string;
|
|
key_envelope?: string | null;
|
|
name?: string | null;
|
|
username: string;
|
|
}
|
|
export interface PasskeyInfoBody {
|
|
can_recover: boolean;
|
|
created_at: number;
|
|
id: string;
|
|
name: string;
|
|
prf_salt: string;
|
|
}
|
|
export interface PasskeyOptionsBody {
|
|
credentials: PasskeyInfoBody[];
|
|
id: string;
|
|
options: string;
|
|
prf_salt?: string | null;
|
|
}
|
|
export interface PasskeySessionBody {
|
|
credential_id: string;
|
|
key_envelope?: string | null;
|
|
prf_salt: string;
|
|
token: string;
|
|
username: string;
|
|
}
|
|
export interface PublicKeyBody {
|
|
public_key: string;
|
|
signing_public_key?: string | null;
|
|
}
|
|
export interface ServerInfoBody {
|
|
captcha: CaptchaBody;
|
|
choices: SettingChoicesBody;
|
|
contract_version: string;
|
|
defaults: DefaultsBody;
|
|
files: FilesInfoBody;
|
|
limits: LimitsBody;
|
|
protocol: number;
|
|
transports: TransportsBody;
|
|
}
|
|
export interface CaptchaBody {
|
|
api_endpoint?: string | null;
|
|
enabled: boolean;
|
|
provider: string;
|
|
}
|
|
export interface DefaultsBody {
|
|
channel: ChannelSettings;
|
|
channel_mode: ChannelMode;
|
|
share: ShareSettings;
|
|
}
|
|
export interface FilesInfoBody {
|
|
enabled: boolean;
|
|
url?: string | null;
|
|
}
|
|
export interface LimitsBody {
|
|
max_channel_bytes: number;
|
|
max_frames_per_item: number;
|
|
max_items: number;
|
|
max_members: number;
|
|
max_payload_bytes: number;
|
|
max_ttl_seconds: number;
|
|
max_visitors: number;
|
|
max_workspace_bytes: number;
|
|
min_ttl_seconds: number;
|
|
}
|
|
export interface SettingChoicesBody {
|
|
file_max_downloads: number[];
|
|
max_members: number[];
|
|
max_visitors: number[];
|
|
ttl_seconds: number[];
|
|
}
|
|
export interface ShareInfo {
|
|
created_at: number;
|
|
expires_at: number;
|
|
id: string;
|
|
items: ShareItemInfo[];
|
|
manifest_item_id?: string | null;
|
|
sealed_at?: number | null;
|
|
settings: ShareSettings;
|
|
state: string;
|
|
}
|
|
export interface ShareItemInfo {
|
|
bytes: number;
|
|
complete: boolean;
|
|
downloads_left: number | null;
|
|
frames: number;
|
|
item_id: string;
|
|
max_downloads: number;
|
|
}
|
|
export interface ShareSettings {
|
|
file_max_downloads: number;
|
|
max_visitors: number;
|
|
ttl_seconds: number;
|
|
}
|
|
export interface ShareSettingsPatch {
|
|
file_max_downloads?: number | null;
|
|
max_visitors?: number | null;
|
|
ttl_seconds?: number | null;
|
|
}
|
|
export interface SignedContentEventRecord {
|
|
deviceCertificateSignature: string;
|
|
eventId: string;
|
|
frameCount: number;
|
|
kind: string;
|
|
manifestHash: string;
|
|
signature: string;
|
|
signerAccount?: string | null;
|
|
signerDeviceId: string;
|
|
signerDevicePublicKey: string;
|
|
signerRootPublicKey: string;
|
|
targetItemId?: string | null;
|
|
}
|
|
export interface TransportsBody {
|
|
http3: boolean;
|
|
sse: boolean;
|
|
websocket: boolean;
|
|
}
|
|
export interface WorkspaceBody {
|
|
people: AccountProfile[];
|
|
structure: WorkspaceState;
|
|
}
|
|
export interface WorkspaceChannelCreatedBody {
|
|
channel: WorkspaceChannel;
|
|
workspace: WorkspaceBody;
|
|
}
|
|
export interface WorkspaceChannel {
|
|
chatEpoch: number;
|
|
chatHistory: boolean;
|
|
createdAt: number;
|
|
createdBy: string;
|
|
fileDomain?: string | null;
|
|
filesEpoch: number;
|
|
filesHistory: boolean;
|
|
groupId?: string | null;
|
|
id: string;
|
|
name: string;
|
|
}
|
|
export interface WorkspaceChannelRequest {
|
|
fileDomain?: string | null;
|
|
groupId?: string | null;
|
|
name: string;
|
|
}
|
|
export interface WorkspaceFileDomainRequest {
|
|
fileDomain: string;
|
|
}
|
|
export interface WorkspaceFolderRequest {
|
|
name: string;
|
|
parentId?: string | null;
|
|
threadId: string;
|
|
}
|
|
export interface WorkspaceGroupCreatedBody {
|
|
group: WorkspaceGroup;
|
|
workspace: WorkspaceBody;
|
|
}
|
|
export interface WorkspaceGroup {
|
|
createdAt: number;
|
|
id: string;
|
|
name: string;
|
|
}
|
|
export interface WorkspaceGroupRequest {
|
|
groupId?: string | null;
|
|
}
|
|
export interface WorkspaceMoveRequest {
|
|
folderId?: string | null;
|
|
itemIds: string[];
|
|
threadId: string;
|
|
}
|
|
export interface WorkspaceNameRequest {
|
|
name: string;
|
|
}
|
|
export interface WorkspaceRoleCreatedBody {
|
|
role: WorkspaceRole;
|
|
workspace: WorkspaceBody;
|
|
}
|
|
export interface WorkspaceRole {
|
|
color?: string | null;
|
|
createdAt: number;
|
|
id: string;
|
|
members: string[];
|
|
name: string;
|
|
permissions: string[];
|
|
prefix?: string | null;
|
|
suffix?: string | null;
|
|
}
|
|
export interface WorkspaceRoleMembersRequest {
|
|
members: string[];
|
|
}
|
|
export interface WorkspaceRoleRequest {
|
|
color?: string | null;
|
|
name: string;
|
|
permissions: string[];
|
|
prefix?: string | null;
|
|
suffix?: string | null;
|
|
}
|
|
export interface WorkspaceState {
|
|
channels: WorkspaceChannel[];
|
|
defaultChannelId?: string | null;
|
|
folders: WorkspaceFolder[];
|
|
groups: WorkspaceGroup[];
|
|
locations: WorkspaceLocation[];
|
|
revision: number;
|
|
roles: WorkspaceRole[];
|
|
rolesSeeded: boolean;
|
|
}
|
|
export interface WorkspaceFolder {
|
|
id: string;
|
|
name: string;
|
|
parentId?: string | null;
|
|
threadId: string;
|
|
}
|
|
export interface WorkspaceLocation {
|
|
authorAccount?: string | null;
|
|
folderId?: string | null;
|
|
itemId: string;
|
|
threadId: string;
|
|
}
|
|
/** 错误响应里的 error 取值 */
|
|
export const ErrorCode = { BadRequest: 'bad_request', Unauthorized: 'unauthorized', Forbidden: 'forbidden', NotJoined: 'not_joined', MembersFull: 'members_full', ModeMismatch: 'mode_mismatch', NotFound: 'not_found', Conflict: 'conflict', Gone: 'gone', TooLarge: 'too_large', CaptchaRequired: 'captcha_required', CaptchaUnavailable: 'captcha_unavailable', RateLimited: 'rate_limited', VisitorsFull: 'visitors_full', Sealed: 'sealed', AccountRequired: 'account_required', InvitationRequired: 'invitation_required', ChannelPasswordRequired: 'channel_password_required', ChannelPasswordInvalid: 'channel_password_invalid', SpaceNameRequired: 'space_name_required', UseFileApi: 'use_file_api', FilesUnavailable: 'files_unavailable' } as const;
|
|
export type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];
|
|
|
|
/** X-WD-Role 请求头:这次请求出示哪张令牌 */
|
|
export const TokenRole = { Read: 'read', Write: 'write', Owner: 'owner' } as const;
|
|
export type TokenRole = (typeof TokenRole)[keyof typeof TokenRole];
|
|
|
|
/** 空间权限(身份组授予) */
|
|
export const WorkspacePermission = { RemoveMembers: 'members.remove', ManageStructure: 'structure.manage' } as const;
|
|
export type WorkspacePermission = (typeof WorkspacePermission)[keyof typeof WorkspacePermission];
|
|
|
|
/** 便捷分享的状态 */
|
|
export const ShareState = { Draft: 'draft', Sealed: 'sealed' } as const;
|
|
export type ShareState = (typeof ShareState)[keyof typeof ShareState];
|