@atproto/api 0.4.4 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +81 -0
  2. package/definitions/labels.json +212 -0
  3. package/definitions/locale/en/label-groups.json +38 -0
  4. package/definitions/locale/en/labels.json +366 -0
  5. package/definitions/locale/en/proposed-label-groups.json +38 -0
  6. package/definitions/locale/en/proposed-labels.json +632 -0
  7. package/definitions/moderation-behaviors.d.ts +48 -0
  8. package/definitions/post-moderation-behaviors.json +879 -0
  9. package/definitions/profile-moderation-behaviors.json +447 -0
  10. package/definitions/proposed-labels.json +326 -0
  11. package/dist/client/index.d.ts +3 -0
  12. package/dist/client/lexicons.d.ts +27 -1
  13. package/dist/client/types/app/bsky/unspecced/applyLabels.d.ts +18 -0
  14. package/dist/index.d.ts +4 -0
  15. package/dist/index.js +1401 -12
  16. package/dist/index.js.map +4 -4
  17. package/dist/moderation/accumulator.d.ts +14 -0
  18. package/dist/moderation/const/label-groups.d.ts +2 -0
  19. package/dist/moderation/const/labels.d.ts +2 -0
  20. package/dist/moderation/index.d.ts +44 -0
  21. package/dist/moderation/subjects/account.d.ts +3 -0
  22. package/dist/moderation/subjects/feed-generator.d.ts +2 -0
  23. package/dist/moderation/subjects/post.d.ts +2 -0
  24. package/dist/moderation/subjects/profile.d.ts +3 -0
  25. package/dist/moderation/subjects/quoted-post.d.ts +6 -0
  26. package/dist/moderation/subjects/user-list.d.ts +2 -0
  27. package/dist/moderation/types.d.ts +97 -0
  28. package/dist/moderation/util.d.ts +12 -0
  29. package/docs/labels.md +522 -0
  30. package/docs/moderation-behaviors/posts.md +1919 -0
  31. package/docs/moderation-behaviors/profiles.md +907 -0
  32. package/docs/moderation.md +144 -0
  33. package/package.json +5 -3
  34. package/scripts/code/label-groups.mjs +68 -0
  35. package/scripts/code/labels.mjs +68 -0
  36. package/scripts/docs/labels.mjs +164 -0
  37. package/scripts/docs/post-moderation-behaviors.mjs +122 -0
  38. package/scripts/docs/profile-moderation-behaviors.mjs +122 -0
  39. package/scripts/generate-code.mjs +4 -0
  40. package/scripts/generate-docs.mjs +5 -0
  41. package/src/client/index.ts +13 -0
  42. package/src/client/lexicons.ts +29 -3
  43. package/src/client/types/app/bsky/unspecced/applyLabels.ts +33 -0
  44. package/src/client/types/com/atproto/admin/enableAccountInvites.ts +1 -1
  45. package/src/client/types/com/atproto/moderation/defs.ts +1 -1
  46. package/src/index.ts +4 -0
  47. package/src/moderation/accumulator.ts +181 -0
  48. package/src/moderation/const/label-groups.ts +143 -0
  49. package/src/moderation/const/labels.ts +798 -0
  50. package/src/moderation/index.ts +343 -0
  51. package/src/moderation/subjects/account.ts +40 -0
  52. package/src/moderation/subjects/feed-generator.ts +13 -0
  53. package/src/moderation/subjects/post.ts +23 -0
  54. package/src/moderation/subjects/profile.ts +31 -0
  55. package/src/moderation/subjects/quoted-post.ts +62 -0
  56. package/src/moderation/subjects/user-list.ts +13 -0
  57. package/src/moderation/types.ts +141 -0
  58. package/src/moderation/util.ts +98 -0
  59. package/tests/post-moderation.test.ts +46 -0
  60. package/tests/profile-moderation.test.ts +46 -0
  61. package/tests/util/index.ts +176 -0
  62. package/tests/util/moderation-behavior.ts +180 -0
  63. package/tsconfig.build.tsbuildinfo +1 -1
  64. package/tests/_util.ts +0 -26
