guildwars2-ts 1.1.1 → 1.1.4

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/dist/index.js CHANGED
@@ -70,13 +70,10 @@ var ApiTimeoutError = class _ApiTimeoutError extends Error {
70
70
  }
71
71
  };
72
72
  var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
73
- LogLevel2[LogLevel2["silly"] = 0] = "silly";
74
- LogLevel2[LogLevel2["trace"] = 1] = "trace";
75
- LogLevel2[LogLevel2["debug"] = 2] = "debug";
76
- LogLevel2[LogLevel2["info"] = 3] = "info";
77
- LogLevel2[LogLevel2["warn"] = 4] = "warn";
78
73
  LogLevel2[LogLevel2["error"] = 5] = "error";
79
- LogLevel2[LogLevel2["fatal"] = 6] = "fatal";
74
+ LogLevel2[LogLevel2["warn"] = 4] = "warn";
75
+ LogLevel2[LogLevel2["info"] = 3] = "info";
76
+ LogLevel2[LogLevel2["debug"] = 2] = "debug";
80
77
  return LogLevel2;
81
78
  })(LogLevel || {});
82
79
  var logger = new tslog.Logger({
@@ -109,8 +106,7 @@ var ApiBase = class {
109
106
  constructor(apiParams) {
110
107
  this._apiToken = apiParams?.token;
111
108
  this._language = apiParams?.language ?? "en" /* English */;
112
- this._rateLimitRetry = apiParams?.rateLimit?.retry ?? true;
113
- this._rateLimitRetryAttempts = apiParams?.rateLimit?.retry ? apiParams.rateLimit.attempts : 0;
109
+ this._rateLimitRetry = apiParams?.rateLimitRetry ?? true;
114
110
  }
115
111
  /**
116
112
  * Parameters for the api response, at top level
@@ -119,10 +115,7 @@ var ApiBase = class {
119
115
  return {
120
116
  token: this._apiToken,
121
117
  language: this._language,
122
- rateLimit: {
123
- retry: this._rateLimitRetry,
124
- attempts: this._rateLimitRetryAttempts
125
- }
118
+ rateLimitRetry: this._rateLimitRetry
126
119
  };
127
120
  }
128
121
  /**
@@ -131,8 +124,9 @@ var ApiBase = class {
131
124
  * @param endpoint - API Endpoint
132
125
  * @param apiParams - Query string
133
126
  * @param responseType - Type of the response
127
+ * @param attempts - Previously failed retry count
134
128
  */
135
- async buildRequest(endpoint, apiParams, responseType) {
129
+ async buildRequest(endpoint, apiParams, responseType, attempts) {
136
130
  const { tokenRequired } = endpoint;
137
131
  const url = this._getApiUrl(endpoint, apiParams);
138
132
  const headers = new axios.AxiosHeaders();
@@ -154,14 +148,14 @@ var ApiBase = class {
154
148
  const parse = responseType.safeParse(data);
155
149
  if (!parse.success) {
156
150
  logger.warn(
157
- "The requested data failed to parse, when using the known schema. Data is still returned, but may be incorrectly typed"
151
+ "The requested data failed to parse, when using the known schema. Data is still returned, but may be incorrectly typed. Please submit the following log to the developers:"
158
152
  );
159
- logger.warn("Please submit the following log to the developers:");
160
153
  logger.warn(parse.error.errors);
161
154
  }
155
+ logger.info(`[200] Successful request to ${endpoint.path}`);
162
156
  return data;
163
157
  } catch (error) {
164
- return await this.retryRequest(endpoint, options, responseType, apiParams, 0, error);
158
+ return await this.retryRequest(endpoint, options, responseType, apiParams, attempts ?? 0, error);
165
159
  }
166
160
  }
167
161
  /**
@@ -174,48 +168,49 @@ var ApiBase = class {
174
168
  * @param rateLimitAttempt - Current rate-limit retry counter
175
169
  * @param prevError - Error that caused a retry
176
170
  */
177
- async retryRequest(endpoint, prevOptions, responseType, apiParams, rateLimitAttempt = 0, prevError) {
171
+ async retryRequest(endpoint, prevOptions, responseType, apiParams, rateLimitAttempt, prevError) {
178
172
  if (prevError instanceof axios.AxiosError && prevError.response) {
179
173
  const { status } = prevError.response;
180
174
  switch (true) {
181
175
  case status === 401: {
182
- logger.warn(`Request to ${prevOptions.url} failed.`);
176
+ logger.warn(
177
+ // biome-ignore lint/style/noNonNullAssertion: <This will always be present>
178
+ `[401] Failed request to ${prevOptions.url}. Failed to authorize with the provided token.`
179
+ );
183
180
  throw new ApiTokenError();
184
181
  }
185
182
  case status === 403: {
186
183
  const requiredScope = prevError.response.data.text.slice(0, 1).toUpperCase() + prevError.response.data.text.slice(1);
187
- logger.warn(`Request to ${prevOptions.url} failed. ${requiredScope}.`);
184
+ logger.warn(`[403] Failed request to ${prevOptions.url}. ${requiredScope}.`);
188
185
  throw new ApiPermissionsError(requiredScope);
189
186
  }
190
187
  case status === 404: {
191
- logger.warn(`Request to ${prevOptions.url} returned no data.`);
188
+ logger.warn(`[404] Failed request to ${prevOptions.url}. No data was returned.`);
192
189
  throw new ApiNotFoundError();
193
190
  }
194
- case (status === 429 && this._rateLimitRetry): {
195
- logger.warn("Rate-limit has been reached. Request will be repeated soon.");
196
- if (rateLimitAttempt < 3) {
197
- setTimeout(async () => {
198
- return await this.retryRequest(
199
- endpoint,
200
- prevOptions,
201
- responseType,
202
- apiParams,
203
- rateLimitAttempt++,
204
- prevError
205
- );
206
- }, 1e3);
207
- break;
208
- } else {
209
- logger.error(`Rate-limit retries failed. Aborting request to ${prevOptions.url}`);
191
+ case status === 429: {
192
+ if (!this._rateLimitRetry) {
193
+ logger.warn("[429] Rate-limit has been reached, but retries were turned off. Stopping here.");
210
194
  throw new ApiRetryFailedError();
211
195
  }
196
+ if (rateLimitAttempt < 3) {
197
+ logger.warn(
198
+ // biome-ignore lint/style/noNonNullAssertion: <This will always be present>
199
+ `[429] Rate-limit has been reached. Request to ${prevOptions.url} will be repeated in 30 seconds.`
200
+ );
201
+ await new Promise((resolve) => setTimeout(() => resolve(), 3e4));
202
+ return await this.buildRequest(endpoint, apiParams, responseType, ++rateLimitAttempt);
203
+ }
204
+ logger.error(`[429] Rate-limit retries failed. Aborting request to ${prevOptions.url}`);
205
+ throw new ApiRetryFailedError();
212
206
  }
213
207
  case status === 504: {
214
- logger.warn(`Request to ${prevOptions.url} timed out.`);
208
+ logger.warn(`[504] Request to ${prevOptions.url} timed out.`);
215
209
  throw new ApiTimeoutError();
216
210
  }
217
211
  default:
218
- logger.warn(`Request to ${prevOptions.url} failed. ${prevError.message}`);
212
+ logger.warn(`[???] Request to ${prevOptions.url} failed. ${prevError.message}`);
213
+ throw new ApiGenericError();
219
214
  }
220
215
  }
221
216
  throw new ApiGenericError();
@@ -592,6 +587,107 @@ var AccountWalletDTO = zod.z.array(
592
587
  value: zod.z.number()
593
588
  })
594
589
  );
590
+ var AccountWizardsVaultDailyDTO = zod.z.object({
591
+ /** The current progress to the meta achievement for the daily. */
592
+ meta_progress_current: zod.z.number(),
593
+ /** The threshold for the meta progress to be 'complete', and the meta reward claimable. */
594
+ meta_progress_complete: zod.z.number(),
595
+ /** The ID of the item you receive for claiming the meta reward */
596
+ meta_reward_item_id: zod.z.number(),
597
+ /** The amount of Astral Acclaim you receive for claiming the meta reward */
598
+ meta_reward_astral: zod.z.number(),
599
+ /** Whether the account has claimed the meta reward. */
600
+ meta_reward_claimed: zod.z.boolean(),
601
+ /** An array of objects detailing each daily objective */
602
+ objectives: zod.z.array(
603
+ zod.z.object({
604
+ /** The ID of the objective. */
605
+ id: zod.z.number(),
606
+ /** The title of the objective. */
607
+ title: zod.z.string(),
608
+ /** The reward track containing the objective. */
609
+ track: zod.z.string(),
610
+ /** The astral acclaim awarded for the objective. */
611
+ acclaim: zod.z.number(),
612
+ /** The current progress of the objective. */
613
+ progress_current: zod.z.number(),
614
+ /** The progress status of the objective. */
615
+ progress_complete: zod.z.number(),
616
+ /** The claim status of the objective. */
617
+ claimed: zod.z.boolean()
618
+ })
619
+ )
620
+ });
621
+ var AccountWizardsVaultListingsDTO = zod.z.array(
622
+ zod.z.object({
623
+ /** The listing id. */
624
+ id: zod.z.number(),
625
+ /** The id of the item */
626
+ item_id: zod.z.number(),
627
+ /** The quantity of the item the user receives */
628
+ item_count: zod.z.number(),
629
+ /** Appears to be the position in the wizards vault UI. */
630
+ type: zod.z.enum(["Featured", "Normal", "Legacy"]),
631
+ /** The quantity of Astral Acclaim to purchase . */
632
+ cost: zod.z.number(),
633
+ /** Amount of the item already purchased. Not included if the reward is unlimited. */
634
+ purchased: zod.z.number().optional(),
635
+ /** Maximum amount that can be purchased. Not included if the reward is unlimited. */
636
+ purchase_limit: zod.z.number().optional()
637
+ })
638
+ );
639
+ var AccountWizardsVaultSpecialDTO = zod.z.object({
640
+ /** An array of objects detailing each weekly objective */
641
+ objectives: zod.z.array(
642
+ zod.z.object({
643
+ /** The ID of the objective. */
644
+ id: zod.z.number(),
645
+ /** The title of the objective. */
646
+ title: zod.z.string(),
647
+ /** The reward track containing the objective. */
648
+ track: zod.z.string(),
649
+ /** The astral acclaim awarded for the objective. */
650
+ acclaim: zod.z.number(),
651
+ /** The current progress of the objective. */
652
+ progress_current: zod.z.number(),
653
+ /** The progress status of the objective. */
654
+ progress_complete: zod.z.number(),
655
+ /** The claim status of the objective. */
656
+ claimed: zod.z.boolean()
657
+ })
658
+ )
659
+ });
660
+ var AccountWizardsVaultWeeklyDTO = zod.z.object({
661
+ /** The current progress to the meta achievement for the weekly. */
662
+ meta_progress_current: zod.z.number(),
663
+ /** The threshold for the meta progress to be 'complete', and the meta reward claimable. */
664
+ meta_progress_complete: zod.z.number(),
665
+ /** The ID of the item you receive for claiming the meta reward */
666
+ meta_reward_item_id: zod.z.number(),
667
+ /** The amount of Astral Acclaim you receive for claiming the meta reward */
668
+ meta_reward_astral: zod.z.number(),
669
+ /** Whether the account has claimed the meta reward. */
670
+ meta_reward_claimed: zod.z.boolean(),
671
+ /** An array of objects detailing each weekly objective */
672
+ objectives: zod.z.array(
673
+ zod.z.object({
674
+ /** The ID of the objective. */
675
+ id: zod.z.number(),
676
+ /** The title of the objective. */
677
+ title: zod.z.string(),
678
+ /** The reward track containing the objective. */
679
+ track: zod.z.string(),
680
+ /** The astral acclaim awarded for the objective. */
681
+ acclaim: zod.z.number(),
682
+ /** The current progress of the objective. */
683
+ progress_current: zod.z.number(),
684
+ /** The progress status of the objective. */
685
+ progress_complete: zod.z.number(),
686
+ /** The claim status of the objective. */
687
+ claimed: zod.z.boolean()
688
+ })
689
+ )
690
+ });
595
691
  var AccountWorldBossesDTO = zod.z.array(
596
692
  /** Name of the world boss. */
597
693
  zod.z.string()
@@ -1783,7 +1879,7 @@ var ColorsDTO = zod.z.array(
1783
1879
  /** ID of the dye item. */
1784
1880
  item: zod.z.number().optional(),
1785
1881
  /** Color categories. */
1786
- categories: zod.z.tuple([Hue, Material, Rarity]).optional()
1882
+ categories: zod.z.tuple([Hue, Material, Rarity]).or(zod.z.array(zod.z.undefined()).length(0))
1787
1883
  })
1788
1884
  );
1789
1885
  var EmblemDTO = zod.z.array(
@@ -3643,6 +3739,44 @@ var StoriesSeasonsDTO = zod.z.array(
3643
3739
  stories: zod.z.array(zod.z.number())
3644
3740
  })
3645
3741
  );
3742
+ var WizardsVaultDTO = zod.z.object({
3743
+ /** The name of the current season. */
3744
+ title: zod.z.string(),
3745
+ /** The date that the current season begins. */
3746
+ start: zod.z.string(),
3747
+ /** The date that the current season ends. */
3748
+ end: zod.z.string(),
3749
+ /** The wizard's vault listing ids available (use the sub endpoint to view item details). */
3750
+ listings: zod.z.array(zod.z.number()),
3751
+ /** The wizard's vault objective ids available (use the sub endpoint to view item details). */
3752
+ objectives: zod.z.array(zod.z.number())
3753
+ });
3754
+ var WizardsVaultListingsDTO = zod.z.array(
3755
+ zod.z.object({
3756
+ /** The listing id. */
3757
+ id: zod.z.number(),
3758
+ /** The id of the item */
3759
+ item_id: zod.z.number(),
3760
+ /** The quantity of the item the user receives */
3761
+ item_count: zod.z.number(),
3762
+ /** Appears to be the position in the wizards vault UI. */
3763
+ type: zod.z.enum(["Featured", "Normal", "Legacy"]),
3764
+ /** The quantity of Astral Acclaim to purchase . */
3765
+ cost: zod.z.number()
3766
+ })
3767
+ );
3768
+ var WizardsVaultObjectivesDTO = zod.z.array(
3769
+ zod.z.object({
3770
+ /** The ID of the objective. */
3771
+ id: zod.z.number(),
3772
+ /** The title of the objective. */
3773
+ title: zod.z.string(),
3774
+ /** The reward track containing the objective. */
3775
+ track: zod.z.enum(["PvP", "WvW", "PvE"]),
3776
+ /** The amount of astral acclaim awarded. */
3777
+ acclaim: zod.z.number()
3778
+ })
3779
+ );
3646
3780
  var WvWAbilitiesDTO = zod.z.array(
3647
3781
  zod.z.object({
3648
3782
  /** The id of the abilities.*/
@@ -4032,6 +4166,22 @@ var endpoints = {
4032
4166
  path: "v2/account/wallet",
4033
4167
  tokenRequired: true
4034
4168
  },
4169
+ wizardsVaultDaily: {
4170
+ path: "v2/account/wizardsvault/daily",
4171
+ tokenRequired: true
4172
+ },
4173
+ wizardsVaultListings: {
4174
+ path: "v2/account/wizardsvault/listings",
4175
+ tokenRequired: true
4176
+ },
4177
+ wizardsVaultSpecial: {
4178
+ path: "v2/account/wizardsvault/special",
4179
+ tokenRequired: true
4180
+ },
4181
+ wizardsVaultWeekly: {
4182
+ path: "v2/account/wizardsvault/weekly",
4183
+ tokenRequired: true
4184
+ },
4035
4185
  worldBosses: {
4036
4186
  path: "v2/account/worldbosses",
4037
4187
  tokenRequired: true
@@ -4700,6 +4850,28 @@ var endpoints = {
4700
4850
  tokenRequired: false
4701
4851
  }
4702
4852
  },
4853
+ wizardsVault: {
4854
+ root: {
4855
+ path: "v2/wizardsvault",
4856
+ tokenRequired: false
4857
+ },
4858
+ listingsAll: {
4859
+ path: "v2/wizardsvault/listings",
4860
+ tokenRequired: false
4861
+ },
4862
+ listingsById: {
4863
+ path: "v2/wizardsvault/listings?ids=$(ids)",
4864
+ tokenRequired: false
4865
+ },
4866
+ objectivesAll: {
4867
+ path: "v2/wizardsvault/objectives",
4868
+ tokenRequired: false
4869
+ },
4870
+ objectivesById: {
4871
+ path: "v2/wizardsvault/objectives?ids=$(ids)",
4872
+ tokenRequired: false
4873
+ }
4874
+ },
4703
4875
  worldBosses: {
4704
4876
  path: "v2/worldbosses",
4705
4877
  tokenRequired: false
@@ -5040,6 +5212,46 @@ var AccountApi = class extends ApiBase {
5040
5212
  async getWallet() {
5041
5213
  return await this.buildRequest(endpoints.account.wallet, {}, AccountWalletDTO);
5042
5214
  }
5215
+ /**
5216
+ * Returns the current set of daily Wizard's Vault achievements for the account.
5217
+ */
5218
+ async getWizardsVaultDaily() {
5219
+ return await this.buildRequest(
5220
+ endpoints.account.wizardsVaultDaily,
5221
+ {},
5222
+ AccountWizardsVaultDailyDTO
5223
+ );
5224
+ }
5225
+ /**
5226
+ * Returns the current set of Wizard's Vault rewards, along with details about which have already been purchased by the account, and in what quantity.
5227
+ */
5228
+ async getWizardsVaultListings() {
5229
+ return await this.buildRequest(
5230
+ endpoints.account.wizardsVaultListings,
5231
+ {},
5232
+ AccountWizardsVaultListingsDTO
5233
+ );
5234
+ }
5235
+ /**
5236
+ * Returns the current set of special Wizard's Vault achievements for the account.
5237
+ */
5238
+ async getWizardsVaultSpecial() {
5239
+ return await this.buildRequest(
5240
+ endpoints.account.wizardsVaultSpecial,
5241
+ {},
5242
+ AccountWizardsVaultSpecialDTO
5243
+ );
5244
+ }
5245
+ /**
5246
+ * Returns the current set of weekly Wizard's Vault achievements for the account.
5247
+ */
5248
+ async getWizardsVaultWeekly() {
5249
+ return await this.buildRequest(
5250
+ endpoints.account.wizardsVaultWeekly,
5251
+ {},
5252
+ AccountWizardsVaultWeeklyDTO
5253
+ );
5254
+ }
5043
5255
  /**
5044
5256
  * Returns information about which world bosses have been killed by the account since daily-reset.
5045
5257
  */
@@ -6105,6 +6317,38 @@ var PvPApi = class extends ApiBase {
6105
6317
  }
6106
6318
  };
6107
6319
 
6320
+ // src/apis/wizardsvault/wizardsvault.ts
6321
+ var WizardsVaultApi = class extends ApiBase {
6322
+ /**
6323
+ * Returns information about the current Wizard's Vault season.
6324
+ */
6325
+ async get() {
6326
+ return await this.buildRequest(endpoints.wizardsVault.root, {}, WizardsVaultDTO);
6327
+ }
6328
+ async getListings(ids) {
6329
+ if (ids)
6330
+ return await this.buildRequest(
6331
+ endpoints.wizardsVault.listingsById,
6332
+ { ids },
6333
+ WizardsVaultListingsDTO
6334
+ );
6335
+ return await this.buildRequest(endpoints.wizardsVault.listingsAll, {}, numberArrayType);
6336
+ }
6337
+ async getObjectives(ids) {
6338
+ if (ids)
6339
+ return await this.buildRequest(
6340
+ endpoints.wizardsVault.objectivesById,
6341
+ { ids },
6342
+ WizardsVaultObjectivesDTO
6343
+ );
6344
+ return await this.buildRequest(
6345
+ endpoints.wizardsVault.objectivesAll,
6346
+ {},
6347
+ numberArrayType
6348
+ );
6349
+ }
6350
+ };
6351
+
6108
6352
  // src/apis/wvw/wvw.ts
6109
6353
  var WorldVsWorldApi = class extends ApiBase {
6110
6354
  async getAbilities(ids) {
@@ -6280,6 +6524,8 @@ var GW2Api = class extends ApiBase {
6280
6524
  tokenInfo = new TokenInfoApi(this.getParams());
6281
6525
  /** /v2/traits Api */
6282
6526
  traits = new TraitsApi(this.getParams());
6527
+ /** /v2/wizardsvault Api */
6528
+ wizardsVault = new WizardsVaultApi(this.getParams());
6283
6529
  /** /v2/worldbosses Api */
6284
6530
  worldBosses = new WorldBossesApi(this.getParams());
6285
6531
  /** /v2/worlds Api */
@@ -6293,5 +6539,3 @@ exports.GW2Api = GW2Api;
6293
6539
  exports.LogLevel = LogLevel;
6294
6540
  exports.setLogLevel = setLogLevel;
6295
6541
  exports.setPathLogging = setPathLogging;
6296
- //# sourceMappingURL=out.js.map
6297
- //# sourceMappingURL=index.js.map