@lootlog/sdk 0.1.0 → 0.2.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 (38) hide show
  1. package/README.md +261 -40
  2. package/dist/activity.d.ts +9 -2
  3. package/dist/activity.d.ts.map +1 -1
  4. package/dist/activity.js +2 -2
  5. package/dist/activity.js.map +1 -1
  6. package/dist/battlelog.d.ts +280 -5
  7. package/dist/battlelog.d.ts.map +1 -1
  8. package/dist/battlelog.js +11 -6
  9. package/dist/battlelog.js.map +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/main.d.ts +1457 -918
  13. package/dist/main.d.ts.map +1 -1
  14. package/dist/main.js +400 -284
  15. package/dist/main.js.map +1 -1
  16. package/dist/{mutators-Da_vMUva.d.ts → mutators-BaZDDfwh.d.ts} +2 -2
  17. package/dist/{mutators-Da_vMUva.d.ts.map → mutators-BaZDDfwh.d.ts.map} +1 -1
  18. package/dist/{mutators-CaBTxpi-.js → mutators-Dj5qBH3y.js} +2 -2
  19. package/dist/{mutators-CaBTxpi-.js.map → mutators-Dj5qBH3y.js.map} +1 -1
  20. package/dist/realtime.d.ts +427 -12
  21. package/dist/realtime.d.ts.map +1 -1
  22. package/dist/realtime.js +768 -471
  23. package/dist/realtime.js.map +1 -1
  24. package/dist/search.d.ts +247 -5
  25. package/dist/search.d.ts.map +1 -1
  26. package/dist/search.js +115 -2
  27. package/dist/search.js.map +1 -1
  28. package/dist/{transport-CIfewyM7.js → transport-Cn1V6y-o.js} +46 -8
  29. package/dist/transport-Cn1V6y-o.js.map +1 -0
  30. package/dist/{transport-BHbtsYo_.d.ts → transport-CoTymLxF.d.ts} +3 -1
  31. package/dist/transport-CoTymLxF.d.ts.map +1 -0
  32. package/openapi/activity.json +16 -1
  33. package/openapi/battlelog.json +805 -14
  34. package/openapi/main.json +5752 -4060
  35. package/openapi/search.json +721 -53
  36. package/package.json +4 -4
  37. package/dist/transport-BHbtsYo_.d.ts.map +0 -1
  38. package/dist/transport-CIfewyM7.js.map +0 -1
@@ -180,14 +180,6 @@
180
180
  ]
181
181
  },
182
182
  "required": false
183
- },
184
- {
185
- "name": "world",
186
- "in": "query",
187
- "schema": {
188
- "type": "string"
189
- },
190
- "required": false
191
183
  }
192
184
  ],
193
185
  "responses": {
@@ -304,14 +296,6 @@
304
296
  },
305
297
  "required": false
306
298
  },
