hiero-sdk-utils 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/cjs/client/HieroClient.d.ts +70 -0
  2. package/dist/cjs/client/HieroClient.d.ts.map +1 -0
  3. package/dist/cjs/client/HieroClient.js +165 -0
  4. package/dist/cjs/client/HieroClient.js.map +1 -0
  5. package/dist/cjs/client/rateLimiter.d.ts +33 -0
  6. package/dist/cjs/client/rateLimiter.d.ts.map +1 -0
  7. package/dist/cjs/client/rateLimiter.js +68 -0
  8. package/dist/cjs/client/rateLimiter.js.map +1 -0
  9. package/dist/cjs/client/types.d.ts +26 -0
  10. package/dist/cjs/client/types.d.ts.map +1 -0
  11. package/dist/cjs/client/types.js +11 -0
  12. package/dist/cjs/client/types.js.map +1 -0
  13. package/dist/cjs/errors/index.d.ts +95 -0
  14. package/dist/cjs/errors/index.d.ts.map +1 -0
  15. package/dist/cjs/errors/index.js +115 -0
  16. package/dist/cjs/errors/index.js.map +1 -0
  17. package/dist/cjs/index.d.ts +36 -0
  18. package/dist/cjs/index.d.ts.map +1 -0
  19. package/dist/cjs/index.js +55 -0
  20. package/dist/cjs/index.js.map +1 -0
  21. package/dist/cjs/pagination/paginator.d.ts +21 -0
  22. package/dist/cjs/pagination/paginator.d.ts.map +1 -0
  23. package/dist/cjs/pagination/paginator.js +89 -0
  24. package/dist/cjs/pagination/paginator.js.map +1 -0
  25. package/dist/cjs/resources/accounts.d.ts +43 -0
  26. package/dist/cjs/resources/accounts.d.ts.map +1 -0
  27. package/dist/cjs/resources/accounts.js +60 -0
  28. package/dist/cjs/resources/accounts.js.map +1 -0
  29. package/dist/cjs/resources/balances.d.ts +25 -0
  30. package/dist/cjs/resources/balances.d.ts.map +1 -0
  31. package/dist/cjs/resources/balances.js +33 -0
  32. package/dist/cjs/resources/balances.js.map +1 -0
  33. package/dist/cjs/resources/blocks.d.ts +36 -0
  34. package/dist/cjs/resources/blocks.d.ts.map +1 -0
  35. package/dist/cjs/resources/blocks.js +58 -0
  36. package/dist/cjs/resources/blocks.js.map +1 -0
  37. package/dist/cjs/resources/contracts.d.ts +36 -0
  38. package/dist/cjs/resources/contracts.d.ts.map +1 -0
  39. package/dist/cjs/resources/contracts.js +53 -0
  40. package/dist/cjs/resources/contracts.js.map +1 -0
  41. package/dist/cjs/resources/nfts.d.ts +39 -0
  42. package/dist/cjs/resources/nfts.d.ts.map +1 -0
  43. package/dist/cjs/resources/nfts.js +62 -0
  44. package/dist/cjs/resources/nfts.js.map +1 -0
  45. package/dist/cjs/resources/schedules.d.ts +36 -0
  46. package/dist/cjs/resources/schedules.d.ts.map +1 -0
  47. package/dist/cjs/resources/schedules.js +53 -0
  48. package/dist/cjs/resources/schedules.js.map +1 -0
  49. package/dist/cjs/resources/tokens.d.ts +36 -0
  50. package/dist/cjs/resources/tokens.d.ts.map +1 -0
  51. package/dist/cjs/resources/tokens.js +53 -0
  52. package/dist/cjs/resources/tokens.js.map +1 -0
  53. package/dist/cjs/resources/topics.d.ts +38 -0
  54. package/dist/cjs/resources/topics.d.ts.map +1 -0
  55. package/dist/cjs/resources/topics.js +56 -0
  56. package/dist/cjs/resources/topics.js.map +1 -0
  57. package/dist/cjs/resources/transactions.d.ts +35 -0
  58. package/dist/cjs/resources/transactions.d.ts.map +1 -0
  59. package/dist/cjs/resources/transactions.js +57 -0
  60. package/dist/cjs/resources/transactions.js.map +1 -0
  61. package/dist/cjs/types/api.d.ts +302 -0
  62. package/dist/cjs/types/api.d.ts.map +1 -0
  63. package/dist/cjs/types/api.js +4 -0
  64. package/dist/cjs/types/api.js.map +1 -0
  65. package/dist/cjs/types/common.d.ts +52 -0
  66. package/dist/cjs/types/common.d.ts.map +1 -0
  67. package/dist/cjs/types/common.js +16 -0
  68. package/dist/cjs/types/common.js.map +1 -0
  69. package/dist/esm/client/HieroClient.d.ts +70 -0
  70. package/dist/esm/client/HieroClient.d.ts.map +1 -0
  71. package/dist/esm/client/HieroClient.js +161 -0
  72. package/dist/esm/client/HieroClient.js.map +1 -0
  73. package/dist/esm/client/rateLimiter.d.ts +33 -0
  74. package/dist/esm/client/rateLimiter.d.ts.map +1 -0
  75. package/dist/esm/client/rateLimiter.js +64 -0
  76. package/dist/esm/client/rateLimiter.js.map +1 -0
  77. package/dist/esm/client/types.d.ts +26 -0
  78. package/dist/esm/client/types.d.ts.map +1 -0
  79. package/dist/esm/client/types.js +8 -0
  80. package/dist/esm/client/types.js.map +1 -0
  81. package/dist/esm/errors/index.d.ts +95 -0
  82. package/dist/esm/errors/index.d.ts.map +1 -0
  83. package/dist/esm/errors/index.js +108 -0
  84. package/dist/esm/errors/index.js.map +1 -0
  85. package/dist/esm/index.d.ts +36 -0
  86. package/dist/esm/index.d.ts.map +1 -0
  87. package/dist/esm/index.js +37 -0
  88. package/dist/esm/index.js.map +1 -0
  89. package/dist/esm/pagination/paginator.d.ts +21 -0
  90. package/dist/esm/pagination/paginator.d.ts.map +1 -0
  91. package/dist/esm/pagination/paginator.js +86 -0
  92. package/dist/esm/pagination/paginator.js.map +1 -0
  93. package/dist/esm/resources/accounts.d.ts +43 -0
  94. package/dist/esm/resources/accounts.d.ts.map +1 -0
  95. package/dist/esm/resources/accounts.js +56 -0
  96. package/dist/esm/resources/accounts.js.map +1 -0
  97. package/dist/esm/resources/balances.d.ts +25 -0
  98. package/dist/esm/resources/balances.d.ts.map +1 -0
  99. package/dist/esm/resources/balances.js +29 -0
  100. package/dist/esm/resources/balances.js.map +1 -0
  101. package/dist/esm/resources/blocks.d.ts +36 -0
  102. package/dist/esm/resources/blocks.d.ts.map +1 -0
  103. package/dist/esm/resources/blocks.js +54 -0
  104. package/dist/esm/resources/blocks.js.map +1 -0
  105. package/dist/esm/resources/contracts.d.ts +36 -0
  106. package/dist/esm/resources/contracts.d.ts.map +1 -0
  107. package/dist/esm/resources/contracts.js +49 -0
  108. package/dist/esm/resources/contracts.js.map +1 -0
  109. package/dist/esm/resources/nfts.d.ts +39 -0
  110. package/dist/esm/resources/nfts.d.ts.map +1 -0
  111. package/dist/esm/resources/nfts.js +58 -0
  112. package/dist/esm/resources/nfts.js.map +1 -0
  113. package/dist/esm/resources/schedules.d.ts +36 -0
  114. package/dist/esm/resources/schedules.d.ts.map +1 -0
  115. package/dist/esm/resources/schedules.js +49 -0
  116. package/dist/esm/resources/schedules.js.map +1 -0
  117. package/dist/esm/resources/tokens.d.ts +36 -0
  118. package/dist/esm/resources/tokens.d.ts.map +1 -0
  119. package/dist/esm/resources/tokens.js +49 -0
  120. package/dist/esm/resources/tokens.js.map +1 -0
  121. package/dist/esm/resources/topics.d.ts +38 -0
  122. package/dist/esm/resources/topics.d.ts.map +1 -0
  123. package/dist/esm/resources/topics.js +52 -0
  124. package/dist/esm/resources/topics.js.map +1 -0
  125. package/dist/esm/resources/transactions.d.ts +35 -0
  126. package/dist/esm/resources/transactions.d.ts.map +1 -0
  127. package/dist/esm/resources/transactions.js +53 -0
  128. package/dist/esm/resources/transactions.js.map +1 -0
  129. package/dist/esm/types/api.d.ts +302 -0
  130. package/dist/esm/types/api.d.ts.map +1 -0
  131. package/dist/esm/types/api.js +3 -0
  132. package/dist/esm/types/api.js.map +1 -0
  133. package/dist/esm/types/common.d.ts +52 -0
  134. package/dist/esm/types/common.d.ts.map +1 -0
  135. package/dist/esm/types/common.js +13 -0
  136. package/dist/esm/types/common.js.map +1 -0
  137. package/package.json +52 -0
