@elsoul/erpc-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -240,9 +240,82 @@ var AccountClient = class {
240
240
  }
241
241
  };
242
242
 
243
+ // src/catalog.ts
244
+ var resourceKinds = [
245
+ "bare-metal",
246
+ "solana-grpc",
247
+ "solana-shredstream",
248
+ "vps"
249
+ ];
250
+ var resourceModes = [
251
+ "dedicated",
252
+ "direct",
253
+ "shared"
254
+ ];
255
+ var objectValue = (value) => typeof value === "object" && value !== null ? value : null;
256
+ var stringArray = (value) => Array.isArray(value) && value.every((item) => typeof item === "string") ? value : null;
257
+ var parseOffering = (value) => {
258
+ const offering = objectValue(value);
259
+ if (offering === null || typeof offering.id !== "string" || typeof offering.kind !== "string" || !resourceKinds.includes(offering.kind) || typeof offering.name !== "string" || typeof offering.description !== "string" || offering.mode !== void 0 && (typeof offering.mode !== "string" || !resourceModes.includes(offering.mode))) return null;
260
+ const regions = stringArray(offering.regions);
261
+ const capabilities = stringArray(offering.capabilities);
262
+ if (regions === null || capabilities === null) return null;
263
+ const compute = offering.compute === void 0 ? void 0 : objectValue(offering.compute);
264
+ if (compute !== void 0 && (compute === null || compute.tenancy !== "virtual-machine" && compute.tenancy !== "bare-metal")) return null;
265
+ const solana = offering.solana === void 0 ? void 0 : objectValue(offering.solana);
266
+ if (solana !== void 0 && (solana === null || solana.transport !== "grpc" && solana.transport !== "shredstream")) return null;
267
+ const billing = offering.billing === void 0 ? void 0 : objectValue(offering.billing);
268
+ if (billing !== void 0 && (billing === null || billing.unit !== "cents-per-hour" || typeof billing.amountCents !== "number" || !Number.isInteger(billing.amountCents) || billing.amountCents < 0)) return null;
269
+ return {
270
+ id: offering.id,
271
+ kind: offering.kind,
272
+ name: offering.name,
273
+ description: offering.description,
274
+ regions,
275
+ capabilities,
276
+ ...typeof offering.mode === "string" ? { mode: offering.mode } : {},
277
+ ...compute && (compute.tenancy === "virtual-machine" || compute.tenancy === "bare-metal") ? { compute: { tenancy: compute.tenancy } } : {},
278
+ ...solana && (solana.transport === "grpc" || solana.transport === "shredstream") ? { solana: { transport: solana.transport } } : {},
279
+ ...billing && billing.unit === "cents-per-hour" && typeof billing.amountCents === "number" ? {
280
+ billing: {
281
+ amountCents: billing.amountCents,
282
+ unit: billing.unit
283
+ }
284
+ } : {}
285
+ };
286
+ };
287
+ var CloudCatalogClient = class {
288
+ #transport;
289
+ constructor(transport) {
290
+ this.#transport = transport;
291
+ }
292
+ async list(options) {
293
+ const response = await this.#transport.get(
294
+ "/v4/cloud/catalog",
295
+ void 0,
296
+ options
297
+ );
298
+ const envelope = objectValue(response);
299
+ const message = objectValue(envelope?.message);
300
+ if (envelope?.success !== true || !Array.isArray(message?.offerings)) {
301
+ throw new ErpcInvalidResponseError(
302
+ "ERPC returned an invalid Cloud catalog"
303
+ );
304
+ }
305
+ const offerings = message.offerings.map(parseOffering);
306
+ if (offerings.some((offering) => offering === null)) {
307
+ throw new ErpcInvalidResponseError(
308
+ "ERPC returned an invalid Cloud catalog"
309
+ );
310
+ }
311
+ return offerings;
312
+ }
313
+ };
314
+
243
315
  // src/config.ts
244
316
  var DEFAULT_ENDPOINT = "https://edge.erpc.global";
245
317
  var DEFAULT_ACCOUNT_ENDPOINT = "https://solana-rpc.erpc.global";
318
+ var DEFAULT_USER_ENDPOINT = "https://user-api.erpc.global";
246
319
  var DEFAULT_TIMEOUT_MS = 3e4;