307
- {
308
- "name": "world",
309
- "in": "query",
310
- "schema": {
311
- "type": "string"
312
- },
313
- "required": false
314
- },
315
299
  {
316
300
  "name": "filter",
317
301
  "in": "query",
@@ -336,36 +320,429 @@
336
320
  "name": "facets",
337
321
  "in": "query",
338
322
  "schema": {
339
- "type": "array",
340
- "items": {
341
- "type": "string"
342
- }
323
+ "type": "array",
324
+ "items": {
325
+ "type": "string"
326
+ }
327
+ },
328
+ "required": false,
329
+ "style": "form",
330
+ "explode": true
331
+ },
332
+ {
333
+ "name": "sort",
334
+ "in": "query",
335
+ "schema": {
336
+ "type": "array",
337
+ "items": {
338
+ "type": "string"
339
+ }
340
+ },
341
+ "required": false,
342
+ "style": "form",
343
+ "explode": true
344
+ }
345
+ ],
346
+ "responses": {
347
+ "200": {
348
+ "description": "Item search results",
349
+ "content": {
350
+ "application/json": {
351
+ "schema": {
352
+ "$ref": "#/components/schemas/SearchItemsResponseDto_Output"
353
+ }
354
+ }
355
+ }
356
+ },
357
+ "401": {
358
+ "description": "",
359
+ "content": {
360
+ "application/json": {
361
+ "schema": {
362
+ "type": "object",
363
+ "properties": {
364
+ "message": {
365
+ "type": "string"
366
+ }
367
+ },
368
+ "required": ["message"]
369
+ }
370
+ }
371
+ }
372
+ },
373
+ "403": {
374
+ "description": "",
375
+ "content": {
376
+ "application/json": {
377
+ "schema": {
378
+ "type": "object",
379
+ "properties": {
380
+ "message": {
381
+ "type": "string"
382
+ }
383
+ },
384
+ "required": ["message"]
385
+ }
386
+ }
387
+ }
388
+ },
389
+ "429": {
390
+ "description": "",
391
+ "content": {
392
+ "application/json": {
393
+ "schema": {
394
+ "type": "object",
395
+ "properties": {
396
+ "message": {
397
+ "type": "string"
398
+ }
399
+ },
400
+ "required": ["message"]
401
+ }
402
+ }
403
+ }
404
+ },
405
+ "503": {
406
+ "description": "",
407
+ "content": {
408
+ "application/json": {
409
+ "schema": {
410
+ "$ref": "#/components/schemas/SearchUnavailableEncoded"
411
+ }
412
+ }
413
+ }
414
+ }
415
+ },
416
+ "summary": "Search items with filters, sorting, and facets",
417
+ "security": [
418
+ {
419
+ "apiKey": []
420
+ }
421
+ ],
422
+ "x-lootlog-access": "read",
423
+ "x-lootlog-data": "public"
424
+ }
425
+ },
426
+ "/all": {
427
+ "get": {
428
+ "tags": ["All"],
429
+ "operationId": "AllController_searchAll",
430
+ "parameters": [
431
+ {
432
+ "name": "limit",
433
+ "in": "query",
434
+ "schema": {
435
+ "type": "number",
436
+ "default": 10
437
+ },
438
+ "required": false
439
+ },
440
+ {
441
+ "name": "search",
442
+ "in": "query",
443
+ "schema": {
444
+ "type": "string"
445
+ },
446
+ "required": false
447
+ },
448
+ {
449
+ "name": "world",
450
+ "in": "query",
451
+ "schema": {
452
+ "type": "string"
453
+ },
454
+ "required": false,
455
+ "description": "Filters players by world. NPC and item results cover every world of their edition."
456
+ }
457
+ ],
458
+ "responses": {
459
+ "200": {
460
+ "description": "Aggregated search results across items, players, and NPCs",
461
+ "content": {
462
+ "application/json": {
463
+ "schema": {
464
+ "$ref": "#/components/schemas/SearchAllResponseDto_Output"
465
+ }
466
+ }
467
+ }
468
+ },
469
+ "401": {
470
+ "description": "",
471
+ "content": {
472
+ "application/json": {
473
+ "schema": {
474
+ "type": "object",
475
+ "properties": {
476
+ "message": {
477
+ "type": "string"
478
+ }
479
+ },
480
+ "required": ["message"]
481
+ }
482
+ }
483
+ }
484
+ },
485
+ "403": {
486
+ "description": "",
487
+ "content": {
488
+ "application/json": {
489
+ "schema": {
490
+ "type": "object",
491
+ "properties": {
492
+ "message": {
493
+ "type": "string"
494
+ }
495
+ },
496
+ "required": ["message"]
497
+ }
498
+ }
499
+ }
500
+ },
501
+ "429": {
502
+ "description": "",
503
+ "content": {
504
+ "application/json": {
505
+ "schema": {
506
+ "type": "object",
507
+ "properties": {
508
+ "message": {
509
+ "type": "string"
510
+ }
511
+ },
512
+ "required": ["message"]
513
+ }
514
+ }
515
+ }
516
+ },
517
+ "503": {
518
+ "description": "",
519
+ "content": {
520
+ "application/json": {
521
+ "schema": {
522
+ "$ref": "#/components/schemas/SearchUnavailableEncoded"
523
+ }
524
+ }
525
+ }
526
+ }
527
+ },
528
+ "summary": "Search across all categories",
529
+ "security": [
530
+ {
531
+ "apiKey": []
532
+ }
533
+ ],
534
+ "x-lootlog-access": "read",
535
+ "x-lootlog-data": "public"
536
+ }
537
+ },
538
+ "/public/catalog/items": {
539
+ "get": {
540
+ "tags": ["Catalog"],
541
+ "operationId": "CatalogController_getItems",
542
+ "parameters": [
543
+ {
544
+ "name": "search",
545
+ "in": "query",
546
+ "schema": {
547
+ "type": "string"
548
+ },
549
+ "required": false
550
+ },
551
+ {
552
+ "name": "gameVersion",
553
+ "in": "query",
554
+ "schema": {
555
+ "type": "string",
556
+ "enum": ["en", "pl"],
557
+ "description": "Only entries of this game edition."
558
+ },
559
+ "required": false
560
+ },
561
+ {
562
+ "name": "ids",
563
+ "in": "query",
564
+ "schema": {
565
+ "type": "array",
566
+ "items": {
567
+ "type": "integer",
568
+ "minimum": -9007199254740991,
569
+ "maximum": 9007199254740991
570
+ }
571
+ },
572
+ "required": false,
573
+ "style": "form",
574
+ "explode": true
575
+ },
576
+ {
577
+ "name": "rarities",
578
+ "in": "query",
579
+ "schema": {
580
+ "type": "array",
581
+ "items": {
582
+ "type": "string"
583
+ }
584
+ },
585
+ "required": false,
586
+ "style": "form",
587
+ "explode": true
588
+ },
589
+ {
590
+ "name": "types",
591
+ "in": "query",
592
+ "schema": {
593
+ "type": "array",
594
+ "items": {
595
+ "type": "string"
596
+ }
597
+ },
598
+ "required": false,
599
+ "style": "form",
600
+ "explode": true
601
+ },
602
+ {
603
+ "name": "professions",
604
+ "in": "query",
605
+ "schema": {
606
+ "type": "array",
607
+ "items": {
608
+ "type": "string"
609
+ }
610
+ },
611
+ "required": false,
612
+ "style": "form",
613
+ "explode": true
614
+ },
615
+ {
616
+ "name": "minLevel",
617
+ "in": "query",
618
+ "schema": {
619
+ "type": "number"
620
+ },
621
+ "required": false
622
+ },
623
+ {
624
+ "name": "maxLevel",
625
+ "in": "query",
626
+ "schema": {
627
+ "type": "number"
628
+ },
629
+ "required": false
630
+ },
631
+ {
632
+ "name": "statKeys",
633
+ "in": "query",
634
+ "schema": {
635
+ "type": "array",
636
+ "items": {
637
+ "type": "string"
638
+ }
639
+ },
640
+ "required": false,
641
+ "style": "form",
642
+ "explode": true
643
+ },
644
+ {
645
+ "name": "excludedStatKeys",
646
+ "in": "query",
647
+ "schema": {
648
+ "type": "array",
649
+ "items": {
650
+ "type": "string"
651
+ }
652
+ },
653
+ "required": false,
654
+ "style": "form",
655
+ "explode": true
656
+ },
657
+ {
658
+ "name": "legendaryBonuses",
659
+ "in": "query",
660
+ "schema": {
661
+ "type": "array",
662
+ "items": {
663
+ "type": "string"
664
+ }
665
+ },
666
+ "required": false,
667
+ "style": "form",
668
+ "explode": true
669
+ },
670
+ {
671
+ "name": "dropSourceTypes",
672
+ "in": "query",
673
+ "schema": {
674
+ "type": "array",
675
+ "items": {
676
+ "type": "string"
677
+ }
678
+ },
679
+ "required": false,
680
+ "style": "form",
681
+ "explode": true
682
+ },
683
+ {
684
+ "name": "event",
685
+ "in": "query",
686
+ "schema": {
687
+ "type": "string",
688
+ "description": "Items of the event with this slug: its name and year, such as `wakacje-2026`."
689
+ },
690
+ "required": false
691
+ },
692
+ {
693
+ "name": "droppedBy",
694
+ "in": "query",
695
+ "schema": {
696
+ "type": "string",
697
+ "description": "Items that drop from the NPC with this catalog key."
698
+ },
699
+ "required": false
700
+ },
701
+ {
702
+ "name": "sort",
703
+ "in": "query",
704
+ "schema": {
705
+ "type": "string",
706
+ "enum": [
707
+ "relevance",
708
+ "id:desc",
709
+ "lvl:asc",
710
+ "lvl:desc",
711
+ "name:asc",
712
+ "name:desc",
713
+ "attackSpeed:desc",
714
+ "upgradedAttackSpeed:desc"
715
+ ],
716
+ "description": "`id:desc` lists the items Margonem added most recently first. `attackSpeed:desc` lists first the items that add the most attack speed to a character with at least 100 agility: their own attack speed plus 0.002 for each point of agility or all attributes. `upgradedAttackSpeed:desc` ranks the same attack speed with each item upgraded to +5 and given the +5 bonus that adds the most of it: attack speed on weapons, agility or all attributes on other pieces."
717
+ },
718
+ "required": false
719
+ },
720
+ {
721
+ "name": "limit",
722
+ "in": "query",
723
+ "schema": {
724
+ "type": "number",
725
+ "default": 24
343
726
  },
344
- "required": false,
345
- "style": "form",
346
- "explode": true
727
+ "required": false
347
728
  },
348
729
  {
349
- "name": "sort",
730
+ "name": "offset",
350
731
  "in": "query",
351
732
  "schema": {
352
- "type": "array",
353
- "items": {
354
- "type": "string"
355
- }
733
+ "type": "number",
734
+ "default": 0
356
735
  },
357
- "required": false,
358
- "style": "form",
359
- "explode": true
736
+ "required": false
360
737
  }
361
738
  ],
362
739
  "responses": {
363
740
  "200": {
364
- "description": "Item search results",
741
+ "description": "Public catalog items",
365
742
  "content": {
366
743
  "application/json": {
367
744
  "schema": {
368
- "$ref": "#/components/schemas/SearchItemsResponseDto_Output"
745
+ "$ref": "#/components/schemas/CatalogItemsResponseDto_Output"
369
746
  }
370
747
  }
371
748
  }
@@ -429,7 +806,7 @@
429
806
  }
430
807
  }
431
808
  },
432
- "summary": "Search items with filters, sorting, and facets",
809
+ "summary": "List items in the public catalog",
433
810
  "security": [
434
811
  {
435
812
  "apiKey": []
@@ -439,44 +816,96 @@
439
816
  "x-lootlog-data": "public"
440
817
  }
441
818
  },
442
- "/all": {
819
+ "/public/catalog/npcs": {
443
820
  "get": {
444
- "tags": ["All"],
445
- "operationId": "AllController_searchAll",
821
+ "tags": ["Catalog"],
822
+ "operationId": "CatalogController_getNpcs",
446
823
  "parameters": [
447
824
  {
448
- "name": "limit",
825
+ "name": "search",
449
826
  "in": "query",
450
827
  "schema": {
451
- "type": "number",
452
- "default": 10
828
+ "type": "string"
453
829
  },
454
830
  "required": false
455
831
  },
456
832
  {
457
- "name": "search",
833
+ "name": "gameVersion",
458
834
  "in": "query",
459
835
  "schema": {
460
- "type": "string"
836
+ "type": "string",
837
+ "enum": ["en", "pl"],
838
+ "description": "Only entries of this game edition."
461
839
  },
462
840
  "required": false
463
841
  },
464
842
  {
465
- "name": "world",
843
+ "name": "ids",
466
844
  "in": "query",
467
845
  "schema": {
468
- "type": "string"
846
+ "type": "array",
847
+ "items": {
848
+ "type": "integer",
849
+ "minimum": -9007199254740991,
850
+ "maximum": 9007199254740991
851
+ }
852
+ },
853
+ "required": false,
854
+ "style": "form",
855
+ "explode": true
856
+ },
857
+ {
858
+ "name": "keys",
859
+ "in": "query",
860
+ "schema": {
861
+ "type": "array",
862
+ "items": {
863
+ "type": "string"
864
+ }
865
+ },
866
+ "required": false,
867
+ "style": "form",
868
+ "explode": true
869
+ },
870
+ {
871
+ "name": "types",
872
+ "in": "query",
873
+ "schema": {
874
+ "type": "array",
875
+ "items": {
876
+ "type": "string"
877
+ }
878
+ },
879
+ "required": false,
880
+ "style": "form",
881
+ "explode": true
882
+ },
883
+ {
884
+ "name": "limit",
885
+ "in": "query",
886
+ "schema": {
887
+ "type": "number",
888
+ "default": 24
889
+ },
890
+ "required": false
891
+ },
892
+ {
893
+ "name": "offset",
894
+ "in": "query",
895
+ "schema": {
896
+ "type": "number",
897
+ "default": 0
469
898
  },
470
899
  "required": false
471
900
  }
472
901
  ],
473
902
  "responses": {
474
903
  "200": {
475
- "description": "Aggregated search results across items, players, and NPCs",
904
+ "description": "Public catalog NPCs",
476
905
  "content": {
477
906
  "application/json": {
478
907
  "schema": {
479
- "$ref": "#/components/schemas/SearchAllResponseDto_Output"
908
+ "$ref": "#/components/schemas/CatalogNpcsResponseDto_Output"
480
909
  }
481
910
  }
482
911
  }
@@ -540,7 +969,7 @@
540
969
  }
541
970
  }
542
971
  },
543
- "summary": "Search across all categories",
972
+ "summary": "List NPCs in the public catalog",
544
973
  "security": [
545
974
  {
546
975
  "apiKey": []
@@ -619,6 +1048,11 @@
619
1048
  "id": {
620
1049
  "type": "number"
621
1050
  },
1051
+ "identityNamespace": {
1052
+ "type": "string",
1053
+ "enum": ["legacy", "runtime", "template"],
1054
+ "description": "Meaning of `id`: a Margonem template id, a runtime spawn id observed without a template, or an overloaded legacy id."
1055
+ },
622
1056
  "prof": {
623
1057
  "type": "string"
624
1058
  },
@@ -645,18 +1079,30 @@
645
1079
  "EVENT_HERO",
646
1080
  "COLOSSUS",
647
1081
  "TITAN",
1082
+ "HERO_TRACKER",
648
1083
  "NPC"
649
1084
  ]
650
1085
  },
651
1086
  "margonemType": {
652
1087
  "type": "number"
653
1088
  },
654
- "world": {
655
- "type": "string"
1089
+ "worlds": {
1090
+ "type": "array",
1091
+ "items": {
1092
+ "type": "string"
1093
+ },
1094
+ "description": "Worlds of the edition where this NPC was observed.",
1095
+ "default": []
1096
+ },
1097
+ "gameVersion": {
1098
+ "type": "string",
1099
+ "enum": ["en", "pl"],
1100
+ "description": "Margonem edition of the NPC: `pl` for margonem.pl, `en` for margonem.com. Equal ids in different editions are unrelated."
656
1101
  }
657
1102
  },
658
1103
  "required": [
659
1104
  "id",
1105
+ "identityNamespace",
660
1106
  "prof",
661
1107
  "icon",
662
1108
  "name",
@@ -664,7 +1110,8 @@
664
1110
  "wt",
665
1111
  "type",
666
1112
  "margonemType",
667
- "world"
1113
+ "worlds",
1114
+ "gameVersion"
668
1115
  ],
669
1116
  "description": "NPC search hit"
670
1117
  },
@@ -863,6 +1310,11 @@
863
1310
  "id": {
864
1311
  "type": "number"
865
1312
  },
1313
+ "identityNamespace": {
1314
+ "type": "string",
1315
+ "enum": ["legacy", "runtime", "template"],
1316
+ "description": "Meaning of `id`: a Margonem template id, a runtime spawn id observed without a template, or an overloaded legacy id."
1317
+ },
866
1318
  "prof": {
867
1319
  "type": "string"
868
1320
  },
@@ -889,18 +1341,30 @@
889
1341
  "EVENT_HERO",
890
1342
  "COLOSSUS",
891
1343
  "TITAN",
1344
+ "HERO_TRACKER",
892
1345
  "NPC"
893
1346
  ]
894
1347
  },
