···11-import type { ComAtprotoLabelDefs } from '@atcute/atproto';
22-33-/** label as stored in the database, with sequence number and raw sig bytes. */
44-export interface SavedLabel {
55- /** sequence number / ID of the label */
66- seq: number;
77- /** DID of the actor who created this label */
88- src: string;
99- /** AT URI of the record, repository (account), or other resource */
1010- uri: string;
1111- /** CID specifying the version of `uri` to label */
1212- cid?: string;
1313- /** the label value */
1414- val: string;
1515- /** whether this label negates a previous label */
1616- neg: boolean;
1717- /** creation timestamp (ISO 8601) */
1818- cts: string;
1919- /** expiration timestamp (ISO 8601) */
2020- exp?: string;
2121- /** signature bytes */
2222- sig: Uint8Array;
2323-}
2424-2525-/** parameters for querying labels. */
2626-export interface LabelQueryParams {
2727- uriPatterns: string[];
2828- sources: string[];
2929- cursor: number;
3030- limit: number;
3131-}
3232-3333-/** result of a label query. */
3434-export interface LabelQueryResult {
3535- labels: ComAtprotoLabelDefs.Label[];
3636- cursor: string;
3737-}
3838-3939-/** pluggable storage backend for labels. */
4040-export interface LabelStore {
4141- /**
4242- * save a signed label and assign it a sequence number.
4343- * @param label the signed label to save
4444- * @returns the saved label with sequence number
4545- */
4646- save(label: Omit<SavedLabel, 'seq'>): Promise<SavedLabel>;
4747-4848- /**
4949- * query labels matching the given parameters.
5050- * @param params query parameters
5151- * @returns matching labels and cursor
5252- */
5353- query(params: LabelQueryParams): Promise<LabelQueryResult>;
5454-5555- /**
5656- * get the latest sequence number.
5757- * @returns the highest sequence number, or 0 if none
5858- */
5959- getLatestSeq(): Promise<number>;
6060-6161- /**
6262- * get a range of labels after a given sequence number.
6363- * @param after sequence number to start after (exclusive)
6464- * @param limit maximum number of labels to return
6565- * @returns labels in the range
6666- */
6767- getRange(after: number, limit?: number): Promise<SavedLabel[]>;
6868-}
+81
packages/servers/labeler/lib/types.ts
···11+import type * as ComAtprotoLabelDefs from '@atcute/atproto/types/label/defs';
22+import type { PrivateKey } from '@atcute/crypto';
33+import type { GenericUri } from '@atcute/lexicons';
44+55+/**
66+ * a label with a required signature
77+ */
88+export type SignedLabel = Omit<ComAtprotoLabelDefs.Label, 'sig'> & {
99+ sig: NonNullable<ComAtprotoLabelDefs.Label['sig']>;
1010+};
1111+1212+/**
1313+ * a signed label event with a monotonically increasing sequence number
1414+ */
1515+export interface LabelEvent {
1616+ seq: number;
1717+ labels: SignedLabel[];
1818+}
1919+2020+/**
2121+ * a single label operation before the labeler fills in service metadata and signs
2222+ */
2323+export interface LabelOp {
2424+ uri: GenericUri;
2525+ cid?: string;
2626+ value: string;
2727+ negate?: boolean;
2828+ issuedAt?: string;
2929+ expiresAt?: string;
3030+}
3131+3232+/**
3333+ * defaults applied to a batch of label operations
3434+ */
3535+export interface ApplyLabelsOptions {
3636+ issuedAt?: string;
3737+ expiresAt?: string;
3838+}
3939+4040+/**
4141+ * options for subscribing to label events
4242+ */
4343+export interface LabelSubscriptionOptions {
4444+ cursor?: number;
4545+ signal: AbortSignal;
4646+}
4747+4848+/**
4949+ * persistence backend used by `Labeler`
5050+ */
5151+export interface LabelStore {
5252+ /**
5353+ * append signed labels to the store and return emitted events in sequence order
5454+ * @param labels signed labels to persist
5555+ * @returns emitted label events
5656+ */
5757+ appendLabels(labels: SignedLabel[]): Promise<LabelEvent[]>;
5858+5959+ /**
6060+ * get the latest known sequence number
6161+ * @returns latest sequence, or `null` if empty
6262+ */
6363+ getLatestSeq(): Promise<number | null>;
6464+6565+ /**
6666+ * list events after a cursor in ascending sequence order
6767+ * @param options list options
6868+ * @returns label events
6969+ */
7070+ listLabelEvents(options: { after?: number; limit: number }): Promise<LabelEvent[]>;
7171+}
7272+7373+/**
7474+ * options for constructing a labeler
7575+ */
7676+export interface LabelerOptions {
7777+ serviceDid: ComAtprotoLabelDefs.Label['src'];
7878+ signingKey: PrivateKey;
7979+ store: LabelStore;
8080+ pageSize?: number;
8181+}