@coingecko/coingecko-typescript 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +3 -4
  3. package/client.d.mts +5 -5
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +5 -5
  6. package/client.d.ts.map +1 -1
  7. package/client.js +25 -22
  8. package/client.js.map +1 -1
  9. package/client.mjs +14 -11
  10. package/client.mjs.map +1 -1
  11. package/core/resource.d.mts +1 -1
  12. package/core/resource.d.mts.map +1 -1
  13. package/core/resource.d.ts +1 -1
  14. package/core/resource.d.ts.map +1 -1
  15. package/core/resource.js.map +1 -1
  16. package/core/resource.mjs.map +1 -1
  17. package/internal/headers.d.mts.map +1 -1
  18. package/internal/headers.d.ts.map +1 -1
  19. package/internal/headers.js +4 -4
  20. package/internal/headers.js.map +1 -1
  21. package/internal/headers.mjs +4 -4
  22. package/internal/headers.mjs.map +1 -1
  23. package/internal/request-options.d.mts +1 -0
  24. package/internal/request-options.d.mts.map +1 -1
  25. package/internal/request-options.d.ts +1 -0
  26. package/internal/request-options.d.ts.map +1 -1
  27. package/internal/request-options.js.map +1 -1
  28. package/internal/request-options.mjs.map +1 -1
  29. package/internal/uploads.js +1 -1
  30. package/internal/uploads.js.map +1 -1
  31. package/internal/uploads.mjs +1 -1
  32. package/internal/uploads.mjs.map +1 -1
  33. package/internal/utils/log.js +1 -1
  34. package/internal/utils/log.js.map +1 -1
  35. package/internal/utils/log.mjs +1 -1
  36. package/internal/utils/log.mjs.map +1 -1
  37. package/internal/utils/path.d.mts.map +1 -1
  38. package/internal/utils/path.d.ts.map +1 -1
  39. package/internal/utils/path.js.map +1 -1
  40. package/internal/utils/path.mjs +1 -1
  41. package/internal/utils/path.mjs.map +1 -1
  42. package/internal/utils/values.d.mts +2 -0
  43. package/internal/utils/values.d.mts.map +1 -1
  44. package/internal/utils/values.d.ts +2 -0
  45. package/internal/utils/values.d.ts.map +1 -1
  46. package/internal/utils/values.js +4 -1
  47. package/internal/utils/values.js.map +1 -1
  48. package/internal/utils/values.mjs +2 -0
  49. package/internal/utils/values.mjs.map +1 -1
  50. package/package.json +1 -1
  51. package/src/client.ts +28 -11
  52. package/src/core/resource.ts +1 -1
  53. package/src/internal/headers.ts +5 -5
  54. package/src/internal/request-options.ts +1 -0
  55. package/src/internal/uploads.ts +1 -1
  56. package/src/internal/utils/log.ts +1 -1
  57. package/src/internal/utils/path.ts +1 -1
  58. package/src/internal/utils/values.ts +3 -0
  59. package/src/version.ts +1 -1
  60. package/version.d.mts +1 -1
  61. package/version.d.ts +1 -1
  62. package/version.js +1 -1
  63. package/version.mjs +1 -1
