@blizzard-api/client 0.0.2 → 0.0.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.cjs CHANGED
@@ -34,7 +34,7 @@ __export(src_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(src_exports);
36
36
 
37
- // src/client.ts
37
+ // src/client/index.ts
38
38
  var import_node_querystring = require("querystring");
39
39
  var import_core = require("@blizzard-api/core");
40
40
  var import_axios = __toESM(require("axios"), 1);
@@ -51,6 +51,33 @@ var BlizzardApiClient = class {
51
51
  };
52
52
  }
53
53
  axios = import_axios.default.create();
54
+ getRequestUrl(resource, options) {
55
+ const config = { ...this.defaults, ...options };
56
+ const endpoint = (0, import_core.getEndpoint)(config.origin, config.locale);
57
+ const backslashSeparator = resource.path.startsWith("/") ? "" : "/";
58
+ return `${endpoint.hostname}${backslashSeparator}${resource.path}`;
59
+ }
60
+ getRequestConfig(resource, options, headers) {
61
+ const config = { ...this.defaults, ...options };
62
+ const endpoint = (0, import_core.getEndpoint)(config.origin, config.locale);
63
+ const namespace = resource.namespace ? { "Battlenet-Namespace": `${resource.namespace}-${endpoint.origin}` } : void 0;
64
+ return {
65
+ headers: {
66
+ ...headers,
67
+ ...namespace,
68
+ "Content-Type": "application/json",
69
+ Authorization: `Bearer ${config.token}`
70
+ },
71
+ params: {
72
+ locale: endpoint.locale
73
+ }
74
+ };
75
+ }
76
+ sendRequest(resource, options, headers) {
77
+ const url = this.getRequestUrl(resource, options);
78
+ const config = this.getRequestConfig(resource, options, headers);
79
+ return this.axios.get(url, config);
80
+ }
54
81
  getAccessToken = async (options) => {
55
82
  const { key, secret, origin } = { ...this.defaults, ...options };
56
83
  return this.axios.post(`https://${origin}.battle.net/oauth/token`, void 0, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/client.ts"],"sourcesContent":["export type { ClientOptions } from './client.js';\r\nexport { BlizzardApiClient } from './client.js';\r\n","import { stringify } from 'node:querystring';\r\nimport { getEndpoint } from '@blizzard-api/core';\r\nimport type { Origins, Locales } from '@blizzard-api/core';\r\nimport type { AxiosResponse } from 'axios';\r\nimport axios from 'axios';\r\n\r\nexport interface ClientOptions {\r\n key: string;\r\n secret: string;\r\n origin: Origins;\r\n locale?: Locales;\r\n token?: string;\r\n}\r\n\r\ninterface AccessToken {\r\n access_token: string;\r\n token_type: 'bearer';\r\n expires_in: number;\r\n sub?: string;\r\n}\r\n\r\ninterface AccessTokenRequestArguments {\r\n origin?: Origins;\r\n key?: string;\r\n secret?: string;\r\n}\r\n\r\ninterface ValidateAccessTokenArguments {\r\n origin?: Origins;\r\n token?: string;\r\n}\r\n\r\ninterface ValidateAccessTokenResponse {\r\n scope: Array<string>;\r\n account_authorities: Array<unknown>;\r\n exp: number;\r\n client_authorities: Array<unknown>;\r\n authorities: Array<string>;\r\n client_id: string;\r\n}\r\n\r\ninterface IBlizzardApiClient {\r\n getAccessToken: (options: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;\r\n setAccessToken: (token: string) => void;\r\n refreshAccessToken: (options: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;\r\n validateAccessToken: (options: ValidateAccessTokenArguments) => Promise<AxiosResponse<ValidateAccessTokenResponse>>;\r\n}\r\n\r\nexport class BlizzardApiClient implements IBlizzardApiClient {\r\n public defaults: {\r\n key: string;\r\n secret: string;\r\n origin: Origins;\r\n locale: Locales;\r\n token?: string;\r\n };\r\n\r\n constructor(options: ClientOptions) {\r\n const { origin, locale } = getEndpoint(options.origin, options.locale);\r\n this.defaults = {\r\n key: options.key,\r\n secret: options.secret,\r\n token: options.token,\r\n origin: origin,\r\n locale: locale,\r\n };\r\n }\r\n\r\n public axios = axios.create();\r\n\r\n public getAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const { key, secret, origin } = { ...this.defaults, ...options };\r\n return this.axios.post<AccessToken>(`https://${origin}.battle.net/oauth/token`, undefined, {\r\n params: {\r\n grant_type: 'client_credentials',\r\n },\r\n auth: {\r\n username: key,\r\n password: secret,\r\n },\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n };\r\n\r\n public setAccessToken = (token: string): void => {\r\n this.defaults.token = token;\r\n };\r\n\r\n public refreshAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const response = await this.getAccessToken(options);\r\n this.setAccessToken(response.data.access_token);\r\n return response;\r\n };\r\n\r\n public validateAccessToken = async (\r\n options?: ValidateAccessTokenArguments,\r\n ): Promise<AxiosResponse<ValidateAccessTokenResponse>> => {\r\n const { origin, token } = { ...this.defaults, ...options };\r\n\r\n if (!token) {\r\n throw new Error('No token has been set previously or been passed to the validateAccessToken method.');\r\n }\r\n\r\n return await this.axios.post<ValidateAccessTokenResponse>(\r\n `https://${origin}.battle.net/oauth/check_token`,\r\n stringify({ token }),\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n },\r\n );\r\n };\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,8BAA0B;AAC1B,kBAA4B;AAG5B,mBAAkB;AA4CX,IAAM,oBAAN,MAAsD;AAAA,EACpD;AAAA,EAQP,YAAY,SAAwB;AAClC,UAAM,EAAE,QAAQ,OAAO,QAAI,yBAAY,QAAQ,QAAQ,QAAQ,MAAM;AACrE,SAAK,WAAW;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEO,QAAQ,aAAAA,QAAM,OAAO;AAAA,EAErB,iBAAiB,OAAO,YAA+E;AAC5G,UAAM,EAAE,KAAK,QAAQ,OAAO,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC/D,WAAO,KAAK,MAAM,KAAkB,WAAW,MAAM,2BAA2B,QAAW;AAAA,MACzF,QAAQ;AAAA,QACN,YAAY;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,CAAC,UAAwB;AAC/C,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEO,qBAAqB,OAAO,YAA+E;AAChH,UAAM,WAAW,MAAM,KAAK,eAAe,OAAO;AAClD,SAAK,eAAe,SAAS,KAAK,YAAY;AAC9C,WAAO;AAAA,EACT;AAAA,EAEO,sBAAsB,OAC3B,YACwD;AACxD,UAAM,EAAE,QAAQ,MAAM,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAEzD,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,oFAAoF;AAAA,IACtG;AAEA,WAAO,MAAM,KAAK,MAAM;AAAA,MACtB,WAAW,MAAM;AAAA,UACjB,mCAAU,EAAE,MAAM,CAAC;AAAA,MACnB;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":["axios"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client/index.ts"],"sourcesContent":["export { BlizzardApiClient } from './client/index.js';\r\n","import { stringify } from 'node:querystring';\r\nimport { getEndpoint } from '@blizzard-api/core';\r\nimport type { Origins, Locales, ClientOptions, ResourceResponse, Resource } from '@blizzard-api/core';\r\nimport type { AxiosResponse } from 'axios';\r\nimport axios from 'axios';\r\nimport type {\r\n AccessToken,\r\n AccessTokenRequestArguments,\r\n IBlizzardApiClient,\r\n ValidateAccessTokenArguments,\r\n ValidateAccessTokenResponse,\r\n} from './types';\r\n\r\nexport class BlizzardApiClient implements IBlizzardApiClient {\r\n public defaults: {\r\n key: string;\r\n secret: string;\r\n origin: Origins;\r\n locale: Locales;\r\n token?: string;\r\n };\r\n\r\n constructor(options: ClientOptions) {\r\n const { origin, locale } = getEndpoint(options.origin, options.locale);\r\n this.defaults = {\r\n key: options.key,\r\n secret: options.secret,\r\n token: options.token,\r\n origin: origin,\r\n locale: locale,\r\n };\r\n }\r\n\r\n public axios = axios.create();\r\n\r\n public getRequestUrl<T = unknown>(resource: Resource<T>, options?: Partial<ClientOptions>) {\r\n const config = { ...this.defaults, ...options };\r\n const endpoint = getEndpoint(config.origin, config.locale);\r\n\r\n const backslashSeparator = resource.path.startsWith('/') ? '' : '/';\r\n\r\n return `${endpoint.hostname}${backslashSeparator}${resource.path}`;\r\n }\r\n\r\n public getRequestConfig<T = unknown>(\r\n resource: Resource<T>,\r\n options?: Partial<ClientOptions>,\r\n headers?: Record<string, string>,\r\n ) {\r\n const config = { ...this.defaults, ...options };\r\n const endpoint = getEndpoint(config.origin, config.locale);\r\n\r\n const namespace = resource.namespace\r\n ? { 'Battlenet-Namespace': `${resource.namespace}-${endpoint.origin}` }\r\n : undefined;\r\n\r\n return {\r\n headers: {\r\n ...headers,\r\n ...namespace,\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${config.token}`,\r\n },\r\n params: {\r\n locale: endpoint.locale,\r\n },\r\n };\r\n }\r\n\r\n public sendRequest<T = void>(\r\n resource: Resource<T>,\r\n options?: Partial<ClientOptions>,\r\n headers?: Record<string, string>,\r\n ): ResourceResponse<AxiosResponse<T>> {\r\n const url = this.getRequestUrl(resource, options);\r\n const config = this.getRequestConfig(resource, options, headers);\r\n\r\n return this.axios.get<T>(url, config);\r\n }\r\n\r\n public getAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const { key, secret, origin } = { ...this.defaults, ...options };\r\n return this.axios.post<AccessToken>(`https://${origin}.battle.net/oauth/token`, undefined, {\r\n params: {\r\n grant_type: 'client_credentials',\r\n },\r\n auth: {\r\n username: key,\r\n password: secret,\r\n },\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n };\r\n\r\n public setAccessToken = (token: string): void => {\r\n this.defaults.token = token;\r\n };\r\n\r\n public refreshAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const response = await this.getAccessToken(options);\r\n this.setAccessToken(response.data.access_token);\r\n return response;\r\n };\r\n\r\n public validateAccessToken = async (\r\n options?: ValidateAccessTokenArguments,\r\n ): Promise<AxiosResponse<ValidateAccessTokenResponse>> => {\r\n const { origin, token } = { ...this.defaults, ...options };\r\n\r\n if (!token) {\r\n throw new Error('No token has been set previously or been passed to the validateAccessToken method.');\r\n }\r\n\r\n return await this.axios.post<ValidateAccessTokenResponse>(\r\n `https://${origin}.battle.net/oauth/check_token`,\r\n stringify({ token }),\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n },\r\n );\r\n };\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,8BAA0B;AAC1B,kBAA4B;AAG5B,mBAAkB;AASX,IAAM,oBAAN,MAAsD;AAAA,EACpD;AAAA,EAQP,YAAY,SAAwB;AAClC,UAAM,EAAE,QAAQ,OAAO,QAAI,yBAAY,QAAQ,QAAQ,QAAQ,MAAM;AACrE,SAAK,WAAW;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEO,QAAQ,aAAAA,QAAM,OAAO;AAAA,EAErB,cAA2B,UAAuB,SAAkC;AACzF,UAAM,SAAS,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC9C,UAAM,eAAW,yBAAY,OAAO,QAAQ,OAAO,MAAM;AAEzD,UAAM,qBAAqB,SAAS,KAAK,WAAW,GAAG,IAAI,KAAK;AAEhE,WAAO,GAAG,SAAS,QAAQ,GAAG,kBAAkB,GAAG,SAAS,IAAI;AAAA,EAClE;AAAA,EAEO,iBACL,UACA,SACA,SACA;AACA,UAAM,SAAS,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC9C,UAAM,eAAW,yBAAY,OAAO,QAAQ,OAAO,MAAM;AAEzD,UAAM,YAAY,SAAS,YACvB,EAAE,uBAAuB,GAAG,SAAS,SAAS,IAAI,SAAS,MAAM,GAAG,IACpE;AAEJ,WAAO;AAAA,MACL,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,gBAAgB;AAAA,QAChB,eAAe,UAAU,OAAO,KAAK;AAAA,MACvC;AAAA,MACA,QAAQ;AAAA,QACN,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEO,YACL,UACA,SACA,SACoC;AACpC,UAAM,MAAM,KAAK,cAAc,UAAU,OAAO;AAChD,UAAM,SAAS,KAAK,iBAAiB,UAAU,SAAS,OAAO;AAE/D,WAAO,KAAK,MAAM,IAAO,KAAK,MAAM;AAAA,EACtC;AAAA,EAEO,iBAAiB,OAAO,YAA+E;AAC5G,UAAM,EAAE,KAAK,QAAQ,OAAO,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC/D,WAAO,KAAK,MAAM,KAAkB,WAAW,MAAM,2BAA2B,QAAW;AAAA,MACzF,QAAQ;AAAA,QACN,YAAY;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,CAAC,UAAwB;AAC/C,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEO,qBAAqB,OAAO,YAA+E;AAChH,UAAM,WAAW,MAAM,KAAK,eAAe,OAAO;AAClD,SAAK,eAAe,SAAS,KAAK,YAAY;AAC9C,WAAO;AAAA,EACT;AAAA,EAEO,sBAAsB,OAC3B,YACwD;AACxD,UAAM,EAAE,QAAQ,MAAM,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAEzD,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,oFAAoF;AAAA,IACtG;AAEA,WAAO,MAAM,KAAK,MAAM;AAAA,MACtB,WAAW,MAAM;AAAA,UACjB,mCAAU,EAAE,MAAM,CAAC;AAAA,MACnB;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":["axios"]}
package/dist/index.d.cts CHANGED
@@ -1,14 +1,7 @@
1
1
  import * as axios from 'axios';
2
2
  import { AxiosResponse } from 'axios';
3
- import { Origins, Locales } from '@blizzard-api/core';
3
+ import { Origins, Locales, ClientOptions, Resource, ResourceResponse } from '@blizzard-api/core';
4
4
 
5
- interface ClientOptions {
6
- key: string;
7
- secret: string;
8
- origin: Origins;
9
- locale?: Locales;
10
- token?: string;
11
- }
12
5
  interface AccessToken {
13
6
  access_token: string;
14
7
  token_type: 'bearer';
@@ -38,6 +31,7 @@ interface IBlizzardApiClient {
38
31
  refreshAccessToken: (options: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;
39
32
  validateAccessToken: (options: ValidateAccessTokenArguments) => Promise<AxiosResponse<ValidateAccessTokenResponse>>;
40
33
  }
34
+
41
35
  declare class BlizzardApiClient implements IBlizzardApiClient {
42
36
  defaults: {
43
37
  key: string;
@@ -48,10 +42,22 @@ declare class BlizzardApiClient implements IBlizzardApiClient {
48
42
  };
49
43
  constructor(options: ClientOptions);
50
44
  axios: axios.AxiosInstance;
45
+ getRequestUrl<T = unknown>(resource: Resource<T>, options?: Partial<ClientOptions>): string;
46
+ getRequestConfig<T = unknown>(resource: Resource<T>, options?: Partial<ClientOptions>, headers?: Record<string, string>): {
47
+ headers: {
48
+ 'Content-Type': string;
49
+ Authorization: string;
50
+ 'Battlenet-Namespace'?: string | undefined;
51
+ };
52
+ params: {
53
+ locale: "en_US" | "es_MX" | "pt_BR" | "en_GB" | "es_ES" | "fr_FR" | "ru_RU" | "de_DE" | "pt_PT" | "it_IT" | "ko_KR" | "zh_TW" | "multi";
54
+ };
55
+ };
56
+ sendRequest<T = void>(resource: Resource<T>, options?: Partial<ClientOptions>, headers?: Record<string, string>): ResourceResponse<AxiosResponse<T>>;
51
57
  getAccessToken: (options?: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;
52
58
  setAccessToken: (token: string) => void;
53
59
  refreshAccessToken: (options?: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;
54
60
  validateAccessToken: (options?: ValidateAccessTokenArguments) => Promise<AxiosResponse<ValidateAccessTokenResponse>>;
55
61
  }
56
62
 
57
- export { BlizzardApiClient, type ClientOptions };
63
+ export { BlizzardApiClient };
package/dist/index.d.ts CHANGED
@@ -1,14 +1,7 @@
1
1
  import * as axios from 'axios';
2
2
  import { AxiosResponse } from 'axios';
3
- import { Origins, Locales } from '@blizzard-api/core';
3
+ import { Origins, Locales, ClientOptions, Resource, ResourceResponse } from '@blizzard-api/core';
4
4
 
5
- interface ClientOptions {
6
- key: string;
7
- secret: string;
8
- origin: Origins;
9
- locale?: Locales;
10
- token?: string;
11
- }
12
5
  interface AccessToken {
13
6
  access_token: string;
14
7
  token_type: 'bearer';
@@ -38,6 +31,7 @@ interface IBlizzardApiClient {
38
31
  refreshAccessToken: (options: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;
39
32
  validateAccessToken: (options: ValidateAccessTokenArguments) => Promise<AxiosResponse<ValidateAccessTokenResponse>>;
40
33
  }
34
+
41
35
  declare class BlizzardApiClient implements IBlizzardApiClient {
42
36
  defaults: {
43
37
  key: string;
@@ -48,10 +42,22 @@ declare class BlizzardApiClient implements IBlizzardApiClient {
48
42
  };
49
43
  constructor(options: ClientOptions);
50
44
  axios: axios.AxiosInstance;
45
+ getRequestUrl<T = unknown>(resource: Resource<T>, options?: Partial<ClientOptions>): string;
46
+ getRequestConfig<T = unknown>(resource: Resource<T>, options?: Partial<ClientOptions>, headers?: Record<string, string>): {
47
+ headers: {
48
+ 'Content-Type': string;
49
+ Authorization: string;
50
+ 'Battlenet-Namespace'?: string | undefined;
51
+ };
52
+ params: {
53
+ locale: "en_US" | "es_MX" | "pt_BR" | "en_GB" | "es_ES" | "fr_FR" | "ru_RU" | "de_DE" | "pt_PT" | "it_IT" | "ko_KR" | "zh_TW" | "multi";
54
+ };
55
+ };
56
+ sendRequest<T = void>(resource: Resource<T>, options?: Partial<ClientOptions>, headers?: Record<string, string>): ResourceResponse<AxiosResponse<T>>;
51
57
  getAccessToken: (options?: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;
52
58
  setAccessToken: (token: string) => void;
53
59
  refreshAccessToken: (options?: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;
54
60
  validateAccessToken: (options?: ValidateAccessTokenArguments) => Promise<AxiosResponse<ValidateAccessTokenResponse>>;
55
61
  }
56
62
 
57
- export { BlizzardApiClient, type ClientOptions };
63
+ export { BlizzardApiClient };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // src/client.ts
1
+ // src/client/index.ts
2
2
  import { stringify } from "querystring";
3
3
  import { getEndpoint } from "@blizzard-api/core";
4
4
  import axios from "axios";
@@ -15,6 +15,33 @@ var BlizzardApiClient = class {
15
15
  };
16
16
  }
17
17
  axios = axios.create();
18
+ getRequestUrl(resource, options) {
19
+ const config = { ...this.defaults, ...options };
20
+ const endpoint = getEndpoint(config.origin, config.locale);
21
+ const backslashSeparator = resource.path.startsWith("/") ? "" : "/";
22
+ return `${endpoint.hostname}${backslashSeparator}${resource.path}`;
23
+ }
24
+ getRequestConfig(resource, options, headers) {
25
+ const config = { ...this.defaults, ...options };
26
+ const endpoint = getEndpoint(config.origin, config.locale);
27
+ const namespace = resource.namespace ? { "Battlenet-Namespace": `${resource.namespace}-${endpoint.origin}` } : void 0;
28
+ return {
29
+ headers: {
30
+ ...headers,
31
+ ...namespace,
32
+ "Content-Type": "application/json",
33
+ Authorization: `Bearer ${config.token}`
34
+ },
35
+ params: {
36
+ locale: endpoint.locale
37
+ }
38
+ };
39
+ }
40
+ sendRequest(resource, options, headers) {
41
+ const url = this.getRequestUrl(resource, options);
42
+ const config = this.getRequestConfig(resource, options, headers);
43
+ return this.axios.get(url, config);
44
+ }
18
45
  getAccessToken = async (options) => {
19
46
  const { key, secret, origin } = { ...this.defaults, ...options };
20
47
  return this.axios.post(`https://${origin}.battle.net/oauth/token`, void 0, {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts"],"sourcesContent":["import { stringify } from 'node:querystring';\r\nimport { getEndpoint } from '@blizzard-api/core';\r\nimport type { Origins, Locales } from '@blizzard-api/core';\r\nimport type { AxiosResponse } from 'axios';\r\nimport axios from 'axios';\r\n\r\nexport interface ClientOptions {\r\n key: string;\r\n secret: string;\r\n origin: Origins;\r\n locale?: Locales;\r\n token?: string;\r\n}\r\n\r\ninterface AccessToken {\r\n access_token: string;\r\n token_type: 'bearer';\r\n expires_in: number;\r\n sub?: string;\r\n}\r\n\r\ninterface AccessTokenRequestArguments {\r\n origin?: Origins;\r\n key?: string;\r\n secret?: string;\r\n}\r\n\r\ninterface ValidateAccessTokenArguments {\r\n origin?: Origins;\r\n token?: string;\r\n}\r\n\r\ninterface ValidateAccessTokenResponse {\r\n scope: Array<string>;\r\n account_authorities: Array<unknown>;\r\n exp: number;\r\n client_authorities: Array<unknown>;\r\n authorities: Array<string>;\r\n client_id: string;\r\n}\r\n\r\ninterface IBlizzardApiClient {\r\n getAccessToken: (options: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;\r\n setAccessToken: (token: string) => void;\r\n refreshAccessToken: (options: AccessTokenRequestArguments) => Promise<AxiosResponse<AccessToken>>;\r\n validateAccessToken: (options: ValidateAccessTokenArguments) => Promise<AxiosResponse<ValidateAccessTokenResponse>>;\r\n}\r\n\r\nexport class BlizzardApiClient implements IBlizzardApiClient {\r\n public defaults: {\r\n key: string;\r\n secret: string;\r\n origin: Origins;\r\n locale: Locales;\r\n token?: string;\r\n };\r\n\r\n constructor(options: ClientOptions) {\r\n const { origin, locale } = getEndpoint(options.origin, options.locale);\r\n this.defaults = {\r\n key: options.key,\r\n secret: options.secret,\r\n token: options.token,\r\n origin: origin,\r\n locale: locale,\r\n };\r\n }\r\n\r\n public axios = axios.create();\r\n\r\n public getAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const { key, secret, origin } = { ...this.defaults, ...options };\r\n return this.axios.post<AccessToken>(`https://${origin}.battle.net/oauth/token`, undefined, {\r\n params: {\r\n grant_type: 'client_credentials',\r\n },\r\n auth: {\r\n username: key,\r\n password: secret,\r\n },\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n };\r\n\r\n public setAccessToken = (token: string): void => {\r\n this.defaults.token = token;\r\n };\r\n\r\n public refreshAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const response = await this.getAccessToken(options);\r\n this.setAccessToken(response.data.access_token);\r\n return response;\r\n };\r\n\r\n public validateAccessToken = async (\r\n options?: ValidateAccessTokenArguments,\r\n ): Promise<AxiosResponse<ValidateAccessTokenResponse>> => {\r\n const { origin, token } = { ...this.defaults, ...options };\r\n\r\n if (!token) {\r\n throw new Error('No token has been set previously or been passed to the validateAccessToken method.');\r\n }\r\n\r\n return await this.axios.post<ValidateAccessTokenResponse>(\r\n `https://${origin}.battle.net/oauth/check_token`,\r\n stringify({ token }),\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n },\r\n );\r\n };\r\n}\r\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAG5B,OAAO,WAAW;AA4CX,IAAM,oBAAN,MAAsD;AAAA,EACpD;AAAA,EAQP,YAAY,SAAwB;AAClC,UAAM,EAAE,QAAQ,OAAO,IAAI,YAAY,QAAQ,QAAQ,QAAQ,MAAM;AACrE,SAAK,WAAW;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEO,QAAQ,MAAM,OAAO;AAAA,EAErB,iBAAiB,OAAO,YAA+E;AAC5G,UAAM,EAAE,KAAK,QAAQ,OAAO,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC/D,WAAO,KAAK,MAAM,KAAkB,WAAW,MAAM,2BAA2B,QAAW;AAAA,MACzF,QAAQ;AAAA,QACN,YAAY;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,CAAC,UAAwB;AAC/C,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEO,qBAAqB,OAAO,YAA+E;AAChH,UAAM,WAAW,MAAM,KAAK,eAAe,OAAO;AAClD,SAAK,eAAe,SAAS,KAAK,YAAY;AAC9C,WAAO;AAAA,EACT;AAAA,EAEO,sBAAsB,OAC3B,YACwD;AACxD,UAAM,EAAE,QAAQ,MAAM,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAEzD,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,oFAAoF;AAAA,IACtG;AAEA,WAAO,MAAM,KAAK,MAAM;AAAA,MACtB,WAAW,MAAM;AAAA,MACjB,UAAU,EAAE,MAAM,CAAC;AAAA,MACnB;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/client/index.ts"],"sourcesContent":["import { stringify } from 'node:querystring';\r\nimport { getEndpoint } from '@blizzard-api/core';\r\nimport type { Origins, Locales, ClientOptions, ResourceResponse, Resource } from '@blizzard-api/core';\r\nimport type { AxiosResponse } from 'axios';\r\nimport axios from 'axios';\r\nimport type {\r\n AccessToken,\r\n AccessTokenRequestArguments,\r\n IBlizzardApiClient,\r\n ValidateAccessTokenArguments,\r\n ValidateAccessTokenResponse,\r\n} from './types';\r\n\r\nexport class BlizzardApiClient implements IBlizzardApiClient {\r\n public defaults: {\r\n key: string;\r\n secret: string;\r\n origin: Origins;\r\n locale: Locales;\r\n token?: string;\r\n };\r\n\r\n constructor(options: ClientOptions) {\r\n const { origin, locale } = getEndpoint(options.origin, options.locale);\r\n this.defaults = {\r\n key: options.key,\r\n secret: options.secret,\r\n token: options.token,\r\n origin: origin,\r\n locale: locale,\r\n };\r\n }\r\n\r\n public axios = axios.create();\r\n\r\n public getRequestUrl<T = unknown>(resource: Resource<T>, options?: Partial<ClientOptions>) {\r\n const config = { ...this.defaults, ...options };\r\n const endpoint = getEndpoint(config.origin, config.locale);\r\n\r\n const backslashSeparator = resource.path.startsWith('/') ? '' : '/';\r\n\r\n return `${endpoint.hostname}${backslashSeparator}${resource.path}`;\r\n }\r\n\r\n public getRequestConfig<T = unknown>(\r\n resource: Resource<T>,\r\n options?: Partial<ClientOptions>,\r\n headers?: Record<string, string>,\r\n ) {\r\n const config = { ...this.defaults, ...options };\r\n const endpoint = getEndpoint(config.origin, config.locale);\r\n\r\n const namespace = resource.namespace\r\n ? { 'Battlenet-Namespace': `${resource.namespace}-${endpoint.origin}` }\r\n : undefined;\r\n\r\n return {\r\n headers: {\r\n ...headers,\r\n ...namespace,\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${config.token}`,\r\n },\r\n params: {\r\n locale: endpoint.locale,\r\n },\r\n };\r\n }\r\n\r\n public sendRequest<T = void>(\r\n resource: Resource<T>,\r\n options?: Partial<ClientOptions>,\r\n headers?: Record<string, string>,\r\n ): ResourceResponse<AxiosResponse<T>> {\r\n const url = this.getRequestUrl(resource, options);\r\n const config = this.getRequestConfig(resource, options, headers);\r\n\r\n return this.axios.get<T>(url, config);\r\n }\r\n\r\n public getAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const { key, secret, origin } = { ...this.defaults, ...options };\r\n return this.axios.post<AccessToken>(`https://${origin}.battle.net/oauth/token`, undefined, {\r\n params: {\r\n grant_type: 'client_credentials',\r\n },\r\n auth: {\r\n username: key,\r\n password: secret,\r\n },\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n };\r\n\r\n public setAccessToken = (token: string): void => {\r\n this.defaults.token = token;\r\n };\r\n\r\n public refreshAccessToken = async (options?: AccessTokenRequestArguments): Promise<AxiosResponse<AccessToken>> => {\r\n const response = await this.getAccessToken(options);\r\n this.setAccessToken(response.data.access_token);\r\n return response;\r\n };\r\n\r\n public validateAccessToken = async (\r\n options?: ValidateAccessTokenArguments,\r\n ): Promise<AxiosResponse<ValidateAccessTokenResponse>> => {\r\n const { origin, token } = { ...this.defaults, ...options };\r\n\r\n if (!token) {\r\n throw new Error('No token has been set previously or been passed to the validateAccessToken method.');\r\n }\r\n\r\n return await this.axios.post<ValidateAccessTokenResponse>(\r\n `https://${origin}.battle.net/oauth/check_token`,\r\n stringify({ token }),\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n },\r\n );\r\n };\r\n}\r\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAG5B,OAAO,WAAW;AASX,IAAM,oBAAN,MAAsD;AAAA,EACpD;AAAA,EAQP,YAAY,SAAwB;AAClC,UAAM,EAAE,QAAQ,OAAO,IAAI,YAAY,QAAQ,QAAQ,QAAQ,MAAM;AACrE,SAAK,WAAW;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEO,QAAQ,MAAM,OAAO;AAAA,EAErB,cAA2B,UAAuB,SAAkC;AACzF,UAAM,SAAS,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC9C,UAAM,WAAW,YAAY,OAAO,QAAQ,OAAO,MAAM;AAEzD,UAAM,qBAAqB,SAAS,KAAK,WAAW,GAAG,IAAI,KAAK;AAEhE,WAAO,GAAG,SAAS,QAAQ,GAAG,kBAAkB,GAAG,SAAS,IAAI;AAAA,EAClE;AAAA,EAEO,iBACL,UACA,SACA,SACA;AACA,UAAM,SAAS,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC9C,UAAM,WAAW,YAAY,OAAO,QAAQ,OAAO,MAAM;AAEzD,UAAM,YAAY,SAAS,YACvB,EAAE,uBAAuB,GAAG,SAAS,SAAS,IAAI,SAAS,MAAM,GAAG,IACpE;AAEJ,WAAO;AAAA,MACL,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,gBAAgB;AAAA,QAChB,eAAe,UAAU,OAAO,KAAK;AAAA,MACvC;AAAA,MACA,QAAQ;AAAA,QACN,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEO,YACL,UACA,SACA,SACoC;AACpC,UAAM,MAAM,KAAK,cAAc,UAAU,OAAO;AAChD,UAAM,SAAS,KAAK,iBAAiB,UAAU,SAAS,OAAO;AAE/D,WAAO,KAAK,MAAM,IAAO,KAAK,MAAM;AAAA,EACtC;AAAA,EAEO,iBAAiB,OAAO,YAA+E;AAC5G,UAAM,EAAE,KAAK,QAAQ,OAAO,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAC/D,WAAO,KAAK,MAAM,KAAkB,WAAW,MAAM,2BAA2B,QAAW;AAAA,MACzF,QAAQ;AAAA,QACN,YAAY;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,CAAC,UAAwB;AAC/C,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEO,qBAAqB,OAAO,YAA+E;AAChH,UAAM,WAAW,MAAM,KAAK,eAAe,OAAO;AAClD,SAAK,eAAe,SAAS,KAAK,YAAY;AAC9C,WAAO;AAAA,EACT;AAAA,EAEO,sBAAsB,OAC3B,YACwD;AACxD,UAAM,EAAE,QAAQ,MAAM,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ;AAEzD,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,oFAAoF;AAAA,IACtG;AAEA,WAAO,MAAM,KAAK,MAAM;AAAA,MACtB,WAAW,MAAM;AAAA,MACjB,UAAU,EAAE,MAAM,CAAC;AAAA,MACnB;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blizzard-api/client",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "license": "MIT",
5
5
  "author": "Putro",
6
6
  "description": "A node.js axios client to integrate with the blizzard battle.net api.",
@@ -47,10 +47,11 @@
47
47
  "axios": "1.6.8"
48
48
  },
49
49
  "peerDependencies": {
50
- "@blizzard-api/core": "0.0.2"
50
+ "@blizzard-api/core": "0.0.4"
51
51
  },
52
52
  "devDependencies": {
53
- "@blizzard-api/core": "0.0.2"
53
+ "@blizzard-api/core": "0.0.4",
54
+ "@blizzard-api/wow": "0.0.2"
54
55
  },
55
56
  "scripts": {
56
57
  "build": "tsup",