@discordeno/rest 19.0.0-next.fdf0d53 → 19.0.0-next.fe00a6f

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.
package/dist/queue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queue.ts"],"sourcesContent":["import { delay, logger } from '@discordeno/utils'\nimport type { RestManager, SendRequestOptions } from './types.js'\n\nexport class Queue {\n /** The rest manager */\n rest: RestManager\n /** Amount of requests that have are remaining. Defaults to 1. */\n remaining: number = 1\n /** Max requests for this this. Defaults to 1. */\n max: number = 1\n /** The time that discord allows to make the max number of requests. Defaults to 0 */\n interval: number = 0\n /** timer to reset to 0 */\n timeoutId: NodeJS.Timeout | undefined\n /** The requests that are currently pending. */\n waiting: Array<(value: void | PromiseLike<void>) => void> = []\n /** The requests that are currently pending. */\n pending: SendRequestOptions[] = []\n /** Whether or not the waiting queue is already processing. */\n processing: boolean = false\n /** Whether or not the pending queue is already processing. */\n processingPending: boolean = false\n /** Whether the first request is pending. */\n firstRequest: boolean = false\n /** The url that all the requests in this queue are sent to. */\n url: string\n /** When requests started being made to determine when the interval will reset it. */\n frozenAt: number = 0\n /** The time in milliseconds to wait before deleting this queue if it is empty. Defaults to 60000(one minute). */\n deleteQueueDelay: number = 60000\n\n constructor(rest: RestManager, options: QueueOptions) {\n this.rest = rest\n this.url = options.url\n\n if (options.interval) this.interval = options.interval\n if (options.max) this.max = options.max\n if (options.remaining) this.remaining = options.remaining\n if (options.timeoutId) this.timeoutId = options.timeoutId\n if (options.deleteQueueDelay) this.deleteQueueDelay = options.deleteQueueDelay\n }\n\n /** Check if there is any remaining requests that are allowed. */\n isRequestAllowed(): boolean {\n return this.remaining > 0\n }\n\n /** Pauses the execution until a request is allowed to be made. */\n async waitUntilRequestAvailable(): Promise<void> {\n // eslint-disable-next-line no-async-promise-executor\n return await new Promise(async (resolve) => {\n // If whatever amount of requests is left is more than the safety margin, allow the request\n if (this.isRequestAllowed()) {\n // this.remaining++;\n resolve()\n } else {\n this.waiting.push(resolve)\n await this.processWaiting()\n }\n })\n }\n\n /** Process the queue of requests waiting to be handled. */\n async processWaiting(): Promise<void> {\n // If already processing, that loop will handle all waiting requests.\n if (this.processing) return\n // Mark as processing so other loops don't start\n this.processing = true\n\n while (this.waiting.length > 0) {\n logger.debug(`[Queue] ${this.url} process waiting while loop ran.`)\n if (this.isRequestAllowed()) {\n // Resolve the next item in the queue\n this.waiting.shift()?.()\n } else {\n await delay(1000)\n }\n }\n\n // Mark as false so next pending request can be triggered by new loop.\n this.processing = false\n }\n\n /** Process the queue of all requests pending to be sent. */\n async processPending(): Promise<void> {\n // If already processing, that loop will handle all pending requests.\n if (this.processingPending || !this.pending.length) return\n\n // Mark as processing so other loops don't start\n this.processingPending = true\n\n while (this.pending.length > 0) {\n logger.debug(`Queue ${this.url} process pending while loop ran with ${this.pending.length}.`)\n if (!this.firstRequest && !this.isRequestAllowed()) {\n const now = Date.now()\n const future = this.frozenAt + this.interval\n await delay(future > now ? future - now : 1000)\n continue\n }\n\n const request = this.pending[0]\n if (request) {\n const basicURL = this.rest.simplifyUrl(request.url, request.method)\n\n // IF THIS URL IS STILL RATE LIMITED, TRY AGAIN\n // If this url is still rate limited, try again\n const urlResetIn = this.rest.checkRateLimits(basicURL)\n if (urlResetIn) await delay(urlResetIn)\n\n // IF A BUCKET EXISTS, CHECK THE BUCKET'S RATE LIMITS\n const bucketResetIn = request.bucketId ? this.rest.checkRateLimits(request.bucketId) : false\n if (bucketResetIn) await delay(bucketResetIn)\n\n this.firstRequest = false\n this.remaining--\n\n if (this.timeoutId && this.remaining === 0 && this.interval !== 0) {\n this.timeoutId = setTimeout(() => {\n this.remaining = this.max\n this.timeoutId = undefined\n }, this.interval)\n }\n\n // Remove from queue, we are executing it.\n this.pending.shift()\n // Check if this request is able to be made globally\n await this.rest.invalidBucket.waitUntilRequestAvailable()\n\n await this.rest\n .sendRequest(request)\n // Should be handled in sendRequest, this catch just prevents bots from dying\n .catch(() => null)\n }\n }\n\n logger.debug(`Queue ${this.url} process pending while loop exited with ${this.pending.length}.`)\n\n // Mark as false so next pending request can be triggered by new loop.\n this.processingPending = false\n this.cleanup()\n }\n\n handleCompletedRequest(headers: { max?: number; interval?: number; remaining?: number }): void {\n if (headers.max === 0) {\n this.remaining++\n return\n }\n\n if (!this.frozenAt) this.frozenAt = Date.now()\n if (headers.interval !== undefined) this.interval = headers.interval\n if (headers.remaining !== undefined) this.remaining = headers.remaining\n\n if (this.remaining <= 1) {\n this.timeoutId = setTimeout(() => {\n this.remaining = this.max\n this.timeoutId = undefined\n }, headers.interval)\n }\n }\n\n /** Checks if a request is available and adds it to the queue. Also triggers queue processing if not already processing. */\n async makeRequest(options: SendRequestOptions): Promise<void> {\n await this.waitUntilRequestAvailable()\n this.pending.push(options)\n this.processPending()\n }\n\n /** Cleans up the queue by checking if there is nothing left and removing it. */\n cleanup(): void {\n if (!this.isQueueClearable()) {\n this.processPending()\n return\n }\n\n logger.debug(`[Queue] ${this.url}. Delaying delete for ${this.deleteQueueDelay}ms`)\n // Delete in a minute giving a bit of time to allow new requests that may reuse this queue\n setTimeout(async () => {\n if (!this.isQueueClearable()) {\n logger.debug(`[Queue] ${this.url}. is not clearable. Restarting processing of queue.`)\n this.processPending()\n return\n }\n\n logger.debug(`[Queue] ${this.url}. Deleting`)\n if (this.timeoutId) clearTimeout(this.timeoutId)\n // No requests have been requested for this queue so we nuke this queue\n this.rest.queues.delete(this.url)\n logger.debug(`[Queue] ${this.url}. Deleted! Remaining: (${this.rest.queues.size})`, [...this.rest.queues.keys()])\n if (this.rest.queues.size) this.processPending()\n }, this.deleteQueueDelay)\n }\n\n /** Simply checks if the queue is able to be cleared or it has requests pending. */\n isQueueClearable(): boolean {\n if (this.firstRequest) return false\n if (this.waiting.length > 0) return false\n if (this.pending.length > 0) return false\n if (this.interval === 0) return false\n if (this.processing) return false\n if (this.processingPending) return false\n\n return true\n }\n}\n\nexport interface QueueOptions {\n /** How many requests are remaining. Defaults to 1 */\n remaining?: number\n /** Max number of requests allowed in this this. Defaults to 1. */\n max?: number\n /** The time in milliseconds that discord allows to make the max number of invalid requests. Defaults to 0 */\n interval?: number\n /** timer to reset to 0 */\n timeoutId?: NodeJS.Timeout\n /** The url this queue will be handling. */\n url: string\n /** The time in milliseconds to wait before deleting this queue if it is empty. Defaults to 60000(one minute). */\n deleteQueueDelay?: number\n}\n"],"names":["delay","logger","Queue","constructor","rest","options","remaining","max","interval","waiting","pending","processing","processingPending","firstRequest","frozenAt","deleteQueueDelay","url","timeoutId","isRequestAllowed","waitUntilRequestAvailable","Promise","resolve","push","processWaiting","length","debug","shift","processPending","now","Date","future","request","basicURL","simplifyUrl","method","urlResetIn","checkRateLimits","bucketResetIn","bucketId","setTimeout","undefined","invalidBucket","sendRequest","catch","cleanup","handleCompletedRequest","headers","makeRequest","isQueueClearable","clearTimeout","queues","delete","size","keys"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/queue.ts"],"sourcesContent":["import { delay, logger } from '@discordeno/utils'\nimport type { RestManager, SendRequestOptions } from './types.js'\n\nexport class Queue {\n /** The rest manager */\n rest: RestManager\n /** Amount of requests that have are remaining. Defaults to 1. */\n remaining: number = 1\n /** Max requests for this this. Defaults to 1. */\n max: number = 1\n /** The time that discord allows to make the max number of requests. Defaults to 0 */\n interval: number = 0\n /** timer to reset to 0 */\n timeoutId: NodeJS.Timeout | undefined\n /** The requests that are currently pending. */\n waiting: Array<(value: void | PromiseLike<void>) => void> = []\n /** The requests that are currently pending. */\n pending: SendRequestOptions[] = []\n /** Whether or not the waiting queue is already processing. */\n processing: boolean = false\n /** Whether or not the pending queue is already processing. */\n processingPending: boolean = false\n /** Whether the first request is pending. */\n firstRequest: boolean = false\n /** The url that all the requests in this queue are sent to. */\n url: string\n /** When requests started being made to determine when the interval will reset it. */\n frozenAt: number = 0\n /** The time in milliseconds to wait before deleting this queue if it is empty. Defaults to 60000(one minute). */\n deleteQueueDelay: number = 60000\n\n constructor(rest: RestManager, options: QueueOptions) {\n this.rest = rest\n this.url = options.url\n\n if (options.interval) this.interval = options.interval\n if (options.max) this.max = options.max\n if (options.remaining) this.remaining = options.remaining\n if (options.timeoutId) this.timeoutId = options.timeoutId\n if (options.deleteQueueDelay) this.deleteQueueDelay = options.deleteQueueDelay\n }\n\n /** Check if there is any remaining requests that are allowed. */\n isRequestAllowed(): boolean {\n return this.remaining > 0\n }\n\n /** Pauses the execution until a request is allowed to be made. */\n async waitUntilRequestAvailable(): Promise<void> {\n // eslint-disable-next-line no-async-promise-executor\n return await new Promise(async (resolve) => {\n // If whatever amount of requests is left is more than the safety margin, allow the request\n if (this.isRequestAllowed()) {\n // this.remaining++;\n resolve()\n } else {\n this.waiting.push(resolve)\n await this.processWaiting()\n }\n })\n }\n\n /** Process the queue of requests waiting to be handled. */\n async processWaiting(): Promise<void> {\n // If already processing, that loop will handle all waiting requests.\n if (this.processing) return\n // Mark as processing so other loops don't start\n this.processing = true\n\n while (this.waiting.length > 0) {\n logger.debug(`[Queue] ${this.url} process waiting while loop ran.`)\n if (this.isRequestAllowed()) {\n // Resolve the next item in the queue\n this.waiting.shift()?.()\n } else {\n await delay(1000)\n }\n }\n\n // Mark as false so next pending request can be triggered by new loop.\n this.processing = false\n }\n\n /** Process the queue of all requests pending to be sent. */\n async processPending(): Promise<void> {\n // If already processing, that loop will handle all pending requests.\n if (this.processingPending || !this.pending.length) return\n\n // Mark as processing so other loops don't start\n this.processingPending = true\n\n while (this.pending.length > 0) {\n logger.debug(`Queue ${this.url} process pending while loop ran with ${this.pending.length}.`)\n if (!this.firstRequest && !this.isRequestAllowed()) {\n const now = Date.now()\n const future = this.frozenAt + this.interval\n await delay(future > now ? future - now : 1000)\n continue\n }\n\n const request = this.pending[0]\n if (request) {\n const basicURL = this.rest.simplifyUrl(request.route, request.method)\n\n // IF THIS URL IS STILL RATE LIMITED, TRY AGAIN\n // If this url is still rate limited, try again\n const urlResetIn = this.rest.checkRateLimits(basicURL)\n if (urlResetIn) await delay(urlResetIn)\n\n // IF A BUCKET EXISTS, CHECK THE BUCKET'S RATE LIMITS\n const bucketResetIn = request.bucketId ? this.rest.checkRateLimits(request.bucketId) : false\n if (bucketResetIn) await delay(bucketResetIn)\n\n this.firstRequest = false\n this.remaining--\n\n if (this.timeoutId && this.remaining === 0 && this.interval !== 0) {\n this.timeoutId = setTimeout(() => {\n this.remaining = this.max\n this.timeoutId = undefined\n }, this.interval)\n }\n\n // Remove from queue, we are executing it.\n this.pending.shift()\n // Check if this request is able to be made globally\n await this.rest.invalidBucket.waitUntilRequestAvailable()\n\n await this.rest\n .sendRequest(request)\n // Should be handled in sendRequest, this catch just prevents bots from dying\n .catch(() => null)\n }\n }\n\n logger.debug(`Queue ${this.url} process pending while loop exited with ${this.pending.length}.`)\n\n // Mark as false so next pending request can be triggered by new loop.\n this.processingPending = false\n this.cleanup()\n }\n\n handleCompletedRequest(headers: { max?: number; interval?: number; remaining?: number }): void {\n if (headers.max === 0) {\n this.remaining++\n return\n }\n\n if (!this.frozenAt) this.frozenAt = Date.now()\n if (headers.interval !== undefined) this.interval = headers.interval\n if (headers.remaining !== undefined) this.remaining = headers.remaining\n\n if (this.remaining <= 1) {\n this.timeoutId = setTimeout(() => {\n this.remaining = this.max\n this.timeoutId = undefined\n }, headers.interval)\n }\n }\n\n /** Checks if a request is available and adds it to the queue. Also triggers queue processing if not already processing. */\n async makeRequest(options: SendRequestOptions): Promise<void> {\n await this.waitUntilRequestAvailable()\n this.pending.push(options)\n this.processPending()\n }\n\n /** Cleans up the queue by checking if there is nothing left and removing it. */\n cleanup(): void {\n if (!this.isQueueClearable()) {\n this.processPending()\n return\n }\n\n logger.debug(`[Queue] ${this.url}. Delaying delete for ${this.deleteQueueDelay}ms`)\n // Delete in a minute giving a bit of time to allow new requests that may reuse this queue\n setTimeout(async () => {\n if (!this.isQueueClearable()) {\n logger.debug(`[Queue] ${this.url}. is not clearable. Restarting processing of queue.`)\n this.processPending()\n return\n }\n\n logger.debug(`[Queue] ${this.url}. Deleting`)\n if (this.timeoutId) clearTimeout(this.timeoutId)\n // No requests have been requested for this queue so we nuke this queue\n this.rest.queues.delete(this.url)\n logger.debug(`[Queue] ${this.url}. Deleted! Remaining: (${this.rest.queues.size})`, [...this.rest.queues.keys()])\n if (this.rest.queues.size) this.processPending()\n }, this.deleteQueueDelay)\n }\n\n /** Simply checks if the queue is able to be cleared or it has requests pending. */\n isQueueClearable(): boolean {\n if (this.firstRequest) return false\n if (this.waiting.length > 0) return false\n if (this.pending.length > 0) return false\n if (this.interval === 0) return false\n if (this.processing) return false\n if (this.processingPending) return false\n\n return true\n }\n}\n\nexport interface QueueOptions {\n /** How many requests are remaining. Defaults to 1 */\n remaining?: number\n /** Max number of requests allowed in this this. Defaults to 1. */\n max?: number\n /** The time in milliseconds that discord allows to make the max number of invalid requests. Defaults to 0 */\n interval?: number\n /** timer to reset to 0 */\n timeoutId?: NodeJS.Timeout\n /** The url this queue will be handling. */\n url: string\n /** The time in milliseconds to wait before deleting this queue if it is empty. Defaults to 60000(one minute). */\n deleteQueueDelay?: number\n}\n"],"names":["delay","logger","Queue","constructor","rest","options","remaining","max","interval","waiting","pending","processing","processingPending","firstRequest","frozenAt","deleteQueueDelay","url","timeoutId","isRequestAllowed","waitUntilRequestAvailable","Promise","resolve","push","processWaiting","length","debug","shift","processPending","now","Date","future","request","basicURL","simplifyUrl","route","method","urlResetIn","checkRateLimits","bucketResetIn","bucketId","setTimeout","undefined","invalidBucket","sendRequest","catch","cleanup","handleCompletedRequest","headers","makeRequest","isQueueClearable","clearTimeout","queues","delete","size","keys"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RestRoutes } from './typings/routes.js';
2
+ export declare function createRoutes(): RestRoutes;
3
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,wBAAgB,YAAY,IAAI,UAAU,CAuiBzC"}
package/dist/routes.js ADDED
@@ -0,0 +1,487 @@
1
+ import { isGetMessagesAfter, isGetMessagesAround, isGetMessagesBefore, isGetMessagesLimit } from '@discordeno/utils';
2
+ export function createRoutes() {
3
+ return {
4
+ webhooks: {
5
+ id: (webhookId)=>{
6
+ return `/webhooks/${webhookId}`;
7
+ },
8
+ message: (webhookId, token, messageId, options)=>{
9
+ let url = `/webhooks/${webhookId}/${token}/messages/${messageId}?`;
10
+ if (options) {
11
+ if (options.threadId) url += `thread_id=${options.threadId}`;
12
+ }
13
+ return url;
14
+ },
15
+ original: (webhookId, token, options)=>{
16
+ let url = `/webhooks/${webhookId}/${token}/messages/@original?`;
17
+ if (options) {
18
+ if (options.threadId) url += `thread_id=${options.threadId}`;
19
+ }
20
+ return url;
21
+ },
22
+ webhook: (webhookId, token, options)=>{
23
+ let url = `/webhooks/${webhookId}/${token}?`;
24
+ if (options) {
25
+ if (options?.wait !== undefined) url += `wait=${options.wait.toString()}`;
26
+ if (options.threadId) url += `thread_id=${options.threadId}`;
27
+ }
28
+ return url;
29
+ }
30
+ },
31
+ // Channel Endpoints
32
+ channels: {
33
+ bulk: (channelId)=>{
34
+ return `/channels/${channelId}/messages/bulk-delete`;
35
+ },
36
+ dm: ()=>{
37
+ return '/users/@me/channels';
38
+ },
39
+ pin: (channelId, messageId)=>{
40
+ return `/channels/${channelId}/pins/${messageId}`;
41
+ },
42
+ pins: (channelId)=>{
43
+ return `/channels/${channelId}/pins`;
44
+ },
45
+ reactions: {
46
+ bot: (channelId, messageId, emoji)=>{
47
+ return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/@me`;
48
+ },
49
+ user: (channelId, messageId, emoji, userId)=>{
50
+ return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/${userId}`;
51
+ },
52
+ all: (channelId, messageId)=>{
53
+ return `/channels/${channelId}/messages/${messageId}/reactions`;
54
+ },
55
+ emoji: (channelId, messageId, emoji, options)=>{
56
+ let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`;
57
+ if (options) {
58
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
59
+ if (options.after) url += `after=${options.after}`;
60
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
61
+ if (options.limit) url += `&limit=${options.limit}`;
62
+ }
63
+ return url;
64
+ },
65
+ message: (channelId, messageId, emoji, options)=>{
66
+ let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`;
67
+ if (options) {
68
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
69
+ if (options.after) url += `after=${options.after}`;
70
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
71
+ if (options.limit) url += `&limit=${options.limit}`;
72
+ }
73
+ return url;
74
+ }
75
+ },
76
+ webhooks: (channelId)=>{
77
+ return `/channels/${channelId}/webhooks`;
78
+ },
79
+ channel: (channelId)=>{
80
+ return `/channels/${channelId}`;
81
+ },
82
+ follow: (channelId)=>{
83
+ return `/channels/${channelId}/followers`;
84
+ },
85
+ forum: (channelId)=>{
86
+ return `/channels/${channelId}/threads?has_message=true`;
87
+ },
88
+ invites: (channelId)=>{
89
+ return `/channels/${channelId}/invites`;
90
+ },
91
+ message: (channelId, messageId)=>{
92
+ return `/channels/${channelId}/messages/${messageId}`;
93
+ },
94
+ messages: (channelId, options)=>{
95
+ let url = `/channels/${channelId}/messages?`;
96
+ if (options) {
97
+ if (isGetMessagesAfter(options) && options.after) {
98
+ url += `after=${options.after}`;
99
+ }
100
+ if (isGetMessagesBefore(options) && options.before) {
101
+ url += `&before=${options.before}`;
102
+ }
103
+ if (isGetMessagesAround(options) && options.around) {
104
+ url += `&around=${options.around}`;
105
+ }
106
+ if (isGetMessagesLimit(options) && options.limit) {
107
+ url += `&limit=${options.limit}`;
108
+ }
109
+ }
110
+ return url;
111
+ },
112
+ overwrite: (channelId, overwriteId)=>{
113
+ return `/channels/${channelId}/permissions/${overwriteId}`;
114
+ },
115
+ crosspost: (channelId, messageId)=>{
116
+ return `/channels/${channelId}/messages/${messageId}/crosspost`;
117
+ },
118
+ stages: ()=>{
119
+ return '/stage-instances';
120
+ },
121
+ stage: (channelId)=>{
122
+ return `/stage-instances/${channelId}`;
123
+ },
124
+ // Thread Endpoints
125
+ threads: {
126
+ message: (channelId, messageId)=>{
127
+ return `/channels/${channelId}/messages/${messageId}/threads`;
128
+ },
129
+ all: (channelId)=>{
130
+ return `/channels/${channelId}/threads`;
131
+ },
132
+ active: (guildId)=>{
133
+ return `/guilds/${guildId}/threads/active`;
134
+ },
135
+ members: (channelId)=>{
136
+ return `/channels/${channelId}/thread-members`;
137
+ },
138
+ me: (channelId)=>{
139
+ return `/channels/${channelId}/thread-members/@me`;
140
+ },
141
+ user: (channelId, userId)=>{
142
+ return `/channels/${channelId}/thread-members/${userId}`;
143
+ },
144
+ archived: (channelId)=>{
145
+ return `/channels/${channelId}/threads/archived`;
146
+ },
147
+ public: (channelId, options)=>{
148
+ let url = `/channels/${channelId}/threads/archived/public?`;
149
+ if (options) {
150
+ if (options.before) {
151
+ url += `before=${new Date(options.before).toISOString()}`;
152
+ }
153
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
154
+ if (options.limit) url += `&limit=${options.limit}`;
155
+ }
156
+ return url;
157
+ },
158
+ private: (channelId, options)=>{
159
+ let url = `/channels/${channelId}/threads/archived/private?`;
160
+ if (options) {
161
+ if (options.before) {
162
+ url += `before=${new Date(options.before).toISOString()}`;
163
+ }
164
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
165
+ if (options.limit) url += `&limit=${options.limit}`;
166
+ }
167
+ return url;
168
+ },
169
+ joined: (channelId, options)=>{
170
+ let url = `/channels/${channelId}/users/@me/threads/archived/private?`;
171
+ if (options) {
172
+ if (options.before) {
173
+ url += `before=${new Date(options.before).toISOString()}`;
174
+ }
175
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
176
+ if (options.limit) url += `&limit=${options.limit}`;
177
+ }
178
+ return url;
179
+ }
180
+ },
181
+ typing: (channelId)=>{
182
+ return `/channels/${channelId}/typing`;
183
+ }
184
+ },
185
+ // Guild Endpoints
186
+ guilds: {
187
+ all: ()=>{
188
+ return '/guilds';
189
+ },
190
+ auditlogs: (guildId, options)=>{
191
+ let url = `/guilds/${guildId}/audit-logs?`;
192
+ if (options) {
193
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
194
+ if (options.actionType) url += `action_type=${options.actionType}`;
195
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
196
+ if (options.before) url += `&before=${options.before}`;
197
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
198
+ if (options.after) url += `&after=${options.after}`;
199
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
200
+ if (options.limit) url += `&limit=${options.limit}`;
201
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
202
+ if (options.userId) url += `&user_id=${options.userId}`;
203
+ }
204
+ return url;
205
+ },
206
+ automod: {
207
+ rule: (guildId, ruleId)=>{
208
+ return `/guilds/${guildId}/auto-moderation/rules/${ruleId}`;
209
+ },
210
+ rules: (guildId)=>{
211
+ return `/guilds/${guildId}/auto-moderation/rules`;
212
+ }
213
+ },
214
+ channels: (guildId)=>{
215
+ return `/guilds/${guildId}/channels`;
216
+ },
217
+ emoji: (guildId, emojiId)=>{
218
+ return `/guilds/${guildId}/emojis/${emojiId}`;
219
+ },
220
+ emojis: (guildId)=>{
221
+ return `/guilds/${guildId}/emojis`;
222
+ },
223
+ events: {
224
+ events: (guildId, withUserCount)=>{
225
+ let url = `/guilds/${guildId}/scheduled-events?`;
226
+ if (withUserCount !== undefined) {
227
+ url += `with_user_count=${withUserCount.toString()}`;
228
+ }
229
+ return url;
230
+ },
231
+ event: (guildId, eventId, withUserCount)=>{
232
+ let url = `/guilds/${guildId}/scheduled-events/${eventId}`;
233
+ if (withUserCount !== undefined) {
234
+ url += `with_user_count=${withUserCount.toString()}`;
235
+ }
236
+ return url;
237
+ },
238
+ users: (guildId, eventId, options)=>{
239
+ let url = `/guilds/${guildId}/scheduled-events/${eventId}/users?`;
240
+ if (options) {
241
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
242
+ if (options.limit !== undefined) url += `limit=${options.limit}`;
243
+ if (options.withMember !== undefined) {
244
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
245
+ url += `&with_member=${options.withMember.toString()}`;
246
+ }
247
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
248
+ if (options.after !== undefined) url += `&after=${options.after}`;
249
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
250
+ if (options.before !== undefined) url += `&before=${options.before}`;
251
+ }
252
+ return url;
253
+ }
254
+ },
255
+ guild (guildId, withCounts) {
256
+ let url = `/guilds/${guildId}?`;
257
+ if (withCounts !== undefined) {
258
+ url += `with_counts=${withCounts.toString()}`;
259
+ }
260
+ return url;
261
+ },
262
+ integration (guildId, integrationId) {
263
+ return `/guilds/${guildId}/integrations/${integrationId}`;
264
+ },
265
+ integrations: (guildId)=>{
266
+ return `/guilds/${guildId}/integrations?include_applications=true`;
267
+ },
268
+ invite (inviteCode, options) {
269
+ let url = `/invites/${inviteCode}?`;
270
+ if (options) {
271
+ if (options.withCounts !== undefined) {
272
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
273
+ url += `with_counts=${options.withCounts.toString()}`;
274
+ }
275
+ if (options.withExpiration !== undefined) {
276
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
277
+ url += `&with_expiration=${options.withExpiration.toString()}`;
278
+ }
279
+ if (options.scheduledEventId) {
280
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
281
+ url += `&guild_scheduled_event_id=${options.scheduledEventId}`;
282
+ }
283
+ }
284
+ return url;
285
+ },
286
+ invites: (guildId)=>{
287
+ return `/guilds/${guildId}/invites`;
288
+ },
289
+ leave: (guildId)=>{
290
+ return `/users/@me/guilds/${guildId}`;
291
+ },
292
+ members: {
293
+ ban: (guildId, userId)=>{
294
+ return `/guilds/${guildId}/bans/${userId}`;
295
+ },
296
+ bans: (guildId, options)=>{
297
+ let url = `/guilds/${guildId}/bans?`;
298
+ if (options) {
299
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
300
+ if (options.limit) url += `limit=${options.limit}`;
301
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
302
+ if (options.after) url += `&after=${options.after}`;
303
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
304
+ if (options.before) url += `&before=${options.before}`;
305
+ }
306
+ return url;
307
+ },
308
+ bot: (guildId)=>{
309
+ return `/guilds/${guildId}/members/@me`;
310
+ },
311
+ member: (guildId, userId)=>{
312
+ return `/guilds/${guildId}/members/${userId}`;
313
+ },
314
+ members: (guildId, options)=>{
315
+ let url = `/guilds/${guildId}/members?`;
316
+ if (options !== undefined) {
317
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
318
+ if (options.limit) url += `limit=${options.limit}`;
319
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
320
+ if (options.after) url += `&after=${options.after}`;
321
+ }
322
+ return url;
323
+ },
324
+ search: (guildId, query, options)=>{
325
+ let url = `/guilds/${guildId}/members/search?query=${encodeURIComponent(query)}`;
326
+ if (options) {
327
+ if (options.limit !== undefined) url += `&limit=${options.limit}`;
328
+ }
329
+ return url;
330
+ },
331
+ prune: (guildId, options)=>{
332
+ let url = `/guilds/${guildId}/prune?`;
333
+ if (options) {
334
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
335
+ if (options.days) url += `days=${options.days}`;
336
+ if (Array.isArray(options.includeRoles)) {
337
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
338
+ url += `&include_roles=${options.includeRoles.join(',')}`;
339
+ } else if (options.includeRoles) {
340
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
341
+ url += `&include_roles=${options.includeRoles}`;
342
+ }
343
+ }
344
+ return url;
345
+ }
346
+ },
347
+ mfa: (guildId)=>`/guilds/${guildId}/mfa`,
348
+ preview: (guildId)=>{
349
+ return `/guilds/${guildId}/preview`;
350
+ },
351
+ prune: (guildId, options)=>{
352
+ let url = `/guilds/${guildId}/prune?`;
353
+ if (options) {
354
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
355
+ if (options.days) url += `days=${options.days}`;
356
+ if (Array.isArray(options.includeRoles)) {
357
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
358
+ url += `&include_roles=${options.includeRoles.join(',')}`;
359
+ } else if (options.includeRoles) {
360
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
361
+ url += `&include_roles=${options.includeRoles}`;
362
+ }
363
+ }
364
+ return url;
365
+ },
366
+ roles: {
367
+ one: (guildId, roleId)=>{
368
+ return `/guilds/${guildId}/roles/${roleId}`;
369
+ },
370
+ all: (guildId)=>{
371
+ return `/guilds/${guildId}/roles`;
372
+ },
373
+ member: (guildId, memberId, roleId)=>{
374
+ return `/guilds/${guildId}/members/${memberId}/roles/${roleId}`;
375
+ }
376
+ },
377
+ stickers: (guildId)=>{
378
+ return `/guilds/${guildId}/stickers`;
379
+ },
380
+ sticker: (guildId, stickerId)=>{
381
+ return `/guilds/${guildId}/stickers/${stickerId}`;
382
+ },
383
+ voice: (guildId, userId)=>{
384
+ return `/guilds/${guildId}/voice-states/${userId ?? '@me'}`;
385
+ },
386
+ templates: {
387
+ code: (code)=>{
388
+ return `/guilds/templates/${code}`;
389
+ },
390
+ guild: (guildId, code)=>{
391
+ return `/guilds/${guildId}/templates/${code}`;
392
+ },
393
+ all: (guildId)=>{
394
+ return `/guilds/${guildId}/templates`;
395
+ }
396
+ },
397
+ vanity: (guildId)=>{
398
+ return `/guilds/${guildId}/vanity-url`;
399
+ },
400
+ regions: (guildId)=>{
401
+ return `/guilds/${guildId}/regions`;
402
+ },
403
+ webhooks: (guildId)=>{
404
+ return `/guilds/${guildId}/webhooks`;
405
+ },
406
+ welcome: (guildId)=>{
407
+ return `/guilds/${guildId}/welcome-screen`;
408
+ },
409
+ widget: (guildId)=>{
410
+ return `/guilds/${guildId}/widget`;
411
+ },
412
+ widgetJson: (guildId)=>{
413
+ return `/guilds/${guildId}/widget.json`;
414
+ }
415
+ },
416
+ sticker: (stickerId)=>{
417
+ return `/stickers/${stickerId}`;
418
+ },
419
+ regions: ()=>{
420
+ return '/voice/regions';
421
+ },
422
+ // Interaction Endpoints
423
+ interactions: {
424
+ commands: {
425
+ // Application Endpoints
426
+ commands: (applicationId)=>{
427
+ return `/applications/${applicationId}/commands`;
428
+ },
429
+ guilds: {
430
+ all (applicationId, guildId) {
431
+ return `/applications/${applicationId}/guilds/${guildId}/commands`;
432
+ },
433
+ one (applicationId, guildId, commandId, withLocalizations) {
434
+ let url = `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}?`;
435
+ if (withLocalizations !== undefined) {
436
+ url += `with_localizations=${withLocalizations.toString()}`;
437
+ }
438
+ return url;
439
+ }
440
+ },
441
+ permissions: (applicationId, guildId)=>{
442
+ return `/applications/${applicationId}/guilds/${guildId}/commands/permissions`;
443
+ },
444
+ permission: (applicationId, guildId, commandId)=>{
445
+ return `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}/permissions`;
446
+ },
447
+ command: (applicationId, commandId, withLocalizations)=>{
448
+ let url = `/applications/${applicationId}/commands/${commandId}?`;
449
+ if (withLocalizations !== undefined) {
450
+ url += `withLocalizations=${withLocalizations.toString()}`;
451
+ }
452
+ return url;
453
+ }
454
+ },
455
+ responses: {
456
+ // Interaction Endpoints
457
+ callback: (interactionId, token)=>{
458
+ return `/interactions/${interactionId}/${token}/callback`;
459
+ },
460
+ original: (interactionId, token)=>{
461
+ return `/webhooks/${interactionId}/${token}/messages/@original`;
462
+ },
463
+ message: (applicationId, token, messageId)=>{
464
+ return `/webhooks/${applicationId}/${token}/messages/${messageId}`;
465
+ }
466
+ }
467
+ },
468
+ // User endpoints
469
+ user (userId) {
470
+ return `/users/${userId}`;
471
+ },
472
+ userBot () {
473
+ return '/users/@me';
474
+ },
475
+ oauth2Application () {
476
+ return '/oauth2/applications/@me';
477
+ },
478
+ gatewayBot () {
479
+ return '/gateway/bot';
480
+ },
481
+ nitroStickerPacks () {
482
+ return '/sticker-packs';
483
+ }
484
+ };
485
+ }
486
+
487
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes.ts"],"sourcesContent":["import type { GetMessagesOptions, GetScheduledEventUsers } from '@discordeno/types'\nimport { isGetMessagesAfter, isGetMessagesAround, isGetMessagesBefore, isGetMessagesLimit } from '@discordeno/utils'\nimport type { RestRoutes } from './typings/routes.js'\n\nexport function createRoutes(): RestRoutes {\n return {\n webhooks: {\n id: (webhookId) => {\n return `/webhooks/${webhookId}`\n },\n message: (webhookId, token, messageId, options) => {\n let url = `/webhooks/${webhookId}/${token}/messages/${messageId}?`\n\n if (options) {\n if (options.threadId) url += `thread_id=${options.threadId}`\n }\n\n return url\n },\n original: (webhookId, token, options) => {\n let url = `/webhooks/${webhookId}/${token}/messages/@original?`\n\n if (options) {\n if (options.threadId) url += `thread_id=${options.threadId}`\n }\n\n return url\n },\n webhook: (webhookId, token, options) => {\n let url = `/webhooks/${webhookId}/${token}?`\n\n if (options) {\n if (options?.wait !== undefined) url += `wait=${options.wait.toString()}`\n if (options.threadId) url += `thread_id=${options.threadId}`\n }\n\n return url\n },\n },\n\n // Channel Endpoints\n channels: {\n bulk: (channelId) => {\n return `/channels/${channelId}/messages/bulk-delete`\n },\n dm: () => {\n return '/users/@me/channels'\n },\n pin: (channelId, messageId) => {\n return `/channels/${channelId}/pins/${messageId}`\n },\n pins: (channelId) => {\n return `/channels/${channelId}/pins`\n },\n reactions: {\n bot: (channelId, messageId, emoji) => {\n return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/@me`\n },\n user: (channelId, messageId, emoji, userId) => {\n return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/${userId}`\n },\n all: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}/reactions`\n },\n emoji: (channelId, messageId, emoji, options) => {\n let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n message: (channelId, messageId, emoji, options) => {\n let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n },\n webhooks: (channelId) => {\n return `/channels/${channelId}/webhooks`\n },\n\n channel: (channelId) => {\n return `/channels/${channelId}`\n },\n\n follow: (channelId) => {\n return `/channels/${channelId}/followers`\n },\n\n forum: (channelId) => {\n return `/channels/${channelId}/threads?has_message=true`\n },\n\n invites: (channelId) => {\n return `/channels/${channelId}/invites`\n },\n\n message: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}`\n },\n\n messages: (channelId, options?: GetMessagesOptions) => {\n let url = `/channels/${channelId}/messages?`\n\n if (options) {\n if (isGetMessagesAfter(options) && options.after) {\n url += `after=${options.after}`\n }\n if (isGetMessagesBefore(options) && options.before) {\n url += `&before=${options.before}`\n }\n if (isGetMessagesAround(options) && options.around) {\n url += `&around=${options.around}`\n }\n if (isGetMessagesLimit(options) && options.limit) {\n url += `&limit=${options.limit}`\n }\n }\n\n return url\n },\n\n overwrite: (channelId, overwriteId) => {\n return `/channels/${channelId}/permissions/${overwriteId}`\n },\n\n crosspost: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}/crosspost`\n },\n\n stages: () => {\n return '/stage-instances'\n },\n\n stage: (channelId) => {\n return `/stage-instances/${channelId}`\n },\n\n // Thread Endpoints\n threads: {\n message: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}/threads`\n },\n all: (channelId) => {\n return `/channels/${channelId}/threads`\n },\n active: (guildId) => {\n return `/guilds/${guildId}/threads/active`\n },\n members: (channelId) => {\n return `/channels/${channelId}/thread-members`\n },\n me: (channelId) => {\n return `/channels/${channelId}/thread-members/@me`\n },\n user: (channelId, userId) => {\n return `/channels/${channelId}/thread-members/${userId}`\n },\n archived: (channelId) => {\n return `/channels/${channelId}/threads/archived`\n },\n public: (channelId, options) => {\n let url = `/channels/${channelId}/threads/archived/public?`\n\n if (options) {\n if (options.before) {\n url += `before=${new Date(options.before).toISOString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n private: (channelId, options) => {\n let url = `/channels/${channelId}/threads/archived/private?`\n\n if (options) {\n if (options.before) {\n url += `before=${new Date(options.before).toISOString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n joined: (channelId, options) => {\n let url = `/channels/${channelId}/users/@me/threads/archived/private?`\n\n if (options) {\n if (options.before) {\n url += `before=${new Date(options.before).toISOString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n },\n\n typing: (channelId) => {\n return `/channels/${channelId}/typing`\n },\n },\n\n // Guild Endpoints\n guilds: {\n all: () => {\n return '/guilds'\n },\n auditlogs: (guildId, options) => {\n let url = `/guilds/${guildId}/audit-logs?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.actionType) url += `action_type=${options.actionType}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.before) url += `&before=${options.before}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `&after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.userId) url += `&user_id=${options.userId}`\n }\n\n return url\n },\n automod: {\n rule: (guildId, ruleId) => {\n return `/guilds/${guildId}/auto-moderation/rules/${ruleId}`\n },\n rules: (guildId) => {\n return `/guilds/${guildId}/auto-moderation/rules`\n },\n },\n channels: (guildId) => {\n return `/guilds/${guildId}/channels`\n },\n emoji: (guildId, emojiId) => {\n return `/guilds/${guildId}/emojis/${emojiId}`\n },\n emojis: (guildId) => {\n return `/guilds/${guildId}/emojis`\n },\n events: {\n events: (guildId, withUserCount?: boolean) => {\n let url = `/guilds/${guildId}/scheduled-events?`\n\n if (withUserCount !== undefined) {\n url += `with_user_count=${withUserCount.toString()}`\n }\n return url\n },\n event: (guildId, eventId, withUserCount?: boolean) => {\n let url = `/guilds/${guildId}/scheduled-events/${eventId}`\n\n if (withUserCount !== undefined) {\n url += `with_user_count=${withUserCount.toString()}`\n }\n\n return url\n },\n users: (guildId, eventId, options?: GetScheduledEventUsers) => {\n let url = `/guilds/${guildId}/scheduled-events/${eventId}/users?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit !== undefined) url += `limit=${options.limit}`\n if (options.withMember !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&with_member=${options.withMember.toString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after !== undefined) url += `&after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.before !== undefined) url += `&before=${options.before}`\n }\n\n return url\n },\n },\n guild(guildId, withCounts) {\n let url = `/guilds/${guildId}?`\n\n if (withCounts !== undefined) {\n url += `with_counts=${withCounts.toString()}`\n }\n\n return url\n },\n integration(guildId, integrationId) {\n return `/guilds/${guildId}/integrations/${integrationId}`\n },\n integrations: (guildId) => {\n return `/guilds/${guildId}/integrations?include_applications=true`\n },\n invite(inviteCode, options) {\n let url = `/invites/${inviteCode}?`\n\n if (options) {\n if (options.withCounts !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `with_counts=${options.withCounts.toString()}`\n }\n if (options.withExpiration !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&with_expiration=${options.withExpiration.toString()}`\n }\n if (options.scheduledEventId) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&guild_scheduled_event_id=${options.scheduledEventId}`\n }\n }\n\n return url\n },\n invites: (guildId) => {\n return `/guilds/${guildId}/invites`\n },\n leave: (guildId) => {\n return `/users/@me/guilds/${guildId}`\n },\n members: {\n ban: (guildId, userId) => {\n return `/guilds/${guildId}/bans/${userId}`\n },\n bans: (guildId, options) => {\n let url = `/guilds/${guildId}/bans?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `limit=${options.limit}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `&after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.before) url += `&before=${options.before}`\n }\n\n return url\n },\n bot: (guildId) => {\n return `/guilds/${guildId}/members/@me`\n },\n member: (guildId, userId) => {\n return `/guilds/${guildId}/members/${userId}`\n },\n members: (guildId, options) => {\n let url = `/guilds/${guildId}/members?`\n\n if (options !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `limit=${options.limit}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `&after=${options.after}`\n }\n\n return url\n },\n search: (guildId, query, options) => {\n let url = `/guilds/${guildId}/members/search?query=${encodeURIComponent(query)}`\n\n if (options) {\n if (options.limit !== undefined) url += `&limit=${options.limit}`\n }\n\n return url\n },\n prune: (guildId, options) => {\n let url = `/guilds/${guildId}/prune?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.days) url += `days=${options.days}`\n if (Array.isArray(options.includeRoles)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles.join(',')}`\n } else if (options.includeRoles) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles}`\n }\n }\n\n return url\n },\n },\n mfa: (guildId) => `/guilds/${guildId}/mfa`,\n preview: (guildId) => {\n return `/guilds/${guildId}/preview`\n },\n prune: (guildId, options) => {\n let url = `/guilds/${guildId}/prune?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.days) url += `days=${options.days}`\n if (Array.isArray(options.includeRoles)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles.join(',')}`\n } else if (options.includeRoles) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles}`\n }\n }\n\n return url\n },\n roles: {\n one: (guildId, roleId) => {\n return `/guilds/${guildId}/roles/${roleId}`\n },\n all: (guildId) => {\n return `/guilds/${guildId}/roles`\n },\n member: (guildId, memberId, roleId) => {\n return `/guilds/${guildId}/members/${memberId}/roles/${roleId}`\n },\n },\n stickers: (guildId) => {\n return `/guilds/${guildId}/stickers`\n },\n sticker: (guildId, stickerId) => {\n return `/guilds/${guildId}/stickers/${stickerId}`\n },\n voice: (guildId, userId) => {\n return `/guilds/${guildId}/voice-states/${userId ?? '@me'}`\n },\n templates: {\n code: (code) => {\n return `/guilds/templates/${code}`\n },\n guild: (guildId, code) => {\n return `/guilds/${guildId}/templates/${code}`\n },\n all: (guildId) => {\n return `/guilds/${guildId}/templates`\n },\n },\n vanity: (guildId) => {\n return `/guilds/${guildId}/vanity-url`\n },\n regions: (guildId) => {\n return `/guilds/${guildId}/regions`\n },\n webhooks: (guildId) => {\n return `/guilds/${guildId}/webhooks`\n },\n welcome: (guildId) => {\n return `/guilds/${guildId}/welcome-screen`\n },\n widget: (guildId) => {\n return `/guilds/${guildId}/widget`\n },\n widgetJson: (guildId) => {\n return `/guilds/${guildId}/widget.json`\n },\n },\n\n sticker: (stickerId) => {\n return `/stickers/${stickerId}`\n },\n\n regions: () => {\n return '/voice/regions'\n },\n\n // Interaction Endpoints\n interactions: {\n commands: {\n // Application Endpoints\n commands: (applicationId) => {\n return `/applications/${applicationId}/commands`\n },\n\n guilds: {\n all(applicationId, guildId) {\n return `/applications/${applicationId}/guilds/${guildId}/commands`\n },\n\n one(applicationId, guildId, commandId, withLocalizations) {\n let url = `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}?`\n\n if (withLocalizations !== undefined) {\n url += `with_localizations=${withLocalizations.toString()}`\n }\n\n return url\n },\n },\n permissions: (applicationId, guildId) => {\n return `/applications/${applicationId}/guilds/${guildId}/commands/permissions`\n },\n permission: (applicationId, guildId, commandId) => {\n return `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}/permissions`\n },\n command: (applicationId, commandId, withLocalizations) => {\n let url = `/applications/${applicationId}/commands/${commandId}?`\n\n if (withLocalizations !== undefined) {\n url += `withLocalizations=${withLocalizations.toString()}`\n }\n\n return url\n },\n },\n\n responses: {\n // Interaction Endpoints\n callback: (interactionId, token) => {\n return `/interactions/${interactionId}/${token}/callback`\n },\n original: (interactionId, token) => {\n return `/webhooks/${interactionId}/${token}/messages/@original`\n },\n message: (applicationId, token, messageId) => {\n return `/webhooks/${applicationId}/${token}/messages/${messageId}`\n },\n },\n },\n\n // User endpoints\n user(userId) {\n return `/users/${userId}`\n },\n\n userBot() {\n return '/users/@me'\n },\n\n oauth2Application() {\n return '/oauth2/applications/@me'\n },\n\n gatewayBot() {\n return '/gateway/bot'\n },\n\n nitroStickerPacks() {\n return '/sticker-packs'\n },\n }\n}\n"],"names":["isGetMessagesAfter","isGetMessagesAround","isGetMessagesBefore","isGetMessagesLimit","createRoutes","webhooks","id","webhookId","message","token","messageId","options","url","threadId","original","webhook","wait","undefined","toString","channels","bulk","channelId","dm","pin","pins","reactions","bot","emoji","encodeURIComponent","user","userId","all","after","limit","channel","follow","forum","invites","messages","before","around","overwrite","overwriteId","crosspost","stages","stage","threads","active","guildId","members","me","archived","public","Date","toISOString","private","joined","typing","guilds","auditlogs","actionType","automod","rule","ruleId","rules","emojiId","emojis","events","withUserCount","event","eventId","users","withMember","guild","withCounts","integration","integrationId","integrations","invite","inviteCode","withExpiration","scheduledEventId","leave","ban","bans","member","search","query","prune","days","Array","isArray","includeRoles","join","mfa","preview","roles","one","roleId","memberId","stickers","sticker","stickerId","voice","templates","code","vanity","regions","welcome","widget","widgetJson","interactions","commands","applicationId","commandId","withLocalizations","permissions","permission","command","responses","callback","interactionId","userBot","oauth2Application","gatewayBot","nitroStickerPacks"],"mappings":"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"}