package/src/client.ts CHANGED
@@ -5,7 +5,6 @@ import type { HTTPMethod, PromiseOrValue, MergedRequestInit, FinalizedRequestIni
5
5
  import { uuid4 } from './internal/utils/uuid';
6
6
  import { validatePositiveInteger, isAbsoluteURL, safeJSON } from './internal/utils/values';
7
7
  import { sleep } from './internal/utils/sleep';
8
- import { type Logger, type LogLevel, parseLogLevel } from './internal/utils/log';
9
8
  export type { Logger, LogLevel } from './internal/utils/log';
10
9
  import { castToError, isAbortError } from './internal/errors';
11
10
  import type { APIResponseProps } from './internal/parse';
@@ -17,9 +16,6 @@ import * as Errors from './core/error';
17
16
  import * as Uploads from './core/uploads';
18
17
  import * as API from './resources/index';
19
18
  import { APIPromise } from './core/api-promise';
20
- import { type Fetch } from './internal/builtin-types';
21
- import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';
22
- import { FinalRequestOptions, RequestOptions } from './internal/request-options';
23
19
  import {
24
20
  AssetPlatformGetParams,
25
21
  AssetPlatformGetResponse,
@@ -29,9 +25,6 @@ import { ExchangeRateGetResponse, ExchangeRates } from './resources/exchange-rat
29
25
  import { Key, KeyGetResponse } from './resources/key';
30
26
  import { Ping, PingGetResponse } from './resources/ping';
31
27
  import { TokenListGetAllJsonResponse, TokenLists } from './resources/token-lists';
32
- import { readEnv } from './internal/utils/env';
33
- import { formatRequestDetails, loggerFor } from './internal/utils/log';
34
- import { isEmptyObj } from './internal/utils/values';
35
28
  import { CoinGetIDParams, CoinGetIDResponse, Coins } from './resources/coins/coins';
36
29
  import { Companies } from './resources/companies/companies';
37
30
  import { DerivativeGetResponse, Derivatives } from './resources/derivatives/derivatives';
@@ -56,6 +49,18 @@ import {
56
49
  import { Onchain } from './resources/onchain/onchain';
57
50
  import { Search, SearchGetParams, SearchGetResponse } from './resources/search/search';
58
51
  import { Simple } from './resources/simple/simple';
52
+ import { type Fetch } from './internal/builtin-types';
53
+ import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';
54
+ import { FinalRequestOptions, RequestOptions } from './internal/request-options';
55
+ import { readEnv } from './internal/utils/env';
56
+ import {
57
+ type LogLevel,
58
+ type Logger,
59
+ formatRequestDetails,
60
+ loggerFor,
61
+ parseLogLevel,
62
+ } from './internal/utils/log';
63
+ import { isEmptyObj } from './internal/utils/values';
59
64
 
60
65
  const environments = {
61
66
  pro: 'https://pro-api.coingecko.com/api/v3',
@@ -243,6 +248,13 @@ export class Coingecko {
243
248
  });
244
249
  }
245
250
 
251
+ /**
252
+ * Check whether the base URL is set to its default.
253
+ */
254
+ #baseURLOverridden(): boolean {
255
+ return this.baseURL !== environments[this._options.environment || 'pro'];
256
+ }
257
+
246
258
  protected defaultQuery(): Record<string, string | undefined> | undefined {
247
259
  return this._options.defaultQuery;
248
260
  }
@@ -322,11 +334,16 @@ export class Coingecko {
322
334
  return Errors.APIError.generate(status, error, message, headers);
323
335
  }
324
336
 
325
- buildURL(path: string, query: Record<string, unknown> | null | undefined): string {
337
+ buildURL(
338
+ path: string,
339
+ query: Record<string, unknown> | null | undefined,
340
+ defaultBaseURL?: string | undefined,
341
+ ): string {
342
+ const baseURL = (!this.#baseURLOverridden() && defaultBaseURL) || this.baseURL;
326
343
  const url =
327
344
  isAbsoluteURL(path) ?
328
345
  new URL(path)
329
- : new URL(this.baseURL + (this.baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));
346
+ : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));
330
347
 
331
348
  const defaultQuery = this.defaultQuery();
332
349
  if (!isEmptyObj(defaultQuery)) {
@@ -667,9 +684,9 @@ export class Coingecko {
667
684
  { retryCount = 0 }: { retryCount?: number } = {},
668
685
  ): { req: FinalizedRequestInit; url: string; timeout: number } {
669
686
  const options = { ...inputOptions };
670
- const { method, path, query } = options;
687
+ const { method, path, query, defaultBaseURL } = options;
671
688
 
672
- const url = this.buildURL(path!, query as Record<string, unknown>);
689
+ const url = this.buildURL(path!, query as Record<string, unknown>, defaultBaseURL);
673
690
  if ('timeout' in options) validatePositiveInteger('timeout', options.timeout);
674
691
  options.timeout = options.timeout ?? this.timeout;
675
692
  const { bodyHeaders, body } = this.buildBody({ options });
@@ -2,7 +2,7 @@
2
2
 
3
3
  import type { Coingecko } from '../client';
4
4
 
5
- export class APIResource {
5
+ export abstract class APIResource {
6
6
  protected _client: Coingecko;
7
7
 
8
8
  constructor(client: Coingecko) {
@@ -1,5 +1,7 @@
1
1
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
+ import { isReadonlyArray } from './utils/values';
4
+
3
5
  type HeaderValue = string | undefined | null;
4
6
  export type HeadersLike =
5
7
  | Headers
@@ -9,7 +11,7 @@ export type HeadersLike =
9
11
  | null
10
12
  | NullableHeaders;
11
13
 
12
- const brand_privateNullableHeaders = Symbol('brand.privateNullableHeaders');
14
+ const brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');
13
15
 
14
16
  /**
15
17
  * @internal
@@ -25,8 +27,6 @@ export type NullableHeaders = {
25
27
  nulls: Set<string>;
26
28
  };
27
29
 
28
- const isArray = Array.isArray as (val: unknown) => val is readonly unknown[];
29
-
30
30
  function* iterateHeaders(headers: HeadersLike): IterableIterator<readonly [string, string | null]> {
31
31
  if (!headers) return;
32
32
 
@@ -43,7 +43,7 @@ function* iterateHeaders(headers: HeadersLike): IterableIterator<readonly [strin
43
43
  let iter: Iterable<readonly (HeaderValue | readonly HeaderValue[])[]>;
44
44
  if (headers instanceof Headers) {
45
45
  iter = headers.entries();
46
- } else if (isArray(headers)) {
46
+ } else if (isReadonlyArray(headers)) {
47
47
  iter = headers;
48
48
  } else {
49
49
  shouldClear = true;
@@ -52,7 +52,7 @@ function* iterateHeaders(headers: HeadersLike): IterableIterator<readonly [strin
52
52
  for (let row of iter) {
53
53
  const name = row[0];
54
54
  if (typeof name !== 'string') throw new TypeError('expected header name to be a string');
55
- const values = isArray(row[1]) ? row[1] : [row[1]];
55
+ const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];
56
56
  let didClear = false;
57
57
  for (const value of values) {
58
58
  if (value === undefined) continue;
@@ -20,6 +20,7 @@ export type RequestOptions = {
20
20
  fetchOptions?: MergedRequestInit;
21
21
  signal?: AbortSignal | undefined | null;
22
22
  idempotencyKey?: string;
23
+ defaultBaseURL?: string | undefined;
23
24
 
24
25
  __binaryResponse?: boolean | undefined;
25
26
  };
@@ -90,7 +90,7 @@ export const multipartFormRequestOptions = async (
90
90
  return { ...opts, body: await createForm(opts.body, fetch) };
91
91
  };
92
92
 
93
- const supportsFormDataMap = new WeakMap<Fetch, Promise<boolean>>();
93
+ const supportsFormDataMap = /** @__PURE__ */ new WeakMap<Fetch, Promise<boolean>>();
94
94
 
95
95
  /**
96
96
  * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending
@@ -58,7 +58,7 @@ const noopLogger = {
58
58
  debug: noop,
59
59
  };
60
60
 
61
- let cachedLoggers = new WeakMap<Logger, [LogLevel, Logger]>();
61
+ let cachedLoggers = /** @__PURE__ */ new WeakMap<Logger, [LogLevel, Logger]>();
62
62
 
63
63
  export function loggerFor(client: Coingecko): Logger {
64
64
  const logger = client.logger;
@@ -62,4 +62,4 @@ export const createPathTagFunction = (pathEncoder = encodeURIPath) =>
62
62
  /**
63
63
  * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.
64
64
  */
65
- export const path = createPathTagFunction(encodeURIPath);
65
+ export const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);
@@ -9,6 +9,9 @@ export const isAbsoluteURL = (url: string): boolean => {
9
9
  return startsWithSchemeRegexp.test(url);
10
10
  };
11
11
 
12
+ export let isArray = (val: unknown): val is unknown[] => ((isArray = Array.isArray), isArray(val));
13
+ export let isReadonlyArray = isArray as (val: unknown) => val is readonly unknown[];
14
+
12
15
  /** Returns an object if the given value isn't an object, otherwise returns as-is */
13
16
  export function maybeObj(x: unknown): object {
14
17
  if (typeof x !== 'object') {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '1.4.0'; // x-release-please-version
1
+ export const VERSION = '1.6.0'; // x-release-please-version
package/version.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.4.0";
1
+ export declare const VERSION = "1.6.0";
2
2
  //# sourceMappingURL=version.d.mts.map
package/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.4.0";
1
+ export declare const VERSION = "1.6.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '1.4.0'; // x-release-please-version
4
+ exports.VERSION = '1.6.0'; // x-release-please-version
5
5
  //# sourceMappingURL=version.js.map
package/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '1.4.0'; // x-release-please-version
1
+ export const VERSION = '1.6.0'; // x-release-please-version
2
2
  //# sourceMappingURL=version.mjs.map