@pinta365/blizzard_api 0.7.1 → 0.8.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 +40 -4
- package/esm/mod.d.ts +4 -2
- package/esm/mod.js +2 -0
- package/esm/src/client.d.ts +9 -1
- package/esm/src/client.js +2 -0
- package/esm/src/generated/wow_forever_api.d.ts +939 -0
- package/esm/src/generated/wow_forever_api.js +2 -0
- package/esm/src/shared/context.d.ts +13 -2
- package/esm/src/shared/context.js +24 -9
- package/esm/src/shared/types.d.ts +1 -1
- package/esm/src/wow/game_data/achievement.d.ts +4 -0
- package/esm/src/wow/game_data/item.d.ts +29 -6
- package/esm/src/wow/game_data/mount.d.ts +2 -1
- package/esm/src/wow/game_data/reputations.d.ts +7 -1
- package/esm/src/wow/game_data/talent.d.ts +6 -2
- package/esm/src/wow/profile/character_statistics.d.ts +4 -0
- package/esm/src/wow_forever/account.d.ts +42 -0
- package/esm/src/wow_forever/account.js +24 -0
- package/esm/src/wow_forever/character.d.ts +336 -0
- package/esm/src/wow_forever/character.js +269 -0
- package/esm/src/wow_forever/game_data.d.ts +196 -0
- package/esm/src/wow_forever/game_data.js +166 -0
- package/esm/src/wow_forever/guild.d.ts +88 -0
- package/esm/src/wow_forever/guild.js +57 -0
- package/esm/src/wow_forever/index.d.ts +39 -0
- package/esm/src/wow_forever/index.js +45 -0
- package/esm/src/wow_forever/ruleset.d.ts +32 -0
- package/esm/src/wow_forever/ruleset.js +30 -0
- package/esm/src/wow_forever/types.d.ts +5 -0
- package/esm/src/wow_forever/types.js +1 -0
- package/package.json +5 -1
- package/script/mod.d.ts +4 -2
- package/script/mod.js +3 -1
- package/script/src/client.d.ts +9 -1
- package/script/src/client.js +2 -0
- package/script/src/generated/wow_forever_api.d.ts +939 -0
- package/script/src/generated/wow_forever_api.js +3 -0
- package/script/src/shared/context.d.ts +13 -2
- package/script/src/shared/context.js +24 -9
- package/script/src/shared/types.d.ts +1 -1
- package/script/src/wow/game_data/achievement.d.ts +4 -0
- package/script/src/wow/game_data/item.d.ts +29 -6
- package/script/src/wow/game_data/mount.d.ts +2 -1
- package/script/src/wow/game_data/reputations.d.ts +7 -1
- package/script/src/wow/game_data/talent.d.ts +6 -2
- package/script/src/wow/profile/character_statistics.d.ts +4 -0
- package/script/src/wow_forever/account.d.ts +42 -0
- package/script/src/wow_forever/account.js +28 -0
- package/script/src/wow_forever/character.d.ts +336 -0
- package/script/src/wow_forever/character.js +296 -0
- package/script/src/wow_forever/game_data.d.ts +196 -0
- package/script/src/wow_forever/game_data.js +185 -0
- package/script/src/wow_forever/guild.d.ts +88 -0
- package/script/src/wow_forever/guild.js +63 -0
- package/script/src/wow_forever/index.d.ts +39 -0
- package/script/src/wow_forever/index.js +180 -0
- package/script/src/wow_forever/ruleset.d.ts +32 -0
- package/script/src/wow_forever/ruleset.js +34 -0
- package/script/src/wow_forever/types.d.ts +5 -0
- package/script/src/wow_forever/types.js +2 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WoW: Forever versions of Retail game data endpoints whose Forever responses lack fields that Retail always returns:
|
|
3
|
+
* systems Forever doesn't have (hero talents, hunter pet specializations, guild achievements, sources) and indexes
|
|
4
|
+
* that are empty before launch, which the API omits instead of returning an empty list.
|
|
5
|
+
* Each one makes the same request as the Retail endpoint, but returns a type where those fields are optional,
|
|
6
|
+
* so the Retail types can keep them required.
|
|
7
|
+
* Verified against the live API (EU) on 2026-11-02, before launch.
|
|
8
|
+
*/
|
|
9
|
+
import type { ApiContext } from "../shared/index.js";
|
|
10
|
+
import type { SearchParameters } from "../wow/search.js";
|
|
11
|
+
import type { AchievementCategories } from "../wow/game_data/achievement.js";
|
|
12
|
+
import type { Heirlooms } from "../wow/game_data/heirloom.js";
|
|
13
|
+
import type { ItemAppearanceSearch, ItemAppearanceSearchResult } from "../wow/game_data/item_appearance.js";
|
|
14
|
+
import type { JournalEncounters, JournalExpansions, JournalInstances } from "../wow/game_data/journal.js";
|
|
15
|
+
import type { Mount } from "../wow/game_data/mount.js";
|
|
16
|
+
import type { Pet, PetAbilities } from "../wow/game_data/pet.js";
|
|
17
|
+
import type { PlayableSpecialization, PlayableSpecializations } from "../wow/game_data/playable_specialization.js";
|
|
18
|
+
import type { ProfessionRecipie } from "../wow/game_data/profession.js";
|
|
19
|
+
import type { Quest } from "../wow/game_data/quest.js";
|
|
20
|
+
import type { ReputationFaction } from "../wow/game_data/reputations.js";
|
|
21
|
+
import type { TalentTree, TalentTrees } from "../wow/game_data/talent.js";
|
|
22
|
+
import type { Title } from "../wow/game_data/title.js";
|
|
23
|
+
/** Makes the keys K of T optional. */
|
|
24
|
+
type WithOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
25
|
+
/** Achievement category index as returned for Forever (no guild achievements). */
|
|
26
|
+
export interface ForeverAchievementCategories extends WithOptional<AchievementCategories, "guild_categories"> {
|
|
27
|
+
}
|
|
28
|
+
/** Heirloom index as returned for Forever (omitted while empty). */
|
|
29
|
+
export interface ForeverHeirlooms extends WithOptional<Heirlooms, "heirlooms"> {
|
|
30
|
+
}
|
|
31
|
+
/** Item appearance search result as returned for Forever (no slot). */
|
|
32
|
+
export interface ForeverItemAppearanceSearchResult extends Omit<ItemAppearanceSearchResult, "data"> {
|
|
33
|
+
data: WithOptional<ItemAppearanceSearchResult["data"], "slot">;
|
|
34
|
+
}
|
|
35
|
+
/** Item appearance search as returned for Forever. */
|
|
36
|
+
export interface ForeverItemAppearanceSearch extends Omit<ItemAppearanceSearch, "results"> {
|
|
37
|
+
results: ForeverItemAppearanceSearchResult[];
|
|
38
|
+
}
|
|
39
|
+
/** Journal encounter index as returned for Forever (omitted while empty). */
|
|
40
|
+
export interface ForeverJournalEncounters extends WithOptional<JournalEncounters, "encounters"> {
|
|
41
|
+
}
|
|
42
|
+
/** Journal expansion index as returned for Forever (omitted while empty). */
|
|
43
|
+
export interface ForeverJournalExpansions extends WithOptional<JournalExpansions, "tiers"> {
|
|
44
|
+
}
|
|
45
|
+
/** Journal instance index as returned for Forever (omitted while empty). */
|
|
46
|
+
export interface ForeverJournalInstances extends WithOptional<JournalInstances, "instances"> {
|
|
47
|
+
}
|
|
48
|
+
/** Mount as returned for Forever (no source). */
|
|
49
|
+
export interface ForeverMount extends WithOptional<Mount, "source"> {
|
|
50
|
+
}
|
|
51
|
+
/** Battle pet as returned for Forever (no abilities or source). */
|
|
52
|
+
export interface ForeverPet extends Omit<WithOptional<Pet, "abilities" | "source" | "should_exclude_if_uncollected">, "description"> {
|
|
53
|
+
/** null for pets without a description. */
|
|
54
|
+
description: Pet["description"] | null;
|
|
55
|
+
}
|
|
56
|
+
/** Pet ability index as returned for Forever (omitted while empty). */
|
|
57
|
+
export interface ForeverPetAbilities extends WithOptional<PetAbilities, "abilities"> {
|
|
58
|
+
}
|
|
59
|
+
/** Playable specialization as returned for Forever (no role, primary stat or gendered description). */
|
|
60
|
+
export interface ForeverPlayableSpecialization extends WithOptional<PlayableSpecialization, "gender_description" | "role" | "primary_stat_type"> {
|
|
61
|
+
}
|
|
62
|
+
/** Playable specialization index as returned for Forever (no hunter pet specializations). */
|
|
63
|
+
export interface ForeverPlayableSpecializations extends WithOptional<PlayableSpecializations, "pet_specializations"> {
|
|
64
|
+
}
|
|
65
|
+
/** Profession recipe as returned for Forever (no rank). */
|
|
66
|
+
export interface ForeverProfessionRecipie extends WithOptional<ProfessionRecipie, "rank"> {
|
|
67
|
+
}
|
|
68
|
+
/** Quest as returned for Forever (requirements can be empty). */
|
|
69
|
+
export interface ForeverQuest extends Omit<Quest, "requirements"> {
|
|
70
|
+
requirements: Partial<Quest["requirements"]>;
|
|
71
|
+
}
|
|
72
|
+
/** Reputation faction as returned for Forever (no description). */
|
|
73
|
+
export interface ForeverReputationFaction extends WithOptional<ReputationFaction, "description"> {
|
|
74
|
+
}
|
|
75
|
+
/** Talent tree as returned for Forever (no hero talents, restriction lines or class talent nodes). */
|
|
76
|
+
export interface ForeverTalentTree extends WithOptional<TalentTree, "restriction_lines" | "class_talent_nodes" | "hero_talent_trees"> {
|
|
77
|
+
}
|
|
78
|
+
/** Talent tree index as returned for Forever (no hero talents). */
|
|
79
|
+
export interface ForeverTalentTrees extends WithOptional<TalentTrees, "hero_talent_trees"> {
|
|
80
|
+
}
|
|
81
|
+
/** Title as returned for Forever (no source). */
|
|
82
|
+
export interface ForeverTitle extends WithOptional<Title, "source"> {
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Returns an index of achievement categories.
|
|
86
|
+
*
|
|
87
|
+
* @returns A promise that resolves to an object representing an index of achievement categories.
|
|
88
|
+
*/
|
|
89
|
+
export declare function achievementCategories(ctx: ApiContext): Promise<ForeverAchievementCategories>;
|
|
90
|
+
/**
|
|
91
|
+
* Returns an index of heirlooms.
|
|
92
|
+
*
|
|
93
|
+
* @returns A promise that resolves to an object representing an index of heirlooms.
|
|
94
|
+
*/
|
|
95
|
+
export declare function heirlooms(ctx: ApiContext): Promise<ForeverHeirlooms>;
|
|
96
|
+
/**
|
|
97
|
+
* Performs a search of item appearances.
|
|
98
|
+
*
|
|
99
|
+
* @param searchParameters - Search parameters, e.g. `{ _page: 1, orderby: "id" }`.
|
|
100
|
+
* @returns A promise that resolves to an object representing the search results.
|
|
101
|
+
*/
|
|
102
|
+
export declare function searchItemAppearance(ctx: ApiContext, searchParameters: SearchParameters): Promise<ForeverItemAppearanceSearch>;
|
|
103
|
+
/**
|
|
104
|
+
* Returns an index of journal encounters.
|
|
105
|
+
*
|
|
106
|
+
* @returns A promise that resolves to an object representing an index of journal encounters.
|
|
107
|
+
*/
|
|
108
|
+
export declare function journalEncounters(ctx: ApiContext): Promise<ForeverJournalEncounters>;
|
|
109
|
+
/**
|
|
110
|
+
* Returns an index of journal expansions.
|
|
111
|
+
*
|
|
112
|
+
* @returns A promise that resolves to an object representing an index of journal expansions.
|
|
113
|
+
*/
|
|
114
|
+
export declare function journalExpansions(ctx: ApiContext): Promise<ForeverJournalExpansions>;
|
|
115
|
+
/**
|
|
116
|
+
* Returns an index of journal instances.
|
|
117
|
+
*
|
|
118
|
+
* @returns A promise that resolves to an object representing an index of journal instances.
|
|
119
|
+
*/
|
|
120
|
+
export declare function journalInstances(ctx: ApiContext): Promise<ForeverJournalInstances>;
|
|
121
|
+
/**
|
|
122
|
+
* Returns a mount by ID.
|
|
123
|
+
*
|
|
124
|
+
* @param mountId - The ID of the mount.
|
|
125
|
+
* @returns A promise that resolves to an object representing the mount.
|
|
126
|
+
*/
|
|
127
|
+
export declare function mount(ctx: ApiContext, mountId: number): Promise<ForeverMount>;
|
|
128
|
+
/**
|
|
129
|
+
* Returns a battle pet by ID.
|
|
130
|
+
*
|
|
131
|
+
* @param petId - The ID of the pet.
|
|
132
|
+
* @returns A promise that resolves to an object representing the battle pet.
|
|
133
|
+
*/
|
|
134
|
+
export declare function pet(ctx: ApiContext, petId: number): Promise<ForeverPet>;
|
|
135
|
+
/**
|
|
136
|
+
* Returns an index of pet abilities.
|
|
137
|
+
*
|
|
138
|
+
* @returns A promise that resolves to an object representing an index of pet abilities.
|
|
139
|
+
*/
|
|
140
|
+
export declare function petAbilities(ctx: ApiContext): Promise<ForeverPetAbilities>;
|
|
141
|
+
/**
|
|
142
|
+
* Returns a playable specialization by ID.
|
|
143
|
+
*
|
|
144
|
+
* @param specId - The ID of the playable specialization.
|
|
145
|
+
* @returns A promise that resolves to an object representing the playable specialization.
|
|
146
|
+
*/
|
|
147
|
+
export declare function playableSpecialization(ctx: ApiContext, specId: number): Promise<ForeverPlayableSpecialization>;
|
|
148
|
+
/**
|
|
149
|
+
* Returns an index of playable specializations.
|
|
150
|
+
*
|
|
151
|
+
* @returns A promise that resolves to an object representing an index of playable specializations.
|
|
152
|
+
*/
|
|
153
|
+
export declare function playableSpecializations(ctx: ApiContext): Promise<ForeverPlayableSpecializations>;
|
|
154
|
+
/**
|
|
155
|
+
* Returns a recipe by ID.
|
|
156
|
+
*
|
|
157
|
+
* @param recipeId - The ID of the recipe.
|
|
158
|
+
* @returns A promise that resolves to an object representing the recipe.
|
|
159
|
+
*/
|
|
160
|
+
export declare function professionRecipie(ctx: ApiContext, recipeId: number): Promise<ForeverProfessionRecipie>;
|
|
161
|
+
/**
|
|
162
|
+
* Returns a quest by ID.
|
|
163
|
+
*
|
|
164
|
+
* @param questId - The ID of the quest.
|
|
165
|
+
* @returns A promise that resolves to an object representing the quest.
|
|
166
|
+
*/
|
|
167
|
+
export declare function quest(ctx: ApiContext, questId: number): Promise<ForeverQuest>;
|
|
168
|
+
/**
|
|
169
|
+
* Returns a reputation faction by ID.
|
|
170
|
+
*
|
|
171
|
+
* @param reputationFactionId - The ID of the reputation faction.
|
|
172
|
+
* @returns A promise that resolves to an object representing the reputation faction.
|
|
173
|
+
*/
|
|
174
|
+
export declare function reputationFaction(ctx: ApiContext, reputationFactionId: string): Promise<ForeverReputationFaction>;
|
|
175
|
+
/**
|
|
176
|
+
* Returns a talent tree by specialization ID.
|
|
177
|
+
*
|
|
178
|
+
* @param talentTreeId - The unique identifier for the talent tree.
|
|
179
|
+
* @param specId - The unique identifier for the specialization.
|
|
180
|
+
* @returns A promise that resolves to an object representing details about a talent tree.
|
|
181
|
+
*/
|
|
182
|
+
export declare function talentTree(ctx: ApiContext, talentTreeId: number, specId: number): Promise<ForeverTalentTree>;
|
|
183
|
+
/**
|
|
184
|
+
* Returns an index of talent trees.
|
|
185
|
+
*
|
|
186
|
+
* @returns A promise that resolves to an object representing an index of talent trees.
|
|
187
|
+
*/
|
|
188
|
+
export declare function talentTrees(ctx: ApiContext): Promise<ForeverTalentTrees>;
|
|
189
|
+
/**
|
|
190
|
+
* Returns a title by ID.
|
|
191
|
+
*
|
|
192
|
+
* @param titleId - The ID of the title.
|
|
193
|
+
* @returns A promise that resolves to an object representing the title.
|
|
194
|
+
*/
|
|
195
|
+
export declare function title(ctx: ApiContext, titleId: number): Promise<ForeverTitle>;
|
|
196
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WoW: Forever versions of Retail game data endpoints whose Forever responses lack fields that Retail always returns:
|
|
3
|
+
* systems Forever doesn't have (hero talents, hunter pet specializations, guild achievements, sources) and indexes
|
|
4
|
+
* that are empty before launch, which the API omits instead of returning an empty list.
|
|
5
|
+
* Each one makes the same request as the Retail endpoint, but returns a type where those fields are optional,
|
|
6
|
+
* so the Retail types can keep them required.
|
|
7
|
+
* Verified against the live API (EU) on 2026-11-02, before launch.
|
|
8
|
+
*/
|
|
9
|
+
import { achievementCategories as retailAchievementCategories } from "../wow/game_data/achievement.js";
|
|
10
|
+
import { heirlooms as retailHeirlooms } from "../wow/game_data/heirloom.js";
|
|
11
|
+
import { searchItemAppearance as retailSearchItemAppearance } from "../wow/game_data/item_appearance.js";
|
|
12
|
+
import { journalEncounters as retailJournalEncounters, journalExpansions as retailJournalExpansions, journalInstances as retailJournalInstances, } from "../wow/game_data/journal.js";
|
|
13
|
+
import { mount as retailMount } from "../wow/game_data/mount.js";
|
|
14
|
+
import { pet as retailPet, petAbilities as retailPetAbilities } from "../wow/game_data/pet.js";
|
|
15
|
+
import { playableSpecialization as retailPlayableSpecialization, playableSpecializations as retailPlayableSpecializations, } from "../wow/game_data/playable_specialization.js";
|
|
16
|
+
import { professionRecipie as retailProfessionRecipie } from "../wow/game_data/profession.js";
|
|
17
|
+
import { quest as retailQuest } from "../wow/game_data/quest.js";
|
|
18
|
+
import { reputationFaction as retailReputationFaction } from "../wow/game_data/reputations.js";
|
|
19
|
+
import { talentTree as retailTalentTree, talentTrees as retailTalentTrees } from "../wow/game_data/talent.js";
|
|
20
|
+
import { title as retailTitle } from "../wow/game_data/title.js";
|
|
21
|
+
/**
|
|
22
|
+
* Returns an index of achievement categories.
|
|
23
|
+
*
|
|
24
|
+
* @returns A promise that resolves to an object representing an index of achievement categories.
|
|
25
|
+
*/
|
|
26
|
+
export async function achievementCategories(ctx) {
|
|
27
|
+
return await retailAchievementCategories(ctx);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns an index of heirlooms.
|
|
31
|
+
*
|
|
32
|
+
* @returns A promise that resolves to an object representing an index of heirlooms.
|
|
33
|
+
*/
|
|
34
|
+
export async function heirlooms(ctx) {
|
|
35
|
+
return await retailHeirlooms(ctx);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Performs a search of item appearances.
|
|
39
|
+
*
|
|
40
|
+
* @param searchParameters - Search parameters, e.g. `{ _page: 1, orderby: "id" }`.
|
|
41
|
+
* @returns A promise that resolves to an object representing the search results.
|
|
42
|
+
*/
|
|
43
|
+
export async function searchItemAppearance(ctx, searchParameters) {
|
|
44
|
+
return await retailSearchItemAppearance(ctx, searchParameters);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns an index of journal encounters.
|
|
48
|
+
*
|
|
49
|
+
* @returns A promise that resolves to an object representing an index of journal encounters.
|
|
50
|
+
*/
|
|
51
|
+
export async function journalEncounters(ctx) {
|
|
52
|
+
return await retailJournalEncounters(ctx);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns an index of journal expansions.
|
|
56
|
+
*
|
|
57
|
+
* @returns A promise that resolves to an object representing an index of journal expansions.
|
|
58
|
+
*/
|
|
59
|
+
export async function journalExpansions(ctx) {
|
|
60
|
+
return await retailJournalExpansions(ctx);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns an index of journal instances.
|
|
64
|
+
*
|
|
65
|
+
* @returns A promise that resolves to an object representing an index of journal instances.
|
|
66
|
+
*/
|
|
67
|
+
export async function journalInstances(ctx) {
|
|
68
|
+
return await retailJournalInstances(ctx);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Returns a mount by ID.
|
|
72
|
+
*
|
|
73
|
+
* @param mountId - The ID of the mount.
|
|
74
|
+
* @returns A promise that resolves to an object representing the mount.
|
|
75
|
+
*/
|
|
76
|
+
export async function mount(ctx, mountId) {
|
|
77
|
+
return await retailMount(ctx, mountId);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns a battle pet by ID.
|
|
81
|
+
*
|
|
82
|
+
* @param petId - The ID of the pet.
|
|
83
|
+
* @returns A promise that resolves to an object representing the battle pet.
|
|
84
|
+
*/
|
|
85
|
+
export async function pet(ctx, petId) {
|
|
86
|
+
return await retailPet(ctx, petId);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns an index of pet abilities.
|
|
90
|
+
*
|
|
91
|
+
* @returns A promise that resolves to an object representing an index of pet abilities.
|
|
92
|
+
*/
|
|
93
|
+
export async function petAbilities(ctx) {
|
|
94
|
+
return await retailPetAbilities(ctx);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns a playable specialization by ID.
|
|
98
|
+
*
|
|
99
|
+
* @param specId - The ID of the playable specialization.
|
|
100
|
+
* @returns A promise that resolves to an object representing the playable specialization.
|
|
101
|
+
*/
|
|
102
|
+
export async function playableSpecialization(ctx, specId) {
|
|
103
|
+
return await retailPlayableSpecialization(ctx, specId);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns an index of playable specializations.
|
|
107
|
+
*
|
|
108
|
+
* @returns A promise that resolves to an object representing an index of playable specializations.
|
|
109
|
+
*/
|
|
110
|
+
export async function playableSpecializations(ctx) {
|
|
111
|
+
return await retailPlayableSpecializations(ctx);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Returns a recipe by ID.
|
|
115
|
+
*
|
|
116
|
+
* @param recipeId - The ID of the recipe.
|
|
117
|
+
* @returns A promise that resolves to an object representing the recipe.
|
|
118
|
+
*/
|
|
119
|
+
export async function professionRecipie(ctx, recipeId) {
|
|
120
|
+
return await retailProfessionRecipie(ctx, recipeId);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Returns a quest by ID.
|
|
124
|
+
*
|
|
125
|
+
* @param questId - The ID of the quest.
|
|
126
|
+
* @returns A promise that resolves to an object representing the quest.
|
|
127
|
+
*/
|
|
128
|
+
export async function quest(ctx, questId) {
|
|
129
|
+
return await retailQuest(ctx, questId);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Returns a reputation faction by ID.
|
|
133
|
+
*
|
|
134
|
+
* @param reputationFactionId - The ID of the reputation faction.
|
|
135
|
+
* @returns A promise that resolves to an object representing the reputation faction.
|
|
136
|
+
*/
|
|
137
|
+
export async function reputationFaction(ctx, reputationFactionId) {
|
|
138
|
+
return await retailReputationFaction(ctx, reputationFactionId);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Returns a talent tree by specialization ID.
|
|
142
|
+
*
|
|
143
|
+
* @param talentTreeId - The unique identifier for the talent tree.
|
|
144
|
+
* @param specId - The unique identifier for the specialization.
|
|
145
|
+
* @returns A promise that resolves to an object representing details about a talent tree.
|
|
146
|
+
*/
|
|
147
|
+
export async function talentTree(ctx, talentTreeId, specId) {
|
|
148
|
+
return await retailTalentTree(ctx, talentTreeId, specId);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Returns an index of talent trees.
|
|
152
|
+
*
|
|
153
|
+
* @returns A promise that resolves to an object representing an index of talent trees.
|
|
154
|
+
*/
|
|
155
|
+
export async function talentTrees(ctx) {
|
|
156
|
+
return await retailTalentTrees(ctx);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Returns a title by ID.
|
|
160
|
+
*
|
|
161
|
+
* @param titleId - The ID of the title.
|
|
162
|
+
* @returns A promise that resolves to an object representing the title.
|
|
163
|
+
*/
|
|
164
|
+
export async function title(ctx, titleId) {
|
|
165
|
+
return await retailTitle(ctx, titleId);
|
|
166
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WoW: Forever guild endpoints. Forever guilds are realmless: a guild is identified by its name slug alone
|
|
3
|
+
* (`/data/wow/guild/{nameSlug}`) and belongs to a ruleset instead of a realm.
|
|
4
|
+
* Verified against the live API (EU) on 2026-11-05.
|
|
5
|
+
*/
|
|
6
|
+
import type { ApiContext, Href, KeyId, KeyNameId, LinkSelfHref, LocalizedString, TypeName } from "../shared/index.js";
|
|
7
|
+
import type { Guild, GuildAchievements, GuildActivity } from "../wow/profile/guild.js";
|
|
8
|
+
import type { ForeverCharacterRef } from "./character.js";
|
|
9
|
+
/** A reference to a Forever guild, as found in the `guild` field of the guild endpoints. */
|
|
10
|
+
export interface ForeverGuildRef {
|
|
11
|
+
key: Href;
|
|
12
|
+
name: LocalizedString;
|
|
13
|
+
id: number;
|
|
14
|
+
faction: TypeName;
|
|
15
|
+
slug: string;
|
|
16
|
+
}
|
|
17
|
+
/** Guild as returned for Forever. */
|
|
18
|
+
export interface ForeverGuild extends Omit<Guild, "key" | "realm"> {
|
|
19
|
+
slug: string;
|
|
20
|
+
/** The guild's ruleset (Normal, PvP, Roleplay, Roleplay PvP). */
|
|
21
|
+
ruleset: KeyNameId;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Guild achievements as returned for Forever. `total_quantity`, `total_points` and `achievements` are absent while
|
|
25
|
+
* the guild has no achievement progress.
|
|
26
|
+
*/
|
|
27
|
+
export interface ForeverGuildAchievements extends Partial<Pick<GuildAchievements, "total_quantity" | "total_points" | "achievements">>, Pick<GuildAchievements, "category_progress" | "recent_events"> {
|
|
28
|
+
_links: {
|
|
29
|
+
self: Href;
|
|
30
|
+
};
|
|
31
|
+
guild: ForeverGuildRef;
|
|
32
|
+
}
|
|
33
|
+
/** Guild activity as returned for Forever. */
|
|
34
|
+
export interface ForeverGuildActivity extends Omit<GuildActivity, "guild" | "activities"> {
|
|
35
|
+
guild: ForeverGuildRef;
|
|
36
|
+
/** Absent while the guild has no recent activity. */
|
|
37
|
+
activities?: (Omit<NonNullable<GuildActivity["activities"]>[number], "character_achievement"> & {
|
|
38
|
+
character_achievement?: {
|
|
39
|
+
character: ForeverCharacterRef;
|
|
40
|
+
achievement: KeyNameId;
|
|
41
|
+
};
|
|
42
|
+
})[];
|
|
43
|
+
}
|
|
44
|
+
/** A guild member in the Forever guild roster. */
|
|
45
|
+
export interface ForeverGuildRosterMemberCharacter extends ForeverCharacterRef {
|
|
46
|
+
level: number;
|
|
47
|
+
playable_class: KeyId;
|
|
48
|
+
playable_race: KeyId;
|
|
49
|
+
faction: {
|
|
50
|
+
type: string;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Guild roster as returned for Forever. */
|
|
54
|
+
export interface ForeverGuildRoster extends LinkSelfHref {
|
|
55
|
+
guild: ForeverGuildRef;
|
|
56
|
+
members: {
|
|
57
|
+
character: ForeverGuildRosterMemberCharacter;
|
|
58
|
+
rank: number;
|
|
59
|
+
}[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Returns a single guild by its name slug.
|
|
63
|
+
*
|
|
64
|
+
* @param nameSlug - The slug of the guild, e.g. "unbound".
|
|
65
|
+
* @returns A promise that resolves to an object representing the guild.
|
|
66
|
+
*/
|
|
67
|
+
export declare function guild(ctx: ApiContext, nameSlug: string): Promise<ForeverGuild>;
|
|
68
|
+
/**
|
|
69
|
+
* Returns a guild's recent activity.
|
|
70
|
+
*
|
|
71
|
+
* @param nameSlug - The slug of the guild.
|
|
72
|
+
* @returns A promise that resolves to an object representing the guild's activity.
|
|
73
|
+
*/
|
|
74
|
+
export declare function guildActivity(ctx: ApiContext, nameSlug: string): Promise<ForeverGuildActivity>;
|
|
75
|
+
/**
|
|
76
|
+
* Returns a guild's achievements.
|
|
77
|
+
*
|
|
78
|
+
* @param nameSlug - The slug of the guild.
|
|
79
|
+
* @returns A promise that resolves to an object representing the guild's achievements.
|
|
80
|
+
*/
|
|
81
|
+
export declare function guildAchievements(ctx: ApiContext, nameSlug: string): Promise<ForeverGuildAchievements>;
|
|
82
|
+
/**
|
|
83
|
+
* Returns a guild's roster.
|
|
84
|
+
*
|
|
85
|
+
* @param nameSlug - The slug of the guild.
|
|
86
|
+
* @returns A promise that resolves to an object representing the guild's roster.
|
|
87
|
+
*/
|
|
88
|
+
export declare function guildRoster(ctx: ApiContext, nameSlug: string): Promise<ForeverGuildRoster>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WoW: Forever guild endpoints. Forever guilds are realmless: a guild is identified by its name slug alone
|
|
3
|
+
* (`/data/wow/guild/{nameSlug}`) and belongs to a ruleset instead of a realm.
|
|
4
|
+
* Verified against the live API (EU) on 2026-11-05.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Returns a single guild by its name slug.
|
|
8
|
+
*
|
|
9
|
+
* @param nameSlug - The slug of the guild, e.g. "unbound".
|
|
10
|
+
* @returns A promise that resolves to an object representing the guild.
|
|
11
|
+
*/
|
|
12
|
+
export async function guild(ctx, nameSlug) {
|
|
13
|
+
return await ctx.request({
|
|
14
|
+
method: "GET",
|
|
15
|
+
url: `/data/wow/guild/${nameSlug}`,
|
|
16
|
+
namespace: "profile",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns a guild's recent activity.
|
|
21
|
+
*
|
|
22
|
+
* @param nameSlug - The slug of the guild.
|
|
23
|
+
* @returns A promise that resolves to an object representing the guild's activity.
|
|
24
|
+
*/
|
|
25
|
+
export async function guildActivity(ctx, nameSlug) {
|
|
26
|
+
return await ctx.request({
|
|
27
|
+
method: "GET",
|
|
28
|
+
url: `/data/wow/guild/${nameSlug}/activity`,
|
|
29
|
+
namespace: "profile",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns a guild's achievements.
|
|
34
|
+
*
|
|
35
|
+
* @param nameSlug - The slug of the guild.
|
|
36
|
+
* @returns A promise that resolves to an object representing the guild's achievements.
|
|
37
|
+
*/
|
|
38
|
+
export async function guildAchievements(ctx, nameSlug) {
|
|
39
|
+
return await ctx.request({
|
|
40
|
+
method: "GET",
|
|
41
|
+
url: `/data/wow/guild/${nameSlug}/achievements`,
|
|
42
|
+
namespace: "profile",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Returns a guild's roster.
|
|
47
|
+
*
|
|
48
|
+
* @param nameSlug - The slug of the guild.
|
|
49
|
+
* @returns A promise that resolves to an object representing the guild's roster.
|
|
50
|
+
*/
|
|
51
|
+
export async function guildRoster(ctx, nameSlug) {
|
|
52
|
+
return await ctx.request({
|
|
53
|
+
method: "GET",
|
|
54
|
+
url: `/data/wow/guild/${nameSlug}/roster`,
|
|
55
|
+
namespace: "profile",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* World of Warcraft: Forever endpoints, namespace variant "forever". These are the Retail endpoint functions that
|
|
3
|
+
* the Forever API supports; the client binds them to a "forever" context. Forever runs on the Retail game data
|
|
4
|
+
* (specializations, talents, mounts, pets, toys, ...) with Classic-era content.
|
|
5
|
+
*
|
|
6
|
+
* Forever is realmless: players pick a ruleset (Normal, PvP, Roleplay, Roleplay PvP), not a realm, and characters are
|
|
7
|
+
* looked up by `name` and `surname`. The realm endpoints are left out (the realm index was taken down at launch);
|
|
8
|
+
* use `rulesets()`. Guilds are looked up by name slug alone. Auction endpoints are not included yet: the ruleset
|
|
9
|
+
* auctions route exists but returns no data.
|
|
10
|
+
* Verified against the live API (EU) on 2026-11-05.
|
|
11
|
+
*/
|
|
12
|
+
export { achievement, achievementCategory, achievementMedia, achievements } from "../wow/game_data/achievement.js";
|
|
13
|
+
export { creature, creatureDisplayMedia, creatureFamilies, creatureFamily, creatureFamilyMedia, creatureType, creatureTypes, searchCreature, } from "../wow/game_data/creature.js";
|
|
14
|
+
export { guildCrestBorder, guildCrestEmblem, guildCrests } from "../wow/game_data/guild_crest.js";
|
|
15
|
+
export { heirloom } from "../wow/game_data/heirloom.js";
|
|
16
|
+
export { item, itemClass, itemClasses, itemMedia, itemSet, itemSets, itemSubclass, searchItem, } from "../wow/game_data/item.js";
|
|
17
|
+
export { itemAppearance, itemAppearanceSet, itemAppearanceSets, itemAppearanceSlot, itemAppearanceSlots, } from "../wow/game_data/item_appearance.js";
|
|
18
|
+
export { journalEncounter, journalExpansion, journalInstance, journalInstanceMedia, searchJournalEncounter, } from "../wow/game_data/journal.js";
|
|
19
|
+
export { searchMedia } from "../wow/game_data/media_search.js";
|
|
20
|
+
export { mounts, searchMount } from "../wow/game_data/mount.js";
|
|
21
|
+
export { petAbility, petAbilityMedia, petMedia, pets } from "../wow/game_data/pet.js";
|
|
22
|
+
export { playableClass, playableClasses, playableClassMedia } from "../wow/game_data/playable_class.js";
|
|
23
|
+
export { playableSpecializationMedia } from "../wow/game_data/playable_specialization.js";
|
|
24
|
+
export { playableRace, playableRaces } from "../wow/game_data/playable_race.js";
|
|
25
|
+
export { powerType, powerTypes } from "../wow/game_data/power_type.js";
|
|
26
|
+
export { profession, professionMedia, professionRecipieMedia, professions, professionSkillTier, } from "../wow/game_data/profession.js";
|
|
27
|
+
export { questArea, questAreas, questCategories, questCategory, quests, questType, questTypes, } from "../wow/game_data/quest.js";
|
|
28
|
+
export { region, regions } from "../wow/game_data/region.js";
|
|
29
|
+
export { reputationFactions, reputationTier, reputationTiers } from "../wow/game_data/reputations.js";
|
|
30
|
+
export { searchSpell, spell, spellMedia } from "../wow/game_data/spell.js";
|
|
31
|
+
export { talent, talents, talentTreeNodes } from "../wow/game_data/talent.js";
|
|
32
|
+
export { titles } from "../wow/game_data/title.js";
|
|
33
|
+
export { toy, toys } from "../wow/game_data/toy.js";
|
|
34
|
+
export { achievementCategories, heirlooms, journalEncounters, journalExpansions, journalInstances, mount, pet, petAbilities, playableSpecialization, playableSpecializations, professionRecipie, quest, reputationFaction, searchItemAppearance, talentTree, talentTrees, title, } from "./game_data.js";
|
|
35
|
+
export { ruleset, rulesets } from "./ruleset.js";
|
|
36
|
+
export { characterAchievementStatistics, characterAchievementSummary, characterAppearanceSummary, characterCollectionHeirlooms, characterCollectionMounts, characterCollectionPets, characterCollectionToys, characterCollectionTransmogs, characterCollectionTypes, characterCompletedQuests, characterEncounterDungeons, characterEncounterRaids, characterEncounters, characterEquipments, characterMedia, characterMythicKeystoneProfile, characterProfessions, characterProfile, characterProfileStatus, characterPvpSummary, characterQuests, characterReputations, characterSpecializations, characterStatistics, characterTitles, } from "./character.js";
|
|
37
|
+
export { guild, guildAchievements, guildActivity, guildRoster } from "./guild.js";
|
|
38
|
+
export { accountCollectionsIndex, accountHeirloomsCollection, accountMountsCollection, accountPetsCollection, accountToysCollection, } from "../wow/profile/account_profile.js";
|
|
39
|
+
export { accountProfileSummary, accountTransmogsCollection } from "./account.js";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* World of Warcraft: Forever endpoints, namespace variant "forever". These are the Retail endpoint functions that
|
|
3
|
+
* the Forever API supports; the client binds them to a "forever" context. Forever runs on the Retail game data
|
|
4
|
+
* (specializations, talents, mounts, pets, toys, ...) with Classic-era content.
|
|
5
|
+
*
|
|
6
|
+
* Forever is realmless: players pick a ruleset (Normal, PvP, Roleplay, Roleplay PvP), not a realm, and characters are
|
|
7
|
+
* looked up by `name` and `surname`. The realm endpoints are left out (the realm index was taken down at launch);
|
|
8
|
+
* use `rulesets()`. Guilds are looked up by name slug alone. Auction endpoints are not included yet: the ruleset
|
|
9
|
+
* auctions route exists but returns no data.
|
|
10
|
+
* Verified against the live API (EU) on 2026-11-05.
|
|
11
|
+
*/
|
|
12
|
+
// Game Data APIs
|
|
13
|
+
export { achievement, achievementCategory, achievementMedia, achievements } from "../wow/game_data/achievement.js";
|
|
14
|
+
export { creature, creatureDisplayMedia, creatureFamilies, creatureFamily, creatureFamilyMedia, creatureType, creatureTypes, searchCreature, } from "../wow/game_data/creature.js";
|
|
15
|
+
export { guildCrestBorder, guildCrestEmblem, guildCrests } from "../wow/game_data/guild_crest.js";
|
|
16
|
+
export { heirloom } from "../wow/game_data/heirloom.js";
|
|
17
|
+
export { item, itemClass, itemClasses, itemMedia, itemSet, itemSets, itemSubclass, searchItem, } from "../wow/game_data/item.js";
|
|
18
|
+
export { itemAppearance, itemAppearanceSet, itemAppearanceSets, itemAppearanceSlot, itemAppearanceSlots, } from "../wow/game_data/item_appearance.js";
|
|
19
|
+
export { journalEncounter, journalExpansion, journalInstance, journalInstanceMedia, searchJournalEncounter, } from "../wow/game_data/journal.js";
|
|
20
|
+
export { searchMedia } from "../wow/game_data/media_search.js";
|
|
21
|
+
export { mounts, searchMount } from "../wow/game_data/mount.js";
|
|
22
|
+
export { petAbility, petAbilityMedia, petMedia, pets } from "../wow/game_data/pet.js";
|
|
23
|
+
export { playableClass, playableClasses, playableClassMedia } from "../wow/game_data/playable_class.js";
|
|
24
|
+
export { playableSpecializationMedia } from "../wow/game_data/playable_specialization.js";
|
|
25
|
+
export { playableRace, playableRaces } from "../wow/game_data/playable_race.js";
|
|
26
|
+
export { powerType, powerTypes } from "../wow/game_data/power_type.js";
|
|
27
|
+
export { profession, professionMedia, professionRecipieMedia, professions, professionSkillTier, } from "../wow/game_data/profession.js";
|
|
28
|
+
export { questArea, questAreas, questCategories, questCategory, quests, questType, questTypes, } from "../wow/game_data/quest.js";
|
|
29
|
+
export { region, regions } from "../wow/game_data/region.js";
|
|
30
|
+
export { reputationFactions, reputationTier, reputationTiers } from "../wow/game_data/reputations.js";
|
|
31
|
+
export { searchSpell, spell, spellMedia } from "../wow/game_data/spell.js";
|
|
32
|
+
export { talent, talents, talentTreeNodes } from "../wow/game_data/talent.js";
|
|
33
|
+
export { titles } from "../wow/game_data/title.js";
|
|
34
|
+
export { toy, toys } from "../wow/game_data/toy.js";
|
|
35
|
+
// Forever-typed versions of Retail endpoints (fields Retail always returns are optional here)
|
|
36
|
+
export { achievementCategories, heirlooms, journalEncounters, journalExpansions, journalInstances, mount, pet, petAbilities, playableSpecialization, playableSpecializations, professionRecipie, quest, reputationFaction, searchItemAppearance, talentTree, talentTrees, title, } from "./game_data.js";
|
|
37
|
+
// Rulesets (replace realms)
|
|
38
|
+
export { ruleset, rulesets } from "./ruleset.js";
|
|
39
|
+
// Character Profile APIs (realmless: name and surname)
|
|
40
|
+
export { characterAchievementStatistics, characterAchievementSummary, characterAppearanceSummary, characterCollectionHeirlooms, characterCollectionMounts, characterCollectionPets, characterCollectionToys, characterCollectionTransmogs, characterCollectionTypes, characterCompletedQuests, characterEncounterDungeons, characterEncounterRaids, characterEncounters, characterEquipments, characterMedia, characterMythicKeystoneProfile, characterProfessions, characterProfile, characterProfileStatus, characterPvpSummary, characterQuests, characterReputations, characterSpecializations, characterStatistics, characterTitles, } from "./character.js";
|
|
41
|
+
// Guild APIs (realmless: name slug)
|
|
42
|
+
export { guild, guildAchievements, guildActivity, guildRoster } from "./guild.js";
|
|
43
|
+
// Account Profile APIs (user token)
|
|
44
|
+
export { accountCollectionsIndex, accountHeirloomsCollection, accountMountsCollection, accountPetsCollection, accountToysCollection, } from "../wow/profile/account_profile.js";
|
|
45
|
+
export { accountProfileSummary, accountTransmogsCollection } from "./account.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WoW: Forever ruleset endpoints. Forever is realmless: players pick a ruleset (Normal, PvP, Roleplay, Roleplay PvP)
|
|
3
|
+
* instead of a realm, and each ruleset has its own auction house. The ruleset index replaces the realm index.
|
|
4
|
+
* Verified against the live API (EU, US, KR, TW) on 2026-11-05.
|
|
5
|
+
*/
|
|
6
|
+
import type { ApiContext, Href, KeyId, LinkSelfHref, LocalizedString, TypeName } from "../shared/index.js";
|
|
7
|
+
/** The index of rulesets in a region. */
|
|
8
|
+
export interface ForeverRulesets extends LinkSelfHref {
|
|
9
|
+
rulesets: KeyId[];
|
|
10
|
+
}
|
|
11
|
+
/** A Forever ruleset. */
|
|
12
|
+
export interface ForeverRuleset extends LinkSelfHref {
|
|
13
|
+
id: number;
|
|
14
|
+
name: LocalizedString;
|
|
15
|
+
/** The ruleset's auction house. */
|
|
16
|
+
auctions: Href;
|
|
17
|
+
/** The ruleset's status, e.g. `UP`. */
|
|
18
|
+
status: TypeName;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns an index of the rulesets in the region.
|
|
22
|
+
*
|
|
23
|
+
* @returns A promise that resolves to an object representing the ruleset index.
|
|
24
|
+
*/
|
|
25
|
+
export declare function rulesets(ctx: ApiContext): Promise<ForeverRulesets>;
|
|
26
|
+
/**
|
|
27
|
+
* Returns a ruleset by ID.
|
|
28
|
+
*
|
|
29
|
+
* @param rulesetId - The ID of the ruleset.
|
|
30
|
+
* @returns A promise that resolves to an object representing the ruleset.
|
|
31
|
+
*/
|
|
32
|
+
export declare function ruleset(ctx: ApiContext, rulesetId: number): Promise<ForeverRuleset>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WoW: Forever ruleset endpoints. Forever is realmless: players pick a ruleset (Normal, PvP, Roleplay, Roleplay PvP)
|
|
3
|
+
* instead of a realm, and each ruleset has its own auction house. The ruleset index replaces the realm index.
|
|
4
|
+
* Verified against the live API (EU, US, KR, TW) on 2026-11-05.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Returns an index of the rulesets in the region.
|
|
8
|
+
*
|
|
9
|
+
* @returns A promise that resolves to an object representing the ruleset index.
|
|
10
|
+
*/
|
|
11
|
+
export async function rulesets(ctx) {
|
|
12
|
+
return await ctx.request({
|
|
13
|
+
method: "GET",
|
|
14
|
+
url: "/data/wow/ruleset/index",
|
|
15
|
+
namespace: "dynamic",
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns a ruleset by ID.
|
|
20
|
+
*
|
|
21
|
+
* @param rulesetId - The ID of the ruleset.
|
|
22
|
+
* @returns A promise that resolves to an object representing the ruleset.
|
|
23
|
+
*/
|
|
24
|
+
export async function ruleset(ctx, rulesetId) {
|
|
25
|
+
return await ctx.request({
|
|
26
|
+
method: "GET",
|
|
27
|
+
url: `/data/wow/ruleset/${rulesetId}`,
|
|
28
|
+
namespace: "dynamic",
|
|
29
|
+
});
|
|
30
|
+
}
|