hackmud-script-manager 0.19.1-3712be4 → 0.19.1-49ea60d
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -1
- package/bin/hsm.js +8 -7
- package/env.d.ts +1657 -0
- package/index.d.ts +2 -2
- package/package.json +4 -1
- package/processScript/index.d.ts +4 -3
- package/processScript/index.js +7 -7
- package/processScript/minify.d.ts +3 -3
- package/processScript/preprocess.d.ts +5 -4
- package/processScript/preprocess.js +2 -2
- package/processScript/transform.d.ts +5 -3
- package/processScript/transform.js +66 -38
- package/push.d.ts +5 -5
- package/push.js +83 -214
- package/syncMacros.js +1 -1
- package/watch.d.ts +3 -3
- package/watch.js +8 -8
package/env.d.ts
ADDED
@@ -0,0 +1,1657 @@
|
|
1
|
+
type Replace<T, R> =
|
2
|
+
Omit<
|
3
|
+
T,
|
4
|
+
Extract<keyof R, keyof T>
|
5
|
+
> & R
|
6
|
+
|
7
|
+
type ScriptSuccess<T = object> = { ok: true } & T
|
8
|
+
|
9
|
+
type ScriptFailure = {
|
10
|
+
ok: false
|
11
|
+
msg?: string
|
12
|
+
}
|
13
|
+
|
14
|
+
type ScriptResponse<T = object> = ScriptSuccess<T> | ScriptFailure
|
15
|
+
type ErrorScripts = Record<string, () => ScriptFailure>
|
16
|
+
|
17
|
+
type Subscripts =
|
18
|
+
Record<
|
19
|
+
string,
|
20
|
+
Record<string, (...args: any) => any>
|
21
|
+
> & {
|
22
|
+
accts: ErrorScripts
|
23
|
+
autos: ErrorScripts
|
24
|
+
bbs: ErrorScripts
|
25
|
+
chats: ErrorScripts
|
26
|
+
corps: ErrorScripts
|
27
|
+
escrow: ErrorScripts
|
28
|
+
gui: ErrorScripts
|
29
|
+
kernel: ErrorScripts
|
30
|
+
market: ErrorScripts
|
31
|
+
scripts: ErrorScripts
|
32
|
+
sys: ErrorScripts
|
33
|
+
trust: ErrorScripts
|
34
|
+
users: ErrorScripts
|
35
|
+
}
|
36
|
+
|
37
|
+
interface PlayerFullsec {}
|
38
|
+
|
39
|
+
interface PlayerHighsec {}
|
40
|
+
|
41
|
+
interface PlayerMidsec {}
|
42
|
+
|
43
|
+
interface PlayerLowsec {}
|
44
|
+
|
45
|
+
interface PlayerNullsec {}
|
46
|
+
|
47
|
+
type UpgradeCore = {
|
48
|
+
name: string
|
49
|
+
type: "lock" | "script_space" | "chat" | "script" | "tool" | "bot_brain" | "glam"
|
50
|
+
up_class?: -1 | 0 | 1 | 2 | 3
|
51
|
+
tier: 1 | 2 | 3 | 4
|
52
|
+
rarity: 0 | 1 | 2 | 3 | 4 | 5
|
53
|
+
i: number
|
54
|
+
loaded: boolean
|
55
|
+
sn: string
|
56
|
+
description: string
|
57
|
+
}
|
58
|
+
|
59
|
+
type Upgrade = UpgradeCore & Record<string, null | boolean | number | string>
|
60
|
+
|
61
|
+
type CLIUpgrade = Omit<UpgradeCore, `rarity`> & {
|
62
|
+
[x: string]: null | boolean | number | string
|
63
|
+
rarity: "`0noob`" | "`1kiddie`" | "`2h4x0r`" | "`3h4rdc0r3`" | "`4|_|b3|2`" | "`531337`"
|
64
|
+
}
|
65
|
+
|
66
|
+
type UsersTopItem<R> = {
|
67
|
+
rank: R
|
68
|
+
name: string
|
69
|
+
last_activity: string
|
70
|
+
balance: string
|
71
|
+
}
|
72
|
+
|
73
|
+
type CorpsTopItem<R> = {
|
74
|
+
rank: R
|
75
|
+
name: string
|
76
|
+
worth: string
|
77
|
+
}
|
78
|
+
|
79
|
+
type CorpsTop = [
|
80
|
+
CorpsTopItem<1>,
|
81
|
+
CorpsTopItem<2>,
|
82
|
+
CorpsTopItem<3>,
|
83
|
+
CorpsTopItem<4>,
|
84
|
+
CorpsTopItem<5>,
|
85
|
+
CorpsTopItem<6>,
|
86
|
+
CorpsTopItem<7>,
|
87
|
+
CorpsTopItem<8>,
|
88
|
+
CorpsTopItem<9>,
|
89
|
+
CorpsTopItem<10>
|
90
|
+
]
|
91
|
+
|
92
|
+
type Fullsec = Subscripts & PlayerFullsec & {
|
93
|
+
accts: {
|
94
|
+
/**
|
95
|
+
* **FULLSEC**
|
96
|
+
*
|
97
|
+
* @returns GC balance of script owner
|
98
|
+
*/
|
99
|
+
balance_of_owner: () => number
|
100
|
+
|
101
|
+
/**
|
102
|
+
* **FULLSEC**
|
103
|
+
*/
|
104
|
+
xfer_gc_to_caller: (args: {
|
105
|
+
amount: number | string
|
106
|
+
memo?: string | undefined
|
107
|
+
}) => ScriptResponse
|
108
|
+
}
|
109
|
+
|
110
|
+
bbs: {
|
111
|
+
read: () => {
|
112
|
+
boards: {
|
113
|
+
title: string
|
114
|
+
slug: string
|
115
|
+
}[]
|
116
|
+
|
117
|
+
posts: {
|
118
|
+
vote_count: number
|
119
|
+
short_id: string
|
120
|
+
is_sticky: boolean
|
121
|
+
is_locked: boolean
|
122
|
+
is_archived: boolean
|
123
|
+
is_answered: boolean
|
124
|
+
is_implemented: boolean
|
125
|
+
title: string
|
126
|
+
slug: string
|
127
|
+
vote: boolean
|
128
|
+
username: string
|
129
|
+
time: string
|
130
|
+
}[]
|
131
|
+
}
|
132
|
+
|
133
|
+
r: Fullsec["bbs"]["read"]
|
134
|
+
}
|
135
|
+
|
136
|
+
chats: {
|
137
|
+
/**
|
138
|
+
* **FULLSEC**
|
139
|
+
*
|
140
|
+
* @summary Create a new chat channel
|
141
|
+
*
|
142
|
+
* @description This script lets you create a new chat channel.
|
143
|
+
* You cannot create a channel that already exists (including any of the default ports from `0000` to `FFFF`).
|
144
|
+
* If you do not supply a password, anyone can join your channel (but the channel name is not displayed anywhere, so they would have to discover it in some way first).
|
145
|
+
*/
|
146
|
+
create: ((args: {
|
147
|
+
/**
|
148
|
+
* The name of the channel to create
|
149
|
+
*/
|
150
|
+
name: string
|
151
|
+
|
152
|
+
/**
|
153
|
+
* The password to secure the channel with
|
154
|
+
*/
|
155
|
+
password?: string
|
156
|
+
}) => ScriptResponse) & ((args: {
|
157
|
+
/**
|
158
|
+
* The name of the channel to create
|
159
|
+
*/
|
160
|
+
c: string
|
161
|
+
|
162
|
+
/**
|
163
|
+
* The password to secure the channel with
|
164
|
+
*/
|
165
|
+
password?: string
|
166
|
+
}) => ScriptResponse)
|
167
|
+
|
168
|
+
/**
|
169
|
+
* **FULLSEC**
|
170
|
+
*
|
171
|
+
* @summary Send a chat message to a channel
|
172
|
+
*
|
173
|
+
* @description This script lets you send a message to the specified channel.
|
174
|
+
* You must have joined the channel, and you will see your own message (unlike chats.tell).
|
175
|
+
*/
|
176
|
+
send: (args: {
|
177
|
+
/**
|
178
|
+
* The channel to send the message to.
|
179
|
+
*/
|
180
|
+
channel: string
|
181
|
+
|
182
|
+
/**
|
183
|
+
* The message to send
|
184
|
+
*/
|
185
|
+
msg: string
|
186
|
+
}) => ScriptResponse
|
187
|
+
|
188
|
+
/**
|
189
|
+
* **FULLSEC**
|
190
|
+
*
|
191
|
+
* @summary Send a chat message to a specific user
|
192
|
+
*
|
193
|
+
* @description This script lets you send a message to the specified user directly.
|
194
|
+
* You can message any user, you only need their username.
|
195
|
+
* Note that you will not be able to see your message after it is sent (though many chat scripts based on chats.tell also send the message to you to work around this limitation).
|
196
|
+
*/
|
197
|
+
tell: (args: {
|
198
|
+
/**
|
199
|
+
* The username to send the message to
|
200
|
+
*/
|
201
|
+
to: string
|
202
|
+
|
203
|
+
/**
|
204
|
+
* The message to send
|
205
|
+
*/
|
206
|
+
msg: string
|
207
|
+
}) => ScriptResponse
|
208
|
+
}
|
209
|
+
|
210
|
+
escrow: {
|
211
|
+
/**
|
212
|
+
* **FULLSEC**
|
213
|
+
*/
|
214
|
+
charge: (args: {
|
215
|
+
cost: number | string
|
216
|
+
is_unlim?: boolean
|
217
|
+
}) => null | ScriptFailure
|
218
|
+
|
219
|
+
confirm: never
|
220
|
+
}
|
221
|
+
|
222
|
+
gui: {
|
223
|
+
chats: never
|
224
|
+
quiet: never
|
225
|
+
size: never
|
226
|
+
vfx: never
|
227
|
+
vol: never
|
228
|
+
}
|
229
|
+
|
230
|
+
market: {
|
231
|
+
/**
|
232
|
+
* **FULLSEC**
|
233
|
+
*/
|
234
|
+
browse: ((args: {
|
235
|
+
seller: string
|
236
|
+
listed_before: number
|
237
|
+
listed_after: number
|
238
|
+
cost: number | string
|
239
|
+
} & CLIUpgrade) => {
|
240
|
+
i: string
|
241
|
+
name: string
|
242
|
+
rarity: Upgrade["rarity"]
|
243
|
+
cost: number
|
244
|
+
}[] | ScriptFailure) & (<I extends string>(args: { i: I }) => {
|
245
|
+
i: I
|
246
|
+
seller: string
|
247
|
+
cost: number
|
248
|
+
count: number
|
249
|
+
description: string
|
250
|
+
upgrade: Upgrade
|
251
|
+
no_notify: boolean
|
252
|
+
} | ScriptFailure) & (<I extends string[]>(args: { i: I }) => {
|
253
|
+
i: I
|
254
|
+
seller: string
|
255
|
+
cost: number
|
256
|
+
count: number
|
257
|
+
description: string
|
258
|
+
upgrade: Upgrade
|
259
|
+
no_notify: boolean
|
260
|
+
}[] | ScriptFailure)
|
261
|
+
}
|
262
|
+
|
263
|
+
scripts: {
|
264
|
+
/**
|
265
|
+
* **FULLSEC**
|
266
|
+
*/
|
267
|
+
fullsec: ((args?: object) => string[]) & ((args: { sector: string }) => string[] | ScriptFailure)
|
268
|
+
|
269
|
+
/**
|
270
|
+
* **FULLSEC**
|
271
|
+
*/
|
272
|
+
get_access_level: (args: { name: string }) => {
|
273
|
+
public: boolean
|
274
|
+
hidden: boolean
|
275
|
+
trust: boolean
|
276
|
+
} | ScriptFailure
|
277
|
+
|
278
|
+
/**
|
279
|
+
* **FULLSEC**
|
280
|
+
*/
|
281
|
+
get_level: (args: { name: string }) => 0 | 1 | 2 | 3 | 4 | ScriptFailure
|
282
|
+
|
283
|
+
/**
|
284
|
+
* **FULLSEC**
|
285
|
+
*/
|
286
|
+
highsec: ((args?: object) => string[]) & ((args: { sector: string }) => string[] | ScriptFailure)
|
287
|
+
|
288
|
+
/**
|
289
|
+
* **FULLSEC**
|
290
|
+
*/
|
291
|
+
lowsec: ((args?: object) => string[]) & ((args: { sector: string }) => string[] | ScriptFailure)
|
292
|
+
|
293
|
+
/**
|
294
|
+
* **FULLSEC**
|
295
|
+
*/
|
296
|
+
midsec: ((args?: object) => string[]) & ((args: { sector: string }) => string[] | ScriptFailure)
|
297
|
+
|
298
|
+
/**
|
299
|
+
* **FULLSEC**
|
300
|
+
*/
|
301
|
+
nullsec: ((args?: object) => string[]) & ((args: { sector: string }) => string[] | ScriptFailure)
|
302
|
+
|
303
|
+
/**
|
304
|
+
* **FULLSEC**
|
305
|
+
*/
|
306
|
+
trust: () => string[]
|
307
|
+
|
308
|
+
/**
|
309
|
+
* FULLSEC
|
310
|
+
*
|
311
|
+
* @returns a code library containing useful helper functions you can use in your scripts.
|
312
|
+
*/
|
313
|
+
lib: () => {
|
314
|
+
ok: () => ScriptSuccess
|
315
|
+
|
316
|
+
not_impl: () => {
|
317
|
+
ok: false
|
318
|
+
msg: "Not Implemented."
|
319
|
+
}
|
320
|
+
/**
|
321
|
+
* Append `message` to the current script run's log.
|
322
|
+
*/
|
323
|
+
log: (message: any) => void
|
324
|
+
/**
|
325
|
+
* @returns all messages added using `scripts.lib().log` during this script run
|
326
|
+
*/
|
327
|
+
get_log: () => string[]
|
328
|
+
/**
|
329
|
+
* @returns a random integer in the range [min, max) generated using `rng` (defaults to `Math.random`)
|
330
|
+
*/
|
331
|
+
rand_int: (min: number, max: number, rng?:()=>number) => number
|
332
|
+
/**
|
333
|
+
* @returns the value of `value`, bounded by the range [`floor`, `ceil`]
|
334
|
+
*/
|
335
|
+
clamp: (value: number, floor: number, ceil: number) => number
|
336
|
+
/**
|
337
|
+
* Linear interpolation function.
|
338
|
+
* @returns a number <`amount*100`>% of the way from `start` to `stop`
|
339
|
+
*/
|
340
|
+
lerp: (amount: number, start: number, stop: number) => number
|
341
|
+
/**
|
342
|
+
* @returns a random element from `array`, selected with a random number generated using `rng` (defaults to `Math.random`)
|
343
|
+
*/
|
344
|
+
sample: (array: any[], rng?: ()=>number) => any
|
345
|
+
/**
|
346
|
+
* @returns whether two MongoDB ObjectIds are equivalent
|
347
|
+
*/
|
348
|
+
are_ids_eq: (id1: any, id2: any) => boolean
|
349
|
+
/**
|
350
|
+
* Convert a MongoDB ObjectId to a string
|
351
|
+
*/
|
352
|
+
id_to_str: (id: string | {$oid: string}) => any
|
353
|
+
/**
|
354
|
+
* @returns whether `value` is a boolean primitive
|
355
|
+
*/
|
356
|
+
is_bool: (value: any) => value is boolean
|
357
|
+
/**
|
358
|
+
* @returns whether `value` is an object or `null`
|
359
|
+
*/
|
360
|
+
is_obj: (value: any) => value is Record<string, unknown> | null
|
361
|
+
/**
|
362
|
+
* @returns whether `value` is a string
|
363
|
+
*/
|
364
|
+
is_str: (value: any) => value is string
|
365
|
+
/**
|
366
|
+
* @returns whether `value` is a number
|
367
|
+
*/
|
368
|
+
is_num: (value: any) => value is number
|
369
|
+
/**
|
370
|
+
* @returns whether `value` is an integer
|
371
|
+
*/
|
372
|
+
is_int: (value: any) => value is number
|
373
|
+
/**
|
374
|
+
* @returns whether `value` is a negative number
|
375
|
+
*/
|
376
|
+
is_neg: (value: any) => value is number
|
377
|
+
/**
|
378
|
+
* @returns whether `value` is an array
|
379
|
+
*/
|
380
|
+
is_arr: (value: any) => value is unknown[]
|
381
|
+
/**
|
382
|
+
* @returns whether `value` is a function
|
383
|
+
*/
|
384
|
+
is_func: (value: any) => value is (...args: any[]) => unknown
|
385
|
+
/**
|
386
|
+
* @returns whether `value` is not `undefined`
|
387
|
+
*/
|
388
|
+
is_def: (value: any) => boolean
|
389
|
+
/**
|
390
|
+
* @returns whether `name` is a valid in-game username
|
391
|
+
*/
|
392
|
+
is_valid_name: (name: string) => boolean
|
393
|
+
/**
|
394
|
+
* @returns the string representation of `value`
|
395
|
+
*/
|
396
|
+
dump: (value: { toString: () => string }) => string
|
397
|
+
/**
|
398
|
+
* @returns a deep clone of `object`
|
399
|
+
*/
|
400
|
+
clone: <T extends object>(object: T) => T
|
401
|
+
/**
|
402
|
+
* Applies all key-value pairs from `obj2` to `obj1`, overwriting if necessary.
|
403
|
+
*/
|
404
|
+
merge: <F extends object, S extends object>(obj1: F, obj2: S) => F & S
|
405
|
+
/**
|
406
|
+
* @returns an array of `object`'s values
|
407
|
+
*/
|
408
|
+
get_values: (object: object) => any[]
|
409
|
+
/**
|
410
|
+
* @returns a numeric hash of `string`
|
411
|
+
*/
|
412
|
+
hash_code: (string: string) => number
|
413
|
+
/**
|
414
|
+
* @returns a numeric hash of `string`
|
415
|
+
*/
|
416
|
+
xmur3: (string: string) => number
|
417
|
+
/**
|
418
|
+
* @returns function that generates random floats in the range [0,1] based on the numerical seeds
|
419
|
+
*/
|
420
|
+
sfc32: (seed1: number, seed2: number, seed3: number, seed4: number) => () => number
|
421
|
+
/**
|
422
|
+
* @returns function that generates random floats in the range [0,1] based on the numerical seed
|
423
|
+
*/
|
424
|
+
mulberry32: (seed: number) => () => number
|
425
|
+
/**
|
426
|
+
* @returns function that generates random floats in the range [0,1] based on the numerical seeds
|
427
|
+
*/
|
428
|
+
xoshiro128ss: (seed1: number, seed2: number, seed3: number, seed4: number) => () => number
|
429
|
+
/**
|
430
|
+
* @returns function that generates random floats in the range [0,1] based on the numerical seed
|
431
|
+
*/
|
432
|
+
JSF: (seed: number) => () => number
|
433
|
+
/**
|
434
|
+
* @returns function that generates random floats in the range [0,1] based on the numerical seed
|
435
|
+
*/
|
436
|
+
LCG: (seed: number) => () => number
|
437
|
+
/**
|
438
|
+
* Converts a number to a GC string of the form `"1M5K20GC"`.
|
439
|
+
*/
|
440
|
+
to_gc_str: (number: number) => string
|
441
|
+
/**
|
442
|
+
* Converts a string similar to `"1M5K20GC"` to an equivalent numerical representation.
|
443
|
+
*/
|
444
|
+
to_gc_num: (string: string) => number | ScriptFailure
|
445
|
+
/**
|
446
|
+
* @returns a string of the form YYMMDD.HHMM derived from `date`
|
447
|
+
*/
|
448
|
+
to_game_timestr: (date: Date) => string
|
449
|
+
corruption_chars: "¡¢Á¤Ã¦§¨©ª"
|
450
|
+
/**
|
451
|
+
* A list of unique color codes to be used with hackmud's color formatting syntax.
|
452
|
+
* Does not include numeric codes, which are duplicates of some alphabetic codes.
|
453
|
+
*/
|
454
|
+
colors: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
455
|
+
/**
|
456
|
+
* Used by `scripts.lib().corrupt` to determine the frequency of corruption.
|
457
|
+
*/
|
458
|
+
corruptions: [ 0, 1, 1.5, 2.5, 5 ]
|
459
|
+
/**
|
460
|
+
* Adds colored corruption characters to `text`, with frequency determined by `amount`.
|
461
|
+
*/
|
462
|
+
corrupt: (text: string | string[], amount: 0 | 1 | 2 | 3 | 4) => string
|
463
|
+
/**
|
464
|
+
* @returns the first <`length`> characters of `string`, or the original string if it is shorter than `length`
|
465
|
+
*/
|
466
|
+
cap_str_len: (string: string, length: number) => string
|
467
|
+
/**
|
468
|
+
* Applies `func` to each element in `array` and returns the original array.
|
469
|
+
*/
|
470
|
+
each: <T>(array: T[], func: (index: number, value: T) => void) => T[]
|
471
|
+
/**
|
472
|
+
* @returns a new array containing the elments of `array` for which `func` returns `true`
|
473
|
+
*/
|
474
|
+
select: <T>(array: T[], func: (index: number, value: T) => boolean) => T[]
|
475
|
+
/**
|
476
|
+
* @returns the number of elements in `array` for which `func` returns `true`
|
477
|
+
*/
|
478
|
+
count: <T>(array: T[], func: (index: number, value: T) => boolean) => number
|
479
|
+
/**
|
480
|
+
* @returns the first element in `array` for which `func` returns `true`
|
481
|
+
*/
|
482
|
+
select_one: <T>(array: T[], func: (index: number, value: T) => boolean) => T
|
483
|
+
/**
|
484
|
+
* @returns a new array composed of the result of applying `func` to each element of the original array in order
|
485
|
+
*/
|
486
|
+
map: <T, U>(array: T[], func: (index: number, value: T) => U) => U[]
|
487
|
+
/**
|
488
|
+
* @returns a new object derived from `obj` with only the keys specified in `keys`
|
489
|
+
*/
|
490
|
+
pick: (obj: object, keys: string[]) => any
|
491
|
+
/**
|
492
|
+
* @returns an array with the elements from `array` in a random order
|
493
|
+
*/
|
494
|
+
shuffle: <T>(array: T[]) => T[]
|
495
|
+
/**
|
496
|
+
* Comparison function for sorting arbitrary values in ascending order using builtin comparison operators.
|
497
|
+
*/
|
498
|
+
sort_asc: (one: any, two: any) => 1 | -1 | 0
|
499
|
+
/**
|
500
|
+
* Comparison function for sorting arbitrary values in descending order using builtin comparison operators.
|
501
|
+
*/
|
502
|
+
sort_desc: (one: any, two: any) => 1 | -1 | 0
|
503
|
+
/**
|
504
|
+
* Comparison function for sorting numbers in ascending order.
|
505
|
+
*/
|
506
|
+
num_sort_asc: (one: number, two: number) => 1 | -1 | 0
|
507
|
+
/**
|
508
|
+
* Comparison function for sorting numbers in descending order.
|
509
|
+
*/
|
510
|
+
num_sort_desc: (one: number, two: number) => 1 | -1 | 0
|
511
|
+
/**
|
512
|
+
* @returns the value and the index of the largest number in `array` as `[maxVal, maxIdx]`
|
513
|
+
*/
|
514
|
+
max_val_index: (array: number[]) => number[]
|
515
|
+
/**
|
516
|
+
* @returns a new `Date` equivalent to `date.getTime() + add_ms`
|
517
|
+
*/
|
518
|
+
add_time: (date: Date, add_ms: number) => Date
|
519
|
+
/**
|
520
|
+
* String representations of the in-game seclevels.
|
521
|
+
*/
|
522
|
+
security_level_names: [ "NULLSEC", "LOWSEC", "MIDSEC", "HIGHSEC", "FULLSEC" ]
|
523
|
+
/**
|
524
|
+
* @returns the string name of a numeric security level
|
525
|
+
*/
|
526
|
+
get_security_level_name: (security_level: number) => any
|
527
|
+
/**
|
528
|
+
* @param result the return value of a call to `#db.i` or `#db.r`
|
529
|
+
* @param nModified the expected value of `result.nModified`
|
530
|
+
* @returns whether the database operation failed
|
531
|
+
*/
|
532
|
+
dbu_result_failed: (result: ReturnType<typeof $db.u | typeof $db.u1 | typeof $db.us>, nModified?: number) => boolean
|
533
|
+
/**
|
534
|
+
* @param result the return value of a call to `#db.i` or `#db.r`
|
535
|
+
* @param n the expected value of `result.n`
|
536
|
+
* @returns whether the database operation failed
|
537
|
+
*/
|
538
|
+
dbir_result_failed: (result: ReturnType<typeof $db.i | typeof $db.r>, n?: number) => boolean
|
539
|
+
/**
|
540
|
+
* @returns a random string of length `length` on the alphabet [a-z0-9]
|
541
|
+
*/
|
542
|
+
create_rand_string: (length: number) => string
|
543
|
+
/**
|
544
|
+
* @returns the user half `x` of a fully-qualified script name `x.y`
|
545
|
+
*/
|
546
|
+
get_user_from_script: (script_name: string) => string
|
547
|
+
/**
|
548
|
+
* @returns the script half `y` of a fully-qualified script name `x.y`
|
549
|
+
*/
|
550
|
+
get_scriptname_from_script: (name: string) => string
|
551
|
+
/**
|
552
|
+
* Determines whether to treat this run as a subscript, based either on the presence of `calling_script` in `context`,
|
553
|
+
* or the explicit passing of `is_script:true` in `args`.
|
554
|
+
*/
|
555
|
+
is_script: (context: Context, args: any) => boolean
|
556
|
+
/**
|
557
|
+
* @returns whether the script is being called by its owner
|
558
|
+
*/
|
559
|
+
caller_is_owner: (context: Context) => boolean
|
560
|
+
/**
|
561
|
+
* Removes consecutive duplicate elements from an array.
|
562
|
+
* @example
|
563
|
+
* ```js
|
564
|
+
* const arr = [1, 2, 2, 3, 2]
|
565
|
+
* return #fs.scripts.lib().uniq(arr)
|
566
|
+
* // [1, 2, 3, 2]
|
567
|
+
* ```
|
568
|
+
*/
|
569
|
+
uniq: (array: T[]) => T[]
|
570
|
+
/**
|
571
|
+
* Sorts an array of numbers or number-coercible strings in descending order.
|
572
|
+
*/
|
573
|
+
u_sort_num_arr_desc: <T>(array: T[]) => T[]
|
574
|
+
/**
|
575
|
+
* BUGGED: Creates a new string of length `length` by repeating `pad_char`.
|
576
|
+
*/
|
577
|
+
ljust: (input: string, length: number, pad_char?: string) => string
|
578
|
+
/**
|
579
|
+
* Add characters from `pad_char` to the left of `input` until it reaches length `length`.
|
580
|
+
*/
|
581
|
+
rjust: (input: string, length: number, pad_char?: string) => string
|
582
|
+
/**
|
583
|
+
* @returns a string with the entries from `strings` split into evenly spaced columns,
|
584
|
+
* organized donward and then rightward, to fit the current user's terminal
|
585
|
+
*/
|
586
|
+
columnize: (strings: string[]) => string
|
587
|
+
/**
|
588
|
+
* Takes two newline-separated strings and formats a new string where they appear in columns, separated by `space`.
|
589
|
+
* @example
|
590
|
+
* ```js
|
591
|
+
* const str1 = "one\ntwo\nthree"
|
592
|
+
* const str2 = "four\nfive\nsix"
|
593
|
+
* return $fs.scripts.lib().side_by_side(str1, str2, "|")
|
594
|
+
* // one|four\n
|
595
|
+
* // two|five\n
|
596
|
+
* // three|six
|
597
|
+
* ```
|
598
|
+
*/
|
599
|
+
side_by_side: (str1: string, str2: string, space?:string) => string
|
600
|
+
/**
|
601
|
+
* @returns whether enough time remains in the script execution window to satisfy `time_left`
|
602
|
+
*/
|
603
|
+
can_continue_execution: (time_left: number) => boolean
|
604
|
+
/**
|
605
|
+
* @returns a human-readable error object when not enough time remains in the script execution window to satisfy `time_left`
|
606
|
+
*/
|
607
|
+
can_continue_execution_error: (time_left: number, name?:string) => {ok:false, msg: string}
|
608
|
+
date: typeof Date
|
609
|
+
/**
|
610
|
+
* @returns current date, equivalent to `new Date()`
|
611
|
+
*/
|
612
|
+
get_date: () => Date
|
613
|
+
/**
|
614
|
+
* @returns time since the epoch, equivalent to `Date.now()`
|
615
|
+
*/
|
616
|
+
get_date_utcsecs: () => number
|
617
|
+
/**
|
618
|
+
* The amount of milliseconds in a single day.
|
619
|
+
*/
|
620
|
+
one_day_ms: 86_400_000
|
621
|
+
is_not_today: (date: Date) => boolean
|
622
|
+
/**
|
623
|
+
* @returns the number of days that have passed between `d2` and `d1`
|
624
|
+
*/
|
625
|
+
utc_day_diff: (d1: Date, d2: Date) => number
|
626
|
+
/**
|
627
|
+
* @returns the number of days elapsed since `date` as a string, e.g. "<n> days"
|
628
|
+
*/
|
629
|
+
utc_days_ago_str: (date: Date) => string
|
630
|
+
math: typeof Math
|
631
|
+
array: typeof Array
|
632
|
+
parse_int: typeof parseInt
|
633
|
+
parse_float: typeof parseFloat
|
634
|
+
json: typeof JSON
|
635
|
+
number: typeof Number
|
636
|
+
object: typeof Object
|
637
|
+
}
|
638
|
+
|
639
|
+
/**
|
640
|
+
* **FULLSEC**
|
641
|
+
*/
|
642
|
+
quine: () => string
|
643
|
+
}
|
644
|
+
|
645
|
+
sys: {
|
646
|
+
init: never
|
647
|
+
|
648
|
+
/**
|
649
|
+
* **FULLSEC**
|
650
|
+
*/
|
651
|
+
upgrades_of_owner: (<
|
652
|
+
F extends Partial<Upgrade & { loaded: boolean }> = object
|
653
|
+
>(args?: { filter?: F, full?: false }) => (
|
654
|
+
Omit<
|
655
|
+
Pick<UpgradeCore, "tier" | "rarity" | "name" | "type" | "i" | "loaded">,
|
656
|
+
keyof F
|
657
|
+
> & Pick<F, "tier" | "rarity" | "name" | "type" | "i" | "loaded">
|
658
|
+
)[] | ScriptFailure) & (<
|
659
|
+
F extends Partial<Upgrade & { loaded: boolean }> = object
|
660
|
+
>(args: { filter?: F, full: true }) => (
|
661
|
+
Omit<UpgradeCore, keyof F> & F & Record<string, null | boolean | number | string>
|
662
|
+
)[] | ScriptFailure) & (<I extends number>(args: { i: I }) => (
|
663
|
+
Omit<UpgradeCore, "i"> & { [x: string]: null | boolean | number | string, i: I }
|
664
|
+
) | ScriptFailure)
|
665
|
+
|
666
|
+
/**
|
667
|
+
* **FULLSEC**
|
668
|
+
*/
|
669
|
+
xfer_upgrade_to_caller: ((args: {
|
670
|
+
i: number | number[]
|
671
|
+
memo?: string
|
672
|
+
}) => ScriptResponse) & ((args: {
|
673
|
+
sn: string | string[]
|
674
|
+
memo?: string
|
675
|
+
}) => ScriptResponse)
|
676
|
+
}
|
677
|
+
|
678
|
+
users: {
|
679
|
+
/**
|
680
|
+
* **FULLSEC**
|
681
|
+
*/
|
682
|
+
active: () => number
|
683
|
+
|
684
|
+
/**
|
685
|
+
* **FULLSEC**
|
686
|
+
*/
|
687
|
+
last_action: (args: { name: string | string[] }) => ({
|
688
|
+
n: string
|
689
|
+
t?: Date
|
690
|
+
} | null)[]
|
691
|
+
|
692
|
+
/**
|
693
|
+
* **FULLSEC**
|
694
|
+
*/
|
695
|
+
top: () => [
|
696
|
+
UsersTopItem<1>,
|
697
|
+
UsersTopItem<2>,
|
698
|
+
UsersTopItem<3>,
|
699
|
+
UsersTopItem<4>,
|
700
|
+
UsersTopItem<5>,
|
701
|
+
UsersTopItem<6>,
|
702
|
+
UsersTopItem<7>,
|
703
|
+
UsersTopItem<8>,
|
704
|
+
UsersTopItem<9>,
|
705
|
+
UsersTopItem<10>
|
706
|
+
]
|
707
|
+
}
|
708
|
+
}
|
709
|
+
|
710
|
+
type Highsec = Fullsec & PlayerHighsec & {
|
711
|
+
accts: {
|
712
|
+
/**
|
713
|
+
* **HIGHSEC**
|
714
|
+
*
|
715
|
+
* @returns GC balance as number if `is_script` is true (default)
|
716
|
+
* @returns GC balance as string if `is_script` is false
|
717
|
+
*/
|
718
|
+
balance: ((args?: { is_script?: true }) => number) & ((args: { is_script: false }) => string)
|
719
|
+
|
720
|
+
/**
|
721
|
+
* **HIGHSEC**
|
722
|
+
*
|
723
|
+
* @returns transaction history according to filter
|
724
|
+
* @returns if `is_script` is true (default), time property as Date object
|
725
|
+
* @returns wraps transactions in object with msg, time property as string (game date format e.g. 201028.2147) if `is_script` is false
|
726
|
+
*/
|
727
|
+
transactions: ((args?: {
|
728
|
+
count?: number | "all"
|
729
|
+
to?: string
|
730
|
+
from?: string
|
731
|
+
script?: string
|
732
|
+
is_script?: true
|
733
|
+
}) => {
|
734
|
+
time: Date
|
735
|
+
amount: number
|
736
|
+
sender: string
|
737
|
+
recipient: string
|
738
|
+
script: string | null
|
739
|
+
memo?: string
|
740
|
+
}[]) & ((args: {
|
741
|
+
count?: number | "all"
|
742
|
+
to?: string
|
743
|
+
from?: string
|
744
|
+
script?: string
|
745
|
+
is_script: false
|
746
|
+
}) => {
|
747
|
+
msg: string
|
748
|
+
transactions: {
|
749
|
+
time: string
|
750
|
+
amount: string
|
751
|
+
sender: string
|
752
|
+
recipient: string
|
753
|
+
script: string | null
|
754
|
+
memo?: string
|
755
|
+
}[]
|
756
|
+
})
|
757
|
+
}
|
758
|
+
|
759
|
+
scripts: {
|
760
|
+
/**
|
761
|
+
* **HIGHSEC**
|
762
|
+
*/
|
763
|
+
sys: () => string | string[]
|
764
|
+
}
|
765
|
+
|
766
|
+
sys: {
|
767
|
+
/**
|
768
|
+
* **HIGHSEC**
|
769
|
+
*/
|
770
|
+
specs: () => string | ScriptFailure
|
771
|
+
|
772
|
+
/**
|
773
|
+
* **HIGHSEC**
|
774
|
+
*/
|
775
|
+
status: () => {
|
776
|
+
hardline: number
|
777
|
+
tutorial: string
|
778
|
+
breach: boolean
|
779
|
+
}
|
780
|
+
|
781
|
+
/**
|
782
|
+
* **HIGHSEC**
|
783
|
+
*/
|
784
|
+
upgrade_log: ((args?: {
|
785
|
+
is_script?: true
|
786
|
+
user?: string
|
787
|
+
run_id?: string
|
788
|
+
count?: number
|
789
|
+
start?: number
|
790
|
+
}) => {
|
791
|
+
t: Date
|
792
|
+
u: string
|
793
|
+
r: string
|
794
|
+
msg: string
|
795
|
+
}[] | ScriptFailure) & ((args: {
|
796
|
+
is_script: false
|
797
|
+
user?: string
|
798
|
+
run_id?: string
|
799
|
+
count?: number
|
800
|
+
start?: number
|
801
|
+
}) => string[] | ScriptFailure)
|
802
|
+
|
803
|
+
/**
|
804
|
+
* **HIGHSEC**
|
805
|
+
*/
|
806
|
+
upgrades: (<I extends number>(args: { i: I }) => (
|
807
|
+
Omit<UpgradeCore, "i"> & { [x: string]: null | boolean | number | string, i: I }
|
808
|
+
) | ScriptFailure) & (<
|
809
|
+
F extends Partial<Upgrade & { loaded: boolean }> = object
|
810
|
+
>(args?: {
|
811
|
+
filter?: F
|
812
|
+
is_script?: true
|
813
|
+
full?: false
|
814
|
+
}) => (
|
815
|
+
Omit<
|
816
|
+
Pick<UpgradeCore, "tier" | "rarity" | "name" | "type" | "i" | "loaded">,
|
817
|
+
keyof F
|
818
|
+
> & F & Record<string, null | boolean | number | string>
|
819
|
+
)[] | ScriptFailure) & (<
|
820
|
+
F extends Partial<Upgrade & { loaded: boolean }> = object
|
821
|
+
>(args?: {
|
822
|
+
filter?: F
|
823
|
+
is_script?: true
|
824
|
+
full: true
|
825
|
+
}) => (
|
826
|
+
Omit<UpgradeCore, keyof F> & F & Record<string, null | boolean | number | string>
|
827
|
+
)[] | ScriptFailure) & ((args?: {
|
828
|
+
filter?: Partial<Upgrade & { loaded: boolean }>
|
829
|
+
is_script: false
|
830
|
+
full?: false
|
831
|
+
}) => {
|
832
|
+
msg: string
|
833
|
+
upgrades: string[]
|
834
|
+
} | ScriptFailure) & (<
|
835
|
+
F extends Partial<Upgrade & { loaded: boolean }> = object
|
836
|
+
>(args?: {
|
837
|
+
filter?: F
|
838
|
+
is_script: false
|
839
|
+
full: true
|
840
|
+
}) => (
|
841
|
+
Omit<UpgradeCore, keyof F | `rarity`> & F & {
|
842
|
+
[x: string]: null | boolean | number | string
|
843
|
+
rarity: "`0noob`" | "`1kiddie`" | "`2h4x0r`" | "`3h4rdc0r3`" | "`4|_|b3|2`" | "`531337`"
|
844
|
+
}
|
845
|
+
)[] | ScriptFailure)
|
846
|
+
}
|
847
|
+
|
848
|
+
users: {
|
849
|
+
/**
|
850
|
+
* **HIGHSEC**
|
851
|
+
*/
|
852
|
+
inspect: ((args: {
|
853
|
+
name: "trust"
|
854
|
+
is_script?: boolean
|
855
|
+
}) => number) & ((args: {
|
856
|
+
name: "risk"
|
857
|
+
is_script?: boolean
|
858
|
+
}) => string) & ((args: {
|
859
|
+
name: string
|
860
|
+
is_script?: true
|
861
|
+
}) => {
|
862
|
+
username: string
|
863
|
+
avatar: string
|
864
|
+
pronouns: string
|
865
|
+
user_age?: Date
|
866
|
+
bio?: string
|
867
|
+
title?: string
|
868
|
+
is_main: boolean
|
869
|
+
alt_of?: string
|
870
|
+
badges?: string[]
|
871
|
+
} | ScriptFailure) & ((args: {
|
872
|
+
name: string
|
873
|
+
is_script: false
|
874
|
+
}) => string | ScriptFailure)
|
875
|
+
}
|
876
|
+
}
|
877
|
+
|
878
|
+
type Midsec = Highsec & PlayerMidsec & {
|
879
|
+
accts: {
|
880
|
+
/**
|
881
|
+
* **MIDSEC**
|
882
|
+
*/
|
883
|
+
xfer_gc_to: (args: {
|
884
|
+
to: string
|
885
|
+
amount: number | string
|
886
|
+
memo?: string
|
887
|
+
}) => ScriptResponse
|
888
|
+
}
|
889
|
+
|
890
|
+
autos: {
|
891
|
+
/**
|
892
|
+
* **MIDSEC**
|
893
|
+
*/
|
894
|
+
reset: () => ScriptSuccess
|
895
|
+
}
|
896
|
+
|
897
|
+
chats: {
|
898
|
+
/**
|
899
|
+
* **MIDSEC**
|
900
|
+
*/
|
901
|
+
channels: () => string[]
|
902
|
+
|
903
|
+
/**
|
904
|
+
* **MIDSEC**
|
905
|
+
*/
|
906
|
+
join: (args: {
|
907
|
+
channel: string
|
908
|
+
password?: string
|
909
|
+
}) => ScriptResponse
|
910
|
+
|
911
|
+
/**
|
912
|
+
* **MIDSEC**
|
913
|
+
*/
|
914
|
+
leave: (args: { channel: string }) => ScriptResponse
|
915
|
+
|
916
|
+
/**
|
917
|
+
* **MIDSEC**
|
918
|
+
*/
|
919
|
+
users: (args: { channel: string }) => string[] | ScriptFailure
|
920
|
+
}
|
921
|
+
|
922
|
+
escrow: {
|
923
|
+
/**
|
924
|
+
* **MIDSEC**
|
925
|
+
*/
|
926
|
+
stats: () => {
|
927
|
+
scripts: string[]
|
928
|
+
total: string
|
929
|
+
outstanding: string
|
930
|
+
open_escrow_count: number
|
931
|
+
} | ScriptFailure
|
932
|
+
}
|
933
|
+
|
934
|
+
market: {
|
935
|
+
/**
|
936
|
+
* **MIDSEC**
|
937
|
+
*/
|
938
|
+
buy: (args: {
|
939
|
+
i: string
|
940
|
+
count: number
|
941
|
+
confirm: true
|
942
|
+
}) => ScriptResponse
|
943
|
+
|
944
|
+
/**
|
945
|
+
* **MIDSEC**
|
946
|
+
*/
|
947
|
+
stats: () => ScriptFailure | {
|
948
|
+
total: string
|
949
|
+
outstanding: string
|
950
|
+
listed: number
|
951
|
+
sold: number
|
952
|
+
}
|
953
|
+
}
|
954
|
+
|
955
|
+
scripts: {
|
956
|
+
/**
|
957
|
+
* **MIDSEC**
|
958
|
+
*/
|
959
|
+
user: () => string[]
|
960
|
+
}
|
961
|
+
|
962
|
+
sys: {
|
963
|
+
/**
|
964
|
+
* **MIDSEC**
|
965
|
+
*/
|
966
|
+
manage: ((args: {
|
967
|
+
unload?: number | number[]
|
968
|
+
load?: number | number[]
|
969
|
+
}) => ScriptResponse) & ((args: { reorder?: ([ number, number ] | {
|
970
|
+
from: number
|
971
|
+
to: number
|
972
|
+
})[] | {
|
973
|
+
from: number
|
974
|
+
to: number
|
975
|
+
} }) => string[] | ScriptFailure)
|
976
|
+
}
|
977
|
+
}
|
978
|
+
|
979
|
+
type Lowsec = Midsec & PlayerLowsec & {
|
980
|
+
kernel: {
|
981
|
+
/**
|
982
|
+
* **LOWSEC**
|
983
|
+
*/
|
984
|
+
hardline: () => ScriptResponse
|
985
|
+
}
|
986
|
+
|
987
|
+
market: {
|
988
|
+
/**
|
989
|
+
* **LOWSEC**
|
990
|
+
*/
|
991
|
+
sell: (args: {
|
992
|
+
i: number
|
993
|
+
cost: number | string
|
994
|
+
description?: string
|
995
|
+
count?: number
|
996
|
+
no_notify?: boolean
|
997
|
+
confirm: true
|
998
|
+
}) => ScriptResponse<{ token: string }>
|
999
|
+
}
|
1000
|
+
|
1001
|
+
sys: {
|
1002
|
+
/**
|
1003
|
+
* **LOWSEC**
|
1004
|
+
*/
|
1005
|
+
access_log: ((args?: {
|
1006
|
+
user?: string
|
1007
|
+
run_id?: string
|
1008
|
+
is_script?: true
|
1009
|
+
count?: number
|
1010
|
+
start?: number
|
1011
|
+
}) => {
|
1012
|
+
t: Date
|
1013
|
+
u: string | undefined
|
1014
|
+
r: string | undefined
|
1015
|
+
msg: string
|
1016
|
+
}[] | ScriptFailure) & ((args: {
|
1017
|
+
user?: string
|
1018
|
+
run_id?: string
|
1019
|
+
is_script: false
|
1020
|
+
count?: number
|
1021
|
+
start?: number
|
1022
|
+
}) => string[])
|
1023
|
+
|
1024
|
+
/**
|
1025
|
+
* **LOWSEC**
|
1026
|
+
*/
|
1027
|
+
cull: (args: { i: number | number[], confirm: true }) => ScriptResponse
|
1028
|
+
|
1029
|
+
/**
|
1030
|
+
* **LOWSEC**
|
1031
|
+
*/
|
1032
|
+
loc: () => string | ScriptFailure
|
1033
|
+
|
1034
|
+
/**
|
1035
|
+
* **LOWSEC**
|
1036
|
+
*/
|
1037
|
+
xfer_upgrade_to: ((args: {
|
1038
|
+
i: number | number[]
|
1039
|
+
to: string
|
1040
|
+
memo?: string
|
1041
|
+
}) => ScriptResponse) & ((args: {
|
1042
|
+
sn: string | string[]
|
1043
|
+
to: string
|
1044
|
+
memo?: string
|
1045
|
+
}) => ScriptResponse)
|
1046
|
+
}
|
1047
|
+
}
|
1048
|
+
|
1049
|
+
type Nullsec = Lowsec & PlayerNullsec & {
|
1050
|
+
corps: {
|
1051
|
+
/**
|
1052
|
+
* **NULLSEC**
|
1053
|
+
*/
|
1054
|
+
create: (args: {
|
1055
|
+
name: string
|
1056
|
+
confirm: true
|
1057
|
+
}) => ScriptResponse
|
1058
|
+
|
1059
|
+
/**
|
1060
|
+
* **NULLSEC**
|
1061
|
+
*/
|
1062
|
+
hire: (args: { name: string }) => ScriptResponse
|
1063
|
+
|
1064
|
+
/**
|
1065
|
+
* **NULLSEC**
|
1066
|
+
*/
|
1067
|
+
manage: ((args: { command: "list" }) => {
|
1068
|
+
name: string
|
1069
|
+
is_admin: boolean
|
1070
|
+
}[] | ScriptFailure) & ((args: {
|
1071
|
+
command: "demote" | "promote"
|
1072
|
+
name: string
|
1073
|
+
} | {
|
1074
|
+
command: "fire"
|
1075
|
+
name: string
|
1076
|
+
confirm: true
|
1077
|
+
}) => ScriptResponse)
|
1078
|
+
|
1079
|
+
/**
|
1080
|
+
* **NULLSEC**
|
1081
|
+
*/
|
1082
|
+
offers: (() => {
|
1083
|
+
offers: string[]
|
1084
|
+
msg: string
|
1085
|
+
} | ScriptSuccess<{
|
1086
|
+
msg: string
|
1087
|
+
current_corp: string | null
|
1088
|
+
}>) & ((args: { accept: string }) => ScriptResponse)
|
1089
|
+
|
1090
|
+
/**
|
1091
|
+
* **NULLSEC**
|
1092
|
+
*/
|
1093
|
+
quit: (args: { confirm: true }) => ScriptResponse
|
1094
|
+
|
1095
|
+
/**
|
1096
|
+
* **NULLSEC**
|
1097
|
+
*/
|
1098
|
+
top: () => CorpsTop | {
|
1099
|
+
top: CorpsTop
|
1100
|
+
active: {
|
1101
|
+
name: string
|
1102
|
+
worth: string
|
1103
|
+
}
|
1104
|
+
}
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
sys: {
|
1108
|
+
/**
|
1109
|
+
* **NULLSEC**
|
1110
|
+
*/
|
1111
|
+
breach: (args: { confirm: true }) => ScriptResponse
|
1112
|
+
}
|
1113
|
+
|
1114
|
+
trust: {
|
1115
|
+
/**
|
1116
|
+
* **NULLSEC**
|
1117
|
+
*/
|
1118
|
+
me: () => string
|
1119
|
+
}
|
1120
|
+
|
1121
|
+
users: {
|
1122
|
+
/**
|
1123
|
+
* **NULLSEC**
|
1124
|
+
*/
|
1125
|
+
config: ((args: {
|
1126
|
+
list: false
|
1127
|
+
is_script?: true | null
|
1128
|
+
avatar?: string | null
|
1129
|
+
user_age?: boolean | null
|
1130
|
+
account_age?: boolean | null
|
1131
|
+
bio?: string | null
|
1132
|
+
title?: string | null
|
1133
|
+
pronouns?: string | null
|
1134
|
+
corp?: boolean | null
|
1135
|
+
alt_of?: string | null
|
1136
|
+
badges?: string[] | null
|
1137
|
+
}) => ScriptResponse) & ((args: {
|
1138
|
+
list: true
|
1139
|
+
is_script?: true
|
1140
|
+
avatar?: string | null
|
1141
|
+
user_age?: boolean | null
|
1142
|
+
account_age?: boolean | null
|
1143
|
+
bio?: string | null
|
1144
|
+
title?: string | null
|
1145
|
+
pronouns?: string | null
|
1146
|
+
corp?: boolean | null
|
1147
|
+
alt_of?: string | null
|
1148
|
+
badges?: string[] | null
|
1149
|
+
}) => {
|
1150
|
+
avatar: string | null
|
1151
|
+
user_age?: boolean
|
1152
|
+
account_age?: boolean
|
1153
|
+
bio: string | null
|
1154
|
+
title: string | null
|
1155
|
+
pronouns: string
|
1156
|
+
corp?: boolean
|
1157
|
+
alt_of: string | null
|
1158
|
+
badges: string[]
|
1159
|
+
}) & ((args: {
|
1160
|
+
list: true
|
1161
|
+
is_script: false
|
1162
|
+
avatar?: string | null
|
1163
|
+
user_age?: boolean | null
|
1164
|
+
account_age?: boolean | null
|
1165
|
+
bio?: string | null
|
1166
|
+
title?: string | null
|
1167
|
+
pronouns?: string | null
|
1168
|
+
corp?: boolean | null
|
1169
|
+
alt_of?: string | null
|
1170
|
+
badges?: string[] | null
|
1171
|
+
}) => string)
|
1172
|
+
}
|
1173
|
+
}
|
1174
|
+
|
1175
|
+
type MongoValue = string | number | boolean | Date | MongoValue[] | {
|
1176
|
+
[key: string]: MongoValue
|
1177
|
+
} | null
|
1178
|
+
|
1179
|
+
type MongoCommandValue = string | number | boolean | Date | MongoCommandValue[] | {
|
1180
|
+
[key: string]: MongoCommandValue
|
1181
|
+
} | null | undefined
|
1182
|
+
|
1183
|
+
type Query = {
|
1184
|
+
[key: string]: MongoValue | Query
|
1185
|
+
} & {
|
1186
|
+
_id?: Id
|
1187
|
+
$in?: MongoValue[]
|
1188
|
+
}
|
1189
|
+
|
1190
|
+
type Projection = Record<string, boolean | 0 | 1>
|
1191
|
+
|
1192
|
+
type MongoCommand = MongoCommandValue & Partial<{
|
1193
|
+
$set: Record<string, MongoCommandValue>
|
1194
|
+
$push: Record<string, MongoCommandValue>
|
1195
|
+
$unset: Record<string, "">
|
1196
|
+
}>
|
1197
|
+
|
1198
|
+
type Id = string | number | boolean | Date | Record<string, MongoValue>
|
1199
|
+
|
1200
|
+
type MongoDocument = {
|
1201
|
+
[key: string]: MongoValue
|
1202
|
+
_id: Id
|
1203
|
+
}
|
1204
|
+
|
1205
|
+
type SortOrder = {
|
1206
|
+
[key: string]: 1 | -1 | SortOrder
|
1207
|
+
}
|
1208
|
+
|
1209
|
+
type Cursor = {
|
1210
|
+
/**
|
1211
|
+
* Returns the first document that satisfies the query.
|
1212
|
+
*/
|
1213
|
+
first: () => MongoDocument | null
|
1214
|
+
|
1215
|
+
/**
|
1216
|
+
* Returns an array of documents that satisfy the query.
|
1217
|
+
*/
|
1218
|
+
array: () => MongoDocument[]
|
1219
|
+
|
1220
|
+
/**
|
1221
|
+
* Returns the number of documents that match the query.
|
1222
|
+
*/
|
1223
|
+
count: () => number
|
1224
|
+
|
1225
|
+
/**
|
1226
|
+
* Returns the first document that satisfies the query.
|
1227
|
+
* Also makes cursor unusable.
|
1228
|
+
*/
|
1229
|
+
first_and_close: () => MongoDocument
|
1230
|
+
|
1231
|
+
/**
|
1232
|
+
* Returns an array of documents that satisfy the query.
|
1233
|
+
* Also makes cursor unusable.
|
1234
|
+
*/
|
1235
|
+
array_and_close: () => MongoDocument[]
|
1236
|
+
|
1237
|
+
/**
|
1238
|
+
* Returns the number of documents that match the query.
|
1239
|
+
* Also makes cursor unusable.
|
1240
|
+
*/
|
1241
|
+
count_and_close: () => number
|
1242
|
+
|
1243
|
+
/**
|
1244
|
+
* Run callback on each document that satisfied the query.
|
1245
|
+
*
|
1246
|
+
* @param funct callback function
|
1247
|
+
*/
|
1248
|
+
each: (funct: (document: MongoDocument) => void) => null
|
1249
|
+
|
1250
|
+
/**
|
1251
|
+
* Returns a new cursor with documents sorted as specified.
|
1252
|
+
* A value of 1 sorts the property ascending, and -1 descending.
|
1253
|
+
*
|
1254
|
+
* @param order the way the documents are to be sorted
|
1255
|
+
*/
|
1256
|
+
sort: (order?: SortOrder) => Cursor
|
1257
|
+
|
1258
|
+
/**
|
1259
|
+
* Returns a new cursor without the first number of documents.
|
1260
|
+
*
|
1261
|
+
* @param count number of documents to skip
|
1262
|
+
*/
|
1263
|
+
skip: (count: number) => Cursor
|
1264
|
+
|
1265
|
+
/**
|
1266
|
+
* Returns a new cursor limited to a number of documents as specified
|
1267
|
+
*
|
1268
|
+
* @param count number of documents
|
1269
|
+
*/
|
1270
|
+
limit: (count: number) => Cursor
|
1271
|
+
|
1272
|
+
/**
|
1273
|
+
* @param key they key of the documents
|
1274
|
+
*/
|
1275
|
+
distinct: ((key: string) => MongoValue[]) & ((key: "_id") => Id[])
|
1276
|
+
|
1277
|
+
/**
|
1278
|
+
* Makes cursor unusable.
|
1279
|
+
*/
|
1280
|
+
close: () => null
|
1281
|
+
|
1282
|
+
NumberLong: (number: number) => number
|
1283
|
+
ObjectId: () => any
|
1284
|
+
}
|
1285
|
+
|
1286
|
+
type CLIContext = {
|
1287
|
+
/**
|
1288
|
+
* The name of the user who is calling the script (i.e. n00b)
|
1289
|
+
*/
|
1290
|
+
caller: string
|
1291
|
+
|
1292
|
+
/**
|
1293
|
+
* The name of this script
|
1294
|
+
*/
|
1295
|
+
this_script: string
|
1296
|
+
|
1297
|
+
/**
|
1298
|
+
* the number of columns in the caller’s terminal, if reported by the client
|
1299
|
+
*/
|
1300
|
+
cols: number
|
1301
|
+
|
1302
|
+
/**
|
1303
|
+
* the number of rows in the caller’s terminal, if reported by the client
|
1304
|
+
*/
|
1305
|
+
rows: number
|
1306
|
+
|
1307
|
+
/**
|
1308
|
+
* The name of the script that directly called this script, or null if called on the command line or as a scriptor
|
1309
|
+
*/
|
1310
|
+
calling_script: null
|
1311
|
+
}
|
1312
|
+
|
1313
|
+
type SubscriptContext = Replace<CLIContext, {
|
1314
|
+
/**
|
1315
|
+
* The name of the script that directly called this script, or null if called on the command line or as a scriptor
|
1316
|
+
*/
|
1317
|
+
calling_script: string
|
1318
|
+
}>
|
1319
|
+
|
1320
|
+
type ScriptorContext = CLIContext & {
|
1321
|
+
/**
|
1322
|
+
* true if the script is being run as a scriptor, otherwise falsey (not present currently, but I wouldn’t rely on that)
|
1323
|
+
*/
|
1324
|
+
is_scriptor: true
|
1325
|
+
}
|
1326
|
+
|
1327
|
+
type BrainContext = CLIContext & {
|
1328
|
+
/**
|
1329
|
+
* true if the script is being run via a bot brain
|
1330
|
+
*/
|
1331
|
+
is_brain: true
|
1332
|
+
}
|
1333
|
+
|
1334
|
+
type Context = CLIContext | SubscriptContext | ScriptorContext | BrainContext
|
1335
|
+
|
1336
|
+
/**
|
1337
|
+
* Subscript space that can call FULLSEC scripts.
|
1338
|
+
*/
|
1339
|
+
declare const $fs: Fullsec
|
1340
|
+
|
1341
|
+
/**
|
1342
|
+
* Subscript space that can call HIGHSEC and above scripts.
|
1343
|
+
* Makes your script HIGHSEC (overrides FULLSEC).
|
1344
|
+
*/
|
1345
|
+
declare const $hs: Highsec
|
1346
|
+
|
1347
|
+
/**
|
1348
|
+
* Subscript space that can call MIDSEC and above scripts.
|
1349
|
+
* Makes your script MIDSEC (overrides higher security levels).
|
1350
|
+
*/
|
1351
|
+
declare const $ms: Midsec
|
1352
|
+
|
1353
|
+
/**
|
1354
|
+
* Subscript space that can call LOWSEC and above scripts.
|
1355
|
+
* Makes your script LOWSEC (overrides higher security levels).
|
1356
|
+
*/
|
1357
|
+
declare const $ls: Lowsec
|
1358
|
+
|
1359
|
+
/**
|
1360
|
+
* Subscript space that can call any script.
|
1361
|
+
* Makes your script NULLSEC (overrides higher security levels).
|
1362
|
+
*/
|
1363
|
+
declare const $ns: Nullsec
|
1364
|
+
|
1365
|
+
/**
|
1366
|
+
* Subscript space that can call FULLSEC scripts.
|
1367
|
+
*/
|
1368
|
+
declare const $4s: typeof $fs
|
1369
|
+
|
1370
|
+
/**
|
1371
|
+
* Subscript space that can call HIGHSEC and above scripts.
|
1372
|
+
* Makes your script HIGHSEC (overrides FULLSEC).
|
1373
|
+
*/
|
1374
|
+
declare const $3s: typeof $hs
|
1375
|
+
|
1376
|
+
/**
|
1377
|
+
* Subscript space that can call MIDSEC and above scripts.
|
1378
|
+
* Makes your script MIDSEC (overrides higher security levels).
|
1379
|
+
*/
|
1380
|
+
declare const $2s: typeof $ms
|
1381
|
+
|
1382
|
+
/**
|
1383
|
+
* Subscript space that can call LOWSEC and above scripts.
|
1384
|
+
* Makes your script LOWSEC (overrides higher security levels).
|
1385
|
+
*/
|
1386
|
+
declare const $1s: typeof $ls
|
1387
|
+
|
1388
|
+
/**
|
1389
|
+
* Subscript space that can call any script.
|
1390
|
+
* Makes your script NULLSEC (overrides higher security levels).
|
1391
|
+
*/
|
1392
|
+
declare const $0s: typeof $ns
|
1393
|
+
|
1394
|
+
/**
|
1395
|
+
* Subscript space that can call any script.
|
1396
|
+
* Uses seclevel provided in comment before script (defaults to NULLSEC)
|
1397
|
+
*
|
1398
|
+
* ```js
|
1399
|
+
* // @seclevel MIDSEC
|
1400
|
+
* export function script() {
|
1401
|
+
* $s.foo.bar() // will be converted to #ms.foo.bar()
|
1402
|
+
* }
|
1403
|
+
* ```
|
1404
|
+
*/
|
1405
|
+
declare const $s: Nullsec
|
1406
|
+
|
1407
|
+
declare const $db: {
|
1408
|
+
/**
|
1409
|
+
* Insert
|
1410
|
+
*
|
1411
|
+
* Inserts a document or documents into a collection.
|
1412
|
+
* @param documents A document or array of documents to insert into the collection.
|
1413
|
+
*/
|
1414
|
+
i: (documents: object | object[]) => {
|
1415
|
+
ok: 1
|
1416
|
+
n: number
|
1417
|
+
opTime: {
|
1418
|
+
ts: "Undefined Conversion"
|
1419
|
+
t: number
|
1420
|
+
}
|
1421
|
+
electionId: "Undefined Conversion"
|
1422
|
+
operationTime: "Undefined Conversion"
|
1423
|
+
$clusterTime: {
|
1424
|
+
clusterTime: "Undefined Conversion"
|
1425
|
+
signature: {
|
1426
|
+
hash: "Undefined Conversion"
|
1427
|
+
keyId: "Undefined Conversion"
|
1428
|
+
}
|
1429
|
+
}
|
1430
|
+
}
|
1431
|
+
|
1432
|
+
/**
|
1433
|
+
* Remove
|
1434
|
+
*
|
1435
|
+
* Removes documents from a collection.
|
1436
|
+
* @param query Specifies deletion criteria using query operators.
|
1437
|
+
*/
|
1438
|
+
r: (query: Query) => {
|
1439
|
+
ok: 0 | 1
|
1440
|
+
n: number
|
1441
|
+
opTime: {
|
1442
|
+
ts: "Undefined Conversion"
|
1443
|
+
t: number
|
1444
|
+
}
|
1445
|
+
electionId: "Undefined Conversion"
|
1446
|
+
operationTime: "Undefined Conversion"
|
1447
|
+
$clusterTime: {
|
1448
|
+
clusterTime: "Undefined Conversion"
|
1449
|
+
signature: {
|
1450
|
+
hash: "Undefined Conversion"
|
1451
|
+
keyId: "Undefined Conversion"
|
1452
|
+
}
|
1453
|
+
}
|
1454
|
+
}
|
1455
|
+
|
1456
|
+
/**
|
1457
|
+
* Find
|
1458
|
+
*
|
1459
|
+
* Selects documents in a collection or view and returns a cursor to the selected documents.
|
1460
|
+
* @param query Specifies deletion criteria using query operators.
|
1461
|
+
* @param projection Specifies the fields to return in the documents that match the query filter.
|
1462
|
+
*/
|
1463
|
+
f: (query?: Query, projection?: Projection) => Cursor
|
1464
|
+
|
1465
|
+
/**
|
1466
|
+
* Update
|
1467
|
+
*
|
1468
|
+
* Modifies an existing document or documents in a collection.
|
1469
|
+
* @param query Specifies deletion criteria using query operators.
|
1470
|
+
* @param command The modifications to apply. {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters}
|
1471
|
+
*/
|
1472
|
+
u: (query: Query | Query[], command: MongoCommand) => {
|
1473
|
+
ok: 0 | 1
|
1474
|
+
nModified: number
|
1475
|
+
n: number
|
1476
|
+
opTime: {
|
1477
|
+
ts: "Undefined Conversion"
|
1478
|
+
t: number
|
1479
|
+
}
|
1480
|
+
electionId: "Undefined Conversion"
|
1481
|
+
operationTime: "Undefined Conversion"
|
1482
|
+
$clusterTime: {
|
1483
|
+
clusterTime: "Undefined Conversion"
|
1484
|
+
signature: {
|
1485
|
+
hash: "Undefined Conversion"
|
1486
|
+
keyId: "Undefined Conversion"
|
1487
|
+
}
|
1488
|
+
}
|
1489
|
+
}
|
1490
|
+
|
1491
|
+
/**
|
1492
|
+
* Update 1
|
1493
|
+
*
|
1494
|
+
* Updates a single document within the collection based on the filter.
|
1495
|
+
* @param query Specifies deletion criteria using query operators.
|
1496
|
+
* @param command The modifications to apply. {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters}
|
1497
|
+
*/
|
1498
|
+
u1: (query: Query | Query[], command: MongoCommand) => {
|
1499
|
+
ok: 0 | 1
|
1500
|
+
nModified: number
|
1501
|
+
n: number
|
1502
|
+
opTime: {
|
1503
|
+
ts: "Undefined Conversion"
|
1504
|
+
t: number
|
1505
|
+
}
|
1506
|
+
electionId: "Undefined Conversion"
|
1507
|
+
operationTime: "Undefined Conversion"
|
1508
|
+
$clusterTime: {
|
1509
|
+
clusterTime: "Undefined Conversion"
|
1510
|
+
signature: {
|
1511
|
+
hash: "Undefined Conversion"
|
1512
|
+
keyId: "Undefined Conversion"
|
1513
|
+
}
|
1514
|
+
}
|
1515
|
+
}
|
1516
|
+
|
1517
|
+
/**
|
1518
|
+
* Upsert
|
1519
|
+
*
|
1520
|
+
* Same as Update, but if no documents match the query, one document will be inserted based on the properties in both the query and the command.
|
1521
|
+
* The `$setOnInsert` operator is useful to set defaults.
|
1522
|
+
* @param query Specifies deletion criteria using query operators.
|
1523
|
+
* @param command The modifications to apply. {@link https://docs.mongodb.com/manual/reference/method/db.collection.update/#parameters}
|
1524
|
+
*/
|
1525
|
+
us: (query: Query | Query[], command: MongoCommand) => {
|
1526
|
+
ok: 0 | 1
|
1527
|
+
nModified: number
|
1528
|
+
n: number
|
1529
|
+
opTime: {
|
1530
|
+
ts: "Undefined Conversion"
|
1531
|
+
t: number
|
1532
|
+
}
|
1533
|
+
electionId: "Undefined Conversion"
|
1534
|
+
operationTime: "Undefined Conversion"
|
1535
|
+
$clusterTime: {
|
1536
|
+
clusterTime: "Undefined Conversion"
|
1537
|
+
signature: {
|
1538
|
+
hash: "Undefined Conversion"
|
1539
|
+
keyId: "Undefined Conversion"
|
1540
|
+
}
|
1541
|
+
}
|
1542
|
+
}
|
1543
|
+
}
|
1544
|
+
|
1545
|
+
/**
|
1546
|
+
* Debug Log
|
1547
|
+
*
|
1548
|
+
* If `$D()` is called in a script you own, the `return` value of the top level script is suppressed and instead an array of every `$D()`’d entry is printed.
|
1549
|
+
* This lets you use `$D()` like `console.log()`.
|
1550
|
+
*
|
1551
|
+
* `$D()` in scripts not owned by you are not shown but the `return` value always is.
|
1552
|
+
*
|
1553
|
+
* `$D()` returns the first argument so `$D("Hello, World!") evaluates to `"Hello, World!"` as if the `$D` text wasn't there.
|
1554
|
+
*
|
1555
|
+
* `$D()`’d items are returned even if the script times out or errors.
|
1556
|
+
*/
|
1557
|
+
declare function $D<T>(args: T): T
|
1558
|
+
|
1559
|
+
/**
|
1560
|
+
* Function Multi-Call Lock
|
1561
|
+
*
|
1562
|
+
* This is used by escrow to ensure that it is only used once in script execution.
|
1563
|
+
*
|
1564
|
+
* The first time (per-script) `$FMCL` is encountered, it returns `undefined`, every other time it `return`s `true`.
|
1565
|
+
*
|
1566
|
+
* @example
|
1567
|
+
* if ($FMCL)
|
1568
|
+
* return { ok: false, msg: "this script can only be used once per script execution" }
|
1569
|
+
*
|
1570
|
+
* // all code here will only run once
|
1571
|
+
*/
|
1572
|
+
declare const $FMCL: undefined | true
|
1573
|
+
|
1574
|
+
/**
|
1575
|
+
* Global
|
1576
|
+
*
|
1577
|
+
* A mutable, per-script global object.
|
1578
|
+
* $G persists between script calls until the end of the main script run making it useful for caching db entries when your script is a subscript.
|
1579
|
+
*
|
1580
|
+
* @example
|
1581
|
+
* if (!$G.dbCache)
|
1582
|
+
* $G.dbCache = $db.f({ whatever: true }).first()
|
1583
|
+
*/
|
1584
|
+
declare const $G: any
|
1585
|
+
|
1586
|
+
/**
|
1587
|
+
* This contains a JS timestamp (not Date) set immediately before your code begins running.
|
1588
|
+
*
|
1589
|
+
* @example
|
1590
|
+
* Date.now() - _START // milliseconds left of run time
|
1591
|
+
*/
|
1592
|
+
declare const _START: number
|
1593
|
+
|
1594
|
+
/**
|
1595
|
+
* This contains a JS timestamp (not Date) set immediately before your code begins running.
|
1596
|
+
*
|
1597
|
+
* @example
|
1598
|
+
* Date.now() - _ST // milliseconds left of run time
|
1599
|
+
*/
|
1600
|
+
declare const _ST: typeof _START
|
1601
|
+
|
1602
|
+
/**
|
1603
|
+
* JavaScript timestamp for the end of the script run (`_START + _TIMEOUT`).
|
1604
|
+
*/
|
1605
|
+
declare const _END: number
|
1606
|
+
|
1607
|
+
/**
|
1608
|
+
* The number of milliseconds a script can run for.
|
1609
|
+
* Normally `5000` though it has been known to change.
|
1610
|
+
*/
|
1611
|
+
declare const _TIMEOUT: number
|
1612
|
+
|
1613
|
+
/**
|
1614
|
+
* The number of milliseconds a script can run for.
|
1615
|
+
* Normally `5000` though it has been known to change.
|
1616
|
+
*/
|
1617
|
+
declare const _TO: typeof _TIMEOUT
|
1618
|
+
|
1619
|
+
/** The source code of this script as a string. */
|
1620
|
+
declare const _SOURCE: string
|
1621
|
+
|
1622
|
+
/** A unix timestamp of the date this script was built. */
|
1623
|
+
declare const _BUILD_DATE: number
|
1624
|
+
|
1625
|
+
/**
|
1626
|
+
* The user this script has been uploaded to.
|
1627
|
+
*
|
1628
|
+
* Shorter alternative to `context.this_script.split(".")[0].
|
1629
|
+
*
|
1630
|
+
* In rare cases where it's not known at build time, it's `"UNKNOWN"`.
|
1631
|
+
*/
|
1632
|
+
declare const _SCRIPT_USER: string
|
1633
|
+
|
1634
|
+
/**
|
1635
|
+
* The name of this script excluding the user and `.`.
|
1636
|
+
*
|
1637
|
+
* e.g. in the script `foo.bar`, `_SCRIPT_NAME` is `bar`.
|
1638
|
+
*
|
1639
|
+
* Shorter alternative to `context.this_script.split(".")[1].
|
1640
|
+
*
|
1641
|
+
* In rare cases where it's not known at build time, it's `"UNKNOWN"`.
|
1642
|
+
*/
|
1643
|
+
declare const _SCRIPT_NAME: string
|
1644
|
+
|
1645
|
+
/**
|
1646
|
+
* The full name of this script equivilent to `context.this_script` but should use less characters.
|
1647
|
+
*
|
1648
|
+
* In rare cases where it's not known at build time, it's `"UNKNOWN"`.
|
1649
|
+
*/
|
1650
|
+
declare const _FULL_SCRIPT_NAME: string
|
1651
|
+
|
1652
|
+
/**
|
1653
|
+
* The seclevel of this script as a number.
|
1654
|
+
*
|
1655
|
+
* In rare cases where it's not known at build time, it's `-1`.
|
1656
|
+
*/
|
1657
|
+
declare const _SECLEVEL: -1 | 0 | 1 | 2 | 3 | 4
|