@gauntlet-xyz/sdk 2.0.0 → 2.5.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/README.md +134 -1
- package/dist/api/activity.d.ts +70 -0
- package/dist/api/activity.d.ts.map +1 -0
- package/dist/api/activity.js +154 -0
- package/dist/api/activity.js.map +1 -0
- package/dist/api/caip.d.ts +29 -0
- package/dist/api/caip.d.ts.map +1 -0
- package/dist/api/caip.js +38 -0
- package/dist/api/caip.js.map +1 -0
- package/dist/api/client.d.ts +135 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +119 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/decimal.d.ts +21 -0
- package/dist/api/decimal.d.ts.map +1 -0
- package/dist/api/decimal.js +44 -0
- package/dist/api/decimal.js.map +1 -0
- package/dist/api/errors.d.ts +32 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +41 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/generated.d.ts +1505 -0
- package/dist/api/generated.d.ts.map +1 -0
- package/dist/api/generated.js +6 -0
- package/dist/api/generated.js.map +1 -0
- package/dist/api/http.d.ts +16 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +39 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +14 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/positionHistory.d.ts +44 -0
- package/dist/api/positionHistory.d.ts.map +1 -0
- package/dist/api/positionHistory.js +126 -0
- package/dist/api/positionHistory.js.map +1 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +21 -2
- package/dist/errors.js.map +1 -1
- package/dist/evm/abis/priceAndFeeCalculatorV2.d.ts +44 -0
- package/dist/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -1
- package/dist/evm/abis/priceAndFeeCalculatorV2.js +22 -0
- package/dist/evm/abis/priceAndFeeCalculatorV2.js.map +1 -1
- package/dist/evm/abis/provisionerV2.d.ts +280 -0
- package/dist/evm/abis/provisionerV2.d.ts.map +1 -1
- package/dist/evm/abis/provisionerV2.js +92 -0
- package/dist/evm/abis/provisionerV2.js.map +1 -1
- package/dist/evm/adapters/aera.d.ts.map +1 -1
- package/dist/evm/adapters/aera.js +41 -10
- package/dist/evm/adapters/aera.js.map +1 -1
- package/dist/evm/adapters/types.d.ts +2 -0
- package/dist/evm/adapters/types.d.ts.map +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts +10 -5
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js +39 -5
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js.map +1 -1
- package/dist/evm/aeraContracts/readOptions.d.ts +8 -0
- package/dist/evm/aeraContracts/readOptions.d.ts.map +1 -0
- package/dist/evm/aeraContracts/readOptions.js +4 -0
- package/dist/evm/aeraContracts/readOptions.js.map +1 -0
- package/dist/evm/aeraContracts/v2.d.ts +1932 -217
- package/dist/evm/aeraContracts/v2.d.ts.map +1 -1
- package/dist/evm/aeraContracts/v2.js +84 -28
- package/dist/evm/aeraContracts/v2.js.map +1 -1
- package/dist/evm/aeraContracts.d.ts +9 -3
- package/dist/evm/aeraContracts.d.ts.map +1 -1
- package/dist/evm/aeraContracts.js +69 -8
- package/dist/evm/aeraContracts.js.map +1 -1
- package/dist/evm/deposit.d.ts.map +1 -1
- package/dist/evm/deposit.js +1 -1
- package/dist/evm/deposit.js.map +1 -1
- package/dist/evm/index.d.ts +8 -0
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +3 -0
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/tokenModes.d.ts +22 -0
- package/dist/evm/tokenModes.d.ts.map +1 -0
- package/dist/evm/tokenModes.js +34 -0
- package/dist/evm/tokenModes.js.map +1 -0
- package/dist/evm/withdraw.d.ts +8 -0
- package/dist/evm/withdraw.d.ts.map +1 -1
- package/dist/evm/withdraw.js +85 -5
- package/dist/evm/withdraw.js.map +1 -1
- package/dist/evm/withdrawQuote.d.ts +127 -0
- package/dist/evm/withdrawQuote.d.ts.map +1 -0
- package/dist/evm/withdrawQuote.js +164 -0
- package/dist/evm/withdrawQuote.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/privy/index.d.ts +52 -0
- package/dist/privy/index.d.ts.map +1 -0
- package/dist/privy/index.js +51 -0
- package/dist/privy/index.js.map +1 -0
- package/manifest/vaults.json +255 -3
- package/package.json +2 -2
- package/src/api/activity.ts +219 -0
- package/src/api/caip.ts +61 -0
- package/src/api/client.ts +234 -0
- package/src/api/decimal.ts +49 -0
- package/src/api/errors.ts +64 -0
- package/src/api/generated.ts +1505 -0
- package/src/api/http.ts +62 -0
- package/src/api/index.ts +70 -0
- package/src/api/positionHistory.ts +167 -0
- package/src/client.ts +7 -1
- package/src/errors.ts +32 -2
- package/src/evm/abis/priceAndFeeCalculatorV2.ts +22 -0
- package/src/evm/abis/provisionerV2.ts +92 -0
- package/src/evm/adapters/aera.ts +50 -23
- package/src/evm/adapters/types.ts +2 -0
- package/src/evm/aeraContracts/priceAndFeeCalculator.ts +72 -5
- package/src/evm/aeraContracts/readOptions.ts +3 -0
- package/src/evm/aeraContracts/v2.ts +158 -34
- package/src/evm/aeraContracts.ts +81 -8
- package/src/evm/deposit.ts +2 -1
- package/src/evm/index.ts +32 -0
- package/src/evm/tokenModes.ts +54 -0
- package/src/evm/withdraw.ts +131 -7
- package/src/evm/withdrawQuote.ts +360 -0
- package/src/index.ts +18 -0
- package/src/privy/index.ts +95 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { apiGet } from './http';
|
|
2
|
+
/**
|
|
3
|
+
* Typed client for the Gaia REST API (api.gauntlet.xyz).
|
|
4
|
+
*
|
|
5
|
+
* All response types are generated from the service's OpenAPI spec
|
|
6
|
+
* (`src/api/generated.ts`, regenerated via `yarn generate:api-types`) so they
|
|
7
|
+
* cannot drift from the server models. Values are returned exactly as the API
|
|
8
|
+
* emits them — human-unit decimal strings and CAIP-10 vault ids; use
|
|
9
|
+
* `decimalToBigInt` / `sharesToBigInt` and `apiVaultIdFromVaultId` /
|
|
10
|
+
* `vaultIdFromApiVaultId` to convert, or the higher-level `activityFlows` /
|
|
11
|
+
* `positionHistory` helpers for pre-normalized values.
|
|
12
|
+
*
|
|
13
|
+
* Available on a configured client as `client.api`, or standalone:
|
|
14
|
+
* ```ts
|
|
15
|
+
* const api = new GauntletApi({ apiKey: process.env.GAUNTLET_API_KEY });
|
|
16
|
+
* const { data } = await api.vaults();
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export class GauntletApi {
|
|
20
|
+
constructor(config = {}) {
|
|
21
|
+
this.config = config;
|
|
22
|
+
}
|
|
23
|
+
get(path, query) {
|
|
24
|
+
return apiGet(this.config, path, query);
|
|
25
|
+
}
|
|
26
|
+
/** GET /health — service liveness (version + uptime). */
|
|
27
|
+
health() {
|
|
28
|
+
return this.get('/health');
|
|
29
|
+
}
|
|
30
|
+
/** GET /health/chains — per-chain indexer sync freshness. */
|
|
31
|
+
chainSyncStatus() {
|
|
32
|
+
return this.get('/health/chains');
|
|
33
|
+
}
|
|
34
|
+
/** GET /v1/vaults — all indexed vaults with live metrics (TVL, APY, unit price). */
|
|
35
|
+
vaults(options = {}) {
|
|
36
|
+
return this.get('/v1/vaults', { next: options.next, limit: options.limit });
|
|
37
|
+
}
|
|
38
|
+
/** GET /v1/vaults/featured — admin-curated featured vault cards. */
|
|
39
|
+
featuredVaults() {
|
|
40
|
+
return this.get('/v1/vaults/featured');
|
|
41
|
+
}
|
|
42
|
+
/** GET /v1/strategies — admin-curated strategy cards. */
|
|
43
|
+
strategies() {
|
|
44
|
+
return this.get('/v1/strategies');
|
|
45
|
+
}
|
|
46
|
+
/** GET /v1/vaults/{vault_id} — one vault with live metrics. `vaultId` is CAIP-10. */
|
|
47
|
+
vault(vaultId) {
|
|
48
|
+
return this.get(`/v1/vaults/${encodeURIComponent(vaultId)}`);
|
|
49
|
+
}
|
|
50
|
+
/** GET /v1/vaults/{vault_id}/definition — raw indexed vault definition. */
|
|
51
|
+
vaultDefinition(vaultId) {
|
|
52
|
+
return this.get(`/v1/vaults/${encodeURIComponent(vaultId)}/definition`);
|
|
53
|
+
}
|
|
54
|
+
/** GET /v1/vaults/{vault_id}/timeseries — TVL / unit-price / APY history. */
|
|
55
|
+
vaultTimeseries(vaultId, options = {}) {
|
|
56
|
+
return this.get(`/v1/vaults/${encodeURIComponent(vaultId)}/timeseries`, { ...options });
|
|
57
|
+
}
|
|
58
|
+
/** GET /v1/users/{wallet}/positions — all of a wallet's indexed positions with PnL. */
|
|
59
|
+
positions(walletAddress, options = {}) {
|
|
60
|
+
return this.get(`/v1/users/${encodeURIComponent(walletAddress)}/positions`, {
|
|
61
|
+
next: options.next,
|
|
62
|
+
limit: options.limit,
|
|
63
|
+
include_hidden: options.includeHidden,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** GET /v1/users/{wallet}/positions/{vault_id} — one position with PnL breakdown. */
|
|
67
|
+
position(walletAddress, vaultId) {
|
|
68
|
+
return this.get(`/v1/users/${encodeURIComponent(walletAddress)}/positions/${encodeURIComponent(vaultId)}`);
|
|
69
|
+
}
|
|
70
|
+
/** GET /v1/users/{wallet}/positions/{vault_id}/timeseries — value / cost-basis / PnL / ROI history. */
|
|
71
|
+
positionTimeseries(walletAddress, vaultId, options = {}) {
|
|
72
|
+
return this.get(`/v1/users/${encodeURIComponent(walletAddress)}/positions/${encodeURIComponent(vaultId)}/timeseries`, { ...options });
|
|
73
|
+
}
|
|
74
|
+
/** GET /v1/users/{wallet}/activity — one page of the wallet's immutable event log. */
|
|
75
|
+
activity(walletAddress, options = {}) {
|
|
76
|
+
const { vaultId, includeHidden, ...page } = options;
|
|
77
|
+
return this.get(`/v1/users/${encodeURIComponent(walletAddress)}/activity`, {
|
|
78
|
+
vault_id: vaultId,
|
|
79
|
+
include_hidden: includeHidden,
|
|
80
|
+
...page,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Iterates the wallet's full activity log, following `meta.next_cursor`
|
|
85
|
+
* across pages so callers never handle cursors.
|
|
86
|
+
*/
|
|
87
|
+
async *activityRows(walletAddress, options = {}) {
|
|
88
|
+
let next;
|
|
89
|
+
do {
|
|
90
|
+
const page = await this.activity(walletAddress, { ...options, next });
|
|
91
|
+
yield* page.data;
|
|
92
|
+
next = page.meta.next_cursor ?? undefined;
|
|
93
|
+
} while (next);
|
|
94
|
+
}
|
|
95
|
+
/** GET /v1/tvl — aggregate Gauntlet TVL, optionally with per-source breakdown. */
|
|
96
|
+
tvl(options = {}) {
|
|
97
|
+
return this.get('/v1/tvl', { include_breakdown: options.includeBreakdown });
|
|
98
|
+
}
|
|
99
|
+
/** GET /v1/prices — latest USD price for a token. */
|
|
100
|
+
latestPrice(options) {
|
|
101
|
+
return this.get('/v1/prices', {
|
|
102
|
+
address: options.address,
|
|
103
|
+
chain_id: options.chainId,
|
|
104
|
+
at: options.at,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/** GET /v1/prices/timeseries — USD price history for a token. */
|
|
108
|
+
priceTimeseries(options) {
|
|
109
|
+
return this.get('/v1/prices/timeseries', {
|
|
110
|
+
address: options.address,
|
|
111
|
+
chain_id: options.chainId,
|
|
112
|
+
start: options.start,
|
|
113
|
+
end: options.end,
|
|
114
|
+
granularity: options.granularity,
|
|
115
|
+
limit: options.limit,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA4C,MAAM,QAAQ,CAAC;AA+E1E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,WAAW;IAGtB,YAAY,SAA4B,EAAE;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,GAAG,CAAI,IAAY,EAAE,KAAmB;QAC9C,OAAO,MAAM,CAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,yDAAyD;IACzD,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,6DAA6D;IAC7D,eAAe;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,oFAAoF;IACpF,MAAM,CAAC,UAAuB,EAAE;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,oEAAoE;IACpE,cAAc;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,yDAAyD;IACzD,UAAU;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,2EAA2E;IAC3E,eAAe,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED,6EAA6E;IAC7E,eAAe,CACb,OAAe,EACf,UAA6B,EAAE;QAE/B,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,uFAAuF;IACvF,SAAS,CACP,aAAqB,EACrB,UAA4B,EAAE;QAE9B,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,kBAAkB,CAAC,aAAa,CAAC,YAAY,EAAE;YAC1E,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,cAAc,EAAE,OAAO,CAAC,aAAa;SACtC,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IACrF,QAAQ,CAAC,aAAqB,EAAE,OAAe;QAC7C,OAAO,IAAI,CAAC,GAAG,CACb,aAAa,kBAAkB,CAAC,aAAa,CAAC,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED,uGAAuG;IACvG,kBAAkB,CAChB,aAAqB,EACrB,OAAe,EACf,UAA6B,EAAE;QAE/B,OAAO,IAAI,CAAC,GAAG,CACb,aAAa,kBAAkB,CAAC,aAAa,CAAC,cAAc,kBAAkB,CAAC,OAAO,CAAC,aAAa,EACpG,EAAE,GAAG,OAAO,EAAE,CACf,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,QAAQ,CAAC,aAAqB,EAAE,UAA2B,EAAE;QAC3D,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QACpD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,kBAAkB,CAAC,aAAa,CAAC,WAAW,EAAE;YACzE,QAAQ,EAAE,OAAO;YACjB,cAAc,EAAE,aAAa;YAC7B,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,YAAY,CACjB,aAAqB,EACrB,UAAyC,EAAE;QAE3C,IAAI,IAAwB,CAAC;QAC7B,GAAG,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC;QAC5C,CAAC,QAAQ,IAAI,EAAE;IACjB,CAAC;IAED,kFAAkF;IAClF,GAAG,CAAC,UAA0C,EAAE;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,qDAAqD;IACrD,WAAW,CAAC,OAA2B;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,EAAE,EAAE,OAAO,CAAC,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACjE,eAAe,CAAC,OAA+B;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE;YACvC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts an API decimal string (human units, e.g. `"1250.5"`) into base-unit
|
|
3
|
+
* bigint at the given token decimals (e.g. `1250500000n` for 6 decimals).
|
|
4
|
+
*
|
|
5
|
+
* The conversion is exact: a value with more significant fractional digits
|
|
6
|
+
* than `decimals` throws `DecimalPrecisionError` rather than rounding.
|
|
7
|
+
* Hand-rolled instead of viem's `parseUnits`, which silently rounds excess
|
|
8
|
+
* precision (`parseUnits('1.0000005', 6)` → `1000001n`) — unacceptable for
|
|
9
|
+
* financial amounts.
|
|
10
|
+
*/
|
|
11
|
+
export declare function decimalToBigInt(value: string, decimals: number): bigint;
|
|
12
|
+
/**
|
|
13
|
+
* Formats a base-unit bigint back into the API's human decimal-string
|
|
14
|
+
* representation (no trailing fractional zeros, no exponent notation).
|
|
15
|
+
*/
|
|
16
|
+
export declare function bigIntToDecimal(value: bigint, decimals: number): string;
|
|
17
|
+
/** Vault shares are always reported in 18-decimal units by the Gaia API. */
|
|
18
|
+
export declare const SHARE_DECIMALS = 18;
|
|
19
|
+
/** Parses an API share amount (decimal string) into base-unit bigint (1e18). */
|
|
20
|
+
export declare function sharesToBigInt(value: string): bigint;
|
|
21
|
+
//# sourceMappingURL=decimal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimal.d.ts","sourceRoot":"","sources":["../../src/api/decimal.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAcvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED,4EAA4E;AAC5E,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { formatUnits } from 'viem';
|
|
2
|
+
import { DecimalPrecisionError, InvalidDecimalError } from './errors';
|
|
3
|
+
const DECIMAL_RE = /^(-?)(\d+)(?:\.(\d+))?$/;
|
|
4
|
+
/**
|
|
5
|
+
* Converts an API decimal string (human units, e.g. `"1250.5"`) into base-unit
|
|
6
|
+
* bigint at the given token decimals (e.g. `1250500000n` for 6 decimals).
|
|
7
|
+
*
|
|
8
|
+
* The conversion is exact: a value with more significant fractional digits
|
|
9
|
+
* than `decimals` throws `DecimalPrecisionError` rather than rounding.
|
|
10
|
+
* Hand-rolled instead of viem's `parseUnits`, which silently rounds excess
|
|
11
|
+
* precision (`parseUnits('1.0000005', 6)` → `1000001n`) — unacceptable for
|
|
12
|
+
* financial amounts.
|
|
13
|
+
*/
|
|
14
|
+
export function decimalToBigInt(value, decimals) {
|
|
15
|
+
if (!Number.isInteger(decimals) || decimals < 0) {
|
|
16
|
+
throw new InvalidDecimalError(`decimals=${decimals}`);
|
|
17
|
+
}
|
|
18
|
+
const match = DECIMAL_RE.exec(value);
|
|
19
|
+
if (!match)
|
|
20
|
+
throw new InvalidDecimalError(value);
|
|
21
|
+
const [, sign, whole, frac = ''] = match;
|
|
22
|
+
if (frac.length > decimals && !/^0*$/.test(frac.slice(decimals))) {
|
|
23
|
+
throw new DecimalPrecisionError(value, decimals);
|
|
24
|
+
}
|
|
25
|
+
const scaled = BigInt(whole + frac.slice(0, decimals).padEnd(decimals, '0'));
|
|
26
|
+
return sign === '-' ? -scaled : scaled;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Formats a base-unit bigint back into the API's human decimal-string
|
|
30
|
+
* representation (no trailing fractional zeros, no exponent notation).
|
|
31
|
+
*/
|
|
32
|
+
export function bigIntToDecimal(value, decimals) {
|
|
33
|
+
if (!Number.isInteger(decimals) || decimals < 0) {
|
|
34
|
+
throw new InvalidDecimalError(`decimals=${decimals}`);
|
|
35
|
+
}
|
|
36
|
+
return formatUnits(value, decimals);
|
|
37
|
+
}
|
|
38
|
+
/** Vault shares are always reported in 18-decimal units by the Gaia API. */
|
|
39
|
+
export const SHARE_DECIMALS = 18;
|
|
40
|
+
/** Parses an API share amount (decimal string) into base-unit bigint (1e18). */
|
|
41
|
+
export function sharesToBigInt(value) {
|
|
42
|
+
return decimalToBigInt(value, SHARE_DECIMALS);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=decimal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimal.js","sourceRoot":"","sources":["../../src/api/decimal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEtE,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,QAAgB;IAC7D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,mBAAmB,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7E,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,QAAgB;IAC7D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,mBAAmB,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { GauntletSDKError } from '../errors';
|
|
2
|
+
export declare class GauntletApiError extends GauntletSDKError {
|
|
3
|
+
readonly status: number;
|
|
4
|
+
readonly path: string;
|
|
5
|
+
/** Machine-readable code from the API error envelope (e.g. `NOT_FOUND`), when present. */
|
|
6
|
+
readonly code?: string;
|
|
7
|
+
constructor(params: {
|
|
8
|
+
status: number;
|
|
9
|
+
path: string;
|
|
10
|
+
message: string;
|
|
11
|
+
code?: string;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export declare class InvalidDecimalError extends GauntletSDKError {
|
|
15
|
+
readonly value: string;
|
|
16
|
+
constructor(value: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class DecimalPrecisionError extends GauntletSDKError {
|
|
19
|
+
readonly value: string;
|
|
20
|
+
readonly decimals: number;
|
|
21
|
+
constructor(value: string, decimals: number);
|
|
22
|
+
}
|
|
23
|
+
export declare class InvalidCaipIdError extends GauntletSDKError {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
constructor(id: string);
|
|
26
|
+
}
|
|
27
|
+
export declare class SettlementTimeoutError extends GauntletSDKError {
|
|
28
|
+
readonly requestHash: string;
|
|
29
|
+
readonly timeoutMs: number;
|
|
30
|
+
constructor(requestHash: string, timeoutMs: number);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;CASrF;AAED,qBAAa,mBAAoB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM;CAK1B;AAED,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAQ5C;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAER,EAAE,EAAE,MAAM;CAKvB;AAED,qBAAa,sBAAuB,SAAQ,gBAAgB;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAMnD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { GauntletSDKError } from '../errors';
|
|
2
|
+
export class GauntletApiError extends GauntletSDKError {
|
|
3
|
+
constructor(params) {
|
|
4
|
+
super(`Gauntlet API request to "${params.path}" failed with ${params.status}: ${params.message}`);
|
|
5
|
+
this.name = 'GauntletApiError';
|
|
6
|
+
this.status = params.status;
|
|
7
|
+
this.path = params.path;
|
|
8
|
+
this.code = params.code;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class InvalidDecimalError extends GauntletSDKError {
|
|
12
|
+
constructor(value) {
|
|
13
|
+
super(`Value "${value}" is not a valid decimal string`);
|
|
14
|
+
this.name = 'InvalidDecimalError';
|
|
15
|
+
this.value = value;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class DecimalPrecisionError extends GauntletSDKError {
|
|
19
|
+
constructor(value, decimals) {
|
|
20
|
+
super(`Decimal "${value}" has more fractional digits than the token's ${decimals} decimals; converting would lose precision`);
|
|
21
|
+
this.name = 'DecimalPrecisionError';
|
|
22
|
+
this.value = value;
|
|
23
|
+
this.decimals = decimals;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class InvalidCaipIdError extends GauntletSDKError {
|
|
27
|
+
constructor(id) {
|
|
28
|
+
super(`"${id}" is not a valid CAIP-10 vault id (expected "{chainId}:{address}")`);
|
|
29
|
+
this.name = 'InvalidCaipIdError';
|
|
30
|
+
this.id = id;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class SettlementTimeoutError extends GauntletSDKError {
|
|
34
|
+
constructor(requestHash, timeoutMs) {
|
|
35
|
+
super(`Request "${requestHash}" did not settle within ${timeoutMs}ms`);
|
|
36
|
+
this.name = 'SettlementTimeoutError';
|
|
37
|
+
this.requestHash = requestHash;
|
|
38
|
+
this.timeoutMs = timeoutMs;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IAMpD,YAAY,MAAwE;QAClF,KAAK,CACH,4BAA4B,MAAM,CAAC,IAAI,iBAAiB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,CAC3F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;IAGvD,YAAY,KAAa;QACvB,KAAK,CAAC,UAAU,KAAK,iCAAiC,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,gBAAgB;IAIzD,YAAY,KAAa,EAAE,QAAgB;QACzC,KAAK,CACH,YAAY,KAAK,iDAAiD,QAAQ,4CAA4C,CACvH,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IAGtD,YAAY,EAAU;QACpB,KAAK,CAAC,IAAI,EAAE,oEAAoE,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAI1D,YAAY,WAAmB,EAAE,SAAiB;QAChD,KAAK,CAAC,YAAY,WAAW,2BAA2B,SAAS,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF"}
|