internal: incomplete vault systems behind feature flag (#2340)
This commit is contained in:
@@ -33,7 +33,7 @@
|
||||
"typescript": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/common": "^1.48.3",
|
||||
"@standardnotes/features": "workspace:*",
|
||||
"@standardnotes/security": "^1.7.6",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
export interface AsymmetricMessageServerHash {
|
||||
uuid: string
|
||||
user_uuid: string
|
||||
sender_uuid: string
|
||||
encrypted_message: string
|
||||
created_at_timestamp: number
|
||||
updated_at_timestamp: number
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import { HttpErrorResponse } from '../Http'
|
||||
|
||||
export class ClientDisplayableError {
|
||||
constructor(public text: string, public title?: string, public tag?: string) {
|
||||
console.error('Client Displayable Error:', text, title || '', tag || '')
|
||||
}
|
||||
|
||||
static FromError(error: { message: string; tag?: string }) {
|
||||
return new ClientDisplayableError(error.message, undefined, error.tag)
|
||||
}
|
||||
|
||||
static FromString(text: string) {
|
||||
return new ClientDisplayableError(text)
|
||||
}
|
||||
|
||||
static FromNetworkError(error: HttpErrorResponse) {
|
||||
return new ClientDisplayableError(error.data.error.message)
|
||||
}
|
||||
}
|
||||
|
||||
export function isClientDisplayableError(error: unknown): error is ClientDisplayableError {
|
||||
return error instanceof ClientDisplayableError
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
export class ClientDisplayableError {
|
||||
constructor(public text: string, public title?: string, public tag?: string) {
|
||||
console.error('Client Displayable Error:', text, title || '', tag || '')
|
||||
}
|
||||
|
||||
static FromError(error: { message: string; tag?: string }) {
|
||||
return new ClientDisplayableError(error.message, undefined, error.tag)
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
import { ValetTokenOperation } from './ValetTokenOperation'
|
||||
|
||||
export type CreateValetTokenPayload = {
|
||||
operation: 'read' | 'write' | 'delete'
|
||||
operation: ValetTokenOperation
|
||||
resources: Array<{
|
||||
remoteIdentifier: string
|
||||
unencryptedFileSize?: number
|
||||
|
||||
3
packages/responses/src/Domain/Files/MoveFileResponse.ts
Normal file
3
packages/responses/src/Domain/Files/MoveFileResponse.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export type MoveFileResponse = {
|
||||
success: boolean
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export type ValetTokenOperation = 'read' | 'write' | 'delete' | 'move'
|
||||
@@ -9,6 +9,7 @@ export enum ErrorTag {
|
||||
RevokedSession = 'revoked-session',
|
||||
AuthInvalid = 'invalid-auth',
|
||||
ReadOnlyAccess = 'read-only-access',
|
||||
ExpiredItemShare = 'expired-item-share',
|
||||
|
||||
ClientValidationError = 'client-validation-error',
|
||||
ClientCanceledMfa = 'client-canceled-mfa',
|
||||
|
||||
@@ -22,5 +22,5 @@ export interface HttpSuccessResponse<T = AnySuccessRecord> extends HttpResponseB
|
||||
export type HttpResponse<T = AnySuccessRecord> = HttpErrorResponse | HttpSuccessResponse<T>
|
||||
|
||||
export function isErrorResponse<T>(response: HttpResponse<T>): response is HttpErrorResponse {
|
||||
return (response.data as HttpErrorResponseBody)?.error != undefined
|
||||
return (response.data as HttpErrorResponseBody)?.error != undefined || response.status >= 400
|
||||
}
|
||||
|
||||
@@ -4,4 +4,5 @@ export enum ApiEndpointParam {
|
||||
SyncDlLimit = 'limit',
|
||||
SyncPayloads = 'items',
|
||||
ApiVersion = 'api',
|
||||
SharedVaultUuids = 'shared_vault_uuids',
|
||||
}
|
||||
|
||||
@@ -1,11 +1,98 @@
|
||||
import { ConflictType } from './ConflictType'
|
||||
import { ServerItemResponse } from './ServerItemResponse'
|
||||
|
||||
export type ConflictParams = {
|
||||
type BaseConflictParams<T = ServerItemResponse> = {
|
||||
type: ConflictType
|
||||
server_item?: ServerItemResponse
|
||||
unsaved_item?: ServerItemResponse
|
||||
|
||||
/** @legacay */
|
||||
item?: ServerItemResponse
|
||||
server_item?: T
|
||||
unsaved_item?: T
|
||||
}
|
||||
|
||||
export type ConflictParamsWithServerItem<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
server_item: T
|
||||
unsaved_item: never
|
||||
}
|
||||
|
||||
export type ConflictParamsWithUnsavedItem<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
unsaved_item: T
|
||||
server_item: never
|
||||
}
|
||||
|
||||
export type ConflictParamsWithServerAndUnsavedItem<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
server_item: T
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export type ConflictConflictingDataParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.ConflictingData
|
||||
server_item: T
|
||||
unsaved_item: never
|
||||
}
|
||||
|
||||
export type ConflictUuidConflictParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.UuidConflict
|
||||
server_item: never
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export type ConflictContentTypeErrorParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.ContentTypeError
|
||||
server_item: never
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export type ConflictContentErrorParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.ContentError
|
||||
server_item: never
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export type ConflictReadOnlyErrorParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.ReadOnlyError
|
||||
server_item: T
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export type ConflictUuidErrorParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.UuidError
|
||||
server_item: never
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export type ConflictSharedVaultNotMemberErrorParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.SharedVaultNotMemberError
|
||||
server_item: never
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export type ConflictSharedVaultInsufficientPermissionsErrorParams<T = ServerItemResponse> = BaseConflictParams<T> & {
|
||||
type: ConflictType.SharedVaultInsufficientPermissionsError
|
||||
unsaved_item: T
|
||||
}
|
||||
|
||||
export function conflictParamsHasServerItemAndUnsavedItem<T = ServerItemResponse>(
|
||||
params: BaseConflictParams<T>,
|
||||
): params is ConflictParamsWithServerAndUnsavedItem<T> {
|
||||
return params.server_item !== undefined && params.unsaved_item !== undefined
|
||||
}
|
||||
|
||||
export function conflictParamsHasOnlyServerItem<T = ServerItemResponse>(
|
||||
params: BaseConflictParams<T>,
|
||||
): params is ConflictParamsWithServerItem<T> {
|
||||
return params.server_item !== undefined
|
||||
}
|
||||
|
||||
export function conflictParamsHasOnlyUnsavedItem<T = ServerItemResponse>(
|
||||
params: BaseConflictParams<T>,
|
||||
): params is ConflictParamsWithUnsavedItem<T> {
|
||||
return params.unsaved_item !== undefined
|
||||
}
|
||||
|
||||
export type ConflictParams<T = ServerItemResponse> =
|
||||
| ConflictConflictingDataParams<T>
|
||||
| ConflictUuidConflictParams<T>
|
||||
| ConflictContentTypeErrorParams<T>
|
||||
| ConflictContentErrorParams<T>
|
||||
| ConflictReadOnlyErrorParams<T>
|
||||
| ConflictUuidErrorParams<T>
|
||||
| ConflictSharedVaultNotMemberErrorParams<T>
|
||||
| ConflictSharedVaultInsufficientPermissionsErrorParams<T>
|
||||
|
||||
@@ -5,5 +5,9 @@ export enum ConflictType {
|
||||
ContentError = 'content_error',
|
||||
ReadOnlyError = 'readonly_error',
|
||||
UuidError = 'uuid_error',
|
||||
SyncError = 'sync_error',
|
||||
|
||||
SharedVaultSnjsVersionError = 'shared_vault_snjs_version_error',
|
||||
SharedVaultInsufficientPermissionsError = 'shared_vault_insufficient_permissions_error',
|
||||
SharedVaultNotMemberError = 'shared_vault_not_member_error',
|
||||
SharedVaultInvalidState = 'shared_vault_invalid_state',
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import { SharedVaultInviteServerHash } from '../SharedVaults/SharedVaultInviteServerHash'
|
||||
import { ApiEndpointParam } from './ApiEndpointParam'
|
||||
import { ConflictParams } from './ConflictParams'
|
||||
import { ServerItemResponse } from './ServerItemResponse'
|
||||
import { SharedVaultServerHash } from '../SharedVaults/SharedVaultServerHash'
|
||||
import { UserEventServerHash } from '../UserEvent/UserEventServerHash'
|
||||
import { AsymmetricMessageServerHash } from '../AsymmetricMessage/AsymmetricMessageServerHash'
|
||||
|
||||
export type RawSyncData = {
|
||||
error?: unknown
|
||||
@@ -10,5 +14,9 @@ export type RawSyncData = {
|
||||
saved_items?: ServerItemResponse[]
|
||||
conflicts?: ConflictParams[]
|
||||
unsaved?: ConflictParams[]
|
||||
shared_vaults?: SharedVaultServerHash[]
|
||||
shared_vault_invites?: SharedVaultInviteServerHash[]
|
||||
user_events?: UserEventServerHash[]
|
||||
asymmetric_messages?: AsymmetricMessageServerHash[]
|
||||
status?: number
|
||||
}
|
||||
|
||||
@@ -12,4 +12,8 @@ export interface ServerItemResponse {
|
||||
updated_at_timestamp: number
|
||||
updated_at: Date
|
||||
uuid: string
|
||||
user_uuid: string
|
||||
shared_vault_uuid: string | undefined
|
||||
key_system_identifier: string | undefined
|
||||
last_edited_by_uuid?: string
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import { AsymmetricMessageServerHash } from '../AsymmetricMessage/AsymmetricMessageServerHash'
|
||||
import { SharedVaultPermission } from './SharedVaultPermission'
|
||||
|
||||
export interface SharedVaultInviteServerHash extends AsymmetricMessageServerHash {
|
||||
uuid: string
|
||||
shared_vault_uuid: string
|
||||
user_uuid: string
|
||||
sender_uuid: string
|
||||
encrypted_message: string
|
||||
permissions: SharedVaultPermission
|
||||
created_at_timestamp: number
|
||||
updated_at_timestamp: number
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
export enum SharedVaultPermission {
|
||||
Read = 'read',
|
||||
Write = 'write',
|
||||
Admin = 'admin',
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
export interface SharedVaultServerHash {
|
||||
uuid: string
|
||||
user_uuid: string
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { SharedVaultPermission } from './SharedVaultPermission'
|
||||
|
||||
export interface SharedVaultUserServerHash {
|
||||
uuid: string
|
||||
shared_vault_uuid: string
|
||||
user_uuid: string
|
||||
permissions: SharedVaultPermission
|
||||
updated_at_timestamp: number
|
||||
}
|
||||
14
packages/responses/src/Domain/UserEvent/UserEventPayload.ts
Normal file
14
packages/responses/src/Domain/UserEvent/UserEventPayload.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { UserEventType } from './UserEventType'
|
||||
|
||||
export type UserEventPayload =
|
||||
| {
|
||||
eventType: UserEventType.SharedVaultItemRemoved
|
||||
itemUuid: string
|
||||
sharedVaultUuid: string
|
||||
version: string
|
||||
}
|
||||
| {
|
||||
eventType: UserEventType.RemovedFromSharedVault
|
||||
sharedVaultUuid: string
|
||||
version: string
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import { UserEventType } from './UserEventType'
|
||||
|
||||
export type UserEventServerHash = {
|
||||
uuid: string
|
||||
user_uuid: string
|
||||
event_type: UserEventType
|
||||
event_payload: string
|
||||
created_at_timestamp?: number
|
||||
updated_at_timestamp?: number
|
||||
}
|
||||
4
packages/responses/src/Domain/UserEvent/UserEventType.ts
Normal file
4
packages/responses/src/Domain/UserEvent/UserEventType.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export enum UserEventType {
|
||||
SharedVaultItemRemoved = 'shared_vault_item_removed',
|
||||
RemovedFromSharedVault = 'removed_from_shared_vault',
|
||||
}
|
||||
@@ -13,7 +13,9 @@ export * from './Auth/SignInData'
|
||||
export * from './Auth/SignInResponse'
|
||||
export * from './Auth/SignOutResponse'
|
||||
export * from './Auth/User'
|
||||
export * from './Error/ClientError'
|
||||
|
||||
export * from './Error/ClientDisplayableError'
|
||||
|
||||
export * from './Files/CloseUploadSessionResponse'
|
||||
export * from './Files/CreateValetTokenPayload'
|
||||
export * from './Files/CreateValetTokenResponse'
|
||||
@@ -21,7 +23,18 @@ export * from './Files/CreateValetTokenResponseData'
|
||||
export * from './Files/DownloadFileChunkResponse'
|
||||
export * from './Files/StartUploadSessionResponse'
|
||||
export * from './Files/UploadFileChunkResponse'
|
||||
export * from './Files/MoveFileResponse'
|
||||
export * from './Files/ValetTokenOperation'
|
||||
|
||||
export * from './Http'
|
||||
|
||||
export * from './SharedVaults/SharedVaultInviteServerHash'
|
||||
export * from './SharedVaults/SharedVaultUserServerHash'
|
||||
export * from './SharedVaults/SharedVaultServerHash'
|
||||
export * from './SharedVaults/SharedVaultPermission'
|
||||
|
||||
export * from './AsymmetricMessage/AsymmetricMessageServerHash'
|
||||
|
||||
export * from './Item/ApiEndpointParam'
|
||||
export * from './Item/CheckIntegrityResponse'
|
||||
export * from './Item/ConflictParams'
|
||||
@@ -31,11 +44,13 @@ export * from './Item/RawSyncData'
|
||||
export * from './Item/RawSyncResponse'
|
||||
export * from './Item/ServerItemResponse'
|
||||
export * from './Item/IntegrityPayload'
|
||||
|
||||
export * from './Listed/ActionResponse'
|
||||
export * from './Listed/ListedAccount'
|
||||
export * from './Listed/ListedAccountInfo'
|
||||
export * from './Listed/ListedAccountInfoResponse'
|
||||
export * from './Listed/ListedRegistrationResponse'
|
||||
|
||||
export * from './User/AvailableSubscriptions'
|
||||
export * from './User/DeleteSettingResponse'
|
||||
export * from './User/GetAvailableSubscriptionsResponse'
|
||||
@@ -48,3 +63,7 @@ export * from './User/SettingData'
|
||||
export * from './User/UpdateSettingResponse'
|
||||
export * from './User/UserFeaturesData'
|
||||
export * from './User/UserFeaturesResponse'
|
||||
|
||||
export * from './UserEvent/UserEventServerHash'
|
||||
export * from './UserEvent/UserEventType'
|
||||
export * from './UserEvent/UserEventPayload'
|
||||
|
||||
Reference in New Issue
Block a user