98 lines
2.4 KiB
TypeScript
98 lines
2.4 KiB
TypeScript
// App Types
|
|
export type TAppType = 'global' | 'partner' | 'custom_oidc';
|
|
export type TAppApprovalStatus = 'draft' | 'pending_review' | 'approved' | 'rejected' | 'suspended';
|
|
|
|
// OAuth Credentials
|
|
export interface IOAuthCredentials {
|
|
clientId: string;
|
|
clientSecretHash: string;
|
|
redirectUris: string[];
|
|
allowedScopes: string[];
|
|
grantTypes: ('authorization_code' | 'client_credentials' | 'refresh_token')[];
|
|
}
|
|
|
|
// Base app data shared by all app types
|
|
export interface IAppBaseData {
|
|
name: string;
|
|
description: string;
|
|
logoUrl: string;
|
|
appUrl: string;
|
|
}
|
|
|
|
// Global App - First-party apps managed by platform (foss.global, task.vc, etc.)
|
|
export interface IGlobalApp {
|
|
id: string;
|
|
type: 'global';
|
|
data: IAppBaseData & {
|
|
oauthCredentials: IOAuthCredentials;
|
|
isActive: boolean;
|
|
category: string;
|
|
};
|
|
}
|
|
|
|
// Partner App - Third-party apps submitted to AppStore
|
|
export interface IPartnerApp {
|
|
id: string;
|
|
type: 'partner';
|
|
data: IAppBaseData & {
|
|
ownerOrganizationId: string;
|
|
oauthCredentials: IOAuthCredentials;
|
|
appStoreMetadata: {
|
|
shortDescription: string;
|
|
longDescription: string;
|
|
screenshots: string[];
|
|
category: string;
|
|
tags: string[];
|
|
pricing: { model: 'free' | 'paid' | 'freemium' };
|
|
};
|
|
approvalStatus: TAppApprovalStatus;
|
|
isPublished: boolean;
|
|
installCount: number;
|
|
};
|
|
}
|
|
|
|
// Custom OIDC App - Organization-created OAuth clients
|
|
export interface ICustomOidcApp {
|
|
id: string;
|
|
type: 'custom_oidc';
|
|
data: IAppBaseData & {
|
|
ownerOrganizationId: string;
|
|
oauthCredentials: IOAuthCredentials;
|
|
oidcSettings: {
|
|
accessTokenLifetime: number; // seconds
|
|
refreshTokenLifetime: number; // seconds
|
|
};
|
|
};
|
|
}
|
|
|
|
// Union type for all app types
|
|
export type IApp = IGlobalApp | IPartnerApp | ICustomOidcApp;
|
|
|
|
/**
|
|
* Legacy interface for backwards compatibility with existing code
|
|
* that expects a flat app structure (e.g., idpclient, transfermanager)
|
|
*/
|
|
export interface IAppLegacy {
|
|
/**
|
|
* must be unique
|
|
*/
|
|
id: string;
|
|
/**
|
|
* should be unique
|
|
*/
|
|
name: string;
|
|
description: string;
|
|
logoUrl: string;
|
|
appUrl: string;
|
|
}
|
|
|
|
/**
|
|
* Storage interface for SmartData documents
|
|
* Uses the discriminated union approach with a 'type' field
|
|
*/
|
|
export interface IAppDocument {
|
|
id: string;
|
|
type: TAppType;
|
|
data: IGlobalApp['data'] | IPartnerApp['data'] | ICustomOidcApp['data'];
|
|
}
|