@@ -0,0 +1,70 @@
1
+ import type { HieroClientConfig } from './types.js';
2
+ import { AccountsResource } from '../resources/accounts.js';
3
+ import { TransactionsResource } from '../resources/transactions.js';
4
+ import { TokensResource } from '../resources/tokens.js';
5
+ import { TopicsResource } from '../resources/topics.js';
6
+ import { ContractsResource } from '../resources/contracts.js';
7
+ import { NftsResource } from '../resources/nfts.js';
8
+ import { BalancesResource } from '../resources/balances.js';
9
+ import { BlocksResource } from '../resources/blocks.js';
10
+ import { SchedulesResource } from '../resources/schedules.js';
11
+ /**
12
+ * Core HTTP client for the Hedera Mirror Node REST API.
13
+ * Provides typed access to all Mirror Node resources with automatic
14
+ * rate limiting, retries, and error handling.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { HieroClient, Networks } from 'hiero-sdk-utils';
19
+ *
20
+ * const client = new HieroClient({ baseUrl: Networks.testnet });
21
+ * const account = await client.accounts.getById('0.0.1234');
22
+ * ```
23
+ */
24
+ export declare class HieroClient {
25
+ /** Base URL for the Mirror Node (no trailing slash) */
26
+ readonly baseUrl: string;
27
+ private readonly fetchFn;
28
+ private readonly rateLimiter;
29
+ private readonly defaultHeaders;
30
+ private readonly timeoutMs;
31
+ private readonly maxRetries;
32
+ /** Account-related Mirror Node queries */
33
+ readonly accounts: AccountsResource;
34
+ /** Transaction-related Mirror Node queries */
35
+ readonly transactions: TransactionsResource;
36
+ /** Token-related Mirror Node queries */
37
+ readonly tokens: TokensResource;
38
+ /** Topic-related Mirror Node queries */
39
+ readonly topics: TopicsResource;
40
+ /** Contract-related Mirror Node queries */
41
+ readonly contracts: ContractsResource;
42
+ /** NFT-related Mirror Node queries */
43
+ readonly nfts: NftsResource;
44
+ /** Balance-related Mirror Node queries */
45
+ readonly balances: BalancesResource;
46
+ /** Block-related Mirror Node queries */
47
+ readonly blocks: BlocksResource;
48
+ /** Schedule-related Mirror Node queries */
49
+ readonly schedules: SchedulesResource;
50
+ /**
51
+ * Creates a new HieroClient.
52
+ *
53
+ * @param config - Client configuration including base URL and optional overrides
54
+ * @throws {Error} If baseUrl is empty
55
+ */
56
+ constructor(config: HieroClientConfig);
57
+ /**
58
+ * Makes a GET request to the Mirror Node and returns typed JSON.
59
+ * Handles rate limiting, retries on 429/503, and timeout.
60
+ *
61
+ * @param path - The API path (e.g., '/api/v1/accounts/0.0.2') or full next-page URL
62
+ * @returns Parsed JSON response typed as T
63
+ * @throws {MirrorNodeError} If the API returns a non-2xx response after retries
64
+ */
65
+ get<T>(path: string): Promise<T>;
66
+ private statusToCode;
67
+ private safeReadBody;
68
+ private sleep;
69
+ }
70
+ //# sourceMappingURL=HieroClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HieroClient.d.ts","sourceRoot":"","sources":["../../../src/client/HieroClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAY9D;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAW;IACtB,uDAAuD;IACvD,SAAgB,OAAO,EAAE,MAAM,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,0CAA0C;IAC1C,SAAgB,QAAQ,EAAE,gBAAgB,CAAC;IAC3C,8CAA8C;IAC9C,SAAgB,YAAY,EAAE,oBAAoB,CAAC;IACnD,wCAAwC;IACxC,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,wCAAwC;IACxC,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,2CAA2C;IAC3C,SAAgB,SAAS,EAAE,iBAAiB,CAAC;IAC7C,sCAAsC;IACtC,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,0CAA0C;IAC1C,SAAgB,QAAQ,EAAE,gBAAgB,CAAC;IAC3C,wCAAwC;IACxC,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,2CAA2C;IAC3C,SAAgB,SAAS,EAAE,iBAAiB,CAAC;IAE7C;;;;;OAKG;gBACS,MAAM,EAAE,iBAAiB;IA4BrC;;;;;;;OAOG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAiEtC,OAAO,CAAC,YAAY;YAUN,YAAY;IAS1B,OAAO,CAAC,KAAK;CAKd"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.HieroClient = void 0;
5
+ const rateLimiter_js_1 = require("./rateLimiter.js");
6
+ const index_js_1 = require("../errors/index.js");
7
+ const accounts_js_1 = require("../resources/accounts.js");
8
+ const transactions_js_1 = require("../resources/transactions.js");
9
+ const tokens_js_1 = require("../resources/tokens.js");
10
+ const topics_js_1 = require("../resources/topics.js");
11
+ const contracts_js_1 = require("../resources/contracts.js");
12
+ const nfts_js_1 = require("../resources/nfts.js");
13
+ const balances_js_1 = require("../resources/balances.js");
14
+ const blocks_js_1 = require("../resources/blocks.js");
15
+ const schedules_js_1 = require("../resources/schedules.js");
16
+ /** Retriable HTTP status codes */
17
+ const RETRIABLE_STATUSES = new Set([429, 503]);
18
+ /** Default configuration values */
19
+ const DEFAULTS = {
20
+ maxRequestsPerSecond: 20,
21
+ timeoutMs: 30_000,
22
+ maxRetries: 3,
23
+ };
24
+ /**
25
+ * Core HTTP client for the Hedera Mirror Node REST API.
26
+ * Provides typed access to all Mirror Node resources with automatic
27
+ * rate limiting, retries, and error handling.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import { HieroClient, Networks } from 'hiero-sdk-utils';
32
+ *
33
+ * const client = new HieroClient({ baseUrl: Networks.testnet });
34
+ * const account = await client.accounts.getById('0.0.1234');
35
+ * ```
36
+ */
37
+ class HieroClient {
38
+ /** Base URL for the Mirror Node (no trailing slash) */
39
+ baseUrl;
40
+ fetchFn;
41
+ rateLimiter;
42
+ defaultHeaders;
43
+ timeoutMs;
44
+ maxRetries;
45
+ /** Account-related Mirror Node queries */
46
+ accounts;
47
+ /** Transaction-related Mirror Node queries */
48
+ transactions;
49
+ /** Token-related Mirror Node queries */
50
+ tokens;
51
+ /** Topic-related Mirror Node queries */
52
+ topics;
53
+ /** Contract-related Mirror Node queries */
54
+ contracts;
55
+ /** NFT-related Mirror Node queries */
56
+ nfts;
57
+ /** Balance-related Mirror Node queries */
58
+ balances;
59
+ /** Block-related Mirror Node queries */
60
+ blocks;
61
+ /** Schedule-related Mirror Node queries */
62
+ schedules;
63
+ /**
64
+ * Creates a new HieroClient.
65
+ *
66
+ * @param config - Client configuration including base URL and optional overrides
67
+ * @throws {Error} If baseUrl is empty
68
+ */
69
+ constructor(config) {
70
+ if (!config.baseUrl) {
71
+ throw new Error('baseUrl is required and must not be empty');
72
+ }
73
+ this.baseUrl = config.baseUrl.replace(/\/+$/, '');
74
+ this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
75
+ this.rateLimiter = new rateLimiter_js_1.RateLimiter(config.maxRequestsPerSecond ?? DEFAULTS.maxRequestsPerSecond);
76
+ this.defaultHeaders = {
77
+ Accept: 'application/json',
78
+ ...config.headers,
79
+ };
80
+ this.timeoutMs = config.timeoutMs ?? DEFAULTS.timeoutMs;
81
+ this.maxRetries = config.maxRetries ?? DEFAULTS.maxRetries;
82
+ this.accounts = new accounts_js_1.AccountsResource(this);
83
+ this.transactions = new transactions_js_1.TransactionsResource(this);
84
+ this.tokens = new tokens_js_1.TokensResource(this);
85
+ this.topics = new topics_js_1.TopicsResource(this);
86
+ this.contracts = new contracts_js_1.ContractsResource(this);
87
+ this.nfts = new nfts_js_1.NftsResource(this);
88
+ this.balances = new balances_js_1.BalancesResource(this);
89
+ this.blocks = new blocks_js_1.BlocksResource(this);
90
+ this.schedules = new schedules_js_1.SchedulesResource(this);
91
+ }
92
+ /**
93
+ * Makes a GET request to the Mirror Node and returns typed JSON.
94
+ * Handles rate limiting, retries on 429/503, and timeout.
95
+ *
96
+ * @param path - The API path (e.g., '/api/v1/accounts/0.0.2') or full next-page URL
97
+ * @returns Parsed JSON response typed as T
98
+ * @throws {MirrorNodeError} If the API returns a non-2xx response after retries
99
+ */
100
+ async get(path) {
101
+ const url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
102
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
103
+ await this.rateLimiter.acquire();
104
+ const controller = new AbortController();
105
+ const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
106
+ try {
107
+ const response = await this.fetchFn(url, {
108
+ method: 'GET',
109
+ headers: this.defaultHeaders,
110
+ signal: controller.signal,
111
+ });
112
+ clearTimeout(timeoutId);
113
+ if (response.ok) {
114
+ const json = await response.json();
115
+ return json;
116
+ }
117
+ if (RETRIABLE_STATUSES.has(response.status) && attempt < this.maxRetries) {
118
+ const retryAfter = response.headers.get('Retry-After');
119
+ const waitMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 1000 * (attempt + 1);
120
+ await this.sleep(waitMs);
121
+ continue;
122
+ }
123
+ const errorBody = await this.safeReadBody(response);
124
+ throw new index_js_1.MirrorNodeError(`Mirror Node returned ${response.status} for ${url}: ${errorBody}`, this.statusToCode(response.status), response.status);
125
+ }
126
+ catch (error) {
127
+ clearTimeout(timeoutId);
128
+ if (error instanceof index_js_1.MirrorNodeError) {
129
+ throw error;
130
+ }
131
+ if (error instanceof DOMException && error.name === 'AbortError') {
132
+ throw new index_js_1.MirrorNodeError(`Request timed out after ${this.timeoutMs}ms for ${url}`, 'REQUEST_TIMEOUT', 0, { cause: error });
133
+ }
134
+ throw new index_js_1.MirrorNodeError(`Network error for ${url}: ${error instanceof Error ? error.message : String(error)}`, 'NETWORK_ERROR', 0, { cause: error instanceof Error ? error : new Error(String(error)) });
135
+ }
136
+ }
137
+ /* v8 ignore next -- unreachable: loop always exits via return or throw */
138
+ throw new index_js_1.MirrorNodeError(`Request failed for ${url}`, 'MAX_RETRIES_EXCEEDED', 0);
139
+ }
140
+ statusToCode(status) {
141
+ switch (status) {
142
+ case 400: return 'BAD_REQUEST';
143
+ case 404: return 'NOT_FOUND';
144
+ case 429: return 'RATE_LIMITED';
145
+ case 503: return 'SERVICE_UNAVAILABLE';
146
+ default: return 'MIRROR_NODE_ERROR';
147
+ }
148
+ }
149
+ async safeReadBody(response) {
150
+ try {
151
+ const text = await response.text();
152
+ return text.substring(0, 500);
153
+ }
154
+ catch {
155
+ return '(unable to read response body)';
156
+ }
157
+ }
158
+ sleep(ms) {
159
+ return new Promise((resolve) => {
160
+ setTimeout(resolve, ms);
161
+ });
162
+ }
163
+ }
164
+ exports.HieroClient = HieroClient;
165
+ //# sourceMappingURL=HieroClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HieroClient.js","sourceRoot":"","sources":["../../../src/client/HieroClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A simple token-bucket rate limiter that throttles requests
3
+ * to stay within a specified requests-per-second limit.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const limiter = new RateLimiter(10); // 10 req/s
8
+ * await limiter.acquire(); // waits if needed
9
+ * ```
10
+ */
11
+ export declare class RateLimiter {
12
+ private tokens;
13
+ private lastRefill;
14
+ private readonly maxTokens;
15
+ private readonly refillRateMs;
16
+ /**
17
+ * Creates a new rate limiter.
18
+ *
19
+ * @param maxRequestsPerSecond - Maximum number of requests allowed per second
20
+ * @throws {Error} If maxRequestsPerSecond is not a positive number
21
+ */
22
+ constructor(maxRequestsPerSecond: number);
23
+ /**
24
+ * Acquires a token, waiting if necessary until one becomes available.
25
+ * Call this before each HTTP request.
26
+ *
27
+ * @returns A promise that resolves when a token is acquired
28
+ */
29
+ acquire(): Promise<void>;
30
+ private refill;
31
+ private sleep;
32
+ }
33
+ //# sourceMappingURL=rateLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../src/client/rateLimiter.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC;;;;;OAKG;gBACS,oBAAoB,EAAE,MAAM;IAYxC;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,KAAK;CAKd"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RateLimiter = void 0;
5
+ /**
6
+ * A simple token-bucket rate limiter that throttles requests
7
+ * to stay within a specified requests-per-second limit.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const limiter = new RateLimiter(10); // 10 req/s
12
+ * await limiter.acquire(); // waits if needed
13
+ * ```
14
+ */
15
+ class RateLimiter {
16
+ tokens;
17
+ lastRefill;
18
+ maxTokens;
19
+ refillRateMs;
20
+ /**
21
+ * Creates a new rate limiter.
22
+ *
23
+ * @param maxRequestsPerSecond - Maximum number of requests allowed per second
24
+ * @throws {Error} If maxRequestsPerSecond is not a positive number
25
+ */
26
+ constructor(maxRequestsPerSecond) {
27
+ if (maxRequestsPerSecond <= 0) {
28
+ throw new Error(`maxRequestsPerSecond must be positive, got ${maxRequestsPerSecond}`);
29
+ }
30
+ this.maxTokens = maxRequestsPerSecond;
31
+ this.tokens = maxRequestsPerSecond;
32
+ this.lastRefill = Date.now();
33
+ this.refillRateMs = 1000 / maxRequestsPerSecond;
34
+ }
35
+ /**
36
+ * Acquires a token, waiting if necessary until one becomes available.
37
+ * Call this before each HTTP request.
38
+ *
39
+ * @returns A promise that resolves when a token is acquired
40
+ */
41
+ async acquire() {
42
+ this.refill();
43
+ if (this.tokens >= 1) {
44
+ this.tokens -= 1;
45
+ return;
46
+ }
47
+ const waitMs = this.refillRateMs - (Date.now() - this.lastRefill);
48
+ if (waitMs > 0) {
49
+ await this.sleep(waitMs);
50
+ }
51
+ this.refill();
52
+ this.tokens = Math.max(0, this.tokens - 1);
53
+ }
54
+ refill() {
55
+ const now = Date.now();
56
+ const elapsed = now - this.lastRefill;
57
+ const tokensToAdd = elapsed / this.refillRateMs;
58
+ this.tokens = Math.min(this.maxTokens, this.tokens + tokensToAdd);
59
+ this.lastRefill = now;
60
+ }
61
+ sleep(ms) {
62
+ return new Promise((resolve) => {
63
+ setTimeout(resolve, ms);
64
+ });
65
+ }
66
+ }
67
+ exports.RateLimiter = RateLimiter;
68
+ //# sourceMappingURL=rateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../src/client/rateLimiter.ts"],"names":[],"mappings":";AAAA,sCAAsC;;;AAEtC;;;;;;;;;GASG;AACH,MAAa,WAAW;IACd,MAAM,CAAS;IACf,UAAU,CAAS;IACV,SAAS,CAAS;IAClB,YAAY,CAAS;IAEtC;;;;;OAKG;IACH,YAAY,oBAA4B;QACtC,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,8CAA8C,oBAAoB,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,oBAAoB,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,MAAM;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA5DD,kCA4DC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Configuration for the HieroClient.
3
+ */
4
+ export interface HieroClientConfig {
5
+ /** The Mirror Node base URL (no trailing slash) */
6
+ baseUrl: string;
7
+ /** Maximum requests per second for rate limiting (default: 20) */
8
+ maxRequestsPerSecond?: number;
9
+ /** Custom fetch implementation — useful for testing */
10
+ fetch?: typeof globalThis.fetch;
11
+ /** Default headers to include in all requests */
12
+ headers?: Record<string, string>;
13
+ /** Request timeout in milliseconds (default: 30000) */
14
+ timeoutMs?: number;
15
+ /** Maximum number of retries for retriable errors (default: 3) */
16
+ maxRetries?: number;
17
+ }
18
+ /** Pre-configured network endpoints for the Hedera Mirror Node */
19
+ export declare const Networks: {
20
+ readonly mainnet: "https://mainnet.mirrornode.hedera.com";
21
+ readonly testnet: "https://testnet.mirrornode.hedera.com";
22
+ readonly previewnet: "https://previewnet.mirrornode.hedera.com";
23
+ };
24
+ /** Network name keys */
25
+ export type NetworkName = keyof typeof Networks;
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kEAAkE;AAClE,eAAO,MAAM,QAAQ;;;;CAIsB,CAAC;AAE5C,wBAAwB;AACxB,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Networks = void 0;
5
+ /** Pre-configured network endpoints for the Hedera Mirror Node */
6
+ exports.Networks = {
7
+ mainnet: 'https://mainnet.mirrornode.hedera.com',
8
+ testnet: 'https://testnet.mirrornode.hedera.com',
9
+ previewnet: 'https://previewnet.mirrornode.hedera.com',
10
+ };
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":";AAAA,sCAAsC;;;AAoBtC,kEAAkE;AACrD,QAAA,QAAQ,GAAG;IACtB,OAAO,EAAE,uCAAuC;IAChD,OAAO,EAAE,uCAAuC;IAChD,UAAU,EAAE,0CAA0C;CACb,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Base error class for all hiero-sdk-utils errors.
3
+ * All errors thrown by this library extend this class.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * try {
8
+ * await client.accounts.getById('invalid');
9
+ * } catch (error) {
10
+ * if (error instanceof HieroError) {
11
+ * console.log(error.code); // e.g., 'INVALID_ACCOUNT_ID'
12
+ * }
13
+ * }
14
+ * ```
15
+ */
16
+ export declare class HieroError extends Error {
17
+ readonly code: string;
18
+ /**
19
+ * @param message - Human-readable error description
20
+ * @param code - Machine-readable error code (e.g., 'ACCOUNT_NOT_FOUND')
21
+ * @param options - Standard ErrorOptions including cause chain
22
+ */
23
+ constructor(message: string, code: string, options?: ErrorOptions);
24
+ }
25
+ /**
26
+ * Error thrown when the Mirror Node API returns an error response.
27
+ * Includes the HTTP status code for programmatic handling.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * try {
32
+ * await client.accounts.getById('0.0.99999999999');
33
+ * } catch (error) {
34
+ * if (error instanceof MirrorNodeError) {
35
+ * console.log(error.status); // 404
36
+ * console.log(error.code); // 'MIRROR_NODE_ERROR'
37
+ * }
38
+ * }
39
+ * ```
40
+ */
41
+ export declare class MirrorNodeError extends HieroError {
42
+ readonly status: number;
43
+ /**
44
+ * @param message - Human-readable error description
45
+ * @param code - Machine-readable error code
46
+ * @param status - HTTP status code from the Mirror Node response
47
+ * @param options - Standard ErrorOptions including cause chain
48
+ */
49
+ constructor(message: string, code: string, status: number, options?: ErrorOptions);
50
+ }
51
+ /**
52
+ * Error thrown when input validation fails before making a network request.
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * try {
57
+ * await client.accounts.getById('not-an-id');
58
+ * } catch (error) {
59
+ * if (error instanceof ValidationError) {
60
+ * console.log(error.code); // 'INVALID_ACCOUNT_ID'
61
+ * }
62
+ * }
63
+ * ```
64
+ */
65
+ export declare class ValidationError extends HieroError {
66
+ /**
67
+ * @param message - Human-readable description of what was invalid
68
+ * @param code - Machine-readable error code
69
+ * @param options - Standard ErrorOptions including cause chain
70
+ */
71
+ constructor(message: string, code: string, options?: ErrorOptions);
72
+ }
73
+ /**
74
+ * Error thrown when pagination encounters an unexpected state.
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * try {
79
+ * for await (const item of client.accounts.list()) { ... }
80
+ * } catch (error) {
81
+ * if (error instanceof PaginationError) {
82
+ * console.log(error.code); // 'INVALID_RESPONSE_SHAPE'
83
+ * }
84
+ * }
85
+ * ```
86
+ */
87
+ export declare class PaginationError extends HieroError {
88
+ /**
89
+ * @param message - Human-readable description of the pagination failure
90
+ * @param code - Machine-readable error code
91
+ * @param options - Standard ErrorOptions including cause chain
92
+ */
93
+ constructor(message: string, code: string, options?: ErrorOptions);
94
+ }
95
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,SAAQ,KAAK;aAQjB,IAAI,EAAE,MAAM;IAP9B;;;;OAIG;gBAED,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,YAAY;CAMzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,SAAQ,UAAU;aAU3B,MAAM,EAAE,MAAM;IAThC;;;;;OAKG;gBAED,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACI,MAAM,EAAE,MAAM,EAC9B,OAAO,CAAC,EAAE,YAAY;CAIzB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGlE;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGlE"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PaginationError = exports.ValidationError = exports.MirrorNodeError = exports.HieroError = void 0;
5
+ /**
6
+ * Base error class for all hiero-sdk-utils errors.
7
+ * All errors thrown by this library extend this class.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * try {
12
+ * await client.accounts.getById('invalid');
13
+ * } catch (error) {
14
+ * if (error instanceof HieroError) {
15
+ * console.log(error.code); // e.g., 'INVALID_ACCOUNT_ID'
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+ class HieroError extends Error {
21
+ code;
22
+ /**
23
+ * @param message - Human-readable error description
24
+ * @param code - Machine-readable error code (e.g., 'ACCOUNT_NOT_FOUND')
25
+ * @param options - Standard ErrorOptions including cause chain
26
+ */
27
+ constructor(message, code, options) {
28
+ super(message, options);
29
+ this.code = code;
30
+ this.name = this.constructor.name;
31
+ Object.setPrototypeOf(this, new.target.prototype);
32
+ }
33
+ }
34
+ exports.HieroError = HieroError;
35
+ /**
36
+ * Error thrown when the Mirror Node API returns an error response.
37
+ * Includes the HTTP status code for programmatic handling.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * try {
42
+ * await client.accounts.getById('0.0.99999999999');
43
+ * } catch (error) {
44
+ * if (error instanceof MirrorNodeError) {
45
+ * console.log(error.status); // 404
46
+ * console.log(error.code); // 'MIRROR_NODE_ERROR'
47
+ * }
48
+ * }
49
+ * ```
50
+ */
51
+ class MirrorNodeError extends HieroError {
52
+ status;
53
+ /**
54
+ * @param message - Human-readable error description
55
+ * @param code - Machine-readable error code
56
+ * @param status - HTTP status code from the Mirror Node response
57
+ * @param options - Standard ErrorOptions including cause chain
58
+ */
59
+ constructor(message, code, status, options) {
60
+ super(message, code, options);
61
+ this.status = status;
62
+ }
63
+ }
64
+ exports.MirrorNodeError = MirrorNodeError;
65
+ /**
66
+ * Error thrown when input validation fails before making a network request.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * try {
71
+ * await client.accounts.getById('not-an-id');
72
+ * } catch (error) {
73
+ * if (error instanceof ValidationError) {
74
+ * console.log(error.code); // 'INVALID_ACCOUNT_ID'
75
+ * }
76
+ * }
77
+ * ```
78
+ */
79
+ class ValidationError extends HieroError {
80
+ /**
81
+ * @param message - Human-readable description of what was invalid
82
+ * @param code - Machine-readable error code
83
+ * @param options - Standard ErrorOptions including cause chain
84
+ */
85
+ constructor(message, code, options) {
86
+ super(message, code, options);
87
+ }
88
+ }
89
+ exports.ValidationError = ValidationError;
90
+ /**
91
+ * Error thrown when pagination encounters an unexpected state.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * try {
96
+ * for await (const item of client.accounts.list()) { ... }
97
+ * } catch (error) {
98
+ * if (error instanceof PaginationError) {
99
+ * console.log(error.code); // 'INVALID_RESPONSE_SHAPE'
100
+ * }
101
+ * }
102
+ * ```
103
+ */
104
+ class PaginationError extends HieroError {
105
+ /**
106
+ * @param message - Human-readable description of the pagination failure
107
+ * @param code - Machine-readable error code
108
+ * @param options - Standard ErrorOptions including cause chain
109
+ */
110
+ constructor(message, code, options) {
111
+ super(message, code, options);
112
+ }
113
+ }
114
+ exports.PaginationError = PaginationError;
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";AAAA,sCAAsC;;;AAEtC;;;;;;;;;;;;;;GAcG;AACH,MAAa,UAAW,SAAQ,KAAK;IAQjB;IAPlB;;;;OAIG;IACH,YACE,OAAe,EACC,IAAY,EAC5B,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QAI5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAfD,gCAeC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAa,eAAgB,SAAQ,UAAU;IAU3B;IATlB;;;;;OAKG;IACH,YACE,OAAe,EACf,IAAY,EACI,MAAc,EAC9B,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAHd,WAAM,GAAN,MAAM,CAAQ;IAIhC,CAAC;CACF;AAfD,0CAeC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAa,eAAgB,SAAQ,UAAU;IAC7C;;;;OAIG;IACH,YAAY,OAAe,EAAE,IAAY,EAAE,OAAsB;QAC/D,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;CACF;AATD,0CASC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAa,eAAgB,SAAQ,UAAU;IAC7C;;;;OAIG;IACH,YAAY,OAAe,EAAE,IAAY,EAAE,OAAsB;QAC/D,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;CACF;AATD,0CASC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * hiero-sdk-utils — TypeScript utilities for the Hedera/Hiero Mirror Node.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { HieroClient, Networks } from 'hiero-sdk-utils';
7
+ *
8
+ * const client = new HieroClient({ baseUrl: Networks.testnet });
9
+ *
10
+ * // Fetch a single account
11
+ * const account = await client.accounts.getById('0.0.1234');
12
+ *
13
+ * // Iterate through accounts with auto-pagination
14
+ * for await (const a of client.accounts.list({ limit: 10 })) {
15
+ * console.log(a.account, a.balance.balance);
16
+ * }
17
+ * ```
18
+ *
19
+ * @packageDocumentation
20
+ */
21
+ export { HieroClient } from './client/HieroClient.js';
22
+ export { Networks } from './client/types.js';
23
+ export type { HieroClientConfig, NetworkName } from './client/types.js';
24
+ export { HieroError, MirrorNodeError, ValidationError, PaginationError, } from './errors/index.js';
25
+ export { AccountsResource } from './resources/accounts.js';
26
+ export { TransactionsResource } from './resources/transactions.js';
27
+ export { TokensResource } from './resources/tokens.js';
28
+ export { TopicsResource } from './resources/topics.js';
29
+ export { ContractsResource } from './resources/contracts.js';
30
+ export { NftsResource } from './resources/nfts.js';
31
+ export { BalancesResource } from './resources/balances.js';
32
+ export { BlocksResource } from './resources/blocks.js';
33
+ export { SchedulesResource } from './resources/schedules.js';
34
+ export type { AccountInfo, AccountBalance, AccountsQueryParams, TransactionInfo, TransactionsQueryParams, Transfer, TokenTransfer, NftTransfer, TokenInfo, TokensQueryParams, TokenBalance, TopicInfo, TopicMessage, TopicMessagesQueryParams, ContractInfo, ContractsQueryParams, CustomFee, FixedFee, FractionalFee, FractionalAmount, RoyaltyFee, NftInfo, NftsQueryParams, BalanceEntry, BalancesQueryParams, BlockInfo, BlocksQueryParams, ScheduleInfo, SchedulesQueryParams, Key, } from './types/api.js';
35
+ export type { BaseQueryParams, TimestampFilter, PaginationLinks, } from './types/common.js';
36
+ //# sourceMappingURL=index.d.ts.map