@augustdigital/sdk 4.27.4-alpha.0 → 5.1.1
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/LICENSE +21 -0
- package/README.md +58 -0
- package/lib/adapters/solana/getters.js +9 -2
- package/lib/adapters/solana/idl/vault-idl.js +14 -0
- package/lib/adapters/solana/index.d.ts +11 -0
- package/lib/adapters/solana/index.js +8 -0
- package/lib/adapters/solana/types.d.ts +4 -1
- package/lib/adapters/solana/utils.d.ts +8 -0
- package/lib/adapters/solana/utils.js +24 -0
- package/lib/core/analytics/sanitize.d.ts +3 -0
- package/lib/core/analytics/sanitize.js +74 -0
- package/lib/core/analytics/sentry.d.ts +1 -1
- package/lib/core/analytics/sentry.js +4 -1
- package/lib/core/auth/verify.js +9 -4
- package/lib/core/base.class.d.ts +5 -1
- package/lib/core/base.class.js +19 -2
- package/lib/core/errors/index.d.ts +40 -0
- package/lib/core/errors/index.js +103 -0
- package/lib/core/fetcher.d.ts +2 -0
- package/lib/core/fetcher.js +149 -41
- package/lib/core/helpers/web3.d.ts +3 -3
- package/lib/core/helpers/web3.js +43 -11
- package/lib/core/index.d.ts +2 -0
- package/lib/core/index.js +2 -0
- package/lib/core/logger/index.d.ts +10 -0
- package/lib/core/logger/index.js +37 -4
- package/lib/core/logger/slack.js +6 -2
- package/lib/core/version-check.d.ts +6 -0
- package/lib/core/version-check.js +101 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -7
- package/lib/main.d.ts +7 -2
- package/lib/main.js +25 -6
- package/lib/modules/vaults/getters.d.ts +5 -1
- package/lib/modules/vaults/getters.js +40 -26
- package/lib/modules/vaults/main.d.ts +7 -1
- package/lib/modules/vaults/main.js +32 -1
- package/lib/modules/vaults/types.d.ts +4 -0
- package/lib/polyfills.d.ts +1 -0
- package/lib/polyfills.js +10 -0
- package/package.json +27 -18
- package/lib/abis/AddressResolver.js.map +0 -1
- package/lib/abis/ChainlinkV3.js.map +0 -1
- package/lib/abis/ERC20.js.map +0 -1
- package/lib/abis/ERC20_Bytes32.js.map +0 -1
- package/lib/abis/ERC4626.js.map +0 -1
- package/lib/abis/ERC721.js.map +0 -1
- package/lib/abis/FeeOracle.js.map +0 -1
- package/lib/abis/LendingPool.js.map +0 -1
- package/lib/abis/LendingPoolV2.js.map +0 -1
- package/lib/abis/LendingPoolV3.js.map +0 -1
- package/lib/abis/Loan.js.map +0 -1
- package/lib/abis/MultiAssetNativeDepositWrapper.js.map +0 -1
- package/lib/abis/Multicall3.js.map +0 -1
- package/lib/abis/OFT.js.map +0 -1
- package/lib/abis/PoolAdapter.js.map +0 -1
- package/lib/abis/RewardDistributor.js.map +0 -1
- package/lib/abis/RwaRedeemSubaccount.js.map +0 -1
- package/lib/abis/SmartAccount.js.map +0 -1
- package/lib/abis/TextResolver.js.map +0 -1
- package/lib/abis/TokenizedVaultV2.js.map +0 -1
- package/lib/abis/TokenizedVaultV2DepositWithPermit.js.map +0 -1
- package/lib/abis/TokenizedVaultV2Receipt.js.map +0 -1
- package/lib/abis/TokenizedVaultV2SenderAllocationWhitelist.js.map +0 -1
- package/lib/abis/TokenizedVaultV2WhitelistedAllocation.js.map +0 -1
- package/lib/abis/TokenizedVaultV2WhitelistedAssets.js.map +0 -1
- package/lib/abis/UniversalResolverResolve.js.map +0 -1
- package/lib/abis/UniversalSignatureValidator.js.map +0 -1
- package/lib/abis/WrapperAdapter.js.map +0 -1
- package/lib/abis/index.js.map +0 -1
- package/lib/adapters/evm/getters.js.map +0 -1
- package/lib/adapters/evm/index.js.map +0 -1
- package/lib/adapters/evm/utils.js.map +0 -1
- package/lib/adapters/solana/constants.js.map +0 -1
- package/lib/adapters/solana/getters.js.map +0 -1
- package/lib/adapters/solana/idl/vault-idl.js.map +0 -1
- package/lib/adapters/solana/index.js.map +0 -1
- package/lib/adapters/solana/types.js.map +0 -1
- package/lib/adapters/solana/utils.js.map +0 -1
- package/lib/adapters/solana/vault.actions.js.map +0 -1
- package/lib/adapters/stellar/actions.js.map +0 -1
- package/lib/adapters/stellar/constants.js.map +0 -1
- package/lib/adapters/stellar/getters.js.map +0 -1
- package/lib/adapters/stellar/index.js.map +0 -1
- package/lib/adapters/stellar/soroban.js.map +0 -1
- package/lib/adapters/stellar/submit.js.map +0 -1
- package/lib/adapters/stellar/types.js.map +0 -1
- package/lib/adapters/stellar/utils.js.map +0 -1
- package/lib/adapters/sui/constants.js.map +0 -1
- package/lib/adapters/sui/getters.js.map +0 -1
- package/lib/adapters/sui/index.js.map +0 -1
- package/lib/adapters/sui/transformer.js.map +0 -1
- package/lib/adapters/sui/types.js.map +0 -1
- package/lib/adapters/sui/utils.js.map +0 -1
- package/lib/core/analytics/constants.js.map +0 -1
- package/lib/core/analytics/index.js.map +0 -1
- package/lib/core/analytics/instrumentation.js.map +0 -1
- package/lib/core/analytics/metrics.js.map +0 -1
- package/lib/core/analytics/sanitize.js.map +0 -1
- package/lib/core/analytics/sentry.js.map +0 -1
- package/lib/core/analytics/types.js.map +0 -1
- package/lib/core/analytics/user-identity.js.map +0 -1
- package/lib/core/auth/index.js.map +0 -1
- package/lib/core/auth/verify.js.map +0 -1
- package/lib/core/base.class.js.map +0 -1
- package/lib/core/cache.d.ts +0 -25
- package/lib/core/cache.js +0 -53
- package/lib/core/cache.js.map +0 -1
- package/lib/core/constants/adapters.js.map +0 -1
- package/lib/core/constants/core.js.map +0 -1
- package/lib/core/constants/vaults.js.map +0 -1
- package/lib/core/constants/web3.js.map +0 -1
- package/lib/core/fetcher.js.map +0 -1
- package/lib/core/helpers/adapters.js.map +0 -1
- package/lib/core/helpers/core.js.map +0 -1
- package/lib/core/helpers/signer.js.map +0 -1
- package/lib/core/helpers/vaults.js.map +0 -1
- package/lib/core/helpers/web3.js.map +0 -1
- package/lib/core/index.js.map +0 -1
- package/lib/core/logger/index.js.map +0 -1
- package/lib/core/logger/slack.js.map +0 -1
- package/lib/evm/index.js.map +0 -1
- package/lib/evm/methods/crossChainVault.js.map +0 -1
- package/lib/evm/methods/index.js.map +0 -1
- package/lib/evm/types/crossChain.js.map +0 -1
- package/lib/evm/types/index.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/main.js.map +0 -1
- package/lib/modules/sub-accounts/fetcher.js.map +0 -1
- package/lib/modules/sub-accounts/index.js.map +0 -1
- package/lib/modules/sub-accounts/main.js.map +0 -1
- package/lib/modules/sub-accounts/utils.js.map +0 -1
- package/lib/modules/vaults/adapter.helpers.js.map +0 -1
- package/lib/modules/vaults/fetcher.js.map +0 -1
- package/lib/modules/vaults/getters.js.map +0 -1
- package/lib/modules/vaults/index.js.map +0 -1
- package/lib/modules/vaults/main.js.map +0 -1
- package/lib/modules/vaults/read.actions.js.map +0 -1
- package/lib/modules/vaults/types.js.map +0 -1
- package/lib/modules/vaults/utils/call-data-decoder.js.map +0 -1
- package/lib/modules/vaults/utils/callDataDecoder.d.ts +0 -14
- package/lib/modules/vaults/utils/callDataDecoder.js +0 -138
- package/lib/modules/vaults/utils/callDataDecoder.js.map +0 -1
- package/lib/modules/vaults/utils/date-utils.js.map +0 -1
- package/lib/modules/vaults/utils/dateUtils.d.ts +0 -11
- package/lib/modules/vaults/utils/dateUtils.js +0 -39
- package/lib/modules/vaults/utils/dateUtils.js.map +0 -1
- package/lib/modules/vaults/utils/index.d.ts +0 -2
- package/lib/modules/vaults/utils/index.js +0 -19
- package/lib/modules/vaults/utils/index.js.map +0 -1
- package/lib/modules/vaults/utils.js.map +0 -1
- package/lib/modules/vaults/write.actions.js.map +0 -1
- package/lib/services/coingecko/fetcher.js.map +0 -1
- package/lib/services/coingecko/index.js.map +0 -1
- package/lib/services/coingecko/utils.js.map +0 -1
- package/lib/services/debank/fetcher.js.map +0 -1
- package/lib/services/debank/index.js.map +0 -1
- package/lib/services/debank/utils.js.map +0 -1
- package/lib/services/layerzero/deposits.js.map +0 -1
- package/lib/services/layerzero/redeems.js.map +0 -1
- package/lib/services/layerzero/utils.js.map +0 -1
- package/lib/services/octavfi/fetcher.js.map +0 -1
- package/lib/services/octavfi/index.js.map +0 -1
- package/lib/services/octavfi/types.js.map +0 -1
- package/lib/services/octavfi/utils.js.map +0 -1
- package/lib/services/subgraph/fetcher.js.map +0 -1
- package/lib/services/subgraph/index.js.map +0 -1
- package/lib/services/subgraph/vaults.js.map +0 -1
- package/lib/types/index.js.map +0 -1
- package/lib/types/points.js.map +0 -1
- package/lib/types/pools.js.map +0 -1
- package/lib/types/staking.js.map +0 -1
- package/lib/types/sub-accounts.js.map +0 -1
- package/lib/types/subgraph.js.map +0 -1
- package/lib/types/typed-contract.js.map +0 -1
- package/lib/types/user.js.map +0 -1
- package/lib/types/vaults.js.map +0 -1
- package/lib/types/web3.js.map +0 -1
- package/lib/types/webserver.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 August Digital
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -29,6 +29,9 @@ import { AugustSDK } from '@augustdigital/sdk';
|
|
|
29
29
|
|
|
30
30
|
// Initialize with RPC providers
|
|
31
31
|
const sdk = new AugustSDK({
|
|
32
|
+
// Required: a stable kebab-case slug identifying your application.
|
|
33
|
+
// See "App Name" below for what this is used for.
|
|
34
|
+
appName: 'acme-trader',
|
|
32
35
|
providers: {
|
|
33
36
|
1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
|
|
34
37
|
42161: 'https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY',
|
|
@@ -58,6 +61,61 @@ const positions = await sdk.getVaultPositions({
|
|
|
58
61
|
});
|
|
59
62
|
```
|
|
60
63
|
|
|
64
|
+
### App Name
|
|
65
|
+
|
|
66
|
+
`appName` is required on every `AugustSDK` constructor call. Pass a
|
|
67
|
+
stable kebab-case slug identifying your application (e.g.
|
|
68
|
+
`'acme-trader'`, `'my-defi-app'`):
|
|
69
|
+
|
|
70
|
+
- **What it's used for.** August Digital tags outbound analytics events
|
|
71
|
+
with `app.name = <yourSlug>`. We use this to (a) reach out about
|
|
72
|
+
breaking changes that will affect you, (b) attribute error spikes to
|
|
73
|
+
the right consuming app, and (c) prioritize bug fixes by impact.
|
|
74
|
+
- **What it is _not_.** It's not a secret, not a license key, not an
|
|
75
|
+
auth token, and despite the friendly name it's **not a display
|
|
76
|
+
label**. It's a self-issued identifier — pick a slug once and reuse
|
|
77
|
+
it across deployments.
|
|
78
|
+
- **Constraints.** 3–64 characters, only `[a-zA-Z0-9._-]`. Use a slug
|
|
79
|
+
like `'acme-trader'`, **not** a display name like `'Acme Trader'`
|
|
80
|
+
(spaces and special characters will throw). The SDK throws
|
|
81
|
+
synchronously from the constructor if the value is missing or
|
|
82
|
+
invalid, so a wrong value fails loudly at integration time rather
|
|
83
|
+
than silently in production.
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// Will throw — appName is required.
|
|
87
|
+
new AugustSDK({
|
|
88
|
+
providers: {
|
|
89
|
+
/* ... */
|
|
90
|
+
},
|
|
91
|
+
keys: {
|
|
92
|
+
/* ... */
|
|
93
|
+
},
|
|
94
|
+
} as any);
|
|
95
|
+
|
|
96
|
+
// Will throw — display name, not a slug. Use 'acme-trader' instead.
|
|
97
|
+
new AugustSDK({
|
|
98
|
+
appName: 'Acme Trader',
|
|
99
|
+
providers: {
|
|
100
|
+
/* ... */
|
|
101
|
+
},
|
|
102
|
+
keys: {
|
|
103
|
+
/* ... */
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Correct.
|
|
108
|
+
new AugustSDK({
|
|
109
|
+
appName: 'acme-trader',
|
|
110
|
+
providers: {
|
|
111
|
+
/* ... */
|
|
112
|
+
},
|
|
113
|
+
keys: {
|
|
114
|
+
/* ... */
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
61
119
|
## Architecture
|
|
62
120
|
|
|
63
121
|
```
|
|
@@ -102,8 +102,15 @@ const getSolanaVault = async (tokenizedVault, options) => {
|
|
|
102
102
|
}
|
|
103
103
|
let totalAssets;
|
|
104
104
|
if (onChainAvailable) {
|
|
105
|
-
const
|
|
106
|
-
|
|
105
|
+
const localAumRaw = vaultState?.vaultState?.localAum;
|
|
106
|
+
const deployedAumRaw = vaultState?.vaultState?.deployedAum;
|
|
107
|
+
const localAum = localAumRaw !== null && localAumRaw !== undefined
|
|
108
|
+
? BigInt(localAumRaw.toString())
|
|
109
|
+
: BigInt(0);
|
|
110
|
+
const deployedAum = deployedAumRaw !== null && deployedAumRaw !== undefined
|
|
111
|
+
? BigInt(deployedAumRaw.toString())
|
|
112
|
+
: BigInt(0);
|
|
113
|
+
totalAssets = (0, core_1.toNormalizedBn)(localAum + deployedAum, decimals);
|
|
107
114
|
}
|
|
108
115
|
else {
|
|
109
116
|
totalAssets = (0, utils_2.backendTvlToNormalizedBn)(tokenizedVault.latest_reported_tvl, decimals);
|
|
@@ -1023,12 +1023,26 @@ exports.vaultIdl = {
|
|
|
1023
1023
|
name: 'deployed_aum',
|
|
1024
1024
|
type: 'u64',
|
|
1025
1025
|
},
|
|
1026
|
+
{
|
|
1027
|
+
name: 'aum_increase_limit',
|
|
1028
|
+
type: 'u32',
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
name: 'aum_decrease_limit',
|
|
1032
|
+
type: 'u32',
|
|
1033
|
+
},
|
|
1026
1034
|
{
|
|
1027
1035
|
name: 'pda_bump',
|
|
1028
1036
|
type: {
|
|
1029
1037
|
array: ['u8', 1],
|
|
1030
1038
|
},
|
|
1031
1039
|
},
|
|
1040
|
+
{
|
|
1041
|
+
name: 'vault_version',
|
|
1042
|
+
type: {
|
|
1043
|
+
array: ['u8', 1],
|
|
1044
|
+
},
|
|
1045
|
+
},
|
|
1032
1046
|
{
|
|
1033
1047
|
name: 'paused',
|
|
1034
1048
|
type: 'bool',
|
|
@@ -61,6 +61,13 @@ export declare const Solana: {
|
|
|
61
61
|
publicKey: PublicKey | string;
|
|
62
62
|
shareMint?: PublicKey | string;
|
|
63
63
|
} & import("./types").ISolanaConnectionOptions) => Promise<any>;
|
|
64
|
+
fetchUserShareBalanceRaw: ({ connection, publicKey, shareMint, }: {
|
|
65
|
+
publicKey: PublicKey | string;
|
|
66
|
+
shareMint?: PublicKey | string;
|
|
67
|
+
} & import("./types").ISolanaConnectionOptions) => Promise<{
|
|
68
|
+
amount: string;
|
|
69
|
+
decimals: number | null;
|
|
70
|
+
}>;
|
|
64
71
|
getBestRpcEndpoint: ({ endpoint, network, connection, }: import("./types").ISolanaConnectionOptions) => Promise<`https://${string}` | "http://127.0.0.1:8899">;
|
|
65
72
|
fallbackDecimals: number;
|
|
66
73
|
fallbackNetwork: import("../..").ISolanaNetwork;
|
|
@@ -125,6 +132,10 @@ declare class SolanaAdapter {
|
|
|
125
132
|
getTokenSymbol(mintAddress: string | PublicKey): Promise<string>;
|
|
126
133
|
fetchUserTokenBalance(publicKey: PublicKey | string, depositMint: PublicKey | string): Promise<any>;
|
|
127
134
|
fetchUserShareBalance(publicKey: PublicKey | string, shareMint: PublicKey | string): Promise<any>;
|
|
135
|
+
fetchUserShareBalanceRaw(publicKey: PublicKey | string, shareMint: PublicKey | string): Promise<{
|
|
136
|
+
amount: string;
|
|
137
|
+
decimals: number | null;
|
|
138
|
+
}>;
|
|
128
139
|
vaultDeposit(vaultProgramId: PublicKey | string, idl: any, publicKey: PublicKey | string, depositAmount: number, sendTransaction: (transaction: Transaction | web3.VersionedTransaction, connection: Connection, options?: SendTransactionOptions) => Promise<web3.TransactionSignature>, vaultAddress?: PublicKey | string): Promise<any>;
|
|
129
140
|
vaultRedeem(vaultProgramId: PublicKey | string, idl: any, publicKey: PublicKey | string, redeemShares: number, sendTransaction: (transaction: Transaction | web3.VersionedTransaction, connection: Connection, options?: SendTransactionOptions) => Promise<web3.TransactionSignature>, vaultAddress?: PublicKey | string): Promise<any>;
|
|
130
141
|
getProgramId(type: 'vault'): string;
|
|
@@ -143,6 +143,14 @@ class SolanaAdapter {
|
|
|
143
143
|
shareMint,
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
|
+
async fetchUserShareBalanceRaw(publicKey, shareMint) {
|
|
147
|
+
return await utils_1.SolanaUtils.fetchUserShareBalanceRaw({
|
|
148
|
+
network: this._network,
|
|
149
|
+
connection: this._connection,
|
|
150
|
+
publicKey,
|
|
151
|
+
shareMint,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
146
154
|
async vaultDeposit(vaultProgramId, idl, publicKey, depositAmount, sendTransaction, vaultAddress) {
|
|
147
155
|
return await (0, vault_actions_1.handleSolanaDeposit)({
|
|
148
156
|
network: this._network,
|
|
@@ -15,10 +15,13 @@ export interface ISolanaVaultState {
|
|
|
15
15
|
depositMint: PublicKey | null;
|
|
16
16
|
feeRecipient: PublicKey | null;
|
|
17
17
|
withdrawalFee: number | null;
|
|
18
|
+
localAum: number | null;
|
|
18
19
|
deployedAum: number | null;
|
|
20
|
+
aumIncreaseLimit: number | null;
|
|
21
|
+
aumDecreaseLimit: number | null;
|
|
19
22
|
pdaBump: number[] | null;
|
|
20
|
-
paused: boolean | null;
|
|
21
23
|
vaultVersion: number[] | null;
|
|
24
|
+
paused: boolean | null;
|
|
22
25
|
}
|
|
23
26
|
export interface ISolanaToken {
|
|
24
27
|
address: string;
|
|
@@ -65,6 +65,13 @@ declare function fetchUserShareBalance({ connection, publicKey, shareMint, }: {
|
|
|
65
65
|
publicKey: PublicKey | string;
|
|
66
66
|
shareMint?: PublicKey | string;
|
|
67
67
|
} & ISolanaConnectionOptions): Promise<any>;
|
|
68
|
+
declare function fetchUserShareBalanceRaw({ connection, publicKey, shareMint, }: {
|
|
69
|
+
publicKey: PublicKey | string;
|
|
70
|
+
shareMint?: PublicKey | string;
|
|
71
|
+
} & ISolanaConnectionOptions): Promise<{
|
|
72
|
+
amount: string;
|
|
73
|
+
decimals: number | null;
|
|
74
|
+
}>;
|
|
68
75
|
declare function resolveProgramId(vaultAddress: string, solanaMetadata?: {
|
|
69
76
|
program_id?: string;
|
|
70
77
|
} | null): string;
|
|
@@ -84,6 +91,7 @@ export declare const SolanaUtils: {
|
|
|
84
91
|
getTokenSymbol: typeof getTokenSymbol;
|
|
85
92
|
fetchUserTokenBalance: typeof fetchUserTokenBalance;
|
|
86
93
|
fetchUserShareBalance: typeof fetchUserShareBalance;
|
|
94
|
+
fetchUserShareBalanceRaw: typeof fetchUserShareBalanceRaw;
|
|
87
95
|
getBestRpcEndpoint: typeof getBestRpcEndpoint;
|
|
88
96
|
fallbackDecimals: number;
|
|
89
97
|
fallbackNetwork: import("../..").ISolanaNetwork;
|
|
@@ -416,6 +416,29 @@ async function fetchUserShareBalance({ connection, publicKey, shareMint, }) {
|
|
|
416
416
|
return 0;
|
|
417
417
|
}
|
|
418
418
|
}
|
|
419
|
+
async function fetchUserShareBalanceRaw({ connection, publicKey, shareMint, }) {
|
|
420
|
+
if (!publicKey || !shareMint)
|
|
421
|
+
return { amount: '0', decimals: null };
|
|
422
|
+
try {
|
|
423
|
+
const _publicKey = new web3_js_1.PublicKey(publicKey);
|
|
424
|
+
const _shareMint = new web3_js_1.PublicKey(shareMint);
|
|
425
|
+
const shareAccounts = await connection.getParsedTokenAccountsByOwner(_publicKey, {
|
|
426
|
+
mint: _shareMint,
|
|
427
|
+
});
|
|
428
|
+
const tokenAmount = shareAccounts?.value?.[0]?.account?.data?.parsed?.info?.tokenAmount;
|
|
429
|
+
if (!tokenAmount)
|
|
430
|
+
return { amount: '0', decimals: null };
|
|
431
|
+
return {
|
|
432
|
+
amount: String(tokenAmount.amount ?? '0'),
|
|
433
|
+
decimals: typeof tokenAmount.decimals === 'number' ? tokenAmount.decimals : null,
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
catch (e) {
|
|
437
|
+
const error = e;
|
|
438
|
+
console.error('Error fetching raw user share balance:', error);
|
|
439
|
+
return { amount: '0', decimals: null };
|
|
440
|
+
}
|
|
441
|
+
}
|
|
419
442
|
function resolveProgramId(vaultAddress, solanaMetadata) {
|
|
420
443
|
return solanaMetadata?.program_id || vaultAddress;
|
|
421
444
|
}
|
|
@@ -435,6 +458,7 @@ exports.SolanaUtils = {
|
|
|
435
458
|
getTokenSymbol,
|
|
436
459
|
fetchUserTokenBalance,
|
|
437
460
|
fetchUserShareBalance,
|
|
461
|
+
fetchUserShareBalanceRaw,
|
|
438
462
|
getBestRpcEndpoint,
|
|
439
463
|
fallbackDecimals: constants_1.fallbackDecimals,
|
|
440
464
|
fallbackNetwork: constants_1.fallbackNetwork,
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
+
export declare function sanitizeString(input: string): string;
|
|
2
|
+
export declare function sanitizeError(err: unknown): unknown;
|
|
3
|
+
export declare function sanitizeForLogging(input: unknown, depth?: number): unknown;
|
|
1
4
|
export declare function sanitizeArgs(args: unknown[]): Record<string, unknown>;
|
|
2
5
|
export declare function sanitizeObject(obj: Record<string, unknown>, depth?: number): Record<string, unknown>;
|
|
@@ -1,22 +1,96 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeString = sanitizeString;
|
|
4
|
+
exports.sanitizeError = sanitizeError;
|
|
5
|
+
exports.sanitizeForLogging = sanitizeForLogging;
|
|
3
6
|
exports.sanitizeArgs = sanitizeArgs;
|
|
4
7
|
exports.sanitizeObject = sanitizeObject;
|
|
5
8
|
const SENSITIVE_KEYS = [
|
|
6
9
|
'apikey',
|
|
7
10
|
'api_key',
|
|
8
11
|
'apiKey',
|
|
12
|
+
'x-api-key',
|
|
9
13
|
'password',
|
|
10
14
|
'secret',
|
|
11
15
|
'token',
|
|
12
16
|
'bearer',
|
|
13
17
|
'authorization',
|
|
18
|
+
'proxy-authorization',
|
|
19
|
+
'cookie',
|
|
20
|
+
'set-cookie',
|
|
14
21
|
'privatekey',
|
|
15
22
|
'private_key',
|
|
16
23
|
'privateKey',
|
|
17
24
|
'mnemonic',
|
|
18
25
|
'seed',
|
|
19
26
|
];
|
|
27
|
+
const STRING_REDACTION_PATTERNS = [
|
|
28
|
+
[/(authorization\s*[:=]\s*)(bearer|basic|token)\s+\S+/gi, '$1$2 [REDACTED]'],
|
|
29
|
+
[
|
|
30
|
+
/([?&](?:api[-_]?key|apikey|access[-_]?token|token|key|auth)=)[^&\s#]+/gi,
|
|
31
|
+
'$1[REDACTED]',
|
|
32
|
+
],
|
|
33
|
+
[/(gateway\.thegraph\.com\/api\/)[A-Za-z0-9]{20,}(\/)/g, '$1[REDACTED]$2'],
|
|
34
|
+
[/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, '[REDACTED_JWT]'],
|
|
35
|
+
[/\bnpm_[A-Za-z0-9]{30,}\b/g, '[REDACTED_NPM_TOKEN]'],
|
|
36
|
+
[
|
|
37
|
+
/(\b(?:api[-_]?key|apikey|password|secret|private[-_]?key|mnemonic|seed)\s*[:=]\s*)["']?[^\s"',;}&#]+["']?/gi,
|
|
38
|
+
'$1[REDACTED]',
|
|
39
|
+
],
|
|
40
|
+
];
|
|
41
|
+
function sanitizeString(input) {
|
|
42
|
+
if (!input)
|
|
43
|
+
return input;
|
|
44
|
+
let out = input;
|
|
45
|
+
for (const [pattern, replacement] of STRING_REDACTION_PATTERNS) {
|
|
46
|
+
out = out.replace(pattern, replacement);
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
function sanitizeError(err) {
|
|
51
|
+
if (!(err instanceof Error))
|
|
52
|
+
return err;
|
|
53
|
+
const safe = Object.create(Object.getPrototypeOf(err));
|
|
54
|
+
for (const key of Object.getOwnPropertyNames(err)) {
|
|
55
|
+
const value = err[key];
|
|
56
|
+
if (key === 'message' && typeof value === 'string') {
|
|
57
|
+
safe[key] = sanitizeString(value);
|
|
58
|
+
}
|
|
59
|
+
else if (key === 'stack' && typeof value === 'string') {
|
|
60
|
+
safe[key] = sanitizeString(value);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
safe[key] = value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (!safe.message && typeof err.message === 'string') {
|
|
67
|
+
safe.message = sanitizeString(err.message);
|
|
68
|
+
}
|
|
69
|
+
if (!safe.stack && typeof err.stack === 'string') {
|
|
70
|
+
safe.stack = sanitizeString(err.stack);
|
|
71
|
+
}
|
|
72
|
+
safe.name = err.name;
|
|
73
|
+
return safe;
|
|
74
|
+
}
|
|
75
|
+
function sanitizeForLogging(input, depth = 0) {
|
|
76
|
+
if (input === null || input === undefined)
|
|
77
|
+
return input;
|
|
78
|
+
if (depth > 3)
|
|
79
|
+
return '[TRUNCATED]';
|
|
80
|
+
if (typeof input === 'string')
|
|
81
|
+
return sanitizeString(input);
|
|
82
|
+
if (typeof input === 'number' || typeof input === 'boolean')
|
|
83
|
+
return input;
|
|
84
|
+
if (input instanceof Error)
|
|
85
|
+
return sanitizeError(input);
|
|
86
|
+
if (Array.isArray(input)) {
|
|
87
|
+
return input.slice(0, 10).map((v) => sanitizeForLogging(v, depth + 1));
|
|
88
|
+
}
|
|
89
|
+
if (typeof input === 'object') {
|
|
90
|
+
return sanitizeObject(input, depth);
|
|
91
|
+
}
|
|
92
|
+
return `[${typeof input}]`;
|
|
93
|
+
}
|
|
20
94
|
function sanitizeArgs(args) {
|
|
21
95
|
const sanitized = {};
|
|
22
96
|
args.forEach((arg, index) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Sentry from '@sentry/browser';
|
|
2
2
|
import { IEnv } from '../../types';
|
|
3
3
|
import { IAnalyticsConfig } from './types';
|
|
4
|
-
export declare function initializeSentry(config: IAnalyticsConfig, environment: IEnv, walletAddress?: string, apiKey?: string): void;
|
|
4
|
+
export declare function initializeSentry(config: IAnalyticsConfig, environment: IEnv, walletAddress?: string, apiKey?: string, appName?: string): void;
|
|
5
5
|
export declare function updateUser(walletAddress?: string, environment?: IEnv): void;
|
|
6
6
|
export declare function clearUser(): void;
|
|
7
7
|
export declare function isAnalyticsEnabled(): boolean;
|
|
@@ -84,7 +84,7 @@ function safeSetUser(user) {
|
|
|
84
84
|
catch {
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
function initializeSentry(config, environment, walletAddress, apiKey) {
|
|
87
|
+
function initializeSentry(config, environment, walletAddress, apiKey, appName) {
|
|
88
88
|
if (config.enabled === false) {
|
|
89
89
|
isEnabled = false;
|
|
90
90
|
console.log('August SDK: Analytics disabled');
|
|
@@ -125,6 +125,9 @@ function initializeSentry(config, environment, walletAddress, apiKey) {
|
|
|
125
125
|
updateUser(walletAddress, environment);
|
|
126
126
|
safeSetTag('sdk', 'august-digital');
|
|
127
127
|
safeSetTag('sdk.version', getSDKVersion());
|
|
128
|
+
if (appName) {
|
|
129
|
+
safeSetTag('app.name', appName);
|
|
130
|
+
}
|
|
128
131
|
isInitialized = true;
|
|
129
132
|
console.log('August SDK: Analytics initialized. Disable with { analytics: { enabled: false } }');
|
|
130
133
|
}
|
package/lib/core/auth/verify.js
CHANGED
|
@@ -13,9 +13,14 @@ async function verifyInfuraKey(key) {
|
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
15
|
async function verifyAugustKey(key) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
if (!key)
|
|
17
|
+
return false;
|
|
18
|
+
try {
|
|
19
|
+
const verify = await (0, fetcher_1.fetchAugustWithKey)(key, core_1.WEBSERVER_ENDPOINTS.auth.verify);
|
|
20
|
+
return verify.status === 200;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
20
25
|
}
|
|
21
26
|
//# sourceMappingURL=verify.js.map
|
package/lib/core/base.class.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ISolanaConfig, IAddress, IChainId, IEnv, IProvidersConfig, IWSMonitorHeaders } from '../types';
|
|
2
2
|
import { IAnalyticsConfig } from './analytics';
|
|
3
|
+
import { IVersionCheckConfig } from './version-check';
|
|
3
4
|
interface IKeys {
|
|
4
5
|
august?: string;
|
|
5
6
|
graph?: string;
|
|
@@ -11,11 +12,13 @@ interface IMonitoring extends IWSMonitorHeaders {
|
|
|
11
12
|
env?: IEnv;
|
|
12
13
|
}
|
|
13
14
|
export interface IAugustBase {
|
|
15
|
+
appName: string;
|
|
14
16
|
providers?: IProvidersConfig;
|
|
15
17
|
solana?: ISolanaConfig;
|
|
16
18
|
keys: IKeys;
|
|
17
19
|
monitoring?: IMonitoring;
|
|
18
20
|
analytics?: IAnalyticsConfig;
|
|
21
|
+
versionCheck?: IVersionCheckConfig;
|
|
19
22
|
}
|
|
20
23
|
interface IActiveNetwork {
|
|
21
24
|
chainId: IChainId;
|
|
@@ -27,7 +30,8 @@ export declare class AugustBase {
|
|
|
27
30
|
authorized: boolean;
|
|
28
31
|
activeNetwork?: IActiveNetwork;
|
|
29
32
|
providers: IProvidersConfig;
|
|
30
|
-
|
|
33
|
+
appName: string;
|
|
34
|
+
constructor({ appName, providers, keys, monitoring, analytics, versionCheck, }: IAugustBase);
|
|
31
35
|
init(): Promise<void>;
|
|
32
36
|
protected requireActiveNetwork(): IActiveNetwork;
|
|
33
37
|
switchNetwork(chainId: IChainId): void;
|
package/lib/core/base.class.js
CHANGED
|
@@ -4,12 +4,28 @@ exports.AugustBase = void 0;
|
|
|
4
4
|
const auth_1 = require("./auth");
|
|
5
5
|
const logger_1 = require("./logger");
|
|
6
6
|
const analytics_1 = require("./analytics");
|
|
7
|
+
const version_check_1 = require("./version-check");
|
|
8
|
+
function validateAppName(value) {
|
|
9
|
+
const docsHint = 'See https://docs.augustdigital.io/developers/typescript-sdk#app-name';
|
|
10
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
11
|
+
throw new Error(`August SDK: \`appName\` is required. Pass a stable kebab-case slug identifying your application (e.g. "acme-trader"). ${docsHint}`);
|
|
12
|
+
}
|
|
13
|
+
const trimmed = value.trim();
|
|
14
|
+
if (trimmed.length < 3 || trimmed.length > 64) {
|
|
15
|
+
throw new Error(`August SDK: \`appName\` must be 3-64 characters (got ${trimmed.length}). ${docsHint}`);
|
|
16
|
+
}
|
|
17
|
+
if (!/^[a-zA-Z0-9._-]+$/.test(trimmed)) {
|
|
18
|
+
throw new Error(`August SDK: \`appName\` may only contain letters, digits, '.', '_' and '-' (got "${trimmed}"). Use a slug like "acme-trader", not a display name. ${docsHint}`);
|
|
19
|
+
}
|
|
20
|
+
return trimmed;
|
|
21
|
+
}
|
|
7
22
|
class AugustBase {
|
|
8
|
-
constructor({ providers = {}, keys, monitoring, analytics }) {
|
|
23
|
+
constructor({ appName, providers = {}, keys, monitoring, analytics, versionCheck, }) {
|
|
9
24
|
this.monitoring = {
|
|
10
25
|
'x-user-id': undefined,
|
|
11
26
|
'x-environment': undefined,
|
|
12
27
|
};
|
|
28
|
+
this.appName = validateAppName(appName);
|
|
13
29
|
this.authorized = true;
|
|
14
30
|
this.providers = providers;
|
|
15
31
|
if (Object.keys(providers).length > 0) {
|
|
@@ -25,7 +41,8 @@ class AugustBase {
|
|
|
25
41
|
'x-environment': environment,
|
|
26
42
|
};
|
|
27
43
|
logger_1.Logger.setDevMode(environment === 'DEV');
|
|
28
|
-
(0, analytics_1.initializeSentry)(analytics ?? { enabled: true }, environment, monitoring?.['x-user-id'], keys?.august);
|
|
44
|
+
(0, analytics_1.initializeSentry)(analytics ?? { enabled: true }, environment, monitoring?.['x-user-id'], keys?.august, this.appName);
|
|
45
|
+
(0, version_check_1.runVersionCheck)(versionCheck);
|
|
29
46
|
}
|
|
30
47
|
async init() {
|
|
31
48
|
const [augustCheck] = await Promise.all([
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type AugustErrorCode = 'AUTH_MISSING_KEY' | 'AUTH_INVALID_KEY' | 'AUTH_FORBIDDEN' | 'AUTH_UNAUTHORIZED' | 'INVALID_URL' | 'INVALID_INPUT' | 'INVALID_CHAIN' | 'INVALID_ADDRESS' | 'NETWORK_ERROR' | 'TIMEOUT' | 'RATE_LIMITED' | 'SERVER_ERROR' | 'UNKNOWN';
|
|
2
|
+
export interface AugustErrorOptions {
|
|
3
|
+
cause?: unknown;
|
|
4
|
+
correlationId?: string;
|
|
5
|
+
context?: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export declare class AugustSDKError extends Error {
|
|
8
|
+
readonly code: AugustErrorCode;
|
|
9
|
+
readonly correlationId?: string;
|
|
10
|
+
readonly context?: Record<string, unknown>;
|
|
11
|
+
constructor(code: AugustErrorCode, message: string, options?: AugustErrorOptions);
|
|
12
|
+
toJSON(): Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare class AugustAuthError extends AugustSDKError {
|
|
15
|
+
constructor(code: Extract<AugustErrorCode, 'AUTH_MISSING_KEY' | 'AUTH_INVALID_KEY' | 'AUTH_FORBIDDEN' | 'AUTH_UNAUTHORIZED'>, message: string, options?: AugustErrorOptions);
|
|
16
|
+
}
|
|
17
|
+
export declare class AugustNetworkError extends AugustSDKError {
|
|
18
|
+
constructor(message: string, options?: AugustErrorOptions);
|
|
19
|
+
}
|
|
20
|
+
export declare class AugustTimeoutError extends AugustSDKError {
|
|
21
|
+
readonly timeoutMs: number;
|
|
22
|
+
constructor(message: string, timeoutMs: number, options?: AugustErrorOptions);
|
|
23
|
+
toJSON(): Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export declare class AugustValidationError extends AugustSDKError {
|
|
26
|
+
constructor(code: Extract<AugustErrorCode, 'INVALID_URL' | 'INVALID_INPUT' | 'INVALID_CHAIN' | 'INVALID_ADDRESS'>, message: string, options?: AugustErrorOptions);
|
|
27
|
+
}
|
|
28
|
+
export declare class AugustRateLimitError extends AugustSDKError {
|
|
29
|
+
readonly retryAfterMs?: number;
|
|
30
|
+
constructor(message: string, options?: AugustErrorOptions & {
|
|
31
|
+
retryAfterMs?: number;
|
|
32
|
+
});
|
|
33
|
+
toJSON(): Record<string, unknown>;
|
|
34
|
+
}
|
|
35
|
+
export declare class AugustServerError extends AugustSDKError {
|
|
36
|
+
readonly status: number;
|
|
37
|
+
constructor(status: number, message: string, options?: AugustErrorOptions);
|
|
38
|
+
toJSON(): Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
export declare function isAugustSDKError(err: unknown): err is AugustSDKError;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AugustServerError = exports.AugustRateLimitError = exports.AugustValidationError = exports.AugustTimeoutError = exports.AugustNetworkError = exports.AugustAuthError = exports.AugustSDKError = void 0;
|
|
4
|
+
exports.isAugustSDKError = isAugustSDKError;
|
|
5
|
+
class AugustSDKError extends Error {
|
|
6
|
+
constructor(code, message, options = {}) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'AugustSDKError';
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.correlationId = options.correlationId;
|
|
11
|
+
this.context = options.context;
|
|
12
|
+
if (options.cause !== undefined) {
|
|
13
|
+
this.cause = options.cause;
|
|
14
|
+
}
|
|
15
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
16
|
+
}
|
|
17
|
+
toJSON() {
|
|
18
|
+
const out = {
|
|
19
|
+
name: this.name,
|
|
20
|
+
message: this.message,
|
|
21
|
+
code: this.code,
|
|
22
|
+
};
|
|
23
|
+
if (this.correlationId !== undefined)
|
|
24
|
+
out.correlationId = this.correlationId;
|
|
25
|
+
if (this.context !== undefined)
|
|
26
|
+
out.context = this.context;
|
|
27
|
+
if (this.stack !== undefined)
|
|
28
|
+
out.stack = this.stack;
|
|
29
|
+
const cause = this.cause;
|
|
30
|
+
if (cause !== undefined) {
|
|
31
|
+
out.cause =
|
|
32
|
+
cause instanceof Error
|
|
33
|
+
? { name: cause.name, message: cause.message }
|
|
34
|
+
: cause;
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.AugustSDKError = AugustSDKError;
|
|
40
|
+
class AugustAuthError extends AugustSDKError {
|
|
41
|
+
constructor(code, message, options) {
|
|
42
|
+
super(code, message, options);
|
|
43
|
+
this.name = 'AugustAuthError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.AugustAuthError = AugustAuthError;
|
|
47
|
+
class AugustNetworkError extends AugustSDKError {
|
|
48
|
+
constructor(message, options) {
|
|
49
|
+
super('NETWORK_ERROR', message, options);
|
|
50
|
+
this.name = 'AugustNetworkError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.AugustNetworkError = AugustNetworkError;
|
|
54
|
+
class AugustTimeoutError extends AugustSDKError {
|
|
55
|
+
constructor(message, timeoutMs, options) {
|
|
56
|
+
super('TIMEOUT', message, options);
|
|
57
|
+
this.name = 'AugustTimeoutError';
|
|
58
|
+
this.timeoutMs = timeoutMs;
|
|
59
|
+
}
|
|
60
|
+
toJSON() {
|
|
61
|
+
return { ...super.toJSON(), timeoutMs: this.timeoutMs };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.AugustTimeoutError = AugustTimeoutError;
|
|
65
|
+
class AugustValidationError extends AugustSDKError {
|
|
66
|
+
constructor(code, message, options) {
|
|
67
|
+
super(code, message, options);
|
|
68
|
+
this.name = 'AugustValidationError';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.AugustValidationError = AugustValidationError;
|
|
72
|
+
class AugustRateLimitError extends AugustSDKError {
|
|
73
|
+
constructor(message, options) {
|
|
74
|
+
super('RATE_LIMITED', message, options);
|
|
75
|
+
this.name = 'AugustRateLimitError';
|
|
76
|
+
this.retryAfterMs = options?.retryAfterMs;
|
|
77
|
+
}
|
|
78
|
+
toJSON() {
|
|
79
|
+
const base = super.toJSON();
|
|
80
|
+
if (this.retryAfterMs !== undefined)
|
|
81
|
+
base.retryAfterMs = this.retryAfterMs;
|
|
82
|
+
return base;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.AugustRateLimitError = AugustRateLimitError;
|
|
86
|
+
class AugustServerError extends AugustSDKError {
|
|
87
|
+
constructor(status, message, options) {
|
|
88
|
+
super('SERVER_ERROR', message, options);
|
|
89
|
+
this.name = 'AugustServerError';
|
|
90
|
+
this.status = status;
|
|
91
|
+
}
|
|
92
|
+
toJSON() {
|
|
93
|
+
return { ...super.toJSON(), status: this.status };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.AugustServerError = AugustServerError;
|
|
97
|
+
function isAugustSDKError(err) {
|
|
98
|
+
return (err instanceof AugustSDKError ||
|
|
99
|
+
(err instanceof Error &&
|
|
100
|
+
typeof err.code === 'string' &&
|
|
101
|
+
err.name.startsWith('August')));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=index.js.map
|
package/lib/core/fetcher.d.ts
CHANGED