247
320
  var requireFetch = (provided) => {
248
321
  const implementation = provided ?? globalThis.fetch;
@@ -258,11 +331,13 @@ var resolveConfig = (config) => {
258
331
  if (!apiKey) throw new ErpcConfigError("apiKey must not be empty");
259
332
  let endpoint;
260
333
  let accountEndpoint;
334
+ let userEndpoint;
261
335
  try {
262
336
  endpoint = new URL(config.endpoint ?? DEFAULT_ENDPOINT);
263
337
  accountEndpoint = new URL(
264
338
  config.accountEndpoint ?? DEFAULT_ACCOUNT_ENDPOINT
265
339
  );
340
+ userEndpoint = new URL(config.userEndpoint ?? DEFAULT_USER_ENDPOINT);
266
341
  } catch {
267
342
  throw new ErpcConfigError("endpoint must be an absolute HTTP(S) URL");
268
343
  }
@@ -272,12 +347,18 @@ var resolveConfig = (config) => {
272
347
  if (accountEndpoint.protocol !== "https:" && accountEndpoint.protocol !== "http:") {
273
348
  throw new ErpcConfigError("accountEndpoint must use HTTP or HTTPS");
274
349
  }
350
+ if (userEndpoint.protocol !== "https:" && userEndpoint.protocol !== "http:") {
351
+ throw new ErpcConfigError("userEndpoint must use HTTP or HTTPS");
352
+ }
275
353
  endpoint.search = "";
276
354
  endpoint.hash = "";
277
355
  endpoint.pathname = endpoint.pathname.replace(/\/+$/, "") || "/";
278
356
  accountEndpoint.search = "";
279
357
  accountEndpoint.hash = "";
280
358
  accountEndpoint.pathname = accountEndpoint.pathname.replace(/\/+$/, "") || "/";
359
+ userEndpoint.search = "";
360
+ userEndpoint.hash = "";
361
+ userEndpoint.pathname = userEndpoint.pathname.replace(/\/+$/, "") || "/";
281
362
  const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
282
363
  if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
283
364
  throw new ErpcConfigError("timeoutMs must be a positive finite number");
@@ -289,6 +370,7 @@ var resolveConfig = (config) => {
289
370
  fetch: requireFetch(config.fetch),
290
371
  headers: config.headers ?? {},
291
372
  timeoutMs,
373
+ userEndpoint,
292
374
  ...config.webSocket === void 0 ? {} : { webSocket: config.webSocket }
293
375
  };
294
376
  };
@@ -1196,6 +1278,91 @@ var HttpJsonRpcTransport = class {
1196
1278
  }
1197
1279
  };
1198
1280
 
1281
+ // src/usage.ts
1282
+ var YEAR_MONTH = /^\d{4}-(0[1-9]|1[0-2])$/;
1283
+ var objectValue2 = (value) => typeof value === "object" && value !== null ? value : null;
1284
+ var isTimestamp = (value) => value === null || typeof value === "string";
1285
+ var parseMethod = (value) => {
1286
+ const method = objectValue2(value);
1287
+ if (method === null || typeof method.count !== "number" || typeof method.creditCost !== "number" || typeof method.credits !== "number" || typeof method.method !== "string" || !isTimestamp(method.updatedAt)) return null;
1288
+ return {
1289
+ count: method.count,
1290
+ creditCost: method.creditCost,
1291
+ credits: method.credits,
1292
+ method: method.method,
1293
+ updatedAt: method.updatedAt
1294
+ };
1295
+ };
1296
+ var parseChain = (value) => {
1297
+ const chain = objectValue2(value);
1298
+ if (chain === null || typeof chain.chain !== "string" || typeof chain.count !== "number" || typeof chain.credits !== "number" || !Array.isArray(chain.methods) || !isTimestamp(chain.updatedAt)) return null;
1299
+ const methods = chain.methods.map(parseMethod);
1300
+ if (methods.some((method) => method === null)) return null;
1301
+ return {
1302
+ chain: chain.chain,
1303
+ count: chain.count,
1304
+ credits: chain.credits,
1305
+ methods,
1306
+ updatedAt: chain.updatedAt
1307
+ };
1308
+ };
1309
+ var parseApiKey = (value) => {
1310
+ const apiKey = objectValue2(value);
1311
+ if (apiKey === null || typeof apiKey.apiKeyLast4 !== "string" || typeof apiKey.apiKeyLength !== "number" || !Array.isArray(apiKey.chains) || typeof apiKey.count !== "number" || typeof apiKey.credits !== "number" || apiKey.keyId !== null && typeof apiKey.keyId !== "number" || !isTimestamp(apiKey.updatedAt)) return null;
1312
+ const chains = apiKey.chains.map(parseChain);
1313
+ if (chains.some((chain) => chain === null)) return null;
1314
+ return {
1315
+ apiKeyLast4: apiKey.apiKeyLast4,
1316
+ apiKeyLength: apiKey.apiKeyLength,
1317
+ chains,
1318
+ count: apiKey.count,
1319
+ credits: apiKey.credits,
1320
+ keyId: apiKey.keyId,
1321
+ updatedAt: apiKey.updatedAt
1322
+ };
1323
+ };
1324
+ var parseMonthlyUsage = (value) => {
1325
+ const usage = objectValue2(value);
1326
+ if (usage === null || !Array.isArray(usage.apiKeys) || !Array.isArray(usage.chains) || typeof usage.hasStrandedUsage !== "boolean" || typeof usage.keyCount !== "number" || typeof usage.totalCount !== "number" || typeof usage.totalCredits !== "number" || !isTimestamp(usage.updatedAt) || typeof usage.yearMonth !== "string" || !YEAR_MONTH.test(usage.yearMonth)) return null;
1327
+ const apiKeys = usage.apiKeys.map(parseApiKey);
1328
+ const chains = usage.chains.map(parseChain);
1329
+ if (apiKeys.some((apiKey) => apiKey === null) || chains.some((chain) => chain === null)) return null;
1330
+ return {
1331
+ apiKeys,
1332
+ chains,
1333
+ hasStrandedUsage: usage.hasStrandedUsage,
1334
+ keyCount: usage.keyCount,
1335
+ totalCount: usage.totalCount,
1336
+ totalCredits: usage.totalCredits,
1337
+ updatedAt: usage.updatedAt,
1338
+ yearMonth: usage.yearMonth
1339
+ };
1340
+ };
1341
+ var UsageClient = class {
1342
+ #transport;
1343
+ constructor(transport) {
1344
+ this.#transport = transport;
1345
+ }
1346
+ async getMonthlyApiKeyUsage(params = {}, options) {
1347
+ if (params.yearMonth !== void 0 && !YEAR_MONTH.test(params.yearMonth)) {
1348
+ throw new ErpcConfigError("yearMonth must use YYYY-MM format");
1349
+ }
1350
+ const response = await this.#transport.get(
1351
+ "/v3/user/api-keys/usage",
1352
+ { yearMonth: params.yearMonth },
1353
+ options
1354
+ );
1355
+ const envelope = objectValue2(response);
1356
+ const usage = envelope?.success === true ? parseMonthlyUsage(envelope.message) : null;
1357
+ if (usage === null) {
1358
+ throw new ErpcInvalidResponseError(
1359
+ "ERPC returned an invalid monthly API key usage response"
1360
+ );
1361
+ }
1362
+ return usage;
1363
+ }
1364
+ };
1365
+
1199
1366
  // src/client.ts