@@ -0,0 +1,14 @@
1
+ import { AppBskyGraphDefs } from '../client/index';
2
+ import { Label, ModerationCause, ModerationOpts, ModerationDecision } from './types';
3
+ export declare class ModerationCauseAccumulator {
4
+ did: string;
5
+ causes: ModerationCause[];
6
+ constructor();
7
+ setDid(did: string): void;
8
+ addBlocking(blocking: string | undefined): void;
9
+ addBlockedBy(blockedBy: boolean | undefined): void;
10
+ addLabel(label: Label, opts: ModerationOpts): void;
11
+ addMuted(muted: boolean | undefined): void;
12
+ addMutedByList(mutedByList: AppBskyGraphDefs.ListViewBasic | undefined): void;
13
+ finalizeDecision(opts: ModerationOpts): ModerationDecision;
14
+ }
@@ -0,0 +1,2 @@
1
+ import { LabelGroupDefinitionMap } from '../types';
2
+ export declare const LABEL_GROUPS: LabelGroupDefinitionMap;
@@ -0,0 +1,2 @@
1
+ import { LabelDefinitionMap } from '../types';
2
+ export declare const LABELS: LabelDefinitionMap;
@@ -0,0 +1,44 @@
1
+ import { ModerationSubjectProfile, ModerationSubjectPost, ModerationSubjectFeedGenerator, ModerationSubjectUserList, ModerationOpts, ModerationDecision, ModerationUI } from './types';
2
+ export interface ProfileModeration {
3
+ decisions: {
4
+ account: ModerationDecision;
5
+ profile: ModerationDecision;
6
+ };
7
+ account: ModerationUI;
8
+ profile: ModerationUI;
9
+ avatar: ModerationUI;
10
+ }
11
+ export declare function moderateProfile(subject: ModerationSubjectProfile, opts: ModerationOpts): ProfileModeration;
12
+ export interface PostModeration {
13
+ decisions: {
14
+ post: ModerationDecision;
15
+ account: ModerationDecision;
16
+ profile: ModerationDecision;
17
+ quote?: ModerationDecision;
18
+ quotedAccount?: ModerationDecision;
19
+ };
20
+ content: ModerationUI;
21
+ avatar: ModerationUI;
22
+ embed: ModerationUI;
23
+ }
24
+ export declare function moderatePost(subject: ModerationSubjectPost, opts: ModerationOpts): PostModeration;
25
+ export interface FeedGeneratorModeration {
26
+ decisions: {
27
+ feedGenerator: ModerationDecision;
28
+ account: ModerationDecision;
29
+ profile: ModerationDecision;
30
+ };
31
+ content: ModerationUI;
32
+ avatar: ModerationUI;
33
+ }
34
+ export declare function moderateFeedGenerator(subject: ModerationSubjectFeedGenerator, opts: ModerationOpts): FeedGeneratorModeration;
35
+ export interface UserListModeration {
36
+ decisions: {
37
+ userList: ModerationDecision;
38
+ account: ModerationDecision;
39
+ profile: ModerationDecision;
40
+ };
41
+ content: ModerationUI;
42
+ avatar: ModerationUI;
43
+ }
44
+ export declare function moderateUserList(subject: ModerationSubjectUserList, opts: ModerationOpts): UserListModeration;
@@ -0,0 +1,3 @@
1
+ import { Label, ModerationSubjectProfile, ModerationOpts, ModerationDecision } from '../types';
2
+ export declare function decideAccount(subject: ModerationSubjectProfile, opts: ModerationOpts): ModerationDecision;
3
+ export declare function filterAccountLabels(labels?: Label[]): Label[];
@@ -0,0 +1,2 @@
1
+ import { ModerationSubjectFeedGenerator, ModerationDecision, ModerationOpts } from '../types';
2
+ export declare function decideFeedGenerator(subject: ModerationSubjectFeedGenerator, opts: ModerationOpts): ModerationDecision;
@@ -0,0 +1,2 @@
1
+ import { ModerationSubjectPost, ModerationOpts, ModerationDecision } from '../types';
2
+ export declare function decidePost(subject: ModerationSubjectPost, opts: ModerationOpts): ModerationDecision;
@@ -0,0 +1,3 @@
1
+ import { Label, ModerationSubjectProfile, ModerationOpts, ModerationDecision } from '../types';
2
+ export declare function decideProfile(subject: ModerationSubjectProfile, opts: ModerationOpts): ModerationDecision;
3
+ export declare function filterProfileLabels(labels?: Label[]): Label[];
@@ -0,0 +1,6 @@
1
+ import { AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia } from '../../client';
2
+ import { ModerationOpts, ModerationDecision } from '../types';
3
+ export declare function decideQuotedPost(subject: AppBskyEmbedRecord.View, opts: ModerationOpts): ModerationDecision;
4
+ export declare function decideQuotedPostAccount(subject: AppBskyEmbedRecord.View, opts: ModerationOpts): ModerationDecision;
5
+ export declare function decideQuotedPostWithMedia(subject: AppBskyEmbedRecordWithMedia.View, opts: ModerationOpts): ModerationDecision;
6
+ export declare function decideQuotedPostWithMediaAccount(subject: AppBskyEmbedRecordWithMedia.View, opts: ModerationOpts): ModerationDecision;
@@ -0,0 +1,2 @@
1
+ import { ModerationSubjectUserList, ModerationOpts, ModerationDecision } from '../types';
2
+ export declare function decideUserList(subject: ModerationSubjectUserList, opts: ModerationOpts): ModerationDecision;
@@ -0,0 +1,97 @@
1
+ import { AppBskyActorDefs, AppBskyFeedDefs, AppBskyGraphDefs, ComAtprotoLabelDefs } from '../client/index';
2
+ export declare type Label = ComAtprotoLabelDefs.Label;
3
+ export declare type LabelPreference = 'ignore' | 'warn' | 'hide';
4
+ export declare type LabelDefinitionFlag = 'no-override' | 'adult';
5
+ export declare type LabelDefinitionOnWarnBehavior = 'blur' | 'blur-media' | 'alert' | null;
6
+ export interface LabelDefinitionLocalizedStrings {
7
+ name: string;
8
+ description: string;
9
+ }
10
+ export declare type LabelDefinitionLocalizedStringsMap = Record<string, LabelDefinitionLocalizedStrings>;
11
+ export interface LabelDefinition {
12
+ id: string;
13
+ groupId: string;
14
+ configurable: boolean;
15
+ preferences: LabelPreference[];
16
+ flags: LabelDefinitionFlag[];
17
+ onwarn: LabelDefinitionOnWarnBehavior;
18
+ strings: {
19
+ settings: LabelDefinitionLocalizedStringsMap;
20
+ account: LabelDefinitionLocalizedStringsMap;
21
+ content: LabelDefinitionLocalizedStringsMap;
22
+ };
23
+ }
24
+ export interface LabelGroupDefinition {
25
+ id: string;
26
+ configurable: boolean;
27
+ labels: LabelDefinition[];
28
+ strings: {
29
+ settings: LabelDefinitionLocalizedStringsMap;
30
+ };
31
+ }
32
+ export declare type LabelDefinitionMap = Record<string, LabelDefinition>;
33
+ export declare type LabelGroupDefinitionMap = Record<string, LabelGroupDefinition>;
34
+ interface Labeler {
35
+ did: string;
36
+ displayName: string;
37
+ }
38
+ export interface LabelerSettings {
39
+ labeler: Labeler;
40
+ settings: Record<string, LabelPreference>;
41
+ }
42
+ export declare type ModerationSubjectProfile = AppBskyActorDefs.ProfileViewBasic | AppBskyActorDefs.ProfileView | AppBskyActorDefs.ProfileViewDetailed;
43
+ export declare type ModerationSubjectPost = AppBskyFeedDefs.PostView;
44
+ export declare type ModerationSubjectFeedGenerator = AppBskyFeedDefs.GeneratorView;
45
+ export declare type ModerationSubjectUserList = AppBskyGraphDefs.ListViewBasic | AppBskyGraphDefs.ListView;
46
+ export declare type ModerationSubject = ModerationSubjectProfile | ModerationSubjectPost | ModerationSubjectFeedGenerator | ModerationSubjectUserList;
47
+ export declare type ModerationCauseSource = {
48
+ type: 'user';
49
+ } | {
50
+ type: 'list';
51
+ list: AppBskyGraphDefs.ListViewBasic;
52
+ };
53
+ export declare type ModerationCause = {
54
+ type: 'blocking';
55
+ source: ModerationCauseSource;
56
+ priority: 3;
57
+ } | {
58
+ type: 'blocked-by';
59
+ source: ModerationCauseSource;
60
+ priority: 4;
61
+ } | {
62
+ type: 'label';
63
+ labeler: Labeler;
64
+ label: Label;
65
+ labelDef: LabelDefinition;
66
+ setting: LabelPreference;
67
+ priority: 1 | 2 | 5 | 7 | 8;
68
+ } | {
69
+ type: 'muted';
70
+ source: ModerationCauseSource;
71
+ priority: 6;
72
+ };
73
+ export interface ModerationOpts {
74
+ userDid: string;
75
+ adultContentEnabled: boolean;
76
+ labelerSettings: LabelerSettings[];
77
+ }
78
+ export declare class ModerationDecision {
79
+ cause: ModerationCause | undefined;
80
+ alert: boolean;
81
+ blur: boolean;
82
+ blurMedia: boolean;
83
+ filter: boolean;
84
+ noOverride: boolean;
85
+ additionalCauses: ModerationCause[];
86
+ did: string;
87
+ static noop(): ModerationDecision;
88
+ constructor(cause?: ModerationCause | undefined, alert?: boolean, blur?: boolean, blurMedia?: boolean, filter?: boolean, noOverride?: boolean, additionalCauses?: ModerationCause[], did?: string);
89
+ }
90
+ export interface ModerationUI {
91
+ filter?: boolean;
92
+ blur?: boolean;
93
+ alert?: boolean;
94
+ cause?: ModerationCause;
95
+ noOverride?: boolean;
96
+ }
97
+ export {};
@@ -0,0 +1,12 @@
1
+ import { AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia } from '../client';
2
+ import { ModerationDecision, ModerationUI } from './types';
3
+ export declare function takeHighestPriorityDecision(...decisions: (ModerationDecision | undefined)[]): ModerationDecision;
4
+ export declare function downgradeDecision(decision: ModerationDecision, { alert }: {
5
+ alert: boolean;
6
+ }): void;
7
+ export declare function isModerationDecisionNoop(decision: ModerationDecision | undefined, { ignoreFilter }?: {
8
+ ignoreFilter: boolean;
9
+ }): boolean;
10
+ export declare function isQuotedPost(embed: unknown): embed is AppBskyEmbedRecord.View;
11
+ export declare function isQuotedPostWithMedia(embed: unknown): embed is AppBskyEmbedRecordWithMedia.View;
12
+ export declare function toModerationUI(decision: ModerationDecision): ModerationUI;