@crowdin/app-project-module
Version:
Module that generates for you all common endpoints for serving standalone Crowdin App
301 lines (300 loc) • 8.47 kB
TypeScript
import { ModuleKey } from '../../types';
import Crowdin from '@crowdin/crowdin-api-client';
export interface Webhook extends ModuleKey {
/**
* Events that the webhook should listen to
*/
events: string[];
/**
* handle function
*/
callback: (data: {
webhookContext: WebhookContext;
events: Event[];
client: Crowdin;
}) => Promise<void>;
}
interface WebhookContext {
domain?: string;
organizationId?: number;
userId?: number;
agentId?: number;
}
interface EventPayload {
event: string;
}
interface BranchPayload {
id: number;
}
interface FilePayload {
id: number;
name: string;
title: string | null;
type: string;
path: string;
status: string;
revision: number;
branchId: number | null;
directoryId: number | null;
project?: ProjectPayload;
}
interface GroupPayload {
id: number;
name: string;
createdAt: string;
updatedAt: string;
description: string | null;
parentId: number;
userId: number;
organizationId: number;
}
interface LanguagePayload {
id: string;
name: string;
editorCode: string;
twoLettersCode: string;
threeLettersCode: string;
locale: string;
androidCode: string;
osxCode: string;
osxLocale: string;
textDirection: string;
dialectOf: string;
}
interface ProjectBuildPayload {
id: number;
downloadUrl: string;
project: ProjectPayload;
}
interface ProjectPayload {
id: number;
userId: number;
sourceLanguageId: string;
targetLanguageIds: string[];
identifier: string;
name: string;
createdAt: string;
updatedAt: string;
lastActivity: string;
description: string;
url: string;
cname: string | null;
languageAccessPolicy?: string;
visibility?: string;
publicDownloads?: boolean;
logo?: string;
isExternal?: boolean;
externalType?: string | null;
hasCrowdsourcing?: boolean;
}
interface StepPayload {
name: string;
}
interface SuggestionPayload {
id: number;
text: string;
pluralCategoryName: string | null;
rating: number;
provider: string | null;
isPreTranslated: boolean;
createdAt: string;
step?: StepPayload | null;
}
interface NewSuggestionPayload {
user: UserPayload | null;
targetLanguage: LanguagePayload | null;
string: TranslationPayload | null;
}
interface TaskPayload {
id: number;
type: number;
vendor?: string | null;
status?: string | null;
title: string;
assignees: TaskAssigneeUserPayload[];
assignedTeams: TaskAssigneeTeamPayload[];
fileIds?: number[];
branchIds?: number[];
progress: {
total: number;
done: number;
percent: number;
};
description: string;
translationUrl: string | null;
wordsCount: number;
filesCount?: number;
commentsCount: number;
deadline: string;
timeRange: string | null;
workflowStepId: number;
buyUrl: string;
createdAt: string;
updatedAt: string;
oldStatus: string | null;
newStatus: string | null;
sourceLanguage: LanguagePayload;
targetLanguage: LanguagePayload | null;
project: ProjectPayload;
taskCreator: UserPayload;
}
interface TranslationDiscussionsPayload {
id: number;
text: string;
type: string;
issueType: string;
issueStatus: string;
resolvedAt: string;
createdAt: string;
string: TranslationPayload;
targetLanguage: LanguagePayload;
user: UserPayload;
commentResolver: UserPayload;
}
interface TranslationPayload {
id: number;
identifier: string;
key: string;
text: string;
type: string;
context: string;
maxLength: number;
isHidden: boolean;
isDuplicate: boolean;
masterStringId: number;
revision?: number;
hasPlurals: boolean;
labelIds: number[];
url: string;
createdAt: string;
updatedAt: string;
file?: FilePayload;
branch?: BranchPayload;
project: ProjectPayload;
}
interface UserPayload {
id: number;
username: string;
fullName: string;
avatarUrl: string;
}
interface TaskAssigneeUserPayload extends UserPayload {
worksCount: number;
wordsLeft: number;
}
interface TaskAssigneeTeamPayload {
id: number;
wordsCount: number;
}
export interface FileTranslatedEvent extends EventPayload {
file: FilePayload;
targetLanguage: LanguagePayload;
step?: StepPayload;
}
export interface FileApprovedEvent extends EventPayload {
file: FilePayload;
targetLanguage: LanguagePayload;
step?: StepPayload;
}
export interface FileAddedEvent extends EventPayload {
file: FilePayload;
user: UserPayload;
}
export interface FileUpdatedEvent extends EventPayload {
file: FilePayload;
user: UserPayload;
}
export interface FileRevertedEvent extends EventPayload {
file: FilePayload;
user: UserPayload;
}
export interface FileDeletedEvent extends EventPayload {
file: FilePayload;
user: UserPayload;
}
export interface ProjectTranslatedEvent extends EventPayload {
project: ProjectPayload;
targetLanguage: LanguagePayload;
workflowStep: StepPayload;
}
export interface ProjectApprovedEvent extends EventPayload {
project: ProjectPayload;
targetLanguage: LanguagePayload;
workflowStep: StepPayload;
}
export interface ProjectBuiltEvent extends EventPayload {
build: ProjectBuildPayload;
}
export interface TopSuggestionUpdatedEvent extends EventPayload {
oldTranslation: SuggestionPayload;
newTranslation: NewSuggestionPayload;
}
export interface SuggestionAddedEvent extends EventPayload {
translation: TranslationPayload;
}
export interface SuggestionUpdatedEvent extends EventPayload {
translation: TranslationPayload;
}
export interface SuggestionDeletedEvent extends EventPayload {
translation: TranslationPayload;
}
export interface SuggestionApprovedEvent extends EventPayload {
translation: TranslationPayload;
}
export interface SuggestionDisapprovedEvent extends EventPayload {
translation: TranslationPayload;
}
export interface StringAddedEvent extends EventPayload {
string: TranslationPayload;
user: UserPayload;
}
export interface StringUpdatedEvent extends EventPayload {
string: TranslationPayload;
user: UserPayload;
}
export interface StringDeletedEvent extends EventPayload {
string: TranslationPayload;
user: UserPayload;
}
export interface TranslationDiscussionsCreatedEvent extends EventPayload {
comment: TranslationDiscussionsPayload;
}
export interface TranslationDiscussionsUpdatedEvent extends EventPayload {
comment: TranslationDiscussionsPayload;
}
export interface TranslationDiscussionsDeletedEvent extends EventPayload {
comment: TranslationDiscussionsPayload;
}
export interface TranslationDiscussionsRestoredEvent extends EventPayload {
comment: TranslationDiscussionsPayload;
}
export interface TaskAddedEvent extends EventPayload {
task: TaskPayload;
}
export interface TaskStatusChangedEvent extends EventPayload {
task: TaskPayload;
}
export interface TaskDeletedEvent extends EventPayload {
task: TaskPayload;
}
export interface TaskUpdatedEvent extends EventPayload {
task: TaskPayload;
}
export interface ProjectCreatedEvent extends EventPayload {
project: ProjectPayload;
user: UserPayload;
}
export interface ProjectDeletedEvent extends EventPayload {
project: ProjectPayload;
user: UserPayload;
}
export interface GroupCreatedEvent extends EventPayload {
group: GroupPayload;
user: UserPayload;
}
export interface GroupDeletedEvent extends EventPayload {
group: GroupPayload;
user: UserPayload;
}
export type Event = FileTranslatedEvent | FileApprovedEvent | FileAddedEvent | FileUpdatedEvent | FileRevertedEvent | FileDeletedEvent | ProjectTranslatedEvent | ProjectApprovedEvent | ProjectBuiltEvent | TopSuggestionUpdatedEvent | SuggestionAddedEvent | SuggestionUpdatedEvent | SuggestionDeletedEvent | SuggestionApprovedEvent | SuggestionDisapprovedEvent | StringAddedEvent | StringUpdatedEvent | StringDeletedEvent | TranslationDiscussionsCreatedEvent | TranslationDiscussionsUpdatedEvent | TranslationDiscussionsDeletedEvent | TranslationDiscussionsRestoredEvent | TaskAddedEvent | TaskStatusChangedEvent | TaskDeletedEvent | TaskUpdatedEvent | ProjectCreatedEvent | ProjectDeletedEvent | GroupCreatedEvent | GroupDeletedEvent;
export {};