appwrite-cli 9.0.2 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +2 -2
  3. package/docs/examples/databases/create-line-attribute.md +5 -0
  4. package/docs/examples/databases/create-point-attribute.md +5 -0
  5. package/docs/examples/databases/create-polygon-attribute.md +5 -0
  6. package/docs/examples/databases/update-line-attribute.md +5 -0
  7. package/docs/examples/databases/update-point-attribute.md +5 -0
  8. package/docs/examples/databases/update-polygon-attribute.md +5 -0
  9. package/docs/examples/tablesdb/create-line-column.md +5 -0
  10. package/docs/examples/tablesdb/create-point-column.md +5 -0
  11. package/docs/examples/tablesdb/create-polygon-column.md +5 -0
  12. package/docs/examples/tablesdb/update-line-column.md +5 -0
  13. package/docs/examples/tablesdb/update-point-column.md +5 -0
  14. package/docs/examples/tablesdb/update-polygon-column.md +5 -0
  15. package/index.js +0 -2
  16. package/install.ps1 +2 -2
  17. package/install.sh +1 -1
  18. package/lib/client.js +2 -2
  19. package/lib/commands/databases.js +336 -0
  20. package/lib/commands/functions.js +2 -2
  21. package/lib/commands/generic.js +5 -5
  22. package/lib/commands/init.js +3 -1
  23. package/lib/commands/pull.js +24 -12
  24. package/lib/commands/push.js +27 -9
  25. package/lib/commands/tables-db.js +338 -2
  26. package/lib/commands/types.js +54 -15
  27. package/lib/config.js +57 -33
  28. package/lib/parser.js +5 -2
  29. package/lib/questions.js +6 -6
  30. package/lib/type-generation/languages/csharp.js +170 -0
  31. package/lib/type-generation/languages/javascript.js +2 -2
  32. package/lib/type-generation/languages/typescript.js +4 -2
  33. package/package.json +1 -1
  34. package/scoop/appwrite.config.json +3 -3
  35. package/docs/examples/avatars/get-browser.md +0 -2
  36. package/docs/examples/avatars/get-credit-card.md +0 -2
  37. package/docs/examples/avatars/get-favicon.md +0 -2
  38. package/docs/examples/avatars/get-flag.md +0 -2
  39. package/docs/examples/avatars/get-image.md +0 -2
  40. package/docs/examples/avatars/get-initials.md +0 -1
  41. package/docs/examples/avatars/get-qr.md +0 -2
  42. package/lib/commands/avatars.js +0 -484
