# Справка: контекст сабмита

В коде доступны:

# Описание объекта Asset

 type Asset = {
    
    // Уникальный идентификатор ассета
    assetId: string,

    // Отображаемое название ассета
    title: string,

    // Под каким именем был загружен на FTP (без расширения)
    uploadedBasename: string,

    // Тип ассета
    type: string,

    // Метаданные ассета
    metadata: {[prop:string]: any},

    // Перечень файлов, входящих в ассет
    files: AssetFile[],

    // Основной файл ассета
    get mainFile(): AssetFile | undefined,

    // Статусы, назначенные ассету
    markers: AssetMarker[],
        
    // Добавить новый статус ассету
    //   markerName - служебное имя статуса
    //   subject - связанный микросток, если требуется
    //   data - привязанные данные к статусу (необяз.)
    addMarker: (markerName: string, subject: string | null, data?: object) => Promise<void>

    // Ассету назначен результат
    processed: boolean,        

    // Добавить сообщение в лог ассета
    log: (message: string) => void,

    // Добавить предупреждение в лог ассета
    warn: (message: string) => void,
    
    // Установить значение програсса для текущего блока
    //   progress - значение в пределах 0..1
    //   prepare - статус "подготовки"
    progress: (progress: number, prepare: boolean) => void,

    // Установить результат ассету - ошибка
    markFailed: (message: string) => void,

    // Установить результат ассету - файл не найден
    markNotFound: () => void,

    // Установить результат ассету - обработан успешно
    //   data - объект, который записывается в статус
    markDone: (data: object) => void,

    // Установить результат ассету - пользователь не обработан
    markUnauthorized: () => void,

    // Установить результат ассету - файл будет обработан позже
    // Используется, когда необходимо делать скрипт, который 
    // переключается между страницами
    markPostponed: () => void,
}

type AssetFile =  {

    // Имя файла
    name: string,

    // Роль файла в ассете
    role: string

    // Получить содержимое файла
    getBlob: () => Promise<Blob>
}

type AssetMarker = {
        
    // Служебное имя маркера
    name: string,
    
    // Связанный микросток
    subject: string | null,

    // Записанные в статус данные
    data: any

}

# Описание объекта submitContext

type SubmitContext = {

    // Настройки процесса сабмита
    settings: {[prop: string]: any},

    // Переданные в процесс сабмита словари
    dictionaries: object

}

# Описание объекта window.imshost

type ImsHost = {
    
    // Загрузить ассет из программы по его идентификатору
    loadAsset(assetId: string): Promise<Asset>,
    
    // Получить общее состояние процесса сабмита
    getProcessSharedState(): Promise<{
        [step: string]: {[prop:string]: any}
    }>
    
}