@devvit/reddit 0.11.17-next-2025-05-28-417d95f5a.0

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 (97) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +5 -0
  3. package/RedditClient.d.ts +1155 -0
  4. package/RedditClient.d.ts.map +1 -0
  5. package/RedditClient.js +1417 -0
  6. package/common.d.ts +10 -0
  7. package/common.d.ts.map +1 -0
  8. package/common.js +5 -0
  9. package/getReddit.d.ts +3 -0
  10. package/getReddit.d.ts.map +1 -0
  11. package/getReddit.js +8 -0
  12. package/getRedditApiPlugins.d.ts +23 -0
  13. package/getRedditApiPlugins.d.ts.map +1 -0
  14. package/getRedditApiPlugins.js +25 -0
  15. package/getUserActionsPlugin.d.ts +6 -0
  16. package/getUserActionsPlugin.d.ts.map +1 -0
  17. package/getUserActionsPlugin.js +12 -0
  18. package/graphql/GraphQL.d.ts +10 -0
  19. package/graphql/GraphQL.d.ts.map +1 -0
  20. package/graphql/GraphQL.js +27 -0
  21. package/helpers/makeGettersEnumerable.d.ts +2 -0
  22. package/helpers/makeGettersEnumerable.d.ts.map +1 -0
  23. package/helpers/makeGettersEnumerable.js +19 -0
  24. package/helpers/permissions.d.ts +6 -0
  25. package/helpers/permissions.d.ts.map +1 -0
  26. package/helpers/permissions.js +24 -0
  27. package/helpers/richtextToString.d.ts +3 -0
  28. package/helpers/richtextToString.d.ts.map +1 -0
  29. package/helpers/richtextToString.js +14 -0
  30. package/helpers/textFallbackToRichtext.d.ts +4 -0
  31. package/helpers/textFallbackToRichtext.d.ts.map +1 -0
  32. package/helpers/textFallbackToRichtext.js +14 -0
  33. package/index.d.ts +3 -0
  34. package/index.d.ts.map +1 -0
  35. package/index.js +1 -0
  36. package/models/Comment.d.ts +138 -0
  37. package/models/Comment.d.ts.map +1 -0
  38. package/models/Comment.js +597 -0
  39. package/models/Flair.d.ts +171 -0
  40. package/models/Flair.d.ts.map +1 -0
  41. package/models/Flair.js +293 -0
  42. package/models/Listing.d.ts +53 -0
  43. package/models/Listing.d.ts.map +1 -0
  44. package/models/Listing.js +101 -0
  45. package/models/ModAction.d.ts +32 -0
  46. package/models/ModAction.d.ts.map +1 -0
  47. package/models/ModAction.js +70 -0
  48. package/models/ModMail.d.ts +655 -0
  49. package/models/ModMail.d.ts.map +1 -0
  50. package/models/ModMail.js +723 -0
  51. package/models/ModNote.d.ts +57 -0
  52. package/models/ModNote.d.ts.map +1 -0
  53. package/models/ModNote.js +103 -0
  54. package/models/Post.d.ts +491 -0
  55. package/models/Post.d.ts.map +1 -0
  56. package/models/Post.js +1022 -0
  57. package/models/PrivateMessage.d.ts +52 -0
  58. package/models/PrivateMessage.d.ts.map +1 -0
  59. package/models/PrivateMessage.js +126 -0
  60. package/models/Subreddit.d.ts +606 -0
  61. package/models/Subreddit.d.ts.map +1 -0
  62. package/models/Subreddit.js +750 -0
  63. package/models/User.d.ts +238 -0
  64. package/models/User.d.ts.map +1 -0
  65. package/models/User.js +458 -0
  66. package/models/Vault.d.ts +32 -0
  67. package/models/Vault.d.ts.map +1 -0
  68. package/models/Vault.js +25 -0
  69. package/models/Widget.d.ts +133 -0
  70. package/models/Widget.d.ts.map +1 -0
  71. package/models/Widget.js +467 -0
  72. package/models/WikiPage.d.ts +137 -0
  73. package/models/WikiPage.d.ts.map +1 -0
  74. package/models/WikiPage.js +329 -0
  75. package/models/index.d.ts +14 -0
  76. package/models/index.d.ts.map +1 -0
  77. package/models/index.js +13 -0
  78. package/package.json +46 -0
  79. package/tests/comment.api.test.d.ts.map +1 -0
  80. package/tests/flair.api.test.d.ts.map +1 -0
  81. package/tests/modmail.api.test.d.ts.map +1 -0
  82. package/tests/modnote.api.test.d.ts.map +1 -0
  83. package/tests/post.api.test.d.ts.map +1 -0
  84. package/tests/subreddit.api.test.d.ts.map +1 -0
  85. package/tests/user.api.test.d.ts.map +1 -0
  86. package/tests/utils/createTestPreview.d.ts +2 -0
  87. package/tests/utils/createTestPreview.d.ts.map +1 -0
  88. package/tests/utils/createTestPreview.js +5 -0
  89. package/tests/utils/redditApiPluginsMock.d.ts +203 -0
  90. package/tests/utils/redditApiPluginsMock.d.ts.map +1 -0
  91. package/tests/utils/redditApiPluginsMock.js +202 -0
  92. package/tests/utils/runWithTestContext.d.ts +4 -0
  93. package/tests/utils/runWithTestContext.d.ts.map +1 -0
  94. package/tests/utils/runWithTestContext.js +12 -0
  95. package/tests/utils/userActionsPluginMock.d.ts +6 -0
  96. package/tests/utils/userActionsPluginMock.d.ts.map +1 -0
  97. package/tests/utils/userActionsPluginMock.js +5 -0