895
1348
  "margonemType": {
896
1349
  "type": "number"
897
1350
  },
898
- "world": {
899
- "type": "string"
1351
+ "worlds": {
1352
+ "type": "array",
1353
+ "items": {
1354
+ "type": "string"
1355
+ },
1356
+ "description": "Worlds of the edition where this NPC was observed.",
1357
+ "default": []
1358
+ },
1359
+ "gameVersion": {
1360
+ "type": "string",
1361
+ "enum": ["en", "pl"],
1362
+ "description": "Margonem edition of the NPC: `pl` for margonem.pl, `en` for margonem.com. Equal ids in different editions are unrelated."
900
1363
  }
901
1364
  },
902
1365
  "required": [
903
1366
  "id",
1367
+ "identityNamespace",
904
1368
  "prof",
905
1369
  "icon",
906
1370
  "name",
@@ -908,7 +1372,8 @@
908
1372
  "wt",
909
1373
  "type",
910
1374
  "margonemType",
911
- "world"
1375
+ "worlds",
1376
+ "gameVersion"
912
1377
  ],
913
1378
  "description": "NPC search hit"
914
1379
  }
@@ -916,6 +1381,209 @@
916
1381
  },
917
1382
  "required": ["items", "players", "npcs"],
918
1383
  "description": "Aggregated search results"
