diff options
author | Hailey <me@haileyok.com> | 2024-04-29 23:34:26 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-29 23:34:26 -0700 |
commit | eb8bfd11d14a87983b210bea4a619d2dd7c51cdf (patch) | |
tree | 6f322f86ba92e989570daa1ada94ad5f10258506 /src/temp/dm/defs.ts | |
parent | 5d19f27052ebd3642db58742f7efaaee0b3a6720 (diff) | |
download | voidsky-eb8bfd11d14a87983b210bea4a619d2dd7c51cdf.tar.zst |
[Clipclops] Add screen to view and send clip clops (#3754)
* add new routes with placeholder screens * add clops list * add a clop input * add some better padding to the clops * some more adjustments * add rnkc * implement rnkc * implement rnkc * be a little less weird about it * rename clop stuff * rename more clop * one more * [Clipclops] Temp codegenerated lexicon (#3749) * add codegenerated lexicon * replace hailey's types * use codegen'd types in components * fix error + throw if fetch failed * remove bad imports * update messageslist and messageitem * import useState * add clop service URL hook * add dm service url storage * use context * use context for service url (temp) * remove log * nits --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Diffstat (limited to 'src/temp/dm/defs.ts')
-rw-r--r-- | src/temp/dm/defs.ts | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/src/temp/dm/defs.ts b/src/temp/dm/defs.ts new file mode 100644 index 000000000..91f68365c --- /dev/null +++ b/src/temp/dm/defs.ts @@ -0,0 +1,195 @@ +import { + AppBskyActorDefs, + AppBskyEmbedRecord, + AppBskyRichtextFacet, +} from '@atproto/api' +import {ValidationResult} from '@atproto/lexicon' + +export interface Message { + id?: string + text: string + /** Annotations of text (mentions, URLs, hashtags, etc) */ + facets?: AppBskyRichtextFacet.Main[] + embed?: AppBskyEmbedRecord.Main | {$type: string; [k: string]: unknown} + [k: string]: unknown +} + +export function isMessage(v: unknown): v is Message { + return isObj(v) && hasProp(v, '$type') && v.$type === 'temp.dm.defs#message' +} + +export function validateMessage(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export interface MessageView { + id: string + rev: string + text: string + /** Annotations of text (mentions, URLs, hashtags, etc) */ + facets?: AppBskyRichtextFacet.Main[] + embed?: AppBskyEmbedRecord.Main | {$type: string; [k: string]: unknown} + sender?: MessageViewSender + sentAt: string + [k: string]: unknown +} + +export function isMessageView(v: unknown): v is MessageView { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'temp.dm.defs#messageView' + ) +} + +export function validateMessageView(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export interface DeletedMessage { + id: string + rev?: string + sender?: MessageViewSender + sentAt: string + [k: string]: unknown +} + +export function isDeletedMessage(v: unknown): v is DeletedMessage { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'temp.dm.defs#deletedMessage' + ) +} + +export function validateDeletedMessage(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export interface MessageViewSender { + did: string + [k: string]: unknown +} + +export function isMessageViewSender(v: unknown): v is MessageViewSender { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'temp.dm.defs#messageViewSender' + ) +} + +export function validateMessageViewSender(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export interface ChatView { + id: string + rev: string + members: AppBskyActorDefs.ProfileViewBasic[] + lastMessage?: + | MessageView + | DeletedMessage + | {$type: string; [k: string]: unknown} + unreadCount: number + [k: string]: unknown +} + +export function isChatView(v: unknown): v is ChatView { + return isObj(v) && hasProp(v, '$type') && v.$type === 'temp.dm.defs#chatView' +} + +export function validateChatView(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export type IncomingMessageSetting = + | 'all' + | 'none' + | 'following' + | (string & {}) + +export interface LogBeginChat { + rev: string + chatId: string + [k: string]: unknown +} + +export function isLogBeginChat(v: unknown): v is LogBeginChat { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'temp.dm.defs#logBeginChat' + ) +} + +export function validateLogBeginChat(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export interface LogCreateMessage { + rev: string + chatId: string + message: MessageView | DeletedMessage | {$type: string; [k: string]: unknown} + [k: string]: unknown +} + +export function isLogCreateMessage(v: unknown): v is LogCreateMessage { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'temp.dm.defs#logCreateMessage' + ) +} + +export function validateLogCreateMessage(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export interface LogDeleteMessage { + rev: string + chatId: string + message: MessageView | DeletedMessage | {$type: string; [k: string]: unknown} + [k: string]: unknown +} + +export function isLogDeleteMessage(v: unknown): v is LogDeleteMessage { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'temp.dm.defs#logDeleteMessage' + ) +} + +export function validateLogDeleteMessage(v: unknown): ValidationResult { + return { + success: true, + value: v, + } +} + +export function isObj(v: unknown): v is Record<string, unknown> { + return typeof v === 'object' && v !== null +} + +export function hasProp<K extends PropertyKey>( + data: object, + prop: K, +): data is Record<K, unknown> { + return prop in data +} |