nekosia.js 0.2.1 โ†’ 0.2.2

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/README.md CHANGED
@@ -141,4 +141,4 @@ If you have any questions or issues, create a new [Issue](https://github.com/Nek
141
141
 
142
142
 
143
143
  ## ๐Ÿ“‘ ยป MIT License
144
- Copyright 2024 ยฉ by [Sefinek](https://sefine.net). All rights reserved.
144
+ Copyright 2024-2025 ยฉ by [Nekosia](https://nekosia.cat). All rights reserved.
package/index.js CHANGED
@@ -5,28 +5,29 @@ const API_URL = `${BASE_URL}/api/v1`;
5
5
  class NekosiaAPI {
6
6
  buildQueryParams(options = {}) {
7
7
  return Object.entries(options)
8
- .filter(([, value]) => {
8
+ .filter(([, value]) =>
9
+ value != null &&
10
+ value !== '' &&
11
+ (!Array.isArray(value) || value.length > 0)
12
+ )
13
+ .map(([key, value]) => {
14
+ if (Array.isArray(value)) {
15
+ return `${encodeURIComponent(key)}=${value.map(v => encodeURIComponent(v)).join('%2C')}`;
16
+ }
9
17
  if (typeof value === 'string' && value.includes(',')) {
10
- throw new Error('A single tag in the string cannot contain commas. Please use an array instead.');
18
+ throw new Error('String values must not contain commas. Use an array instead.');
11
19
  }
12
-
13
- return value != null && value !== '' && (!Array.isArray(value) || value.length > 0);
20
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
14
21
  })
15
- .map(([key, value]) => `${encodeURIComponent(key)}=${value}`)
16
22
  .join('&');
17
23
  }
18
24
 
19
25
  async makeHttpRequest(endpoint) {
20
- try {
21
- return https.get(endpoint);
22
- } catch (err) {
23
- console.error(`HTTP request failed for endpoint ${endpoint}: ${err.message}`);
24
- throw err;
25
- }
26
+ return https.get(endpoint);
26
27
  }
27
28
 
28
29
  async fetchCategoryImages(category, options = {}) {
29
- if (!category) {
30
+ if (typeof category !== 'string' || !category.trim()) {
30
31
  throw new Error('Image category is required. For example: fetchCategoryImages(\'catgirl\')');
31
32
  }
32
33
 
@@ -39,7 +40,7 @@ class NekosiaAPI {
39
40
  }
40
41
 
41
42
  const query = this.buildQueryParams(options);
42
- return this.makeHttpRequest(`${API_URL}/images/${category}${query ? `?${query}` : ''}`);
43
+ return this.makeHttpRequest(`${API_URL}/images/${encodeURIComponent(category)}${query ? `?${query}` : ''}`);
43
44
  }
44
45
 
45
46
  async fetchImages(options = {}) {
@@ -65,8 +66,7 @@ class NekosiaAPI {
65
66
  }
66
67
 
67
68
  async fetchById(id) {
68
- if (!id) throw new Error('`id` parameter is required');
69
-
69
+ if (typeof id !== 'string' || !id.trim()) throw new Error('`id` parameter is required');
70
70
  return this.makeHttpRequest(`${API_URL}/getImageById/${id}`);
71
71
  }
72
72
  }
package/package.json CHANGED
@@ -1,44 +1,41 @@
1
1
  {
2
2
  "name": "nekosia.js",
3
- "version": "0.2.1",
4
- "description": "A simple wrapper for the Nekosia API that offers seamless access to random anime images. Add a touch of anime magic and feline charm to your projects, meow~! Find out why Nekosia is the purrfect choice!",
3
+ "version": "0.2.2",
4
+ "description": "A simple wrapper for the Nekosia API that provides easy access to random anime images. Enrich your projects with a touch of anime magic and feline charm, meow~! Discover why switching to Nekosia is the purrfect choice! ๐Ÿ’—",
5
5
  "keywords": [
6
- "anime api",
7
- "anime art",
8
- "anime catgirls",
9
- "anime characters",
10
- "anime gifs",
11
- "anime images",
12
- "anime library",
13
- "anime nekos",
14
- "anime wallpaper",
15
6
  "anime",
16
7
  "anime-api",
17
- "api wrapper",
18
- "api-wrapper",
19
- "cat ears",
20
- "cat",
8
+ "anime-wrapper",
9
+ "anime-images",
10
+ "anime-wallpaper",
11
+ "anime-girls",
12
+ "anime-catgirls",
13
+ "anime-nekos",
14
+ "neko",
15
+ "nekos",
16
+ "neko-girls",
21
17
  "catgirl",
22
18
  "catgirls",
23
- "cute animals",
24
- "cute nekos",
25
- "feline",
26
- "girl",
27
- "girls",
28
- "image api",
29
- "javascript",
30
- "js library",
19
+ "waifu",
31
20
  "kawaii",
32
- "manga",
33
21
  "moe",
34
- "neko girls",
35
- "neko",
36
- "nekos",
37
- "nekosia api",
38
- "nekosia",
22
+ "manga",
39
23
  "otaku",
40
- "random anime",
41
- "waifu"
24
+ "sfw",
25
+ "sfw-anime",
26
+ "random-anime",
27
+ "image-api",
28
+ "api-wrapper",
29
+ "booru",
30
+ "booru-api",
31
+ "nekosia",
32
+ "nekosia-api",
33
+ "nekosia-wrapper",
34
+ "nekos.life",
35
+ "nekos.fun",
36
+ "discord-bot",
37
+ "javascript",
38
+ "typescript"
42
39
  ],
43
40
  "homepage": "https://nekosia.cat",
44
41
  "bugs": {
@@ -49,16 +46,21 @@
49
46
  "url": "git+https://github.com/Nekosia-API/nekosia.js.git"
50
47
  },
51
48
  "license": "MIT",
52
- "author": "Sefinek <contact@sefinek.net> (https://sefinek.net)",
49
+ "author": "Sefinek <contact@nekosia.cat> (https://nekosia.cat)",
50
+ "type": "commonjs",
53
51
  "main": "index.js",
54
52
  "types": "types/index.d.ts",
53
+ "directories": {
54
+ "example": "examples",
55
+ "test": "test"
56
+ },
55
57
  "scripts": {
56
58
  "test": "jest",
57
59
  "up": "ncu -u && npm install && npm update && npm audit fix"
58
60
  },
59
61
  "devDependencies": {
60
- "@eslint/js": "^9.25.0",
61
- "globals": "^16.0.0",
62
- "jest": "^29.7.0"
62
+ "@eslint/js": "^9.29.0",
63
+ "globals": "^16.2.0",
64
+ "jest": "^30.0.2"
63
65
  }
64
66
  }
package/services/https.js CHANGED
@@ -10,7 +10,7 @@ const headers = {
10
10
  'DNT': '1',
11
11
  };
12
12
 
13
- const timeout = 25000;
13
+ const timeout = 15000;
14
14
 
15
15
  const get = async url => {
16
16
  if (!url || typeof url !== 'string') throw new Error('Missing URL, expected a string');
package/test/api.test.js CHANGED
@@ -31,21 +31,21 @@ describe('nekosia.js tests', () => {
31
31
  }
32
32
  });
33
33
 
34
- it('should fetch maximum allowed number of images (24)', async () => {
35
- const res = await NekosiaAPI.fetchCategoryImages('catgirl', { count: 24 });
34
+ it('should fetch maximum allowed number of images (20)', async () => {
35
+ const res = await NekosiaAPI.fetchCategoryImages('catgirl', { count: 20 });
36
36
 
37
37
  expect(res.success).toBe(true);
38
38
  expect(res.status).toBe(200);
39
39
  expect(Array.isArray(res.images)).toBe(true);
40
- expect(res.images.length).toBe(24);
40
+ expect(res.images.length).toBe(20);
41
41
  });
42
42
 
43
- it('should return error if count exceeds the maximum (25)', async () => {
44
- const res = await NekosiaAPI.fetchCategoryImages('catgirl', { count: 25 });
43
+ it('should return error if count exceeds the maximum (999)', async () => {
44
+ const res = await NekosiaAPI.fetchCategoryImages('catgirl', { count: 999 });
45
45
 
46
46
  expect(res.success).toBe(false);
47
47
  expect(res.status).toBe(400);
48
- expect(res.message).toMatch(/Count must be between 1 and 24/i);
48
+ expect(res.message).toMatch(/Count must be between 1 and/i);
49
49
  });
50
50
 
51
51
  it('should return error for invalid count value', async () => {
@@ -12,7 +12,7 @@ describe('NekosiaAPI', () => {
12
12
  it('should correctly build query params', () => {
13
13
  const options = { count: 3, additionalTags: ['tag1', 'tag2', 'tag3', 'tag4'], emptyValue: '', nullValue: null };
14
14
  const result = NekosiaAPI.buildQueryParams(options);
15
- expect(result).toBe('count=3&additionalTags=tag1,tag2,tag3,tag4');
15
+ expect(result).toBe('count=3&additionalTags=tag1%2Ctag2%2Ctag3%2Ctag4');
16
16
  });
17
17
 
18
18
  it('should return empty string for empty options', () => {
@@ -99,7 +99,7 @@ describe('NekosiaAPI', () => {
99
99
  const mockResponse = { data: { results: [] } };
100
100
  https.get.mockResolvedValue(mockResponse);
101
101
 
102
- const expectedEndpoint = 'https://api.nekosia.cat/api/v1/images/nothing?count=1&additionalTags=dark,shadow';
102
+ const expectedEndpoint = 'https://api.nekosia.cat/api/v1/images/nothing?count=1&additionalTags=dark%2Cshadow';
103
103
  const res = await NekosiaAPI.fetchImages({ count: 1, tags: ['dark', 'shadow'] });
104
104
 
105
105
  expect(res).toEqual(mockResponse);
package/types/tags.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export const TAGS =
2
- ['absolute-territory','after-the-rain','afternoon-tea','akazukin','alice-in-wonderland','alice-mana','alllisso','alluring-face','alona','alone','amamine','amamineko-cafe','amashiro-natsuki','angel','angry-face','animal-ears','apex','apple','apple-caramel','apple-pie','apron-dress','aqua','aquarium','aria-tsukushi','arknights','arknights-battle-illustration-contest','armed-girls','armpits','ashen-hair','assault-rifle','autumn','autumn-leaves','axillary-costume','azki','azkiart','azur-lane','babydoll','back-alley','background','balloon','balloons','bandages','bandaid','bare-feet','barefoot','basketball','basketball-uniform','beach','beast-girl','beautiful','beautiful-reimu','bed','bed-hair','bedroom','belly-glimpse','bellybutton','bench','beret','bewitching-thighs','birthday','black-and-white','black-dress','black-hair','black-hair-with-red-eyes','black-knee-high-socks','black-ribbon','black-sailor-uniform','black-shoes','black-skirt','black-stockings','black-thigh-high-socks','black-thigh-highs','black-tights','blazer','blonde','bloomers','blue-archive','blue-eyes','blue-hair','blue-ribbon','blue-shoes','blue-skirt','blue-sky','blushing','bocchi-chan','botamochi','bottomless','boy-cut','braid','breasts','brown-hair','bubble-tea','bunny-ears','bunny-girl','butterfly','by-the-window','cable-knitting','cafe','cake','camisole','camisole-dress','canal','candy-apple','car','cardigan','cardigan-uniform','casual-wear','cat','cat-and-girl','cat-ears','cat-ears-hat','cat-ears-headband','cat-ears-headphones','cat-ears-hoodie','cat-ears-maid','cat-mouth','cat-paws','cat-pose','cat-tail','catboy','catgirl','cats','cheeks','cherry','cherry-blossom','cherry-petals','chess','chibi','chihuahua','chin-resting','chinese-lolita','chinese-style','chino','chino-kafuu','chitosezaka-suzu','chocolate','chocolate-mint','choker','christmas','chuuni','classroom','cloak','closed-eyes','clouds','cocoa-hoto','coffee','coffee-shop','collar','comic-treasure','confused','cookie','corset','cosmos','crossed-legs','crying','cutaway-shoulder','cute','cute-cat','cuteness-is-justice','cyte','detexted','dog','dog-and-girl','dog-ears','dog-girl','doll','donut','doujin','drawers','drawmei','dress','dress-shirt','dvdart','elaina','elementary-school-student','elevator','epic-seven','eye-mask','eyepatch','fairy-eye','fairy-tale','fantasy','fantasy-girl','feather-ears','feet','felicia-lulufleur','festival-of-white','firefly','fireworks','fishnets','flare-skirt','flat-chest','floral-playing-cards','flower','flowers','flowers-and-girls','food','footwear','forest','fox','fox-ears','fox-mask','fox-shrine-maiden','foxgirl','frills','fubuki-shiragami','fubuki-shiragami-fanart','fuwamoco','fuyoyo','fuzzy','game','game-pad','gamer','gamer-girl','garter','garterbelt','gawr-gura','genshin-impact','gensokyo-in-spring','getting-dressed','ghost','gijinka','girl','girls','glasses','gloves','gothic-lolita','green-eyes','green-hair','green-ribbon','guildcq','guitar','gun','gym-uniform','hair-tie-in-mouth','hairdressing','hairpin','hairstyle-change','hajime-todoroki','hakui-koyori','half-pants','half-pigtails','half-up-hairstyle','halloween','halo','hamico','han-costume','hanami','hands-forming-a-heart','harness','hayate-hisakawa','hazakura-chikori','headband','headboard-angle','headdress','headphone','headphones','headset','heart','heart-eyes','heartbreak','hearts','hedgehog','heels','herta','heterochromia','hibiki','hibiscus','high-angle','high-school-girl','high-waisted-skirt','hiiro','hikaru','hizamaru','holding-hands-with-fingers-interlocked','holding-ice-in-mouth','hololive','hololive-en','hololive-english','hololiveen','holox','hong','honkaistarrail','hood','hoodie','hoshi','hoshino','hoshizora-no-memoria','hot-spring','hu-tao','hutao','hydrangea','ice-cream','ichigo','ichigori-ena','idol','illumination','in-the-train','incredibly-cute','indie-vtuber','indoor-shoes','inner-color','inugami-korone','itigori-ena','jagged-sclera','japanese-clothes','japanese-maid','japanese-style','japanese-style-maid','japanese-umbrella','jk','jumper-skirt','jumpy','just-woke-up','kabashima-hana','kamiko-kana','kamioka-chiroru','kamisato-ayaka','kamiyama-shiki','kanade-otonose','kancolle','kanon-mashiro','kantai-collection','karin','katana','katcolle','kazari-rua','kazueru','kazusa-kyoyama','kimono','kimono-dress','kindergarten-pupil','kingdom','kirakira-monstars','kiryuu-kikyou','kitchen','klee','knee-high-socks','knitted-vest','koharu','koiko-irori','koito-amuno','korie-riko','koyori-hakui','koyori-sketch','kuda-izuna','kuro-namako','kuroneko','kyaru','kyouyama-kazusa','lancat','lanmewko','laplus-darkness','large-breasts','lattice-tower','left-foot-shield','legato','leggings','legs','lemon','leo','lily-of-the-valley','lime','lingerie','little-devil','lolipop-complete','lolita','lolita-fashion','lollipop','long-black-hair','long-blond-hair','long-hair','long-pink-hair','long-red-hair','long-white-gloves','long-white-hair','loungewear','lying-down','lying-on-one-side','macaron','mad','magical-girl','maid','maid-uniform','makeup','mari-iochi','marie','marine-look','maruro','mascot','mayoi-shigure','medium-hair','middle-school-student','midori-matsukaze','mihoshi-mei','miike-chan','mika','mika-misono','mikeneko','miko','minato-aqua','mini-hakama','miniskirt','miniskirt-miko','mint','mirror','mizukiart','mococo','mococo-abyssgard','moon','murasaki-shion','muryo','myoya','nachoneko','nagi-hisakawa','nahida','nail-polish','nana-kagura','nanashi-mumei','nap','natori-sana','necktie','negligee','nekoha-shizuku','nekomata-okayu','new-year','newsboy-cap','night','night-sky','nijisanji','nikke','nine-tailed','nintendo-switch','nintendoswitch','noire','nolan','nonaka-yuu','nurse','off-shoulder','off-shoulder-dress','okomeillust','omochi-box','omochi-monaka','one-eye-covered','one-piece','ookami-mio','orange-hair','otokonoko','overalls','overly-long-sleeves','painting','pajamas','panda-ears','parasol','park','patting','peace-sign','pekora-usada-fanart','personification-of-drinks','photo-editing','pigtails','pillow','pinching-garments','pink','pink-eyes','pink-hair','pink-ribbon','pink-shoes','pink-skirt','pink-twintails','plaid-pattern','plaid-skirt','platform','playing-cards','plump-thighs','plushie','pocky','pointy-ears','ponytail','porch','present','princess-connect','project-sekai','prone-position','pu-ht','purple-ears','purple-eyes','purple-hair','purple-ribbon','purple-skirt','queen-of-hearts','railroad-crossing','railway','rain','rainy-season','ramune','randoseru','rawr','red-and-blue','red-eyes','red-hair','red-pigtails','red-ribbon','red-skirt','reflected-glare','regloss','reimu-hakurei','reisa-uzawa','remilia-scarlet','reverse-sitting','rhodes','ribbed-fabric','ribbon','ringo-chan','roar','rocket-launcher','rucaco','rukako','ruki-roki','rumi','runa-shinomiya','rurudo','rurudo-lion','rushia-uruha','sad','saiba-midori','saiba-momoi','sailor-dress','sailor-one-piece','sailor-uniform','sakamata-chloe','sakura','sakura-miko','sakuraba-moeka','sakurada-hane','sakuradahane','sakurai-hana','santa','sassy-loli','scared','scarf','scenery','school-sweater','school-uniform','school-uniform-cardigan','school-uniform-hoodie','schoolgirl','scornful-eyes','sea','see-through','selfie','setokane','shano-hiyori','shanoa-asmr','shiba-inu','shigure','shiori','shirakawa-yumea','shirasu-azusa','shiroko','shiroko-terror','shiromichan','shooting-star','short-boots','short-haircut','short-pants','short-white-hair','shouu-kun','showgirl','shy','silver-hair','silver-long-hair','singer','sisters','sitting','skirt','skirt-lift','skirtm','sleep','sleeping-face','sleepwear','sleepy','sleepy-face','sleeveless','sleeveless-dress','sleeveless-parka','small-fangs','smartphone','smile','smug-face','sneakers','snow','snowman','snowy-landscape','socks','sofa','sole','somna','sorasaki-hina','sousei','spiral-eyes','splashes','spring','squirrel','standing-picture','starlight-stage','starry-sky','starry-sky-dress','steamed-bun-with-meat-filling','stockings','straight-fringe','strap-shoes','straw-hat','strawberries','strawberry','streaked-hair','striped-thigh-high-socks','summer','summer-dress','summer-kimono','summer-pockets','sunaookami-shiroko','sunflowers','sunohara-kokona','sunset','supine','suspender-skirt','suzuho-hotaru','sweat','sweater','sweets','swimwear','swing','sword','tail','tail-from-under-skirt','tail-holding','tail-with-ribbon','taiwan','takanashi','takanashi-hoshino','tea','tea-time','tears','teary-eyed','teddy-bear','telephone','the-person-behind','the-soles-of-feet-in-socks','thick-eyebrows','thigh-high-socks','thigh-highs','thighhighs','thighs','tiered-dress','tiger','tights','tired','tobu-railway','toes','tongue-out','touhou','touhou-project','tropical-fish','twins','twintails','uise-iu','umbrella','underwater','uniform','upwards-gaze','usada-pekora','usagigo','valentine','vampire','vdonburi','vrchat','vtuber','w-sitting','wa-lolita','waitress','wallpaper','wallpapers','water','water-surface','watermelon','weapon','wedding-dress','wet','what-is-this-cuteness','white-cat','white-day','white-dress','white-hair','white-hait','white-high-socks','white-knee-high-socks','white-ribbon','white-sailor-uniform','white-skirt','white-socks','white-stockings','white-thigh-high-socks','white-tiger','white-tights','white-twintails','wings','wink','winter','witch','wolf','wolf-ears','wolf-girl','yandere','yaoyao','yawn','yellow-eyes','yellow-hair','yellow-ribbon','yoko','young-boy','young-girl','yuika-shiina','yuimisu','yukata','yukihana-lamy','yukinoshita-peo','yutori-natsu','yuuki-sakuna'] as const;
2
+ ['absolute-territory','after-the-rain','afternoon-tea','akazukin','alice-in-wonderland','alice-mana','alllisso','alluring-face','alona','alone','amamine','amamineko-cafe','amashiro-natsuki','angel','angry-face','animal-ears','apex','apple','apple-caramel','apple-pie','apron-dress','aqua','aquarium','aria-tsukushi','arknights','arknights-battle-illustration-contest','armed-girls','armpits','ashen-hair','assault-rifle','autumn','autumn-leaves','axillary-costume','azki','azkiart','azur-lane','babydoll','back-alley','back-of-thigh','background','balloon','balloons','bandages','bandaid','bare-feet','barefoot','basketball','basketball-uniform','beach','beast-girl','beautiful','beautiful-legs','beautiful-reimu','bed','bed-hair','bedroom','belly-glimpse','bellybutton','bench','beret','bewitching-thighs','birthday','black-and-white','black-dress','black-hair','black-hair-with-red-eyes','black-knee-high-socks','black-ribbon','black-sailor-uniform','black-shoes','black-skirt','black-stockings','black-thigh-high-socks','black-thigh-highs','black-tights','blazer','blonde','bloomers','blue-archive','blue-eyes','blue-hair','blue-ribbon','blue-shoes','blue-skirt','blue-sky','blushing','bocchi-chan','book','boot','botamochi','bottomless','boy-cut','braid','breasts','brown-eyes','brown-hair','brown-skirt','bubble-tea','bunny-ears','bunny-girl','butterfly','by-the-window','cable-knitting','cafe','cake','camisole','camisole-dress','canal','candy-apple','car','cardigan','cardigan-uniform','casual-wear','cat','cat-and-girl','cat-ears','cat-ears-hat','cat-ears-headband','cat-ears-headphones','cat-ears-hoodie','cat-ears-maid','cat-mouth','cat-paws','cat-pose','cat-tail','catboy','catgirl','cats','cheeks','cherry','cherry-blossom','cherry-petals','chess','chibi','chihuahua','chin-resting','chinese-lolita','chinese-style','chino','chino-kafuu','chitosezaka-suzu','chocolate','chocolate-cake','chocolate-mint','choker','christmas','chuuni','city','classroom','cloak','closed-eyes','clouds','cocoa-hoto','coffee','coffee-shop','collar','comic-treasure','confused','cookie','corset','cosmos','crossed-legs','crying','cutaway-shoulder','cute','cute-cat','cuteness-is-justice','cyte','detexted','dog','dog-and-girl','dog-ears','dog-girl','doll','donut','doujin','drawers','drawmei','dress','dress-shirt','dvdart','elaina','elementary-school-student','elevator','ennui','epic-seven','eye-mask','eyepatch','fair-skin','fairy-eye','fairy-tale','fantasy','fantasy-girl','feather-ears','feet','felicia-lulufleur','festival-of-white','firefly','fireworks','fishnets','flare-skirt','flat-chest','floral-playing-cards','flower','flower-field','flowers','flowers-and-girls','food','footwear','forest','fox','fox-ears','fox-mask','fox-shrine-maiden','foxgirl','frills','frostleaf','fubuki-shiragami','fubuki-shiragami-fanart','furina','fuwamoco','fuyoyo','fuzzy','game','game-pad','gamer','gamer-girl','garter','garterbelt','gawr-gura','gawrgura','genshin-impact','gensokyo-in-spring','getting-dressed','ghost','gijinka','girl','girls','glasses','gloves','gothic-lolita','green-eyes','green-hair','green-ribbon','guildcq','guitar','gun','gym-uniform','hair-tie-in-mouth','hairdressing','hairpin','hairstyle-change','hajime-todoroki','hakui-koyori','half-pants','half-pigtails','half-up-hairstyle','halloween','halo','hamico','han-costume','hanami','hands-forming-a-heart','happy','harness','haruhi-suzumiya','hatsune-miku','hayate-hisakawa','hazakura-chikori','headband','headboard-angle','headdress','headphone','headphones','headset','heart','heart-eyes','heartbreak','hearts','hedgehog','heels','herta','heterochromia','hibiki','hibiscus','high-angle','high-school-girl','high-waisted-skirt','hiiro','hikaru','hizamaru','holding-hands-with-fingers-interlocked','holding-ice-in-mouth','hololive','hololive-en','hololive-english','hololiveen','holox','hong','honkaistarrail','hood','hoodie','hoshi','hoshino','hoshizora-no-memoria','hot-spring','hu-tao','hutao','hydrangea','ice-cream','ichigo','ichigori-ena','idol','illumination','in-the-train','incredibly-cute','indie-vtuber','indoor-shoes','inner-color','inugami-korone','itigori-ena','jagged-sclera','japanese-maid','japanese-style','japanese-style-maid','japanese-umbrella','jk','jumper-skirt','jumpy','just-woke-up','kabashima-hana','kamiko-kana','kamioka-chiroru','kamisato-ayaka','kamiyama-shiki','kanade-otonose','kancolle','kanon-mashiro','kantai-collection','karin','katana','katcolle','kazari-rua','kazueru','kazusa-kyoyama','kimono','kimono-dress','kindergarten-pupil','kingdom','kirakira-monstars','kiryuu-kikyou','kitchen','klee','knee-high-socks','knitted-vest','koharu','koiko-irori','koito-amuno','korie-riko','koyori-hakui','koyori-sketch','kuda-izuna','kuro-namako','kuroneko','kyaru','kyouyama-kazusa','lancat','lanmewko','laplus-darkness','large-breasts','large-food','leaning-forward','left-foot-shield','legato','leggings','legs','lemon','leo','lily-of-the-valley','lime','lingerie','little-devil','lolipop-complete','lolita','lolita-fashion','lollipop','long-black-hair','long-blond-hair','long-hair','long-pink-hair','long-red-hair','long-white-gloves','long-white-hair','loungewear','lying-down','lying-on-one-side','macaron','mad','magical-girl','maid','maid-uniform','makeup','mari-iochi','marie','marine-look','maruro','mascot','mayoi-shigure','medium-hair','melonpan','middle-school-student','midori-matsukaze','mihoshi-mei','miike-chan','mika','mika-misono','mikeneko','miko','minato-aqua','mini-hakama','miniskirt','miniskirt-miko','mint','mirror','miufarfalle','mizukiart','mococo','mococo-abyssgard','moon','murasaki-shion','muryo','myoya','nachoneko','nagi-hisakawa','nahida','nail-polish','nana-kagura','nanashi-mumei','nap','natori-sana','necktie','negligee','nekoha-shizuku','nekomata-okayu','new-year','newsboy-cap','night','night-sky','nijisanji','nikke','nine-tailed','nintendo-switch','nintendoswitch','noire','nolan','nonaka-yuu','nurse','off-shoulder','off-shoulder-dress','okomeillust','omochi-box','omochi-monaka','one-eye-covered','one-piece','ookami-mio','orange-eyes','orange-hair','otokonoko','overalls','overly-long-sleeves','painting','pajamas','pancake','panda-ears','parasol','park','patting','peace-sign','pekora-usada-fanart','personification-of-drinks','petticoat','photo-editing','pigtails','pillow','pinching-garments','pink','pink-eyes','pink-hair','pink-ribbon','pink-shoes','pink-skirt','pink-twintails','plaid-pattern','plaid-skirt','platform','playing-cards','plump-thighs','plushie','pocky','pointy-ears','ponytail','porch','present','princess-connect','project-sekai','prone-position','pu-ht','purple-ears','purple-eyes','purple-hair','purple-ribbon','purple-skirt','queen-of-hearts','railroad-crossing','railway','rain','rainy-season','ramune','randoseru','rawr','red-and-blue','red-eyes','red-hair','red-pigtails','red-ribbon','red-skirt','reflected-glare','regloss','reimu-hakurei','reisa-uzawa','remilia-scarlet','reverse-sitting','rhodes','ribbed-fabric','ribbon','ringo-chan','roar','rocket-launcher','rucaco','rukako','ruki-roki','rumi','runa-shinomiya','rurudo','rurudo-lion','rushia-uruha','sad','saiba-midori','saiba-momoi','sailor-dress','sailor-one-piece','sailor-uniform','sakamata-chloe','sakura','sakura-miko','sakuraba-moeka','sakurada-hane','sakuradahane','sakurai-hana','santa','sassy-loli','scared','scarf','scenery','school-sweater','school-uniform','school-uniform-cardigan','school-uniform-hoodie','schoolgirl','scornful-eyes','sea','see-through','selfie','setokane','shano-hiyori','shanoa-asmr','shiba-inu','shigure','shiori','shirakawa-yumea','shirasu-azusa','shiroko','shiroko-terror','shiromichan','shooting-star','shopping','short-boots','short-hair','short-haircut','short-pants','short-white-hair','shouu-kun','showgirl','shrunken-girl','shy','silver-hair','silver-long-hair','singer','sisters','sitting','skirt','skirt-lift','skirtm','sleep','sleeping-face','sleepwear','sleepy','sleepy-face','sleeveless','sleeveless-dress','sleeveless-parka','small-fangs','smartphone','smile','smug-face','sneakers','snow','snowman','snowy-landscape','socks','sofa','sole','somna','sorasaki-hina','sousei','spiral-eyes','splashes','spring','squirrel','standing-picture','starlight-stage','starry-sky','starry-sky-dress','steamed-bun-with-meat-filling','stockings','straight-fringe','strap-shoes','straw-hat','strawberries','strawberry','streaked-hair','striped-thigh-high-socks','summer','summer-dress','summer-kimono','summer-pockets','sunaookami-shiroko','sunflowers','sunohara-kokona','sunset','supine','suspender-skirt','suzuho-hotaru','sweat','sweater','sweets','swimwear','swing','sword','tail','tail-from-under-skirt','tail-holding','tail-with-ribbon','taiwan','takanashi','takanashi-hoshino','tea','tea-time','tears','teary-eyed','teddy-bear','telephone','the-person-behind','the-soles-of-feet-in-socks','thick-eyebrows','thigh-high-socks','thigh-highs','thighhighs','thighs','tiered-dress','tiger','tight','tights','tired','tobu-railway','toes','tongue-out','touhou','touhou-project','tropical-fish','twins','twintails','uise-iu','umbrella','underwater','uniform','upwards-gaze','usada-pekora','usagigo','valentine','vampire','vdonburi','vocaloid','vrchat','vtuber','w-sitting','wa-lolita','waitress','wallpaper','wallpapers','water','water-surface','watermelon','wavy-hair','weapon','wedding-dress','wet','what-is-this-cuteness','white-cat','white-day','white-dress','white-hair','white-hait','white-high-socks','white-knee-high-socks','white-ribbon','white-sailor-uniform','white-skirt','white-socks','white-stockings','white-thigh-high-socks','white-tiger','white-tights','white-twintails','wings','wink','winter','witch','wolf','wolf-ears','wolf-girl','yandere','yaoyao','yawn','yellow-eyes','yellow-hair','yellow-ribbon','yoko','young-boy','young-girl','yuika-shiina','yuimisu','yukata','yukihana-lamy','yukinoshita-peo','yutori-natsu','yuuki-sakuna'] as const;
3
3
 
4
4
  // GET https://api.nekosia.cat/api/v1/tags