1384
+ },
1385
+ "CatalogItemsResponseDto_Output": {
1386
+ "type": "object",
1387
+ "properties": {
1388
+ "hits": {
1389
+ "type": "array",
1390
+ "items": {
1391
+ "$ref": "#/components/schemas/CatalogItemDto_Output"
1392
+ }
1393
+ },
1394
+ "estimatedTotalHits": {
1395
+ "type": "number"
1396
+ }
1397
+ },
1398
+ "required": ["hits", "estimatedTotalHits"],
1399
+ "description": "Public catalog items"
1400
+ },
1401
+ "CatalogItemDto_Output": {
1402
+ "type": "object",
1403
+ "properties": {
1404
+ "id": {
1405
+ "type": "number"
1406
+ },
1407
+ "name": {
1408
+ "type": "string"
1409
+ },
1410
+ "icon": {
1411
+ "type": "string"
1412
+ },
1413
+ "stat": {
1414
+ "type": "string"
1415
+ },
1416
+ "lvl": {
1417
+ "type": "number"
1418
+ },
1419
+ "rarity": {
1420
+ "nullable": true,
1421
+ "type": "string"
1422
+ },
1423
+ "type": {
1424
+ "nullable": true,
1425
+ "type": "string"
1426
+ },
1427
+ "droppedBy": {
1428
+ "type": "array",
1429
+ "items": {
1430
+ "$ref": "#/components/schemas/CatalogDropSourceDto_Output"
1431
+ }
1432
+ },
1433
+ "elasticLevel": {
1434
+ "type": "boolean",
1435
+ "description": "Whether the item takes the level of the character who loots it, so `lvl` and `stat` describe one of its levels."
1436
+ }
1437
+ },
1438
+ "required": [
1439
+ "id",
1440
+ "name",
1441
+ "icon",
1442
+ "stat",
1443
+ "lvl",
1444
+ "rarity",
1445
+ "type",
1446
+ "droppedBy",
1447
+ "elasticLevel"
1448
+ ],
1449
+ "description": "A Margonem item in the public catalog"
1450
+ },
1451
+ "CatalogDropSourceDto_Output": {
1452
+ "type": "object",
1453
+ "properties": {
1454
+ "key": {
1455
+ "type": "string",
1456
+ "description": "The NPC's catalog key, as `CatalogNpcDto_Output.key`."
1457
+ },
1458
+ "id": {
1459
+ "type": "number"
1460
+ },
1461
+ "name": {
1462
+ "type": "string"
1463
+ },
1464
+ "lvl": {
1465
+ "nullable": true,
1466
+ "type": "number"
1467
+ },
1468
+ "icon": {
1469
+ "nullable": true,
1470
+ "type": "string"
1471
+ },
1472
+ "type": {
1473
+ "nullable": true,
1474
+ "type": "string"
1475
+ },
1476
+ "retired": {
1477
+ "type": "boolean",
1478
+ "description": "Whether the NPC no longer drops the item: Lootlog has recorded its loot far too often since the item's last drop for the gap to be chance."
1479
+ }
1480
+ },
1481
+ "required": ["key", "id", "name", "lvl", "icon", "type", "retired"],
1482
+ "description": "An NPC an item drops from"
1483
+ },
1484
+ "CatalogNpcsResponseDto_Output": {
1485
+ "type": "object",
1486
+ "properties": {
1487
+ "hits": {
1488
+ "type": "array",
1489
+ "items": {
1490
+ "$ref": "#/components/schemas/CatalogNpcDto_Output"
1491
+ }
1492
+ },
1493
+ "estimatedTotalHits": {
1494
+ "type": "number"
1495
+ }
1496
+ },
1497
+ "required": ["hits", "estimatedTotalHits"],
1498
+ "description": "Public catalog NPCs"
1499
+ },
1500
+ "CatalogNpcDto_Output": {
1501
+ "type": "object",
1502
+ "properties": {
1503
+ "key": {
1504
+ "type": "string",
1505
+ "description": "Stable catalog key of the NPC, used to link its page."
1506
+ },
1507
+ "id": {
1508
+ "type": "number"
1509
+ },
1510
+ "name": {
1511
+ "type": "string"
1512
+ },
1513
+ "icon": {
1514
+ "type": "string"
1515
+ },
1516
+ "lvl": {
1517
+ "type": "number"
1518
+ },
1519
+ "type": {
1520
+ "type": "string",
1521
+ "enum": [
1522
+ "COMMON",
1523
+ "ELITE",
1524
+ "ELITE2",
1525
+ "ELITE3",
1526
+ "HERO",
1527
+ "EVENT_HERO",
1528
+ "COLOSSUS",
1529
+ "TITAN",
1530
+ "HERO_TRACKER",
1531
+ "NPC"
1532
+ ]
1533
+ },
1534
+ "gameVersion": {
1535
+ "type": "string",
1536
+ "enum": ["en", "pl"]
1537
+ },
1538
+ "locations": {
1539
+ "type": "array",
1540
+ "items": {
1541
+ "type": "object",
1542
+ "properties": {
1543
+ "map": {
1544
+ "type": "string",
1545
+ "description": "The map's name."
1546
+ },
1547
+ "share": {
1548
+ "type": "number",
1549
+ "description": "The share of the NPC's latest recorded fights on the map, from 0 to 1, rounded to a hundredth."
1550
+ }
1551
+ },
1552
+ "required": ["map", "share"]
1553
+ },
1554
+ "description": "Maps the NPC is fought on, most fought first, from its latest 1000 recorded fights; maps under 1% of them are left out. Lootlog recomputes them daily, so an NPC first seen today may have none yet."
1555
+ },
1556
+ "formerLevels": {
1557
+ "type": "array",
1558
+ "items": {
1559
+ "type": "object",
1560
+ "properties": {
1561
+ "lvl": {
1562
+ "type": "number",
1563
+ "description": "The level it had."
1564
+ },
1565
+ "until": {
1566
+ "type": "string",
1567
+ "description": "The UTC day, as `YYYY-MM-DD`, its next level was first recorded."
1568
+ }
1569
+ },
1570
+ "required": ["lvl", "until"]
1571
+ },
1572
+ "description": "Levels the NPC had before the game changed it, oldest first. Lootlog recomputes them daily from recorded fights and leaves out NPCs whose level follows the player's."
1573
+ }
1574
+ },
1575
+ "required": [
1576
+ "key",
1577
+ "id",
1578
+ "name",
1579
+ "icon",
1580
+ "lvl",
1581
+ "type",
1582
+ "gameVersion",
1583
+ "locations",
1584
+ "formerLevels"
1585
+ ],
1586
+ "description": "A Margonem NPC in the public catalog"
919
1587
  }
920
1588
  }
921
1589
  }