1200
1367
  var createErpcClient = (config) => {
1201
1368
  const resolved = resolveConfig(config);
@@ -1232,6 +1399,10 @@ var createErpcClient = (config) => {
1232
1399
  ...sharedTransport,
1233
1400
  endpoint: resolved.accountEndpoint
1234
1401
  });
1402
+ const userTransport = new RestTransport({
1403
+ ...sharedTransport,
1404
+ endpoint: resolved.userEndpoint
1405
+ });
1235
1406
  const solana = {
1236
1407
  ...createSolanaClient(solanaTransport),
1237
1408
  subscriptions: new SolanaSubscriptions(solanaWebSocket)
@@ -1245,6 +1416,7 @@ var createErpcClient = (config) => {
1245
1416
  ethereum,
1246
1417
  price: new PriceClient(priceTransport),
1247
1418
  account: new AccountClient(accountTransport),
1419
+ usage: new UsageClient(userTransport),
1248
1420
  close: () => {
1249
1421
  solana.subscriptions.close();
1250
1422
  ethereum.subscriptions.close();
@@ -1252,6 +1424,222 @@ var createErpcClient = (config) => {
1252
1424
  };
1253
1425
  };
1254
1426
 
1255
- export { AccountClient, DEFAULT_ACCOUNT_ENDPOINT, DEFAULT_ENDPOINT, DEFAULT_TIMEOUT_MS, ETHEREUM_RPC_METHODS, ETHEREUM_SUBSCRIPTION_METHODS, ErpcAbortedError, ErpcBatchPolicyError, ErpcConfigError, ErpcError, ErpcHttpError, ErpcInvalidResponseError, ErpcJsonRpcError, ErpcTimeoutError, ErpcTransportError, EthereumSubscriptions, PendingRpcBatchRequest, PendingRpcRequest, PriceClient, RpcSubscription, SOLANA_ANALYTICS_METHODS, SOLANA_DAS_METHODS, SOLANA_ENHANCED_SUBSCRIPTION_METHODS, SOLANA_HISTORY_METHODS, SOLANA_LEADER_METHODS, SOLANA_RPC_METHODS, SolanaSubscriptions, createErpcClient };
1427
+ // src/credit.ts
1428
+ var alertLevels = [
1429
+ "critical",
1430
+ "normal",
1431
+ "suspended",
1432
+ "warning"
1433
+ ];
1434
+ var objectValue3 = (value) => typeof value === "object" && value !== null ? value : null;
1435
+ var isDateTime = (value) => typeof value === "string" && Number.isFinite(Date.parse(value));
1436
+ var parseCredit = (value) => {
1437
+ const credit = objectValue3(value);
1438
+ if (credit === null || typeof credit.balanceCents !== "number" || !Number.isInteger(credit.balanceCents) || typeof credit.burnRateCentsPerHour !== "number" || !Number.isInteger(credit.burnRateCentsPerHour) || credit.burnRateCentsPerHour < 0 || credit.timeToZeroHours !== null && (typeof credit.timeToZeroHours !== "number" || !Number.isFinite(credit.timeToZeroHours) || credit.timeToZeroHours < 0) || typeof credit.alertLevel !== "string" || !alertLevels.includes(credit.alertLevel) || !isDateTime(credit.quoteTimestamp) || !isDateTime(credit.quoteExpiresAt)) return null;
1439
+ return {
1440
+ alertLevel: credit.alertLevel,
1441
+ balanceCents: credit.balanceCents,
1442
+ burnRateCentsPerHour: credit.burnRateCentsPerHour,
1443
+ quoteExpiresAt: credit.quoteExpiresAt,
1444
+ quoteTimestamp: credit.quoteTimestamp,
1445
+ timeToZeroHours: credit.timeToZeroHours
1446
+ };
1447
+ };
1448
+ var CloudCreditClient = class {
1449
+ #transport;
1450
+ constructor(transport) {
1451
+ this.#transport = transport;
1452
+ }
1453
+ async get(options) {
1454
+ const response = await this.#transport.get(
1455
+ "/v4/cloud/credit",
1456
+ void 0,
1457
+ options
1458
+ );
1459
+ const envelope = objectValue3(response);
1460
+ const credit = envelope?.success === true ? parseCredit(envelope.message) : null;
1461
+ if (credit === null) {
1462
+ throw new ErpcInvalidResponseError(
1463
+ "ERPC returned an invalid Cloud credit snapshot"
1464
+ );
1465
+ }
1466
+ return credit;
1467
+ }
1468
+ };
1469
+
1470
+ // src/resources.ts
1471
+ var objectValue4 = (value) => typeof value === "object" && value !== null ? value : null;
1472
+ var resourceKinds2 = [
1473
+ "bare-metal",
1474
+ "solana-grpc",
1475
+ "solana-shredstream",
1476
+ "vps"
1477
+ ];
1478
+ var resourceModes2 = [
1479
+ "dedicated",
1480
+ "direct",
1481
+ "shared"
1482
+ ];
1483
+ var billingStatuses = [
1484
+ "active",
1485
+ "grace-period",
1486
+ "inactive",
1487
+ "suspended"
1488
+ ];
1489
+ var isDateTime2 = (value) => typeof value === "string" && Number.isFinite(Date.parse(value));
1490
+ var parseStatusBilling = (value) => {
1491
+ const billing = objectValue4(value);
1492
+ if (billing === null || typeof billing.status !== "string" || !billingStatuses.includes(
1493
+ billing.status
1494
+ ) || billing.hourlyCredits !== void 0 && (typeof billing.hourlyCredits !== "number" || !Number.isFinite(billing.hourlyCredits) || billing.hourlyCredits < 0) || billing.nextChargeAt !== void 0 && !isDateTime2(billing.nextChargeAt) || billing.graceEndsAt !== void 0 && !isDateTime2(billing.graceEndsAt)) return null;
1495
+ return {
1496
+ status: billing.status,
1497
+ ...typeof billing.hourlyCredits === "number" ? { hourlyCredits: billing.hourlyCredits } : {},
1498
+ ...typeof billing.nextChargeAt === "string" ? { nextChargeAt: billing.nextChargeAt } : {},
1499
+ ...typeof billing.graceEndsAt === "string" ? { graceEndsAt: billing.graceEndsAt } : {}
1500
+ };
1501
+ };
1502
+ var parseResourceStatus = (value) => {
1503
+ const status = objectValue4(value);
1504
+ if (status === null || typeof status.id !== "string" || typeof status.status !== "string") return null;
1505
+ const billing = status.billing === void 0 ? void 0 : parseStatusBilling(status.billing);
1506
+ if (status.billing !== void 0 && billing === null) return null;
1507
+ return {
1508
+ id: status.id,
1509
+ status: status.status,
1510
+ ...billing ? { billing } : {}
1511
+ };
1512
+ };
1513
+ var parseResource = (value) => {
1514
+ const resource = objectValue4(value);
1515
+ if (resource === null || typeof resource.id !== "string" || typeof resource.kind !== "string" || !resourceKinds2.includes(resource.kind) || typeof resource.status !== "string" || resource.mode !== void 0 && (typeof resource.mode !== "string" || !resourceModes2.includes(resource.mode)) || resource.name !== void 0 && typeof resource.name !== "string" || resource.region !== void 0 && typeof resource.region !== "string" || resource.createdAt !== void 0 && typeof resource.createdAt !== "string") return null;
1516
+ return {
1517
+ id: resource.id,
1518
+ kind: resource.kind,
1519
+ status: resource.status,
1520
+ ...typeof resource.mode === "string" ? { mode: resource.mode } : {},
1521
+ ...typeof resource.name === "string" ? { name: resource.name } : {},
1522
+ ...typeof resource.region === "string" ? { region: resource.region } : {},
1523
+ ...typeof resource.createdAt === "string" ? { createdAt: resource.createdAt } : {}
1524
+ };
1525
+ };
1526
+ var CloudResourcesClient = class {
1527
+ #transport;
1528
+ constructor(transport) {
1529
+ this.#transport = transport;
1530
+ }
1531
+ async list(options) {
1532
+ const response = await this.#transport.get(
1533
+ "/v4/cloud/resources",
1534
+ void 0,
1535
+ options
1536
+ );
1537
+ const envelope = objectValue4(response);
1538
+ const message = objectValue4(envelope?.message);
1539
+ if (envelope?.success !== true || !Array.isArray(message?.resources)) {
1540
+ throw new ErpcInvalidResponseError(
1541
+ "ERPC returned an invalid Cloud resource list"
1542
+ );
1543
+ }
1544
+ const resources = message.resources.map(parseResource);
1545
+ if (resources.some((resource) => resource === null)) {
1546
+ throw new ErpcInvalidResponseError(
1547
+ "ERPC returned an invalid Cloud resource list"
1548
+ );
1549
+ }
1550
+ return resources;
1551
+ }
1552
+ async get(resourceId, options) {
1553
+ const normalizedId = resourceId.trim();
1554
+ if (!normalizedId) {
1555
+ throw new ErpcConfigError("resourceId must not be empty");
1556
+ }
1557
+ const response = await this.#transport.get(
1558
+ `/v4/cloud/resources/${encodeURIComponent(normalizedId)}`,
1559
+ void 0,
1560
+ options
1561
+ );
1562
+ const envelope = objectValue4(response);
1563
+ const message = objectValue4(envelope?.message);
1564
+ const resource = envelope?.success === true ? parseResource(message?.resource) : null;
1565
+ if (resource === null) {
1566
+ throw new ErpcInvalidResponseError(
1567
+ "ERPC returned an invalid Cloud resource"
1568
+ );
1569
+ }
1570
+ return resource;
1571
+ }
1572
+ async getStatus(resourceId, options) {
1573
+ const normalizedId = resourceId.trim();
1574
+ if (!normalizedId) {
1575
+ throw new ErpcConfigError("resourceId must not be empty");
1576
+ }
1577
+ const response = await this.#transport.get(
1578
+ `/v4/cloud/resources/${encodeURIComponent(normalizedId)}/status`,
1579
+ void 0,
1580
+ options
1581
+ );
1582
+ const envelope = objectValue4(response);
1583
+ const status = envelope?.success === true ? parseResourceStatus(envelope.message) : null;
1584
+ if (status === null) {
1585
+ throw new ErpcInvalidResponseError(
1586
+ "ERPC returned an invalid Cloud resource status"
1587
+ );
1588
+ }
1589
+ return status;
1590
+ }
1591
+ };
1592
+
1593
+ // src/cloud.ts
1594
+ var requireFetch2 = (provided) => {
1595
+ const implementation = provided ?? globalThis.fetch;
1596
+ if (typeof implementation !== "function") {
1597
+ throw new ErpcConfigError(
1598
+ "A Fetch API implementation is required in this runtime"
1599
+ );
1600
+ }
1601
+ return implementation;
1602
+ };
1603
+ var cloudEndpoint = (value) => {
1604
+ let endpoint;
1605
+ try {
1606
+ endpoint = new URL(value ?? DEFAULT_USER_ENDPOINT);
1607
+ } catch {
1608
+ throw new ErpcConfigError("endpoint must be an absolute HTTP(S) URL");
1609
+ }
1610
+ const isLocalHttp = endpoint.protocol === "http:" && ["127.0.0.1", "::1", "[::1]", "localhost"].includes(endpoint.hostname);
1611
+ if (endpoint.protocol !== "https:" && !isLocalHttp) {
1612
+ throw new ErpcConfigError("endpoint must use HTTPS except on localhost");
1613
+ }
1614
+ endpoint.search = "";
1615
+ endpoint.hash = "";
1616
+ endpoint.pathname = endpoint.pathname.replace(/\/+$/, "") || "/";
1617
+ return endpoint;
1618
+ };
1619
+ var createErpcCloudClient = (config) => {
1620
+ const accessToken = config.accessToken.trim();
1621
+ if (!accessToken) {
1622
+ throw new ErpcConfigError("accessToken must not be empty");
1623
+ }
1624
+ const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
1625
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
1626
+ throw new ErpcConfigError("timeoutMs must be a positive finite number");
1627
+ }
1628
+ const transport = new RestTransport({
1629
+ apiKey: accessToken,
1630
+ endpoint: cloudEndpoint(config.endpoint),
1631
+ fetch: requireFetch2(config.fetch),
1632
+ headers: config.headers ?? {},
1633
+ timeoutMs
1634
+ });
1635
+ return {
1636
+ catalog: new CloudCatalogClient(transport),
1637
+ credit: new CloudCreditClient(transport),
1638
+ resources: new CloudResourcesClient(transport),
1639
+ usage: new UsageClient(transport)
1640
+ };
1641
+ };
1642
+
1643
+ export { AccountClient, CloudCatalogClient, CloudCreditClient, CloudResourcesClient, DEFAULT_ACCOUNT_ENDPOINT, DEFAULT_ENDPOINT, DEFAULT_TIMEOUT_MS, DEFAULT_USER_ENDPOINT, ETHEREUM_RPC_METHODS, ETHEREUM_SUBSCRIPTION_METHODS, ErpcAbortedError, ErpcBatchPolicyError, ErpcConfigError, ErpcError, ErpcHttpError, ErpcInvalidResponseError, ErpcJsonRpcError, ErpcTimeoutError, ErpcTransportError, EthereumSubscriptions, PendingRpcBatchRequest, PendingRpcRequest, PriceClient, RpcSubscription, SOLANA_ANALYTICS_METHODS, SOLANA_DAS_METHODS, SOLANA_ENHANCED_SUBSCRIPTION_METHODS, SOLANA_HISTORY_METHODS, SOLANA_LEADER_METHODS, SOLANA_RPC_METHODS, SolanaSubscriptions, UsageClient, createErpcClient, createErpcCloudClient };
1256
1644
  //# sourceMappingURL=index.js.map
1257
1645
  //# sourceMappingURL=index.js.map