@@ -0,0 +1,171 @@
1
+ import { type FlairCsvResult, type FlairObject, type UserFlair as UserFlairProto } from '@devvit/protos';
2
+ import type { T3ID } from '@devvit/shared-types/tid.js';
3
+ export declare enum FlairType {
4
+ User = "USER_FLAIR",
5
+ Post = "LINK_FLAIR"
6
+ }
7
+ export type AllowableFlairContent = 'all' | 'emoji' | 'text';
8
+ export type FlairTextColor = 'light' | 'dark';
9
+ export type FlairBackgroundColor = `#${string}` | 'transparent';
10
+ export type CreateFlairTemplateOptions = {
11
+ /** The name of the subreddit to create the flair template in. */
12
+ subredditName: string;
13
+ /** The flair template's allowable content. Either 'all', 'emoji', or 'text'. */
14
+ allowableContent?: AllowableFlairContent;
15
+ /** The background color of the flair. Either 'transparent' or a hex color code. e.g. #FFC0CB */
16
+ backgroundColor?: string;
17
+ maxEmojis?: number;
18
+ /** Whether or not this flair template is only available to moderators. */
19
+ modOnly?: boolean;
20
+ /** The text to display in the flair. */
21
+ text: string;
22
+ /** Either 'dark' or 'light'. */
23
+ textColor?: FlairTextColor;
24
+ /** Whether or not users are allowed to edit this flair template before using it. */
25
+ allowUserEdits?: boolean;
26
+ };
27
+ export type EditFlairTemplateOptions = CreateFlairTemplateOptions & {
28
+ id: string;
29
+ };
30
+ export declare class FlairTemplate {
31
+ #private;
32
+ /**
33
+ * @internal
34
+ */
35
+ constructor(data: FlairObject, subredditName: string);
36
+ /** The flair template's ID */
37
+ get id(): string;
38
+ /** The flair template's text */
39
+ get text(): string;
40
+ /** The flair template's text color. Either 'dark' or 'light'. */
41
+ get textColor(): FlairTextColor;
42
+ /** The flair template's background color. Either 'transparent' or a hex color code. e.g. #FFC0CB */
43
+ get backgroundColor(): FlairBackgroundColor;
44
+ /** The flair template's allowable content. Either 'all', 'emoji', or 'text'. */
45
+ get allowableContent(): AllowableFlairContent;
46
+ /** Is the flair template only available to moderators? */
47
+ get modOnly(): boolean;
48
+ /** The flair template's maximum number of emojis. */
49
+ get maxEmojis(): number;
50
+ /** Does the flair template allow users to edit their flair? */
51
+ get allowUserEdits(): boolean;
52
+ /** Delete this flair template */
53
+ delete(): Promise<void>;
54
+ /** Edit this flair template */
55
+ edit(options: Partial<Omit<EditFlairTemplateOptions, 'id' | 'subredditName'>>): Promise<FlairTemplate>;
56
+ /** @internal */
57
+ static createPostFlairTemplate(options: CreateFlairTemplateOptions): Promise<FlairTemplate>;
58
+ /** @internal */
59
+ static createUserFlairTemplate(options: CreateFlairTemplateOptions): Promise<FlairTemplate>;
60
+ /** @internal */
61
+ static editFlairTemplate(editOptions: EditFlairTemplateOptions): Promise<FlairTemplate>;
62
+ /** @internal */
63
+ static getPostFlairTemplates(subredditName: string): Promise<FlairTemplate[]>;
64
+ /** @internal */
65
+ static getUserFlairTemplates(subredditName: string): Promise<FlairTemplate[]>;
66
+ /** @internal */
67
+ static deleteFlairTemplate(subredditName: string, flairTemplateId: string): Promise<void>;
68
+ }
69
+ export type SetFlairOptions = {
70
+ /** The name of the subreddit of the item to set the flair on */
71
+ subredditName: string;
72
+ /** The flair template's ID */
73
+ flairTemplateId?: string;
74
+ /** The flair text */
75
+ text?: string;
76
+ /** The flair CSS class */
77
+ cssClass?: string;
78
+ /** The flair text color. Either 'dark' or 'light'. */
79
+ textColor?: FlairTextColor;
80
+ /** The flair background color. Either 'transparent' or a hex color code. e.g. #FFC0CB */
81
+ backgroundColor?: string;
82
+ };
83
+ export type SetUserFlairOptions = SetFlairOptions & {
84
+ /** The username of the user to set the flair on */
85
+ username: string;
86
+ };
87
+ export type SetPostFlairOptions = SetFlairOptions & {
88
+ /** The ID of the post to set the flair on */
89
+ postId: string;
90
+ };
91
+ export type InternalSetPostFlairOptions = SetFlairOptions & {
92
+ postId: T3ID;
93
+ };
94
+ export type SetUserFlairBatchConfig = {
95
+ /** The username of the user to edit the flair on */
96
+ username: string;
97
+ /** The flair text. Can't contain the comma character (",") */
98
+ text?: string | undefined;
99
+ /** The flair CSS class */
100
+ cssClass?: string | undefined;
101
+ };
102
+ export type UserFlairPageOptions = {
103
+ /** A user id optionally provided which will result in a slice of user flairs, starting after this user, to be returned. */
104
+ after?: string;
105
+ /** A user id optionally provided which will result in a slice of user flairs, starting before this user, to be returned. */
106
+ before?: string;
107
+ /** A limit to the number of flairs that will be returned. Default: 25, Max: 1000 */
108
+ limit?: number;
109
+ };
110
+ export type GetUserFlairBySubredditOptions = UserFlairPageOptions & {
111
+ /** The subreddit associated with the flair being retrieved. */
112
+ subreddit: string;
113
+ /** The username associated with the flair being retrieved. */
114
+ name?: string;
115
+ };
116
+ export type UserFlair = {
117
+ /** The CSS class applied to this flair in the UI. */
118
+ flairCssClass?: string | undefined;
119
+ /** The username of the user to which this flair is assigned.*/
120
+ user?: string | undefined;
121
+ /** The text displayed in the UI for this flair. */
122
+ flairText?: string | undefined;
123
+ };
124
+ export type GetUserFlairBySubredditResponse = {
125
+ /** The list of user flair */
126
+ users: UserFlair[];
127
+ /** The user id of the last user flair in this slice. Its presence indicates
128
+ * that there are more items that can be fetched. Pass this into the "after" parameter
129
+ * in the next call to get the next slice of data */
130
+ next?: string | undefined;
131
+ /** The user id of the first user flair in this slice. Its presence indicates
132
+ * that there are items before this item that can be fetched. Pass this into the "before" parameter
133
+ * in the next call to get the previous slice of data */
134
+ prev?: string | undefined;
135
+ };
136
+ /** @internal */
137
+ export declare function convertUserFlairProtoToAPI(userFlair: UserFlairProto): UserFlair;
138
+ export declare class Flair {
139
+ #private;
140
+ /**
141
+ * Exposes the ListFlair API. This method will return the list of user flair for the subreddit. If name
142
+ * is specified then it will return the user flair for the given user.
143
+ *
144
+ * @param { GetUserFlairBySubredditOptions } options See the interface
145
+ *
146
+ * @returns { Promise<GetUserFlairBySubredditResponse> }
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * const response = await reddit.flair.getUserFlairBySubreddit({
151
+ * subreddit: "EyeBleach",
152
+ * name: "badapple"
153
+ * },
154
+ * metadata
155
+ * );
156
+ * ```
157
+ * @internal
158
+ */
159
+ static getUserFlairBySubreddit(options: GetUserFlairBySubredditOptions): Promise<GetUserFlairBySubredditResponse>;
160
+ /** @internal */
161
+ static setUserFlair(options: SetUserFlairOptions): Promise<void>;
162
+ /** @internal */
163
+ static setUserFlairBatch(subredditName: string, flairs: SetUserFlairBatchConfig[]): Promise<FlairCsvResult[]>;
164
+ /** @internal */
165
+ static setPostFlair(options: SetPostFlairOptions): Promise<void>;
166
+ /** @internal */
167
+ static removePostFlair(subredditName: string, postId: T3ID): Promise<void>;
168
+ /** @internal */
169
+ static removeUserFlair(subredditName: string, username: string): Promise<void>;
170
+ }
171
+ //# sourceMappingURL=Flair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Flair.d.ts","sourceRoot":"","sources":["../../src/models/Flair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,293 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _a, _FlairTemplate_id, _FlairTemplate_subredditName, _FlairTemplate_text, _FlairTemplate_textColor, _FlairTemplate_backgroundColor, _FlairTemplate_allowableContent, _FlairTemplate_modOnly, _FlairTemplate_maxEmojis, _FlairTemplate_allowUserEdits, _FlairTemplate_createOrUpdateFlairTemplate, _FlairTemplate_metadata_get, _b, _Flair_setFlair, _Flair_setUserFlairBatch, _Flair_removeFlair, _Flair_metadata_get;
13
+ import {} from '@devvit/protos';
14
+ import { getContext } from '@devvit/server';
15
+ import { assertNonNull } from '@devvit/shared-types/NonNull.js';
16
+ import { asT3ID } from '@devvit/shared-types/tid.js';
17
+ import { getRedditApiPlugins } from '../getRedditApiPlugins.js';
18
+ import { makeGettersEnumerable } from '../helpers/makeGettersEnumerable.js';
19
+ export var FlairType;
20
+ (function (FlairType) {
21
+ FlairType["User"] = "USER_FLAIR";
22
+ FlairType["Post"] = "LINK_FLAIR";
23
+ })(FlairType || (FlairType = {}));
24
+ export class FlairTemplate {
25
+ /**
26
+ * @internal
27
+ */
28
+ constructor(data, subredditName) {
29
+ _FlairTemplate_id.set(this, void 0);
30
+ _FlairTemplate_subredditName.set(this, void 0);
31
+ _FlairTemplate_text.set(this, void 0);
32
+ _FlairTemplate_textColor.set(this, void 0);
33
+ _FlairTemplate_backgroundColor.set(this, void 0);
34
+ _FlairTemplate_allowableContent.set(this, void 0);
35
+ _FlairTemplate_modOnly.set(this, void 0);
36
+ _FlairTemplate_maxEmojis.set(this, void 0);
37
+ _FlairTemplate_allowUserEdits.set(this, void 0);
38
+ makeGettersEnumerable(this);
39
+ assertNonNull(data.id);
40
+ assertNonNull(data.text);
41
+ __classPrivateFieldSet(this, _FlairTemplate_id, data.id, "f");
42
+ __classPrivateFieldSet(this, _FlairTemplate_subredditName, subredditName, "f");
43
+ __classPrivateFieldSet(this, _FlairTemplate_text, data.text, "f");
44
+ __classPrivateFieldSet(this, _FlairTemplate_textColor, asFlairTextColor(data.textColor), "f");
45
+ __classPrivateFieldSet(this, _FlairTemplate_backgroundColor, asFlairBackgroundColor(data.backgroundColor), "f");
46
+ __classPrivateFieldSet(this, _FlairTemplate_allowableContent, asAllowableContent(data.allowableContent), "f");
47
+ __classPrivateFieldSet(this, _FlairTemplate_modOnly, data.modOnly, "f");
48
+ __classPrivateFieldSet(this, _FlairTemplate_maxEmojis, data.maxEmojis, "f");
49
+ __classPrivateFieldSet(this, _FlairTemplate_allowUserEdits, data.textEditable, "f");
50
+ }
51
+ /** The flair template's ID */
52
+ get id() {
53
+ return __classPrivateFieldGet(this, _FlairTemplate_id, "f");
54
+ }
55
+ /** The flair template's text */
56
+ get text() {
57
+ return __classPrivateFieldGet(this, _FlairTemplate_text, "f");
58
+ }
59
+ /** The flair template's text color. Either 'dark' or 'light'. */
60
+ get textColor() {
61
+ return __classPrivateFieldGet(this, _FlairTemplate_textColor, "f");
62
+ }
63
+ /** The flair template's background color. Either 'transparent' or a hex color code. e.g. #FFC0CB */
64
+ get backgroundColor() {
65
+ return __classPrivateFieldGet(this, _FlairTemplate_backgroundColor, "f");
66
+ }
67
+ /** The flair template's allowable content. Either 'all', 'emoji', or 'text'. */
68
+ get allowableContent() {
69
+ return __classPrivateFieldGet(this, _FlairTemplate_allowableContent, "f");
70
+ }
71
+ /** Is the flair template only available to moderators? */
72
+ get modOnly() {
73
+ return __classPrivateFieldGet(this, _FlairTemplate_modOnly, "f");
74
+ }
75
+ /** The flair template's maximum number of emojis. */
76
+ get maxEmojis() {
77
+ return __classPrivateFieldGet(this, _FlairTemplate_maxEmojis, "f");
78
+ }
79
+ /** Does the flair template allow users to edit their flair? */
80
+ get allowUserEdits() {
81
+ return __classPrivateFieldGet(this, _FlairTemplate_allowUserEdits, "f");
82
+ }
83
+ /** Delete this flair template */
84
+ async delete() {
85
+ return _a.deleteFlairTemplate(__classPrivateFieldGet(this, _FlairTemplate_id, "f"), __classPrivateFieldGet(this, _FlairTemplate_subredditName, "f"));
86
+ }
87
+ /** Edit this flair template */
88
+ async edit(options) {
89
+ return _a.editFlairTemplate({
90
+ id: __classPrivateFieldGet(this, _FlairTemplate_id, "f"),
91
+ subredditName: __classPrivateFieldGet(this, _FlairTemplate_subredditName, "f"),
92
+ text: options.text ?? __classPrivateFieldGet(this, _FlairTemplate_text, "f"),
93
+ allowableContent: options.allowableContent ?? __classPrivateFieldGet(this, _FlairTemplate_allowableContent, "f"),
94
+ backgroundColor: options.backgroundColor ?? __classPrivateFieldGet(this, _FlairTemplate_backgroundColor, "f"),
95
+ maxEmojis: options.maxEmojis ?? __classPrivateFieldGet(this, _FlairTemplate_maxEmojis, "f"),
96
+ modOnly: options.modOnly ?? __classPrivateFieldGet(this, _FlairTemplate_modOnly, "f"),
97
+ textColor: options.textColor ?? __classPrivateFieldGet(this, _FlairTemplate_textColor, "f"),
98
+ allowUserEdits: options.allowUserEdits ?? __classPrivateFieldGet(this, _FlairTemplate_allowUserEdits, "f"),
99
+ });
100
+ }
101
+ /** @internal */
102
+ static async createPostFlairTemplate(options) {
103
+ return __classPrivateFieldGet(_a, _a, "m", _FlairTemplate_createOrUpdateFlairTemplate).call(_a, { ...options, flairType: FlairType.Post });
104
+ }
105
+ /** @internal */
106
+ static async createUserFlairTemplate(options) {
107
+ return __classPrivateFieldGet(_a, _a, "m", _FlairTemplate_createOrUpdateFlairTemplate).call(_a, { ...options, flairType: FlairType.User });
108
+ }
109
+ /** @internal */
110
+ static async editFlairTemplate(editOptions) {
111
+ return __classPrivateFieldGet(_a, _a, "m", _FlairTemplate_createOrUpdateFlairTemplate).call(_a, editOptions);
112
+ }
113
+ /** @internal */
114
+ static async getPostFlairTemplates(subredditName) {
115
+ const client = getRedditApiPlugins().Flair;
116
+ const response = await client.LinkFlair({
117
+ subreddit: subredditName,
118
+ }, __classPrivateFieldGet(this, _a, "a", _FlairTemplate_metadata_get));
119
+ return response.flair?.map((flair) => new _a(flair, subredditName)) || [];
120
+ }
121
+ /** @internal */
122
+ static async getUserFlairTemplates(subredditName) {
123
+ const client = getRedditApiPlugins().Flair;
124
+ const response = await client.UserFlair({
125
+ subreddit: subredditName,
126
+ }, __classPrivateFieldGet(this, _a, "a", _FlairTemplate_metadata_get));
127
+ return response.flair?.map((flair) => new _a(flair, subredditName)) || [];
128
+ }
129
+ /** @internal */
130
+ static async deleteFlairTemplate(subredditName, flairTemplateId) {
131
+ const client = getRedditApiPlugins().Flair;
132
+ await client.DeleteFlairTemplate({
133
+ subreddit: subredditName,
134
+ flairTemplateId,
135
+ }, __classPrivateFieldGet(this, _a, "a", _FlairTemplate_metadata_get));
136
+ }
137
+ }
138
+ _a = FlairTemplate, _FlairTemplate_id = new WeakMap(), _FlairTemplate_subredditName = new WeakMap(), _FlairTemplate_text = new WeakMap(), _FlairTemplate_textColor = new WeakMap(), _FlairTemplate_backgroundColor = new WeakMap(), _FlairTemplate_allowableContent = new WeakMap(), _FlairTemplate_modOnly = new WeakMap(), _FlairTemplate_maxEmojis = new WeakMap(), _FlairTemplate_allowUserEdits = new WeakMap(), _FlairTemplate_createOrUpdateFlairTemplate = async function _FlairTemplate_createOrUpdateFlairTemplate(options) {
139
+ const { subredditName: subreddit, allowableContent = 'all', backgroundColor = 'transparent', flairType = '', maxEmojis = 10, modOnly = false, text, textColor = 'dark', allowUserEdits: textEditable = false, id: flairTemplateId = '', } = options;
140
+ if (modOnly && textEditable) {
141
+ throw new Error('Cannot have a mod only flair that is editable by users');
142
+ }
143
+ const client = getRedditApiPlugins().Flair;
144
+ const response = await client.FlairTemplate({
145
+ subreddit,
146
+ allowableContent,
147
+ backgroundColor,
148
+ flairType,
149
+ maxEmojis,
150
+ modOnly,
151
+ text,
152
+ textColor,
153
+ textEditable,
154
+ flairTemplateId,
155
+ cssClass: '',
156
+ overrideCss: false,
157
+ }, __classPrivateFieldGet(this, _a, "a", _FlairTemplate_metadata_get));
158
+ return new _a(response, subreddit);
159
+ }, _FlairTemplate_metadata_get = function _FlairTemplate_metadata_get() {
160
+ return getContext().debug.metadata;
161
+ };
162
+ /** @internal */
163
+ export function convertUserFlairProtoToAPI(userFlair) {
164
+ return {
165
+ flairCssClass: userFlair.flairCssClass,
166
+ user: userFlair.user,
167
+ flairText: userFlair.flairText,
168
+ };
169
+ }
170
+ export class Flair {
171
+ /**
172
+ * Exposes the ListFlair API. This method will return the list of user flair for the subreddit. If name
173
+ * is specified then it will return the user flair for the given user.
174
+ *
175
+ * @param { GetUserFlairBySubredditOptions } options See the interface
176
+ *
177
+ * @returns { Promise<GetUserFlairBySubredditResponse> }
178
+ *
179
+ * @example
180
+ * ```ts
181
+ * const response = await reddit.flair.getUserFlairBySubreddit({
182
+ * subreddit: "EyeBleach",
183
+ * name: "badapple"
184
+ * },
185
+ * metadata
186
+ * );
187
+ * ```
188
+ * @internal
189
+ */
190
+ static async getUserFlairBySubreddit(options) {
191
+ const client = getRedditApiPlugins().Flair;
192
+ return client.FlairList(options, __classPrivateFieldGet(this, _b, "a", _Flair_metadata_get));
193
+ }
194
+ /** @internal */
195
+ static setUserFlair(options) {
196
+ return __classPrivateFieldGet(_b, _b, "m", _Flair_setFlair).call(_b, options);
197
+ }
198
+ /** @internal */
199
+ static setUserFlairBatch(subredditName, flairs) {
200
+ return __classPrivateFieldGet(_b, _b, "m", _Flair_setUserFlairBatch).call(_b, subredditName, flairs);
201
+ }
202
+ /** @internal */
203
+ static setPostFlair(options) {
204
+ return __classPrivateFieldGet(_b, _b, "m", _Flair_setFlair).call(_b, {
205
+ ...options,
206
+ postId: asT3ID(options.postId),
207
+ });
208
+ }
209
+ /** @internal */
210
+ static async removePostFlair(subredditName, postId) {
211
+ return __classPrivateFieldGet(_b, _b, "m", _Flair_removeFlair).call(_b, subredditName, postId, undefined);
212
+ }
213
+ /** @internal */
214
+ static async removeUserFlair(subredditName, username) {
215
+ return __classPrivateFieldGet(_b, _b, "m", _Flair_removeFlair).call(_b, subredditName, undefined, username);
216
+ }
217
+ }
218
+ _b = Flair, _Flair_setFlair = async function _Flair_setFlair(options) {
219
+ const client = getRedditApiPlugins().Flair;
220
+ await client.SelectFlair({
221
+ subreddit: options.subredditName,
222
+ flairTemplateId: options.flairTemplateId ?? '',
223
+ text: options.text ?? '',
224
+ name: options.username,
225
+ link: options.postId,
226
+ backgroundColor: options.backgroundColor ?? '',
227
+ textColor: options.textColor ?? 'dark',
228
+ cssClass: options.cssClass ?? '',
229
+ returnRtjson: 'none',
230
+ }, __classPrivateFieldGet(this, _b, "a", _Flair_metadata_get));
231
+ }, _Flair_setUserFlairBatch = async function _Flair_setUserFlairBatch(subredditName, flairs) {
232
+ if (!flairs.length) {
233
+ return [];
234
+ }
235
+ const maxFlairsPerRequest = 100;
236
+ if (flairs.length > maxFlairsPerRequest) {
237
+ throw new Error('Unexpected input: flairs array cannot be longer than 100 entries.');
238
+ }
239
+ const csvDelimiter = ',';
240
+ const flairCsv = flairs
241
+ .map((userConfig) => {
242
+ for (const propertyName in userConfig) {
243
+ if (userConfig[propertyName]?.includes(csvDelimiter)) {
244
+ throw new Error(`Unexpected input: ${propertyName} cannot contain the "," character`);
245
+ }
246
+ }
247
+ return [userConfig.username, userConfig.text || '', userConfig.cssClass || ''].join(csvDelimiter);
248
+ })
249
+ .join('\n');
250
+ const client = getRedditApiPlugins().Flair;
251
+ const response = await client.FlairCsv({
252
+ subreddit: subredditName,
253
+ flairCsv,
254
+ }, __classPrivateFieldGet(this, _b, "a", _Flair_metadata_get));
255
+ return response.result;
256
+ }, _Flair_removeFlair = async function _Flair_removeFlair(subredditName, postId, username) {
257
+ const client = getRedditApiPlugins().Flair;
258
+ await client.SelectFlair({
259
+ subreddit: subredditName,
260
+ name: username ?? '',
261
+ link: postId ?? '',
262
+ flairTemplateId: '',
263
+ backgroundColor: '',
264
+ text: '',
265
+ textColor: '',
266
+ cssClass: '',
267
+ returnRtjson: 'none',
268
+ }, __classPrivateFieldGet(this, _b, "a", _Flair_metadata_get));
269
+ }, _Flair_metadata_get = function _Flair_metadata_get() {
270
+ return getContext().debug.metadata;
271
+ };
272
+ function asFlairTextColor(color) {
273
+ assertNonNull(color, 'Flair text color is required');
274
+ if (color === 'light' || color === 'dark') {
275
+ return color;
276
+ }
277
+ throw new Error(`Invalid flair text color: ${color}`);
278
+ }
279
+ function asFlairBackgroundColor(color) {
280
+ if (!color || color.length === 0 || color === 'transparent') {
281
+ return 'transparent';
282
+ }
283
+ if (/^#([A-Fa-f0-9]{6})$/.test(color)) {
284
+ return color;
285
+ }
286
+ throw new Error(`Invalid flair background color: ${color}`);
287
+ }
288
+ function asAllowableContent(allowableContent) {
289
+ if (allowableContent === 'all' || allowableContent === 'text' || allowableContent === 'emoji') {
290
+ return allowableContent;
291
+ }
292
+ throw new Error(`Invalid allowable content: ${allowableContent}`);
293
+ }
@@ -0,0 +1,53 @@
1
+ import type { T1ID, T3ID } from '@devvit/shared-types/tid.js';
2
+ export type MoreObject = {
3
+ parentId: T1ID | T3ID;
4
+ children: T1ID[];
5
+ depth: number;
6
+ };
7
+ export type ListingFetchOptions = {
8
+ after?: string;
9
+ before?: string;
10
+ limit?: number;
11
+ pageSize?: number;
12
+ more?: MoreObject;
13
+ };
14
+ export type ListingFetchResponse<T> = {
15
+ children: T[];
16
+ before?: string | undefined;
17
+ after?: string | undefined;
18
+ more?: MoreObject | undefined;
19
+ };
20
+ export interface Listing<T> {
21
+ /** @internal */
22
+ children: T[];
23
+ /** @internal */
24
+ _fetch: (options: ListingFetchOptions) => Promise<ListingFetchResponse<T>>;
25
+ }
26
+ type ListingOptions<T> = {
27
+ hasMore?: boolean;
28
+ after?: string | undefined;
29
+ before?: string | undefined;
30
+ pageSize?: number | undefined;
31
+ limit?: number | undefined;
32
+ children?: T[];
33
+ more?: MoreObject;
34
+ fetch: (options: ListingFetchOptions) => Promise<ListingFetchResponse<T>>;
35
+ };
36
+ export declare class Listing<T> {
37
+ #private;
38
+ pageSize: number;
39
+ limit: number;
40
+ children: T[];
41
+ /**
42
+ * @internal
43
+ */
44
+ constructor(options: ListingOptions<T>);
45
+ get hasMore(): boolean;
46
+ [Symbol.asyncIterator](): AsyncIterator<T>;
47
+ setMore(more: MoreObject | undefined): void;
48
+ preventInitialFetch(): void;
49
+ all(): Promise<T[]>;
50
+ get(count: number): Promise<T[]>;
51
+ }
52
+ export {};
53
+ //# sourceMappingURL=Listing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Listing.d.ts","sourceRoot":"","sources":["../../src/models/Listing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAI9D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,gBAAgB;IAChB,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,gBAAgB;IAChB,MAAM,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E;AAED,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3E,CAAC;AAKF,qBAAa,OAAO,CAAC,CAAC;;IAMpB,QAAQ,EAAE,MAAM,CAAqB;IACrC,KAAK,EAAE,MAAM,CAAiB;IAC9B,QAAQ,EAAE,CAAC,EAAE,CAAM;IAEnB;;OAEG;gBACS,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAetC,IAAI,OAAO,IAAI,OAAO,CAErB;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAyBjD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI;IAI3C,mBAAmB,IAAI,IAAI;IA0BrB,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAQnB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CASvC"}
@@ -0,0 +1,101 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _Listing_instances, _Listing_before, _Listing_after, _Listing_more, _Listing_started, _Listing_next;
13
+ import { makeGettersEnumerable } from '../helpers/makeGettersEnumerable.js';
14
+ const DEFAULT_PAGE_SIZE = 100;
15
+ const DEFAULT_LIMIT = Infinity;
16
+ export class Listing {
17
+ /**
18
+ * @internal
19
+ */
20
+ constructor(options) {
21
+ _Listing_instances.add(this);
22
+ _Listing_before.set(this, void 0);
23
+ _Listing_after.set(this, void 0);
24
+ _Listing_more.set(this, void 0);
25
+ _Listing_started.set(this, false);
26
+ this.pageSize = DEFAULT_PAGE_SIZE;
27
+ this.limit = DEFAULT_LIMIT;
28
+ this.children = [];
29
+ makeGettersEnumerable(this);
30
+ this._fetch = options.fetch;
31
+ this.pageSize = options.pageSize ?? DEFAULT_PAGE_SIZE;
32
+ this.limit = options.limit ?? DEFAULT_LIMIT;
33
+ __classPrivateFieldSet(this, _Listing_after, options.after, "f");
34
+ __classPrivateFieldSet(this, _Listing_before, options.before, "f");
35
+ __classPrivateFieldSet(this, _Listing_more, options.more, "f");
36
+ if (options.children) {
37
+ this.children = options.children;
38
+ }
39
+ }
40
+ get hasMore() {
41
+ return !__classPrivateFieldGet(this, _Listing_started, "f") || Boolean(__classPrivateFieldGet(this, _Listing_after, "f") || __classPrivateFieldGet(this, _Listing_before, "f") || __classPrivateFieldGet(this, _Listing_more, "f"));
42
+ }
43
+ async *[(_Listing_before = new WeakMap(), _Listing_after = new WeakMap(), _Listing_more = new WeakMap(), _Listing_started = new WeakMap(), _Listing_instances = new WeakSet(), Symbol.asyncIterator)]() {
44
+ let currentIndex = 0;
45
+ while (true) {
46
+ if (currentIndex === this.children.length) {
47
+ if (this.hasMore) {
48
+ const nextPage = await __classPrivateFieldGet(this, _Listing_instances, "m", _Listing_next).call(this);
49
+ // r2 api sometimes returns an empty page
50
+ if (nextPage.length === 0) {
51
+ break;
52
+ }
53
+ }
54
+ else {
55
+ break;
56
+ }
57
+ }
58
+ yield this.children[currentIndex];
59
+ currentIndex++;
60
+ if (currentIndex === this.limit) {
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ setMore(more) {
66
+ __classPrivateFieldSet(this, _Listing_more, more, "f");
67
+ }
68
+ preventInitialFetch() {
69
+ __classPrivateFieldSet(this, _Listing_started, true, "f");
70
+ }
71
+ async all() {
72
+ while (this.hasMore && this.children.length < this.limit) {
73
+ await __classPrivateFieldGet(this, _Listing_instances, "m", _Listing_next).call(this);
74
+ }
75
+ return this.children.slice(0, this.limit);
76
+ }
77
+ async get(count) {
78
+ const limit = count <= this.limit ? count : this.limit;
79
+ while (this.hasMore && this.children.length < limit) {
80
+ await __classPrivateFieldGet(this, _Listing_instances, "m", _Listing_next).call(this);
81
+ }
82
+ return this.children.slice(0, limit);
83
+ }
84
+ }
85
+ _Listing_next = async function _Listing_next() {
86
+ if (!this.hasMore) {
87
+ throw new Error('This listing does not have any more items to load.');
88
+ }
89
+ const { children, before, after, more } = await this._fetch({
90
+ ...(__classPrivateFieldGet(this, _Listing_before, "f") ? { before: __classPrivateFieldGet(this, _Listing_before, "f") } : {}),
91
+ ...(__classPrivateFieldGet(this, _Listing_after, "f") ? { after: __classPrivateFieldGet(this, _Listing_after, "f") } : {}),
92
+ ...(__classPrivateFieldGet(this, _Listing_more, "f") ? { more: __classPrivateFieldGet(this, _Listing_more, "f") } : {}),
93
+ limit: this.pageSize,
94
+ });
95
+ this.children.push(...children);
96
+ __classPrivateFieldSet(this, _Listing_before, before, "f");
97
+ __classPrivateFieldSet(this, _Listing_after, after, "f");
98
+ __classPrivateFieldSet(this, _Listing_more, more, "f");
99
+ __classPrivateFieldSet(this, _Listing_started, true, "f");
100
+ return children;
101
+ };
@@ -0,0 +1,32 @@
1
+ import type { ListingFetchOptions } from './Listing.js';
2
+ import { Listing } from './Listing.js';
3
+ export type ModActionTarget = {
4
+ id: string;
5
+ author?: string | undefined;
6
+ body?: string | undefined;
7
+ permalink?: string | undefined;
8
+ title?: string | undefined;
9
+ };
10
+ export interface ModAction {
11
+ id: string;
12
+ type: ModActionType;
13
+ moderatorName: string;
14
+ moderatorId: string;
15
+ createdAt: Date;
16
+ subredditName: string;
17
+ subredditId: string;
18
+ description?: string | undefined;
19
+ details?: string | undefined;
20
+ target?: ModActionTarget | undefined;
21
+ }
22
+ export type ModActionType = 'banuser' | 'unbanuser' | 'spamlink' | 'removelink' | 'approvelink' | 'spamcomment' | 'removecomment' | 'approvecomment' | 'addmoderator' | 'showcomment' | 'invitemoderator' | 'uninvitemoderator' | 'acceptmoderatorinvite' | 'removemoderator' | 'addcontributor' | 'removecontributor' | 'editsettings' | 'editflair' | 'distinguish' | 'marknsfw' | 'wikibanned' | 'wikicontributor' | 'wikiunbanned' | 'wikipagelisted' | 'removewikicontributor' | 'wikirevise' | 'wikipermlevel' | 'ignorereports' | 'unignorereports' | 'setpermissions' | 'setsuggestedsort' | 'sticky' | 'unsticky' | 'setcontestmode' | 'unsetcontestmode' | 'lock' | 'unlock' | 'muteuser' | 'unmuteuser' | 'createrule' | 'editrule' | 'reorderrules' | 'deleterule' | 'spoiler' | 'unspoiler' | 'modmail_enrollment' | 'community_styling' | 'community_widgets' | 'markoriginalcontent' | 'collections' | 'events' | 'create_award' | 'disable_award' | 'delete_award' | 'enable_award' | 'mod_award_given' | 'hidden_award' | 'add_community_topics' | 'remove_community_topics' | 'create_scheduled_post' | 'edit_scheduled_post' | 'delete_scheduled_post' | 'submit_scheduled_post' | 'edit_post_requirements' | 'invitesubscriber' | 'submit_content_rating_survey' | 'adjust_post_crowd_control_level' | 'enable_post_crowd_control_filter' | 'disable_post_crowd_control_filter' | 'deleteoverriddenclassification' | 'overrideclassification' | 'reordermoderators' | 'snoozereports' | 'unsnoozereports' | 'addnote' | 'deletenote' | 'addremovalreason' | 'createremovalreason' | 'updateremovalreason' | 'deleteremovalreason' | 'reorderremovalreason' | 'dev_platform_app_changed' | 'dev_platform_app_disabled' | 'dev_platform_app_enabled' | 'dev_platform_app_installed' | 'dev_platform_app_uninstalled';
23
+ export type GetModerationLogOptions = ListingFetchOptions & {
24
+ /** Subreddit name */
25
+ subredditName: string;
26
+ /** (optional) A moderator filter. Accepts an array of usernames */
27
+ moderatorUsernames?: string[];
28
+ /** Type of the Moderator action */
29
+ type?: ModActionType;
30
+ };
31
+ export declare function getModerationLog(options: GetModerationLogOptions): Listing<ModAction>;
32
+ //# sourceMappingURL=ModAction.d.ts.map