@@ -1,484 +0,0 @@
1
- const fs = require('fs');
2
- const pathLib = require('path');
3
- const tar = require("tar");
4
- const ignore = require("ignore");
5
- const { promisify } = require('util');
6
- const libClient = require('../client.js');
7
- const { getAllFiles, showConsoleLink } = require('../utils.js');
8
- const { Command } = require('commander');
9
- const { sdkForProject, sdkForConsole } = require('../sdks')
10
- const { parse, actionRunner, parseInteger, parseBool, commandDescriptions, success, log, warn } = require('../parser')
11
- const { localConfig, globalConfig } = require("../config");
12
- const { File } = require('undici');
13
- const { ReadableStream } = require('stream/web');
14
-
15
- /**
16
- * @param {fs.ReadStream} readStream
17
- * @returns {ReadableStream}
18
- */
19
- function convertReadStreamToReadableStream(readStream) {
20
- return new ReadableStream({
21
- start(controller) {
22
- readStream.on("data", (chunk) => {
23
- controller.enqueue(chunk);
24
- });
25
- readStream.on("end", () => {
26
- controller.close();
27
- });
28
- readStream.on("error", (err) => {
29
- controller.error(err);
30
- });
31
- },
32
- cancel() {
33
- readStream.destroy();
34
- },
35
- });
36
- }
37
-
38
- const avatars = new Command("avatars").description(commandDescriptions['avatars'] ?? '').configureHelp({
39
- helpWidth: process.stdout.columns || 80
40
- })
41
-
42
- /**
43
- * @typedef {Object} AvatarsGetBrowserRequestParams
44
- * @property {Browser} code Browser Code.
45
- * @property {number} width Image width. Pass an integer between 0 to 2000. Defaults to 100.
46
- * @property {number} height Image height. Pass an integer between 0 to 2000. Defaults to 100.
47
- * @property {number} quality Image quality. Pass an integer between 0 to 100. Defaults to keep existing image quality.
48
- * @property {boolean} overrideForCli
49
- * @property {boolean} parseOutput
50
- * @property {libClient | undefined} sdk
51
- * @property {string} destination
52
- */
53
-
54
- /**
55
- * @param {AvatarsGetBrowserRequestParams} params
56
- */
57
- const avatarsGetBrowser = async ({code,width,height,quality,parseOutput = true, overrideForCli = false, sdk = undefined, destination}) => {
58
- let client = !sdk ? await sdkForProject() :
59
- sdk;
60
- let apiPath = '/avatars/browsers/{code}'.replace('{code}', code);
61
- let payload = {};
62
- if (typeof width !== 'undefined') {
63
- payload['width'] = width;
64
- }
65
- if (typeof height !== 'undefined') {
66
- payload['height'] = height;
67
- }
68
- if (typeof quality !== 'undefined') {
69
- payload['quality'] = quality;
70
- }
71
- if (!overrideForCli) {
72
- payload['project'] = localConfig.getProject().projectId
73
- payload['key'] = globalConfig.getKey();
74
- const queryParams = new URLSearchParams(payload);
75
- apiPath = `${globalConfig.getEndpoint()}${apiPath}?${queryParams.toString()}`;
76
- }
77
-
78
- let response = undefined;
79
-
80
- response = await client.call('get', apiPath, {
81
- }, payload, 'arraybuffer');
82
-
83
- if (overrideForCli) {
84
- response = Buffer.from(response);
85
- }
86
-
87
- fs.writeFileSync(destination, response);
88
- if (parseOutput) {
89
- parse(response)
90
- }
91
-
92
- return response;
93
-
94
- }
95
- /**
96
- * @typedef {Object} AvatarsGetCreditCardRequestParams
97
- * @property {CreditCard} code Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, unionpay, visa, mir, maestro, rupay.
98
- * @property {number} width Image width. Pass an integer between 0 to 2000. Defaults to 100.
99
- * @property {number} height Image height. Pass an integer between 0 to 2000. Defaults to 100.
100
- * @property {number} quality Image quality. Pass an integer between 0 to 100. Defaults to keep existing image quality.
101
- * @property {boolean} overrideForCli
102
- * @property {boolean} parseOutput
103
- * @property {libClient | undefined} sdk
104
- * @property {string} destination
105
- */
106
-
107
- /**
108
- * @param {AvatarsGetCreditCardRequestParams} params
109
- */
110
- const avatarsGetCreditCard = async ({code,width,height,quality,parseOutput = true, overrideForCli = false, sdk = undefined, destination}) => {
111
- let client = !sdk ? await sdkForProject() :
112
- sdk;
113
- let apiPath = '/avatars/credit-cards/{code}'.replace('{code}', code);
114
- let payload = {};
115
- if (typeof width !== 'undefined') {
116
- payload['width'] = width;
117
- }
118
- if (typeof height !== 'undefined') {
119
- payload['height'] = height;
120
- }
121
- if (typeof quality !== 'undefined') {
122
- payload['quality'] = quality;
123
- }
124
- if (!overrideForCli) {
125
- payload['project'] = localConfig.getProject().projectId
126
- payload['key'] = globalConfig.getKey();
127
- const queryParams = new URLSearchParams(payload);
128
- apiPath = `${globalConfig.getEndpoint()}${apiPath}?${queryParams.toString()}`;
129
- }
130
-
131
- let response = undefined;
132
-
133
- response = await client.call('get', apiPath, {
134
- }, payload, 'arraybuffer');
135
-
136
- if (overrideForCli) {
137
- response = Buffer.from(response);
138
- }
139
-
140
- fs.writeFileSync(destination, response);
141
- if (parseOutput) {
142
- parse(response)
143
- }
144
-
145
- return response;
146
-
147
- }
148
- /**
149
- * @typedef {Object} AvatarsGetFaviconRequestParams
150
- * @property {string} url Website URL which you want to fetch the favicon from.
151
- * @property {boolean} overrideForCli
152
- * @property {boolean} parseOutput
153
- * @property {libClient | undefined} sdk
154
- * @property {string} destination
155
- */
156
-
157
- /**
158
- * @param {AvatarsGetFaviconRequestParams} params
159
- */
160
- const avatarsGetFavicon = async ({url,parseOutput = true, overrideForCli = false, sdk = undefined, destination}) => {
161
- let client = !sdk ? await sdkForProject() :
162
- sdk;
163
- let apiPath = '/avatars/favicon';
164
- let payload = {};
165
- if (typeof url !== 'undefined') {
166
- payload['url'] = url;
167
- }
168
- if (!overrideForCli) {
169
- payload['project'] = localConfig.getProject().projectId
170
- payload['key'] = globalConfig.getKey();
171
- const queryParams = new URLSearchParams(payload);
172
- apiPath = `${globalConfig.getEndpoint()}${apiPath}?${queryParams.toString()}`;
173
- }
174
-
175
- let response = undefined;
176
-
177
- response = await client.call('get', apiPath, {
178
- }, payload, 'arraybuffer');
179
-
180
- if (overrideForCli) {
181
- response = Buffer.from(response);
182
- }
183
-
184
- fs.writeFileSync(destination, response);
185
- if (parseOutput) {
186
- parse(response)
187
- }
188
-
189
- return response;
190
-
191
- }
192
- /**
193
- * @typedef {Object} AvatarsGetFlagRequestParams
194
- * @property {Flag} code Country Code. ISO Alpha-2 country code format.
195
- * @property {number} width Image width. Pass an integer between 0 to 2000. Defaults to 100.
196
- * @property {number} height Image height. Pass an integer between 0 to 2000. Defaults to 100.
197
- * @property {number} quality Image quality. Pass an integer between 0 to 100. Defaults to keep existing image quality.
198
- * @property {boolean} overrideForCli
199
- * @property {boolean} parseOutput
200
- * @property {libClient | undefined} sdk
201
- * @property {string} destination
202
- */
203
-
204
- /**
205
- * @param {AvatarsGetFlagRequestParams} params
206
- */
207
- const avatarsGetFlag = async ({code,width,height,quality,parseOutput = true, overrideForCli = false, sdk = undefined, destination}) => {
208
- let client = !sdk ? await sdkForProject() :
209
- sdk;
210
- let apiPath = '/avatars/flags/{code}'.replace('{code}', code);
211
- let payload = {};
212
- if (typeof width !== 'undefined') {
213
- payload['width'] = width;
214
- }
215
- if (typeof height !== 'undefined') {
216
- payload['height'] = height;
217
- }
218
- if (typeof quality !== 'undefined') {
219
- payload['quality'] = quality;
220
- }
221
- if (!overrideForCli) {
222
- payload['project'] = localConfig.getProject().projectId
223
- payload['key'] = globalConfig.getKey();
224
- const queryParams = new URLSearchParams(payload);
225
- apiPath = `${globalConfig.getEndpoint()}${apiPath}?${queryParams.toString()}`;
226
- }
227
-
228
- let response = undefined;
229
-
230
- response = await client.call('get', apiPath, {
231
- }, payload, 'arraybuffer');
232
-
233
- if (overrideForCli) {
234
- response = Buffer.from(response);
235
- }
236
-
237
- fs.writeFileSync(destination, response);
238
- if (parseOutput) {
239
- parse(response)
240
- }
241
-
242
- return response;
243
-
244
- }
245
- /**
246
- * @typedef {Object} AvatarsGetImageRequestParams
247
- * @property {string} url Image URL which you want to crop.
248
- * @property {number} width Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.
249
- * @property {number} height Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.
250
- * @property {boolean} overrideForCli
251
- * @property {boolean} parseOutput
252
- * @property {libClient | undefined} sdk
253
- * @property {string} destination
254
- */
255
-
256
- /**
257
- * @param {AvatarsGetImageRequestParams} params
258
- */
259
- const avatarsGetImage = async ({url,width,height,parseOutput = true, overrideForCli = false, sdk = undefined, destination}) => {
260
- let client = !sdk ? await sdkForProject() :
261
- sdk;
262
- let apiPath = '/avatars/image';
263
- let payload = {};
264
- if (typeof url !== 'undefined') {
265
- payload['url'] = url;
266
- }
267
- if (typeof width !== 'undefined') {
268
- payload['width'] = width;
269
- }
270
- if (typeof height !== 'undefined') {
271
- payload['height'] = height;
272
- }
273
- if (!overrideForCli) {
274
- payload['project'] = localConfig.getProject().projectId
275
- payload['key'] = globalConfig.getKey();
276
- const queryParams = new URLSearchParams(payload);
277
- apiPath = `${globalConfig.getEndpoint()}${apiPath}?${queryParams.toString()}`;
278
- }
279
-
280
- let response = undefined;
281
-
282
- response = await client.call('get', apiPath, {
283
- }, payload, 'arraybuffer');
284
-
285
- if (overrideForCli) {
286
- response = Buffer.from(response);
287
- }
288
-
289
- fs.writeFileSync(destination, response);
290
- if (parseOutput) {
291
- parse(response)
292
- }
293
-
294
- return response;
295
-
296
- }
297
- /**
298
- * @typedef {Object} AvatarsGetInitialsRequestParams
299
- * @property {string} name Full Name. When empty, current user name or email will be used. Max length: 128 chars.
300
- * @property {number} width Image width. Pass an integer between 0 to 2000. Defaults to 100.
301
- * @property {number} height Image height. Pass an integer between 0 to 2000. Defaults to 100.
302
- * @property {string} background Changes background color. By default a random color will be picked and stay will persistent to the given name.
303
- * @property {boolean} overrideForCli
304
- * @property {boolean} parseOutput
305
- * @property {libClient | undefined} sdk
306
- * @property {string} destination
307
- */
308
-
309
- /**
310
- * @param {AvatarsGetInitialsRequestParams} params
311
- */
312
- const avatarsGetInitials = async ({name,width,height,background,parseOutput = true, overrideForCli = false, sdk = undefined, destination}) => {
313
- let client = !sdk ? await sdkForProject() :
314
- sdk;
315
- let apiPath = '/avatars/initials';
316
- let payload = {};
317
- if (typeof name !== 'undefined') {
318
- payload['name'] = name;
319
- }
320
- if (typeof width !== 'undefined') {
321
- payload['width'] = width;
322
- }
323
- if (typeof height !== 'undefined') {
324
- payload['height'] = height;
325
- }
326
- if (typeof background !== 'undefined') {
327
- payload['background'] = background;
328
- }
329
- if (!overrideForCli) {
330
- payload['project'] = localConfig.getProject().projectId
331
- payload['key'] = globalConfig.getKey();
332
- const queryParams = new URLSearchParams(payload);
333
- apiPath = `${globalConfig.getEndpoint()}${apiPath}?${queryParams.toString()}`;
334
- }
335
-
336
- let response = undefined;
337
-
338
- response = await client.call('get', apiPath, {
339
- }, payload, 'arraybuffer');
340
-
341
- if (overrideForCli) {
342
- response = Buffer.from(response);
343
- }
344
-
345
- fs.writeFileSync(destination, response);
346
- if (parseOutput) {
347
- parse(response)
348
- }
349
-
350
- return response;
351
-
352
- }
353
- /**
354
- * @typedef {Object} AvatarsGetQRRequestParams
355
- * @property {string} text Plain text to be converted to QR code image.
356
- * @property {number} size QR code size. Pass an integer between 1 to 1000. Defaults to 400.
357
- * @property {number} margin Margin from edge. Pass an integer between 0 to 10. Defaults to 1.
358
- * @property {boolean} download Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.
359
- * @property {boolean} overrideForCli
360
- * @property {boolean} parseOutput
361
- * @property {libClient | undefined} sdk
362
- * @property {string} destination
363
- */
364
-
365
- /**
366
- * @param {AvatarsGetQRRequestParams} params
367
- */
368
- const avatarsGetQR = async ({text,size,margin,download,parseOutput = true, overrideForCli = false, sdk = undefined, destination}) => {
369
- let client = !sdk ? await sdkForProject() :
370
- sdk;
371
- let apiPath = '/avatars/qr';
372
- let payload = {};
373
- if (typeof text !== 'undefined') {
374
- payload['text'] = text;
375
- }
376
- if (typeof size !== 'undefined') {
377
- payload['size'] = size;
378
- }
379
- if (typeof margin !== 'undefined') {
380
- payload['margin'] = margin;
381
- }
382
- if (typeof download !== 'undefined') {
383
- payload['download'] = download;
384
- }
385
- if (!overrideForCli) {
386
- payload['project'] = localConfig.getProject().projectId
387
- payload['key'] = globalConfig.getKey();
388
- const queryParams = new URLSearchParams(payload);
389
- apiPath = `${globalConfig.getEndpoint()}${apiPath}?${queryParams.toString()}`;
390
- }
391
-
392
- let response = undefined;
393
-
394
- response = await client.call('get', apiPath, {
395
- }, payload, 'arraybuffer');
396
-
397
- if (overrideForCli) {
398
- response = Buffer.from(response);
399
- }
400
-
401
- fs.writeFileSync(destination, response);
402
- if (parseOutput) {
403
- parse(response)
404
- }
405
-
406
- return response;
407
-
408
- }
409
- avatars
410
- .command(`get-browser`)
411
- .description(`You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings. When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.`)
412
- .requiredOption(`--code <code>`, `Browser Code.`)
413
- .option(`--width <width>`, `Image width. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
414
- .option(`--height <height>`, `Image height. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
415
- .option(`--quality <quality>`, `Image quality. Pass an integer between 0 to 100. Defaults to keep existing image quality.`, parseInteger)
416
- .requiredOption(`--destination <path>`, `output file path.`)
417
- .action(actionRunner(avatarsGetBrowser))
418
-
419
- avatars
420
- .command(`get-credit-card`)
421
- .description(`The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings. When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. `)
422
- .requiredOption(`--code <code>`, `Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, unionpay, visa, mir, maestro, rupay.`)
423
- .option(`--width <width>`, `Image width. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
424
- .option(`--height <height>`, `Image height. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
425
- .option(`--quality <quality>`, `Image quality. Pass an integer between 0 to 100. Defaults to keep existing image quality.`, parseInteger)
426
- .requiredOption(`--destination <path>`, `output file path.`)
427
- .action(actionRunner(avatarsGetCreditCard))
428
-
429
- avatars
430
- .command(`get-favicon`)
431
- .description(`Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL. This endpoint does not follow HTTP redirects.`)
432
- .requiredOption(`--url <url>`, `Website URL which you want to fetch the favicon from.`)
433
- .requiredOption(`--destination <path>`, `output file path.`)
434
- .action(actionRunner(avatarsGetFavicon))
435
-
436
- avatars
437
- .command(`get-flag`)
438
- .description(`You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. `)
439
- .requiredOption(`--code <code>`, `Country Code. ISO Alpha-2 country code format.`)
440
- .option(`--width <width>`, `Image width. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
441
- .option(`--height <height>`, `Image height. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
442
- .option(`--quality <quality>`, `Image quality. Pass an integer between 0 to 100. Defaults to keep existing image quality.`, parseInteger)
443
- .requiredOption(`--destination <path>`, `output file path.`)
444
- .action(actionRunner(avatarsGetFlag))
445
-
446
- avatars
447
- .command(`get-image`)
448
- .description(`Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol. When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px. This endpoint does not follow HTTP redirects.`)
449
- .requiredOption(`--url <url>`, `Image URL which you want to crop.`)
450
- .option(`--width <width>`, `Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.`, parseInteger)
451
- .option(`--height <height>`, `Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.`, parseInteger)
452
- .requiredOption(`--destination <path>`, `output file path.`)
453
- .action(actionRunner(avatarsGetImage))
454
-
455
- avatars
456
- .command(`get-initials`)
457
- .description(`Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned. You can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials. When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. `)
458
- .option(`--name <name>`, `Full Name. When empty, current user name or email will be used. Max length: 128 chars.`)
459
- .option(`--width <width>`, `Image width. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
460
- .option(`--height <height>`, `Image height. Pass an integer between 0 to 2000. Defaults to 100.`, parseInteger)
461
- .option(`--background <background>`, `Changes background color. By default a random color will be picked and stay will persistent to the given name.`)
462
- .requiredOption(`--destination <path>`, `output file path.`)
463
- .action(actionRunner(avatarsGetInitials))
464
-
465
- avatars
466
- .command(`get-qr`)
467
- .description(`Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image. `)
468
- .requiredOption(`--text <text>`, `Plain text to be converted to QR code image.`)
469
- .option(`--size <size>`, `QR code size. Pass an integer between 1 to 1000. Defaults to 400.`, parseInteger)
470
- .option(`--margin <margin>`, `Margin from edge. Pass an integer between 0 to 10. Defaults to 1.`, parseInteger)
471
- .option(`--download [value]`, `Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.`, (value) => value === undefined ? true : parseBool(value))
472
- .requiredOption(`--destination <path>`, `output file path.`)
473
- .action(actionRunner(avatarsGetQR))
474
-
475
- module.exports = {
476
- avatars,
477
- avatarsGetBrowser,
478
- avatarsGetCreditCard,
479
- avatarsGetFavicon,
480
- avatarsGetFlag,
481
- avatarsGetImage,
482
- avatarsGetInitials,
483
- avatarsGetQR
484
- };