-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtypings.ts
400 lines (369 loc) · 8.31 KB
/
typings.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
declare namespace Elixire {
interface Options {
/**
* Useragent sent within Request headers
*
*defaults to
* `node-elixire/version (creator-url)`
*/
useragent?: string;
/**
* Elixire instance defaults to `elixi.re`
*/
instance_url: string;
/**
*
*/
sleep: number
/**
* API Key from your Elixire Instance
*
*/
apikey: string;
/**
* Required if you do not supply a API-Key, used for generating a non-timed token.
*/
// username?: string;
/**
* Required if you do not supply a API-Key, used for generating a non-timed token.
*/
// password?: string;
}
// ! AUTHENTICATION INTERFACES
interface ErrorResponse {
error: boolean;
message: string;
}
interface LoginInput {
user: string;
password: string;
}
interface LoginOutput {
/**
* Returns a Timed Token
*/
token: string;
}
interface APIKeyInput {
user: string;
password: string;
}
interface APIKeyOutput {
/**
* Returns a non-timed token
*/
api_key: string;
}
interface RevokeInput {
user: string;
password: string;
}
interface RevokeOutput {
success: boolean;
}
// ! PROFILE INTERFACES
/**
* Lists all available Domains to the current user
*
* If no Authorization is supplied, only non-admin Domains are listed
*/
interface Domains {
domains: { [key: number]: string };
officialdomains: number[];
}
/**
* Retrieves your basic Account information
*
* - Requires Authentication
*/
interface GetProfile {
/**
* Returns a Snowflake ID as a String
*/
user_id: string;
username: string;
/**
* Inactive Accounts cannot interact with the service
*/
active: boolean;
admin: boolean;
/**
* Domain ID of the currently used Domain
*/
domain: number;
/**
* Retuns the subdomain of the currently used domain
*
* Example:
*
* `uwu`.elixi.re
*/
subdomain?: string;
email: string;
limits: {
limit: number;
used: number;
shortenlimit: number;
shortenused: number;
};
}
/**
* - Authentication Required.
* - Changing your Password will invalidate all your tokens.
*
* Modifies Profile Information
*
* All Keys are optional, only `consented` may be `null`
*/
interface PatchProfile {
password?: string;
/**
* Requires `password` if specified
*/
new_password?: string;
/**
* Domain ID
*/
domain?: number;
/**
* Subdomain to be used if domain is a Wildcard
*
* @max 0-63 Characters
*/
subdomain?: string;
/**
* DomainID to be used for shortening.
*
* Specify `null` if you want to inherit from the uploading domain (`domain`)
*/
shorten_domain?: number;
email?: string;
/**
* Data Processing consent status. `null` means that the use rwill be promted for their consent on the Website
*/
consented?: null | boolean;
/**
* Determines the minimum amount of characters on generated shortnames.
*
* `true` gets 8+ | `false` gets 3+
*/
paranoid?: boolean;
}
interface PatchProfileOutput {
updated_fields: string[];
}
interface GetLimitsOutput {
limit: number;
used: number;
shortenlimit: number;
shortenused: number;
}
/**
* - Requires Authentication
*
* Makes a Account Deletion Request, Sends an Email to your Account asking for Confirmation.
*/
interface DeleteAccountInput {
password: string;
}
interface DeleteAccountOutput {
success: boolean;
}
/**
* Makes a "Reset Password" request, Sends an Email to your Account asking for Confirmation.
*/
interface ResetPasswordInput {
user: string;
}
interface ResetPasswordOutput {
success: boolean;
}
// ! Upload/Shorten INTERFACES
/**
* - Requires Authentication
*
* Uploads a file to be hosted on the Service
*/
interface UploadInput {
buffer: Buffer;
// token: string;
}
interface UploadOutput {
url: string;
shortname: string;
delete_url: string;
}
interface ShortenInput {
url: string;
}
interface ShortenOutput {
url: string;
}
/**
* - Requires Authentication
*/
interface DeleteFileInput {
filename: string;
}
interface DeleteFileOutput {
success: boolean;
}
interface UploadList {
success: boolean;
files: {
[shortname: string]: {
snowflake: string;
shortname: string;
/**
* Size of the File in Bytes
*/
size: number;
url: string;
thumbnail: string;
};
};
shortens: {
[shortname: string]: {
snowflake: string;
shortname: string;
/**
* the URL that the shortened URL points to
*/
redirto: string;
/**
* the shortened URL
*/
url: string;
};
};
}
/**
* - Requires Authentication
*
* Deletes Shortened Links
*/
interface ShortenDeleteInput {
/**
* the shortcode of the shortened link to delete
*
* example:
*
* the shortcode of `elixi.re/s/abc` is `abc`
*/
filename: string;
}
interface ShortenDeleteOutput {
success: boolean;
}
/**
* - Requires Authentication
*
* Deletes all files a user has.
* There is no going back from this operation
*/
interface DeleteAllInput {
password: string;
}
interface DeleteAllOutput {
success: boolean;
}
// ! DATA DUMP INTERFACES
/**
* Requests a data dump do be delivered to your Email.
*/
interface DataDumpRequest {
success: boolean;
}
interface DataDumpStatus {
/**
* Valid States are:
*
* `in_queue` || `not_in_queue` || `processing`
*/
state: string;
/**
* Only present when `state` is `processing`
*
* the ISO 8601 timestamp of when the dump generation started
*/
start_timestamp?: string;
/**
* Only present when `state` is `processing`
*/
current_id?: string;
/**
* Only present when `state` is `processing`
*/
total_files?: number;
/**
* Only present when `state` is `processing`
*/
files_done?: number;
/**
* Only present when `state` is `in_queue`
*/
position?: number;
}
interface AdminDumpStatus {
queue: string[];
current: {
user_id: number;
total_files: number;
files_done: number;
};
}
// ! STAT INTERFACES
/**
* - Requires Authentification
*
* Gives Statistics about domains the user owns
*/
interface MyDomainStats {
[domain_id: string]: {
info: {
domain: string;
official: boolean;
admin_only: boolean;
cf_enabled: boolean;
permissions: number;
};
stats: {
users: number;
files: number;
shortens: number;
};
};
}
// ! MISC INTERFACES
interface RecoverUsernameInput {
email: string;
}
interface RecoverUsernameOutput {
success: boolean;
}
interface Hewwo {
name: string;
version: string;
api: string;
}
interface Science { }
/**
* Gives days until 100th anniversary of Treaty of Lausanne ("Lausanne"), also returns if we're World™ Power™ or not.
2023 is promised as the year where Turkey will become a World™ Power™ by the government.
Supposedly end of Lausanne (which actually doesn't have an end date, but don't tell them that) will mean that Turkey will be able to mine Boron (we already do actually, and Lausanne doesn't block that) and get everyone rich.
*/
interface Boron {
world_power: boolean;
days_until_world_power: number;
}
/**
* Lists featues of the running instance
*/
interface Features {
uploads: boolean;
shortens: boolean;
registrations: boolean;
pfupdate: boolean;
}
}
export = Elixire;