@blizzard-api/hs 0.1.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.
- package/README.md +75 -0
- package/dist/index.cjs +113 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +310 -0
- package/dist/index.d.ts +310 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# @blizzard-api/hs
|
|
2
|
+
|
|
3
|
+
This package aims to make it easier for you to integrate with the Blizzard Battle.net API, specifically for Diablo 3.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm i @blizzard-api/core @blizzard-api/hs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
You can get paths, namespaces, parameters and more for a specific endpoint by calling it from the `hs` export.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { hs } from "@blizzard-api/hs"
|
|
17
|
+
//or
|
|
18
|
+
import hs from "@blizzard-api/hs"
|
|
19
|
+
|
|
20
|
+
const season = hs.allMetadata(123);
|
|
21
|
+
^ Resource<AllMetadataResponse>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
If you don't want to use the exported hs object, you can also access the functions directly:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { allMetadata } from "@blizzard-api/hs"
|
|
28
|
+
|
|
29
|
+
const seasonI = season(123);
|
|
30
|
+
^ Resource<AllMetadataResponse>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Types
|
|
34
|
+
|
|
35
|
+
If you need the response types, they are also exported with "Response" appended, so to get the response type from the above code, you can import it like this:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import type { SeasonResponse } from '@blizzard-api/hs';
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If you simply want to use the existing object, you can use the helper, `ExtractResourceType`, from `@blizzard-api/core` like so:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import { hs } from "@blizzard-api/hs"
|
|
45
|
+
|
|
46
|
+
const season = hs.allMetadata();
|
|
47
|
+
^ Resource<AllMetadataResponse>
|
|
48
|
+
|
|
49
|
+
type AllMetadataResponse = ExtractResourceType<typeof season>;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Notes on Types
|
|
53
|
+
|
|
54
|
+
The types are manually created from using the Blizzard API documentation, and are as accurate as possible with smoke testing each endpoint. However, no-one is perfect so there is likely to be some discrepancies. If you encounter any issues with the types from this package, please open an issue or a pull request.
|
|
55
|
+
|
|
56
|
+
### Client
|
|
57
|
+
|
|
58
|
+
While this package is made to function on it's own, it performs even better when combined with `@blizzard-api/client` where you can easily request data combining the two libraries.
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
import { createBlizzardApiClient } from '@blizzard-api/client';
|
|
62
|
+
import { hs } from '@blizzard-api/hs';
|
|
63
|
+
|
|
64
|
+
const client = await createBlizzardApiClient({
|
|
65
|
+
key: 'environment.blizzardClientId',
|
|
66
|
+
secret: 'environment.blizzardClientSecret',
|
|
67
|
+
origin: 'eu',
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
//Response will automatically be typed with the appropriate values
|
|
71
|
+
const response = await client.sendRequest(hs.allMetadata());
|
|
72
|
+
|
|
73
|
+
console.log(response.data);
|
|
74
|
+
^ typeof AllMetadataResponse
|
|
75
|
+
```
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/card-backs/card-backs.ts
|
|
6
|
+
function cardBackSearch(options) {
|
|
7
|
+
return {
|
|
8
|
+
parameters: options,
|
|
9
|
+
path: "hearthstone/cardbacks"
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function fetchOneCardBack(id, locale) {
|
|
13
|
+
return {
|
|
14
|
+
parameters: { locale },
|
|
15
|
+
path: `hearthstone/cardbacks/${id}`
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// src/cards/cards.ts
|
|
20
|
+
function cardSearch(options) {
|
|
21
|
+
let attack = void 0;
|
|
22
|
+
let defaultMercenary = void 0;
|
|
23
|
+
let health = void 0;
|
|
24
|
+
let mercenaryId = void 0;
|
|
25
|
+
if (options.attack) {
|
|
26
|
+
attack = Array.isArray(options.attack) ? options.attack.join(",") : `${options.attack}`;
|
|
27
|
+
}
|
|
28
|
+
if (options.defaultMercenary) {
|
|
29
|
+
defaultMercenary = Array.isArray(options.defaultMercenary) ? options.defaultMercenary.join(",") : `${options.defaultMercenary}`;
|
|
30
|
+
}
|
|
31
|
+
if (options.health) {
|
|
32
|
+
health = Array.isArray(options.health) ? options.health.join(",") : `${options.health}`;
|
|
33
|
+
}
|
|
34
|
+
if (options.mercenaryId) {
|
|
35
|
+
mercenaryId = Array.isArray(options.mercenaryId) ? options.mercenaryId.join(",") : `${options.mercenaryId}`;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
parameters: {
|
|
39
|
+
...options,
|
|
40
|
+
attack,
|
|
41
|
+
defaultMercenary,
|
|
42
|
+
health,
|
|
43
|
+
mercenaryId
|
|
44
|
+
},
|
|
45
|
+
path: "hearthstone/cards"
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function fetchOneCard(id, options) {
|
|
49
|
+
const { gameMode = "constructed", locale } = options ?? {};
|
|
50
|
+
return {
|
|
51
|
+
parameters: { gameMode, locale },
|
|
52
|
+
path: `hearthstone/cards/${id}`
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// src/decks/decks.ts
|
|
57
|
+
function getDeck(options) {
|
|
58
|
+
if ("code" in options) {
|
|
59
|
+
return {
|
|
60
|
+
parameters: {
|
|
61
|
+
code: encodeURI(options.code)
|
|
62
|
+
},
|
|
63
|
+
path: "hearthstone/deck"
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
parameters: {
|
|
68
|
+
hero: options.hero,
|
|
69
|
+
ids: options.ids?.join(",")
|
|
70
|
+
},
|
|
71
|
+
path: "hearthstone/deck"
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// src/metadata/metadata.ts
|
|
76
|
+
function allMetadata() {
|
|
77
|
+
return {
|
|
78
|
+
path: "hearthstone/metadata"
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function specificMetadata(type) {
|
|
82
|
+
return {
|
|
83
|
+
path: `hearthstone/metadata/${type}`
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// src/index.ts
|
|
88
|
+
var hs = {
|
|
89
|
+
//Card Backs
|
|
90
|
+
cardBackSearch,
|
|
91
|
+
fetchOneCardBack,
|
|
92
|
+
//Cards
|
|
93
|
+
cardSearch,
|
|
94
|
+
fetchOneCard,
|
|
95
|
+
//Decks
|
|
96
|
+
getDeck,
|
|
97
|
+
//Metadata
|
|
98
|
+
allMetadata,
|
|
99
|
+
specificMetadata
|
|
100
|
+
};
|
|
101
|
+
var src_default = hs;
|
|
102
|
+
|
|
103
|
+
exports.allMetadata = allMetadata;
|
|
104
|
+
exports.cardBackSearch = cardBackSearch;
|
|
105
|
+
exports.cardSearch = cardSearch;
|
|
106
|
+
exports.default = src_default;
|
|
107
|
+
exports.fetchOneCard = fetchOneCard;
|
|
108
|
+
exports.fetchOneCardBack = fetchOneCardBack;
|
|
109
|
+
exports.getDeck = getDeck;
|
|
110
|
+
exports.hs = hs;
|
|
111
|
+
exports.specificMetadata = specificMetadata;
|
|
112
|
+
//# sourceMappingURL=index.cjs.map
|
|
113
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/card-backs/card-backs.ts","../src/cards/cards.ts","../src/decks/decks.ts","../src/metadata/metadata.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Locales, Resource } from '@blizzard-api/core';\r\nimport type { CardBackSearchParameters, CardBackSearchResponse, SingleCardBackSearchResponse } from './types';\r\n\r\nexport function cardBackSearch(\r\n options: CardBackSearchParameters,\r\n): Resource<CardBackSearchResponse, CardBackSearchParameters> {\r\n return {\r\n parameters: options,\r\n path: 'hearthstone/cardbacks',\r\n };\r\n}\r\n\r\nexport function fetchOneCardBack(\r\n id: string,\r\n locale?: Locales,\r\n): Resource<SingleCardBackSearchResponse, { locale?: Locales }> {\r\n return {\r\n parameters: { locale },\r\n path: `hearthstone/cardbacks/${id}`,\r\n };\r\n}\r\n","import type { Locales, Resource } from '@blizzard-api/core';\r\nimport type { GameMode } from '../base';\r\nimport type {\r\n BlizzardCardSearchParameters,\r\n CardSearchParameters,\r\n CardSearchResponse,\r\n FetchOneCardResponse,\r\n} from './types';\r\n\r\nexport function cardSearch(options: CardSearchParameters): Resource<CardSearchResponse, BlizzardCardSearchParameters> {\r\n let attack: string | undefined = undefined;\r\n let defaultMercenary: string | undefined = undefined;\r\n let health: string | undefined = undefined;\r\n let mercenaryId: string | undefined = undefined;\r\n\r\n if (options.attack) {\r\n attack = Array.isArray(options.attack) ? options.attack.join(',') : `${options.attack}`;\r\n }\r\n if (options.defaultMercenary) {\r\n defaultMercenary = Array.isArray(options.defaultMercenary)\r\n ? options.defaultMercenary.join(',')\r\n : `${options.defaultMercenary}`;\r\n }\r\n if (options.health) {\r\n health = Array.isArray(options.health) ? options.health.join(',') : `${options.health}`;\r\n }\r\n if (options.mercenaryId) {\r\n mercenaryId = Array.isArray(options.mercenaryId) ? options.mercenaryId.join(',') : `${options.mercenaryId}`;\r\n }\r\n\r\n return {\r\n parameters: {\r\n ...options,\r\n attack,\r\n defaultMercenary,\r\n health,\r\n mercenaryId,\r\n },\r\n path: 'hearthstone/cards',\r\n };\r\n}\r\n\r\nexport function fetchOneCard(\r\n id: string,\r\n options?: {\r\n gameMode?: GameMode;\r\n locale?: Locales;\r\n },\r\n): Resource<FetchOneCardResponse, { gameMode?: GameMode; locale?: Locales }> {\r\n const { gameMode = 'constructed', locale } = options ?? {};\r\n return {\r\n parameters: { gameMode, locale },\r\n path: `hearthstone/cards/${id}`,\r\n };\r\n}\r\n","import type { Resource } from '@blizzard-api/core';\r\nimport type { DeckResponse, DeckSearchParameters } from './types';\r\n\r\nexport function getDeck(\r\n options: { code: string } | { hero?: string; ids: Array<string> },\r\n): Resource<DeckResponse, DeckSearchParameters> {\r\n if ('code' in options) {\r\n return {\r\n parameters: {\r\n code: encodeURI(options.code),\r\n },\r\n path: 'hearthstone/deck',\r\n };\r\n }\r\n\r\n return {\r\n parameters: {\r\n hero: options.hero,\r\n ids: options.ids?.join(','),\r\n },\r\n path: 'hearthstone/deck',\r\n };\r\n}\r\n","import type { Resource } from '@blizzard-api/core';\r\nimport type { AllMetadataResponse, SpecificMetadataResponse } from './types';\r\n\r\nexport function allMetadata(): Resource<AllMetadataResponse> {\r\n return {\r\n path: 'hearthstone/metadata',\r\n };\r\n}\r\n\r\nexport function specificMetadata(\r\n type: 'classes' | 'keywords' | 'minionTypes' | 'rarities' | 'setGroups' | 'sets' | 'types',\r\n): Resource<SpecificMetadataResponse> {\r\n return {\r\n path: `hearthstone/metadata/${type}`,\r\n };\r\n}\r\n","import { cardBackSearch, fetchOneCardBack } from './card-backs/card-backs';\r\nimport { cardSearch, fetchOneCard } from './cards/cards';\r\nimport { getDeck } from './decks/decks';\r\nimport { allMetadata, specificMetadata } from './metadata/metadata';\r\n\r\nexport const hs = {\r\n //Card Backs\r\n cardBackSearch,\r\n fetchOneCardBack,\r\n //Cards\r\n cardSearch,\r\n fetchOneCard,\r\n //Decks\r\n getDeck,\r\n //Metadata\r\n allMetadata,\r\n specificMetadata,\r\n};\r\n\r\nexport default hs;\r\n\r\n//Card Backs\r\nexport * from './card-backs/card-backs';\r\nexport type * from './card-backs/types';\r\n//Cards\r\nexport * from './cards/cards';\r\nexport type * from './cards/types';\r\n//Decks\r\nexport * from './decks/decks';\r\nexport type * from './decks/types';\r\n//Metadata\r\nexport * from './metadata/metadata';\r\nexport type * from './metadata/types';\r\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { Locales, Resource } from '@blizzard-api/core';
|
|
2
|
+
|
|
3
|
+
type SortDirection = 'asc' | 'desc';
|
|
4
|
+
type SortOptions = 'attack' | 'class' | 'dataAdded' | 'groupByClass' | 'health' | 'manaCost' | 'name';
|
|
5
|
+
type SearchSortOption = `${SortOptions}:${SortDirection}`;
|
|
6
|
+
type GameMode$1 = 'arena' | 'battlegrounds' | 'classic' | 'constructed' | 'duels' | 'mercenaries' | 'standard';
|
|
7
|
+
|
|
8
|
+
interface CardBackSearchResponse {
|
|
9
|
+
cardBacks: Array<SingleCardBackSearchResponse>;
|
|
10
|
+
cardCount: number;
|
|
11
|
+
page: number;
|
|
12
|
+
pageCount: number;
|
|
13
|
+
}
|
|
14
|
+
interface SingleCardBackSearchResponse {
|
|
15
|
+
id: number;
|
|
16
|
+
image: string;
|
|
17
|
+
name: Record<Locales, string> | string;
|
|
18
|
+
slug: string;
|
|
19
|
+
sortCategory: number;
|
|
20
|
+
text: Record<Locales, string> | string;
|
|
21
|
+
}
|
|
22
|
+
interface CardBackSearchParameters {
|
|
23
|
+
cardBackCategory?: 'achieve' | 'base' | 'blizzard' | 'esports' | 'events' | 'fireside' | 'game_license' | 'golden' | 'heroes' | 'legend' | 'pre_purchase' | 'promotion' | 'season';
|
|
24
|
+
locale?: Locales;
|
|
25
|
+
page?: number;
|
|
26
|
+
pageSize?: number;
|
|
27
|
+
sort?: SearchSortOption;
|
|
28
|
+
textFilter?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
declare function cardBackSearch(options: CardBackSearchParameters): Resource<CardBackSearchResponse, CardBackSearchParameters>;
|
|
32
|
+
declare function fetchOneCardBack(id: string, locale?: Locales): Resource<SingleCardBackSearchResponse, {
|
|
33
|
+
locale?: Locales;
|
|
34
|
+
}>;
|
|
35
|
+
|
|
36
|
+
interface CardSearchResponse {
|
|
37
|
+
cardCount: number;
|
|
38
|
+
cards: Array<Card$1>;
|
|
39
|
+
page: number;
|
|
40
|
+
pageCount: number;
|
|
41
|
+
}
|
|
42
|
+
interface Card$1 {
|
|
43
|
+
artistName: null | string;
|
|
44
|
+
attack: number;
|
|
45
|
+
cardSetId: number;
|
|
46
|
+
cardTypeId: number;
|
|
47
|
+
classId: null | number;
|
|
48
|
+
collectible: number;
|
|
49
|
+
cropImage: null | string;
|
|
50
|
+
flavorText: string;
|
|
51
|
+
health: number;
|
|
52
|
+
id: number;
|
|
53
|
+
image: string;
|
|
54
|
+
imageGold: string;
|
|
55
|
+
isZilliaxCosmeticModule: boolean;
|
|
56
|
+
isZilliaxFunctionalModule: boolean;
|
|
57
|
+
manaCost: number;
|
|
58
|
+
mercenaryHero: MercenaryHero;
|
|
59
|
+
minionTypeId: number;
|
|
60
|
+
multiClassIds: Array<number>;
|
|
61
|
+
multiTypeIds?: Array<number>;
|
|
62
|
+
name: string;
|
|
63
|
+
rarityId: number;
|
|
64
|
+
slug: string;
|
|
65
|
+
text: string;
|
|
66
|
+
}
|
|
67
|
+
interface MercenaryHero {
|
|
68
|
+
collectible: number;
|
|
69
|
+
craftingCost: number;
|
|
70
|
+
default: number;
|
|
71
|
+
faction: null | number;
|
|
72
|
+
mercId: number;
|
|
73
|
+
rarity: number;
|
|
74
|
+
roleId: number;
|
|
75
|
+
statsByLevel: Record<string, StatsByLevel>;
|
|
76
|
+
}
|
|
77
|
+
interface StatsByLevel {
|
|
78
|
+
attack: number;
|
|
79
|
+
health: number;
|
|
80
|
+
}
|
|
81
|
+
interface CardSearchParameters extends BaseSearchParameters {
|
|
82
|
+
attack?: Array<number> | number;
|
|
83
|
+
defaultMercenary?: Array<number> | number;
|
|
84
|
+
health?: Array<number> | number;
|
|
85
|
+
mercenaryId?: Array<number> | number;
|
|
86
|
+
}
|
|
87
|
+
interface BlizzardCardSearchParameters extends BaseSearchParameters {
|
|
88
|
+
attack?: string;
|
|
89
|
+
defaultMercenary?: string;
|
|
90
|
+
health?: string;
|
|
91
|
+
mercenaryId?: string;
|
|
92
|
+
}
|
|
93
|
+
interface BaseSearchParameters {
|
|
94
|
+
gameMode?: GameMode$1;
|
|
95
|
+
locale?: Locales;
|
|
96
|
+
mercenaryRole?: string;
|
|
97
|
+
minionType?: string;
|
|
98
|
+
page?: number;
|
|
99
|
+
pageSize?: number;
|
|
100
|
+
sort?: 'attack:asc' | 'attack:desc' | 'health:asc' | 'health:desc' | 'name:asc' | 'name:desc' | 'tier:asc' | 'tier:desc';
|
|
101
|
+
textFilter?: string;
|
|
102
|
+
tier?: 'hero' | 1 | 2 | 3 | 4 | 5 | 6;
|
|
103
|
+
}
|
|
104
|
+
interface FetchOneCardResponse {
|
|
105
|
+
artistName: string;
|
|
106
|
+
attack: number;
|
|
107
|
+
cardSetId: number;
|
|
108
|
+
cardTypeId: number;
|
|
109
|
+
classId: number;
|
|
110
|
+
collectible: number;
|
|
111
|
+
cropImage: string;
|
|
112
|
+
flavorText: Record<Locales, string> | string;
|
|
113
|
+
health: number;
|
|
114
|
+
id: number;
|
|
115
|
+
image: Record<Locales, string> | string;
|
|
116
|
+
imageGold: Record<Locales, string> | string;
|
|
117
|
+
isZilliaxCosmeticModule: boolean;
|
|
118
|
+
isZilliaxFunctionalModule: boolean;
|
|
119
|
+
keywordIds: Array<number>;
|
|
120
|
+
manaCost: number;
|
|
121
|
+
multiClassIds: Array<number>;
|
|
122
|
+
name: Record<Locales, string> | string;
|
|
123
|
+
rarityId: number;
|
|
124
|
+
slug: string;
|
|
125
|
+
text: Record<Locales, string> | string;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
declare function cardSearch(options: CardSearchParameters): Resource<CardSearchResponse, BlizzardCardSearchParameters>;
|
|
129
|
+
declare function fetchOneCard(id: string, options?: {
|
|
130
|
+
gameMode?: GameMode$1;
|
|
131
|
+
locale?: Locales;
|
|
132
|
+
}): Resource<FetchOneCardResponse, {
|
|
133
|
+
gameMode?: GameMode$1;
|
|
134
|
+
locale?: Locales;
|
|
135
|
+
}>;
|
|
136
|
+
|
|
137
|
+
type DeckSearchParameters = {
|
|
138
|
+
code: string;
|
|
139
|
+
} | {
|
|
140
|
+
hero?: string;
|
|
141
|
+
ids: string;
|
|
142
|
+
};
|
|
143
|
+
interface DeckResponse {
|
|
144
|
+
cardCount: number;
|
|
145
|
+
cards: Array<Card>;
|
|
146
|
+
class: Class$1;
|
|
147
|
+
deckCode: string;
|
|
148
|
+
format: string;
|
|
149
|
+
hero: Hero;
|
|
150
|
+
heroPower: Hero;
|
|
151
|
+
version: number;
|
|
152
|
+
}
|
|
153
|
+
interface Card {
|
|
154
|
+
armor?: number;
|
|
155
|
+
artistName: string;
|
|
156
|
+
attack?: number;
|
|
157
|
+
bannedFromSideboard?: number;
|
|
158
|
+
cardSetId: number;
|
|
159
|
+
cardTypeId: number;
|
|
160
|
+
childIds?: Array<number>;
|
|
161
|
+
classId: number;
|
|
162
|
+
collectible: number;
|
|
163
|
+
cropImage: string;
|
|
164
|
+
flavorText: string;
|
|
165
|
+
health?: number;
|
|
166
|
+
id: number;
|
|
167
|
+
image: string;
|
|
168
|
+
imageGold: string;
|
|
169
|
+
isZilliaxCosmeticModule: boolean;
|
|
170
|
+
isZilliaxFunctionalModule: boolean;
|
|
171
|
+
keywordIds?: Array<number>;
|
|
172
|
+
manaCost: number;
|
|
173
|
+
minionTypeId?: number;
|
|
174
|
+
multiClassIds: Array<number>;
|
|
175
|
+
name: string;
|
|
176
|
+
rarityId: number;
|
|
177
|
+
slug: string;
|
|
178
|
+
spellSchoolId?: number;
|
|
179
|
+
text: string;
|
|
180
|
+
}
|
|
181
|
+
interface Class$1 {
|
|
182
|
+
id: number;
|
|
183
|
+
name: string;
|
|
184
|
+
slug: string;
|
|
185
|
+
}
|
|
186
|
+
interface Hero {
|
|
187
|
+
artistName: null | string;
|
|
188
|
+
cardSetId: number;
|
|
189
|
+
cardTypeId: number;
|
|
190
|
+
classId: number;
|
|
191
|
+
collectible: number;
|
|
192
|
+
cropImage: null;
|
|
193
|
+
flavorText: string;
|
|
194
|
+
health?: number;
|
|
195
|
+
id: number;
|
|
196
|
+
image: string;
|
|
197
|
+
imageGold: string;
|
|
198
|
+
isZilliaxCosmeticModule: boolean;
|
|
199
|
+
isZilliaxFunctionalModule: boolean;
|
|
200
|
+
manaCost: number;
|
|
201
|
+
multiClassIds: Array<number>;
|
|
202
|
+
name: string;
|
|
203
|
+
parentId: number;
|
|
204
|
+
rarityId: null | number;
|
|
205
|
+
slug: string;
|
|
206
|
+
text: string;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
declare function getDeck(options: {
|
|
210
|
+
code: string;
|
|
211
|
+
} | {
|
|
212
|
+
hero?: string;
|
|
213
|
+
ids: Array<string>;
|
|
214
|
+
}): Resource<DeckResponse, DeckSearchParameters>;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Base record interface containing name and id properties that often appear together in Blizzard API responses.
|
|
218
|
+
*/
|
|
219
|
+
interface NameId {
|
|
220
|
+
id: number;
|
|
221
|
+
name: string;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
interface AllMetadataResponse {
|
|
225
|
+
arenaIds: Array<number>;
|
|
226
|
+
bgGameModes: Array<GameMode>;
|
|
227
|
+
cardBackCategories: Array<GameMode>;
|
|
228
|
+
classes: Array<Class>;
|
|
229
|
+
filterableFields: Array<string>;
|
|
230
|
+
gameModes: Array<GameMode>;
|
|
231
|
+
keywords: Array<Keyword>;
|
|
232
|
+
mercenaryFactions: Array<GameMode>;
|
|
233
|
+
mercenaryRoles: Array<GameMode>;
|
|
234
|
+
minionTypes: Array<GameMode>;
|
|
235
|
+
numericFields: Array<string>;
|
|
236
|
+
rarities: Array<Rarity>;
|
|
237
|
+
setGroups: Array<SetGroup>;
|
|
238
|
+
sets: Array<Set>;
|
|
239
|
+
spellSchools: Array<GameMode>;
|
|
240
|
+
types: Array<GameMode>;
|
|
241
|
+
}
|
|
242
|
+
interface GameMode extends NameId {
|
|
243
|
+
gameModes?: Array<number>;
|
|
244
|
+
slug: string;
|
|
245
|
+
}
|
|
246
|
+
interface Class {
|
|
247
|
+
alternateHeroCardIds?: Array<number>;
|
|
248
|
+
cardId?: number;
|
|
249
|
+
heroPowerCardId?: number;
|
|
250
|
+
id: number;
|
|
251
|
+
name: string;
|
|
252
|
+
slug: string;
|
|
253
|
+
}
|
|
254
|
+
interface Keyword extends NameId {
|
|
255
|
+
gameModes: Array<number>;
|
|
256
|
+
refText: string;
|
|
257
|
+
slug: string;
|
|
258
|
+
text: string;
|
|
259
|
+
}
|
|
260
|
+
interface Rarity extends NameId {
|
|
261
|
+
craftingCost: Array<null | number>;
|
|
262
|
+
dustValue: Array<null | number>;
|
|
263
|
+
slug: string;
|
|
264
|
+
}
|
|
265
|
+
interface SetGroup {
|
|
266
|
+
cardSets: Array<string>;
|
|
267
|
+
icon?: string;
|
|
268
|
+
name: string;
|
|
269
|
+
slug: string;
|
|
270
|
+
standard?: boolean;
|
|
271
|
+
svg?: null | string;
|
|
272
|
+
year?: number;
|
|
273
|
+
yearRange?: string;
|
|
274
|
+
}
|
|
275
|
+
type SetType = '' | 'adventure' | 'base' | 'expansion';
|
|
276
|
+
interface Set extends NameId {
|
|
277
|
+
aliasSetIds?: Array<number>;
|
|
278
|
+
collectibleCount: number;
|
|
279
|
+
collectibleRevealedCount: number;
|
|
280
|
+
hyped: boolean;
|
|
281
|
+
nonCollectibleCount: number;
|
|
282
|
+
nonCollectibleRevealedCount: number;
|
|
283
|
+
slug: string;
|
|
284
|
+
type: SetType;
|
|
285
|
+
}
|
|
286
|
+
interface SpecificMetadataResponse extends NameId {
|
|
287
|
+
aliasSetIds?: Array<number>;
|
|
288
|
+
collectibleCount: number;
|
|
289
|
+
collectibleRevealedCount: number;
|
|
290
|
+
hyped: boolean;
|
|
291
|
+
nonCollectibleCount: number;
|
|
292
|
+
nonCollectibleRevealedCount: number;
|
|
293
|
+
slug: string;
|
|
294
|
+
type: SetType;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
declare function allMetadata(): Resource<AllMetadataResponse>;
|
|
298
|
+
declare function specificMetadata(type: 'classes' | 'keywords' | 'minionTypes' | 'rarities' | 'setGroups' | 'sets' | 'types'): Resource<SpecificMetadataResponse>;
|
|
299
|
+
|
|
300
|
+
declare const hs: {
|
|
301
|
+
cardBackSearch: typeof cardBackSearch;
|
|
302
|
+
fetchOneCardBack: typeof fetchOneCardBack;
|
|
303
|
+
cardSearch: typeof cardSearch;
|
|
304
|
+
fetchOneCard: typeof fetchOneCard;
|
|
305
|
+
getDeck: typeof getDeck;
|
|
306
|
+
allMetadata: typeof allMetadata;
|
|
307
|
+
specificMetadata: typeof specificMetadata;
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
export { type AllMetadataResponse, type BlizzardCardSearchParameters, type CardBackSearchParameters, type CardBackSearchResponse, type CardSearchParameters, type CardSearchResponse, type DeckResponse, type DeckSearchParameters, type FetchOneCardResponse, type SingleCardBackSearchResponse, type SpecificMetadataResponse, allMetadata, cardBackSearch, cardSearch, hs as default, fetchOneCard, fetchOneCardBack, getDeck, hs, specificMetadata };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { Locales, Resource } from '@blizzard-api/core';
|
|
2
|
+
|
|
3
|
+
type SortDirection = 'asc' | 'desc';
|
|
4
|
+
type SortOptions = 'attack' | 'class' | 'dataAdded' | 'groupByClass' | 'health' | 'manaCost' | 'name';
|
|
5
|
+
type SearchSortOption = `${SortOptions}:${SortDirection}`;
|
|
6
|
+
type GameMode$1 = 'arena' | 'battlegrounds' | 'classic' | 'constructed' | 'duels' | 'mercenaries' | 'standard';
|
|
7
|
+
|
|
8
|
+
interface CardBackSearchResponse {
|
|
9
|
+
cardBacks: Array<SingleCardBackSearchResponse>;
|
|
10
|
+
cardCount: number;
|
|
11
|
+
page: number;
|
|
12
|
+
pageCount: number;
|
|
13
|
+
}
|
|
14
|
+
interface SingleCardBackSearchResponse {
|
|
15
|
+
id: number;
|
|
16
|
+
image: string;
|
|
17
|
+
name: Record<Locales, string> | string;
|
|
18
|
+
slug: string;
|
|
19
|
+
sortCategory: number;
|
|
20
|
+
text: Record<Locales, string> | string;
|
|
21
|
+
}
|
|
22
|
+
interface CardBackSearchParameters {
|
|
23
|
+
cardBackCategory?: 'achieve' | 'base' | 'blizzard' | 'esports' | 'events' | 'fireside' | 'game_license' | 'golden' | 'heroes' | 'legend' | 'pre_purchase' | 'promotion' | 'season';
|
|
24
|
+
locale?: Locales;
|
|
25
|
+
page?: number;
|
|
26
|
+
pageSize?: number;
|
|
27
|
+
sort?: SearchSortOption;
|
|
28
|
+
textFilter?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
declare function cardBackSearch(options: CardBackSearchParameters): Resource<CardBackSearchResponse, CardBackSearchParameters>;
|
|
32
|
+
declare function fetchOneCardBack(id: string, locale?: Locales): Resource<SingleCardBackSearchResponse, {
|
|
33
|
+
locale?: Locales;
|
|
34
|
+
}>;
|
|
35
|
+
|
|
36
|
+
interface CardSearchResponse {
|
|
37
|
+
cardCount: number;
|
|
38
|
+
cards: Array<Card$1>;
|
|
39
|
+
page: number;
|
|
40
|
+
pageCount: number;
|
|
41
|
+
}
|
|
42
|
+
interface Card$1 {
|
|
43
|
+
artistName: null | string;
|
|
44
|
+
attack: number;
|
|
45
|
+
cardSetId: number;
|
|
46
|
+
cardTypeId: number;
|
|
47
|
+
classId: null | number;
|
|
48
|
+
collectible: number;
|
|
49
|
+
cropImage: null | string;
|
|
50
|
+
flavorText: string;
|
|
51
|
+
health: number;
|
|
52
|
+
id: number;
|
|
53
|
+
image: string;
|
|
54
|
+
imageGold: string;
|
|
55
|
+
isZilliaxCosmeticModule: boolean;
|
|
56
|
+
isZilliaxFunctionalModule: boolean;
|
|
57
|
+
manaCost: number;
|
|
58
|
+
mercenaryHero: MercenaryHero;
|
|
59
|
+
minionTypeId: number;
|
|
60
|
+
multiClassIds: Array<number>;
|
|
61
|
+
multiTypeIds?: Array<number>;
|
|
62
|
+
name: string;
|
|
63
|
+
rarityId: number;
|
|
64
|
+
slug: string;
|
|
65
|
+
text: string;
|
|
66
|
+
}
|
|
67
|
+
interface MercenaryHero {
|
|
68
|
+
collectible: number;
|
|
69
|
+
craftingCost: number;
|
|
70
|
+
default: number;
|
|
71
|
+
faction: null | number;
|
|
72
|
+
mercId: number;
|
|
73
|
+
rarity: number;
|
|
74
|
+
roleId: number;
|
|
75
|
+
statsByLevel: Record<string, StatsByLevel>;
|
|
76
|
+
}
|
|
77
|
+
interface StatsByLevel {
|
|
78
|
+
attack: number;
|
|
79
|
+
health: number;
|
|
80
|
+
}
|
|
81
|
+
interface CardSearchParameters extends BaseSearchParameters {
|
|
82
|
+
attack?: Array<number> | number;
|
|
83
|
+
defaultMercenary?: Array<number> | number;
|
|
84
|
+
health?: Array<number> | number;
|
|
85
|
+
mercenaryId?: Array<number> | number;
|
|
86
|
+
}
|
|
87
|
+
interface BlizzardCardSearchParameters extends BaseSearchParameters {
|
|
88
|
+
attack?: string;
|
|
89
|
+
defaultMercenary?: string;
|
|
90
|
+
health?: string;
|
|
91
|
+
mercenaryId?: string;
|
|
92
|
+
}
|
|
93
|
+
interface BaseSearchParameters {
|
|
94
|
+
gameMode?: GameMode$1;
|
|
95
|
+
locale?: Locales;
|
|
96
|
+
mercenaryRole?: string;
|
|
97
|
+
minionType?: string;
|
|
98
|
+
page?: number;
|
|
99
|
+
pageSize?: number;
|
|
100
|
+
sort?: 'attack:asc' | 'attack:desc' | 'health:asc' | 'health:desc' | 'name:asc' | 'name:desc' | 'tier:asc' | 'tier:desc';
|
|
101
|
+
textFilter?: string;
|
|
102
|
+
tier?: 'hero' | 1 | 2 | 3 | 4 | 5 | 6;
|
|
103
|
+
}
|
|
104
|
+
interface FetchOneCardResponse {
|
|
105
|
+
artistName: string;
|
|
106
|
+
attack: number;
|
|
107
|
+
cardSetId: number;
|
|
108
|
+
cardTypeId: number;
|
|
109
|
+
classId: number;
|
|
110
|
+
collectible: number;
|
|
111
|
+
cropImage: string;
|
|
112
|
+
flavorText: Record<Locales, string> | string;
|
|
113
|
+
health: number;
|
|
114
|
+
id: number;
|
|
115
|
+
image: Record<Locales, string> | string;
|
|
116
|
+
imageGold: Record<Locales, string> | string;
|
|
117
|
+
isZilliaxCosmeticModule: boolean;
|
|
118
|
+
isZilliaxFunctionalModule: boolean;
|
|
119
|
+
keywordIds: Array<number>;
|
|
120
|
+
manaCost: number;
|
|
121
|
+
multiClassIds: Array<number>;
|
|
122
|
+
name: Record<Locales, string> | string;
|
|
123
|
+
rarityId: number;
|
|
124
|
+
slug: string;
|
|
125
|
+
text: Record<Locales, string> | string;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
declare function cardSearch(options: CardSearchParameters): Resource<CardSearchResponse, BlizzardCardSearchParameters>;
|
|
129
|
+
declare function fetchOneCard(id: string, options?: {
|
|
130
|
+
gameMode?: GameMode$1;
|
|
131
|
+
locale?: Locales;
|
|
132
|
+
}): Resource<FetchOneCardResponse, {
|
|
133
|
+
gameMode?: GameMode$1;
|
|
134
|
+
locale?: Locales;
|
|
135
|
+
}>;
|
|
136
|
+
|
|
137
|
+
type DeckSearchParameters = {
|
|
138
|
+
code: string;
|
|
139
|
+
} | {
|
|
140
|
+
hero?: string;
|
|
141
|
+
ids: string;
|
|
142
|
+
};
|
|
143
|
+
interface DeckResponse {
|
|
144
|
+
cardCount: number;
|
|
145
|
+
cards: Array<Card>;
|
|
146
|
+
class: Class$1;
|
|
147
|
+
deckCode: string;
|
|
148
|
+
format: string;
|
|
149
|
+
hero: Hero;
|
|
150
|
+
heroPower: Hero;
|
|
151
|
+
version: number;
|
|
152
|
+
}
|
|
153
|
+
interface Card {
|
|
154
|
+
armor?: number;
|
|
155
|
+
artistName: string;
|
|
156
|
+
attack?: number;
|
|
157
|
+
bannedFromSideboard?: number;
|
|
158
|
+
cardSetId: number;
|
|
159
|
+
cardTypeId: number;
|
|
160
|
+
childIds?: Array<number>;
|
|
161
|
+
classId: number;
|
|
162
|
+
collectible: number;
|
|
163
|
+
cropImage: string;
|
|
164
|
+
flavorText: string;
|
|
165
|
+
health?: number;
|
|
166
|
+
id: number;
|
|
167
|
+
image: string;
|
|
168
|
+
imageGold: string;
|
|
169
|
+
isZilliaxCosmeticModule: boolean;
|
|
170
|
+
isZilliaxFunctionalModule: boolean;
|
|
171
|
+
keywordIds?: Array<number>;
|
|
172
|
+
manaCost: number;
|
|
173
|
+
minionTypeId?: number;
|
|
174
|
+
multiClassIds: Array<number>;
|
|
175
|
+
name: string;
|
|
176
|
+
rarityId: number;
|
|
177
|
+
slug: string;
|
|
178
|
+
spellSchoolId?: number;
|
|
179
|
+
text: string;
|
|
180
|
+
}
|
|
181
|
+
interface Class$1 {
|
|
182
|
+
id: number;
|
|
183
|
+
name: string;
|
|
184
|
+
slug: string;
|
|
185
|
+
}
|
|
186
|
+
interface Hero {
|
|
187
|
+
artistName: null | string;
|
|
188
|
+
cardSetId: number;
|
|
189
|
+
cardTypeId: number;
|
|
190
|
+
classId: number;
|
|
191
|
+
collectible: number;
|
|
192
|
+
cropImage: null;
|
|
193
|
+
flavorText: string;
|
|
194
|
+
health?: number;
|
|
195
|
+
id: number;
|
|
196
|
+
image: string;
|
|
197
|
+
imageGold: string;
|
|
198
|
+
isZilliaxCosmeticModule: boolean;
|
|
199
|
+
isZilliaxFunctionalModule: boolean;
|
|
200
|
+
manaCost: number;
|
|
201
|
+
multiClassIds: Array<number>;
|
|
202
|
+
name: string;
|
|
203
|
+
parentId: number;
|
|
204
|
+
rarityId: null | number;
|
|
205
|
+
slug: string;
|
|
206
|
+
text: string;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
declare function getDeck(options: {
|
|
210
|
+
code: string;
|
|
211
|
+
} | {
|
|
212
|
+
hero?: string;
|
|
213
|
+
ids: Array<string>;
|
|
214
|
+
}): Resource<DeckResponse, DeckSearchParameters>;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Base record interface containing name and id properties that often appear together in Blizzard API responses.
|
|
218
|
+
*/
|
|
219
|
+
interface NameId {
|
|
220
|
+
id: number;
|
|
221
|
+
name: string;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
interface AllMetadataResponse {
|
|
225
|
+
arenaIds: Array<number>;
|
|
226
|
+
bgGameModes: Array<GameMode>;
|
|
227
|
+
cardBackCategories: Array<GameMode>;
|
|
228
|
+
classes: Array<Class>;
|
|
229
|
+
filterableFields: Array<string>;
|
|
230
|
+
gameModes: Array<GameMode>;
|
|
231
|
+
keywords: Array<Keyword>;
|
|
232
|
+
mercenaryFactions: Array<GameMode>;
|
|
233
|
+
mercenaryRoles: Array<GameMode>;
|
|
234
|
+
minionTypes: Array<GameMode>;
|
|
235
|
+
numericFields: Array<string>;
|
|
236
|
+
rarities: Array<Rarity>;
|
|
237
|
+
setGroups: Array<SetGroup>;
|
|
238
|
+
sets: Array<Set>;
|
|
239
|
+
spellSchools: Array<GameMode>;
|
|
240
|
+
types: Array<GameMode>;
|
|
241
|
+
}
|
|
242
|
+
interface GameMode extends NameId {
|
|
243
|
+
gameModes?: Array<number>;
|
|
244
|
+
slug: string;
|
|
245
|
+
}
|
|
246
|
+
interface Class {
|
|
247
|
+
alternateHeroCardIds?: Array<number>;
|
|
248
|
+
cardId?: number;
|
|
249
|
+
heroPowerCardId?: number;
|
|
250
|
+
id: number;
|
|
251
|
+
name: string;
|
|
252
|
+
slug: string;
|
|
253
|
+
}
|
|
254
|
+
interface Keyword extends NameId {
|
|
255
|
+
gameModes: Array<number>;
|
|
256
|
+
refText: string;
|
|
257
|
+
slug: string;
|
|
258
|
+
text: string;
|
|
259
|
+
}
|
|
260
|
+
interface Rarity extends NameId {
|
|
261
|
+
craftingCost: Array<null | number>;
|
|
262
|
+
dustValue: Array<null | number>;
|
|
263
|
+
slug: string;
|
|
264
|
+
}
|
|
265
|
+
interface SetGroup {
|
|
266
|
+
cardSets: Array<string>;
|
|
267
|
+
icon?: string;
|
|
268
|
+
name: string;
|
|
269
|
+
slug: string;
|
|
270
|
+
standard?: boolean;
|
|
271
|
+
svg?: null | string;
|
|
272
|
+
year?: number;
|
|
273
|
+
yearRange?: string;
|
|
274
|
+
}
|
|
275
|
+
type SetType = '' | 'adventure' | 'base' | 'expansion';
|
|
276
|
+
interface Set extends NameId {
|
|
277
|
+
aliasSetIds?: Array<number>;
|
|
278
|
+
collectibleCount: number;
|
|
279
|
+
collectibleRevealedCount: number;
|
|
280
|
+
hyped: boolean;
|
|
281
|
+
nonCollectibleCount: number;
|
|
282
|
+
nonCollectibleRevealedCount: number;
|
|
283
|
+
slug: string;
|
|
284
|
+
type: SetType;
|
|
285
|
+
}
|
|
286
|
+
interface SpecificMetadataResponse extends NameId {
|
|
287
|
+
aliasSetIds?: Array<number>;
|
|
288
|
+
collectibleCount: number;
|
|
289
|
+
collectibleRevealedCount: number;
|
|
290
|
+
hyped: boolean;
|
|
291
|
+
nonCollectibleCount: number;
|
|
292
|
+
nonCollectibleRevealedCount: number;
|
|
293
|
+
slug: string;
|
|
294
|
+
type: SetType;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
declare function allMetadata(): Resource<AllMetadataResponse>;
|
|
298
|
+
declare function specificMetadata(type: 'classes' | 'keywords' | 'minionTypes' | 'rarities' | 'setGroups' | 'sets' | 'types'): Resource<SpecificMetadataResponse>;
|
|
299
|
+
|
|
300
|
+
declare const hs: {
|
|
301
|
+
cardBackSearch: typeof cardBackSearch;
|
|
302
|
+
fetchOneCardBack: typeof fetchOneCardBack;
|
|
303
|
+
cardSearch: typeof cardSearch;
|
|
304
|
+
fetchOneCard: typeof fetchOneCard;
|
|
305
|
+
getDeck: typeof getDeck;
|
|
306
|
+
allMetadata: typeof allMetadata;
|
|
307
|
+
specificMetadata: typeof specificMetadata;
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
export { type AllMetadataResponse, type BlizzardCardSearchParameters, type CardBackSearchParameters, type CardBackSearchResponse, type CardSearchParameters, type CardSearchResponse, type DeckResponse, type DeckSearchParameters, type FetchOneCardResponse, type SingleCardBackSearchResponse, type SpecificMetadataResponse, allMetadata, cardBackSearch, cardSearch, hs as default, fetchOneCard, fetchOneCardBack, getDeck, hs, specificMetadata };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// src/card-backs/card-backs.ts
|
|
2
|
+
function cardBackSearch(options) {
|
|
3
|
+
return {
|
|
4
|
+
parameters: options,
|
|
5
|
+
path: "hearthstone/cardbacks"
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function fetchOneCardBack(id, locale) {
|
|
9
|
+
return {
|
|
10
|
+
parameters: { locale },
|
|
11
|
+
path: `hearthstone/cardbacks/${id}`
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// src/cards/cards.ts
|
|
16
|
+
function cardSearch(options) {
|
|
17
|
+
let attack = void 0;
|
|
18
|
+
let defaultMercenary = void 0;
|
|
19
|
+
let health = void 0;
|
|
20
|
+
let mercenaryId = void 0;
|
|
21
|
+
if (options.attack) {
|
|
22
|
+
attack = Array.isArray(options.attack) ? options.attack.join(",") : `${options.attack}`;
|
|
23
|
+
}
|
|
24
|
+
if (options.defaultMercenary) {
|
|
25
|
+
defaultMercenary = Array.isArray(options.defaultMercenary) ? options.defaultMercenary.join(",") : `${options.defaultMercenary}`;
|
|
26
|
+
}
|
|
27
|
+
if (options.health) {
|
|
28
|
+
health = Array.isArray(options.health) ? options.health.join(",") : `${options.health}`;
|
|
29
|
+
}
|
|
30
|
+
if (options.mercenaryId) {
|
|
31
|
+
mercenaryId = Array.isArray(options.mercenaryId) ? options.mercenaryId.join(",") : `${options.mercenaryId}`;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
parameters: {
|
|
35
|
+
...options,
|
|
36
|
+
attack,
|
|
37
|
+
defaultMercenary,
|
|
38
|
+
health,
|
|
39
|
+
mercenaryId
|
|
40
|
+
},
|
|
41
|
+
path: "hearthstone/cards"
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function fetchOneCard(id, options) {
|
|
45
|
+
const { gameMode = "constructed", locale } = options ?? {};
|
|
46
|
+
return {
|
|
47
|
+
parameters: { gameMode, locale },
|
|
48
|
+
path: `hearthstone/cards/${id}`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// src/decks/decks.ts
|
|
53
|
+
function getDeck(options) {
|
|
54
|
+
if ("code" in options) {
|
|
55
|
+
return {
|
|
56
|
+
parameters: {
|
|
57
|
+
code: encodeURI(options.code)
|
|
58
|
+
},
|
|
59
|
+
path: "hearthstone/deck"
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
parameters: {
|
|
64
|
+
hero: options.hero,
|
|
65
|
+
ids: options.ids?.join(",")
|
|
66
|
+
},
|
|
67
|
+
path: "hearthstone/deck"
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// src/metadata/metadata.ts
|
|
72
|
+
function allMetadata() {
|
|
73
|
+
return {
|
|
74
|
+
path: "hearthstone/metadata"
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function specificMetadata(type) {
|
|
78
|
+
return {
|
|
79
|
+
path: `hearthstone/metadata/${type}`
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/index.ts
|
|
84
|
+
var hs = {
|
|
85
|
+
//Card Backs
|
|
86
|
+
cardBackSearch,
|
|
87
|
+
fetchOneCardBack,
|
|
88
|
+
//Cards
|
|
89
|
+
cardSearch,
|
|
90
|
+
fetchOneCard,
|
|
91
|
+
//Decks
|
|
92
|
+
getDeck,
|
|
93
|
+
//Metadata
|
|
94
|
+
allMetadata,
|
|
95
|
+
specificMetadata
|
|
96
|
+
};
|
|
97
|
+
var src_default = hs;
|
|
98
|
+
|
|
99
|
+
export { allMetadata, cardBackSearch, cardSearch, src_default as default, fetchOneCard, fetchOneCardBack, getDeck, hs, specificMetadata };
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/card-backs/card-backs.ts","../src/cards/cards.ts","../src/decks/decks.ts","../src/metadata/metadata.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Locales, Resource } from '@blizzard-api/core';\r\nimport type { CardBackSearchParameters, CardBackSearchResponse, SingleCardBackSearchResponse } from './types';\r\n\r\nexport function cardBackSearch(\r\n options: CardBackSearchParameters,\r\n): Resource<CardBackSearchResponse, CardBackSearchParameters> {\r\n return {\r\n parameters: options,\r\n path: 'hearthstone/cardbacks',\r\n };\r\n}\r\n\r\nexport function fetchOneCardBack(\r\n id: string,\r\n locale?: Locales,\r\n): Resource<SingleCardBackSearchResponse, { locale?: Locales }> {\r\n return {\r\n parameters: { locale },\r\n path: `hearthstone/cardbacks/${id}`,\r\n };\r\n}\r\n","import type { Locales, Resource } from '@blizzard-api/core';\r\nimport type { GameMode } from '../base';\r\nimport type {\r\n BlizzardCardSearchParameters,\r\n CardSearchParameters,\r\n CardSearchResponse,\r\n FetchOneCardResponse,\r\n} from './types';\r\n\r\nexport function cardSearch(options: CardSearchParameters): Resource<CardSearchResponse, BlizzardCardSearchParameters> {\r\n let attack: string | undefined = undefined;\r\n let defaultMercenary: string | undefined = undefined;\r\n let health: string | undefined = undefined;\r\n let mercenaryId: string | undefined = undefined;\r\n\r\n if (options.attack) {\r\n attack = Array.isArray(options.attack) ? options.attack.join(',') : `${options.attack}`;\r\n }\r\n if (options.defaultMercenary) {\r\n defaultMercenary = Array.isArray(options.defaultMercenary)\r\n ? options.defaultMercenary.join(',')\r\n : `${options.defaultMercenary}`;\r\n }\r\n if (options.health) {\r\n health = Array.isArray(options.health) ? options.health.join(',') : `${options.health}`;\r\n }\r\n if (options.mercenaryId) {\r\n mercenaryId = Array.isArray(options.mercenaryId) ? options.mercenaryId.join(',') : `${options.mercenaryId}`;\r\n }\r\n\r\n return {\r\n parameters: {\r\n ...options,\r\n attack,\r\n defaultMercenary,\r\n health,\r\n mercenaryId,\r\n },\r\n path: 'hearthstone/cards',\r\n };\r\n}\r\n\r\nexport function fetchOneCard(\r\n id: string,\r\n options?: {\r\n gameMode?: GameMode;\r\n locale?: Locales;\r\n },\r\n): Resource<FetchOneCardResponse, { gameMode?: GameMode; locale?: Locales }> {\r\n const { gameMode = 'constructed', locale } = options ?? {};\r\n return {\r\n parameters: { gameMode, locale },\r\n path: `hearthstone/cards/${id}`,\r\n };\r\n}\r\n","import type { Resource } from '@blizzard-api/core';\r\nimport type { DeckResponse, DeckSearchParameters } from './types';\r\n\r\nexport function getDeck(\r\n options: { code: string } | { hero?: string; ids: Array<string> },\r\n): Resource<DeckResponse, DeckSearchParameters> {\r\n if ('code' in options) {\r\n return {\r\n parameters: {\r\n code: encodeURI(options.code),\r\n },\r\n path: 'hearthstone/deck',\r\n };\r\n }\r\n\r\n return {\r\n parameters: {\r\n hero: options.hero,\r\n ids: options.ids?.join(','),\r\n },\r\n path: 'hearthstone/deck',\r\n };\r\n}\r\n","import type { Resource } from '@blizzard-api/core';\r\nimport type { AllMetadataResponse, SpecificMetadataResponse } from './types';\r\n\r\nexport function allMetadata(): Resource<AllMetadataResponse> {\r\n return {\r\n path: 'hearthstone/metadata',\r\n };\r\n}\r\n\r\nexport function specificMetadata(\r\n type: 'classes' | 'keywords' | 'minionTypes' | 'rarities' | 'setGroups' | 'sets' | 'types',\r\n): Resource<SpecificMetadataResponse> {\r\n return {\r\n path: `hearthstone/metadata/${type}`,\r\n };\r\n}\r\n","import { cardBackSearch, fetchOneCardBack } from './card-backs/card-backs';\r\nimport { cardSearch, fetchOneCard } from './cards/cards';\r\nimport { getDeck } from './decks/decks';\r\nimport { allMetadata, specificMetadata } from './metadata/metadata';\r\n\r\nexport const hs = {\r\n //Card Backs\r\n cardBackSearch,\r\n fetchOneCardBack,\r\n //Cards\r\n cardSearch,\r\n fetchOneCard,\r\n //Decks\r\n getDeck,\r\n //Metadata\r\n allMetadata,\r\n specificMetadata,\r\n};\r\n\r\nexport default hs;\r\n\r\n//Card Backs\r\nexport * from './card-backs/card-backs';\r\nexport type * from './card-backs/types';\r\n//Cards\r\nexport * from './cards/cards';\r\nexport type * from './cards/types';\r\n//Decks\r\nexport * from './decks/decks';\r\nexport type * from './decks/types';\r\n//Metadata\r\nexport * from './metadata/metadata';\r\nexport type * from './metadata/types';\r\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@blizzard-api/hs",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"author": "Putro",
|
|
6
|
+
"description": "A series of helpers to interact with the Hearthstone Blizzard API",
|
|
7
|
+
"repository": "https://github.com/Pewtro/blizzard-api/tree/main/packages/hs",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": "^18.18 || ^20.9 || ^21.1 || ^22"
|
|
11
|
+
},
|
|
12
|
+
"main": "./dist/index.cjs",
|
|
13
|
+
"module": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
"import": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"require": {
|
|
21
|
+
"types": "./dist/index.d.cts",
|
|
22
|
+
"default": "./dist/index.cjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"keywords": [
|
|
29
|
+
"blizzard",
|
|
30
|
+
"battlenet",
|
|
31
|
+
"battle.net",
|
|
32
|
+
"bnet",
|
|
33
|
+
"api",
|
|
34
|
+
"hs",
|
|
35
|
+
"hearthstone"
|
|
36
|
+
],
|
|
37
|
+
"dependencies": {},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"@blizzard-api/core": "1.2.1"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@blizzard-api/core": "1.2.1"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsup",
|
|
46
|
+
"dev": "tsup --watch",
|
|
47
|
+
"test": "vitest run",
|
|
48
|
+
"test:coverage": "pnpm test -- --coverage",
|
|
49
|
+
"test:watch": "vitest watch"
|
|
50
|
+
}
|
|
51
|
+
}
|