import _ from "lodash"; export interface Arguments { vias: string[]; // Either one of the enums or a custom link sharer: string; extras: { [key: string]: string[] }; } export interface LinkContent { identifier: string; arguments: Arguments; originalLink: string; } export enum LinkDiscriminator { Alias = "ALIAS", RoomId = "ROOM_ID", UserId = "USER_ID", Permalink = "PERMALINK", GroupId = "GROUP_ID", ParseFailed = "PARSE_FAILED", } export interface Alias extends LinkContent { kind: LinkDiscriminator.Alias; } export interface RoomId extends LinkContent { kind: LinkDiscriminator.RoomId; } export interface UserId extends LinkContent { kind: LinkDiscriminator.UserId; } export interface GroupId extends LinkContent { kind: LinkDiscriminator.GroupId; } export interface Permalink extends LinkContent { kind: LinkDiscriminator.Permalink; roomKind: LinkDiscriminator.RoomId | LinkDiscriminator.Alias; roomLink: string; eventId: string; } export interface ParseFailed { kind: LinkDiscriminator.ParseFailed; originalLink: string; } export type SafeLink = Alias | RoomId | UserId | Permalink | GroupId; export type Link = SafeLink | ParseFailed;