export declare const notificationTypeEnum: import("arktype/internal/variants/string.ts").StringType<"access-requested" | "app-message" | "build-complete" | "build-failed" | "comment-posted" | "dm-received" | "follow-approved" | "follow-request" | "follower-added" | "member-joined" | "request-approved" | "request-revoked" | "vibe-published" | "vibe-remixed", {}>; export type NotificationType = typeof notificationTypeEnum.infer; export declare const EvtUserNotification: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.evt-user-notification"; notificationType: "access-requested" | "app-message" | "build-complete" | "build-failed" | "comment-posted" | "dm-received" | "follow-approved" | "follow-request" | "follower-added" | "member-joined" | "request-approved" | "request-revoked" | "vibe-published" | "vibe-remixed"; ownerHandle: string; appSlug: string | null; counterpartHandle?: string | undefined; body?: string | undefined; }, {}>; export type EvtUserNotification = typeof EvtUserNotification.infer; export declare function isEvtUserNotification(obj: unknown): obj is EvtUserNotification; export declare function isBuildNotification(notificationType: string): boolean; export declare const USER_NOTIFY_SHARD_PREFIX = "notify-user-"; export declare function userNotifyShardFor(userId: string): string; export declare function isUserNotifyShard(shard: string): boolean; export declare const MAX_ROLL_INDEX = 8; export declare function codegenShardForUser(userId: string, n: number): string; export declare function shardBelongsToUser(shard: string, userId: string): boolean; export declare const ReqSubscribeUserNotificationsRaw: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.req-subscribe-user-notifications"; }, {}>; export type ReqSubscribeUserNotificationsRaw = typeof ReqSubscribeUserNotificationsRaw.infer; export declare function isReqSubscribeUserNotificationsRaw(obj: unknown): obj is ReqSubscribeUserNotificationsRaw; export declare const ResSubscribeUserNotifications: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.res-subscribe-user-notifications"; status: "ok"; }, {}>; export type ResSubscribeUserNotifications = typeof ResSubscribeUserNotifications.infer; export declare function isResSubscribeUserNotifications(obj: unknown): obj is ResSubscribeUserNotifications; export declare const ReqRegisterPushTokenRaw: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.req-register-push-token"; token: string; platform: "ios"; appVersion: string; }, {}>; export type ReqRegisterPushTokenRaw = typeof ReqRegisterPushTokenRaw.infer; export declare function isReqRegisterPushTokenRaw(obj: unknown): obj is ReqRegisterPushTokenRaw; export interface RegisterPushTokenRequest { readonly userId: string; readonly token: string; readonly platform: "ios"; readonly appVersion: string; } export type PushTokenWarningSink = (message: string, ...details: string[]) => void; export declare const ResRegisterPushToken: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.res-register-push-token"; status: "ok"; }, {}>; export type ResRegisterPushToken = typeof ResRegisterPushToken.infer; export declare function isResRegisterPushToken(obj: unknown): obj is ResRegisterPushToken; export declare const ReqDeregisterPushTokenRaw: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.req-deregister-push-token"; token: string; }, {}>; export type ReqDeregisterPushTokenRaw = typeof ReqDeregisterPushTokenRaw.infer; export declare function isReqDeregisterPushTokenRaw(obj: unknown): obj is ReqDeregisterPushTokenRaw; export declare const ResDeregisterPushToken: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.res-deregister-push-token"; status: "ok"; }, {}>; export type ResDeregisterPushToken = typeof ResDeregisterPushToken.infer; export declare function isResDeregisterPushToken(obj: unknown): obj is ResDeregisterPushToken; export declare const notificationRow: import("arktype/internal/variants/object.ts").ObjectType<{ id: string; userId: string; notificationType: "access-requested" | "app-message" | "build-complete" | "build-failed" | "comment-posted" | "dm-received" | "follow-approved" | "follow-request" | "follower-added" | "member-joined" | "request-approved" | "request-revoked" | "vibe-published" | "vibe-remixed"; ownerHandle: string; appSlug: string | null; body: string; actorHandle?: string | null | undefined; actorUserId?: string | null | undefined; targetRef?: unknown; dedupeKey: string; created: string; readAt?: string | null | undefined; }, {}>; export type NotificationRow = typeof notificationRow.infer; export declare function isNotificationRow(obj: unknown): obj is NotificationRow; export declare const evtOwnerDigest: import("arktype/internal/variants/object.ts").ObjectType<{ type: "vibes.diy.evt-owner-digest"; userId: string; }, {}>; export type EvtOwnerDigest = typeof evtOwnerDigest.infer; export declare function isEvtOwnerDigest(obj: unknown): obj is EvtOwnerDigest; export declare const emitNotificationInput: import("arktype/internal/variants/object.ts").ObjectType<{ userId: string; notificationType: "access-requested" | "app-message" | "build-complete" | "build-failed" | "comment-posted" | "dm-received" | "follow-approved" | "follow-request" | "follower-added" | "member-joined" | "request-approved" | "request-revoked" | "vibe-published" | "vibe-remixed"; ownerHandle: string; appSlug: string | null; body: string; actorHandle?: string | undefined; actorUserId?: string | undefined; targetRef?: unknown; dedupeKey: string; }, {}>; export type EmitNotificationInput = typeof emitNotificationInput.infer;