@1delta/margin-fetcher-sol 0.0.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/dist/chunk-KYY4ZKJR.mjs +94 -0
- package/dist/chunk-KYY4ZKJR.mjs.map +1 -0
- package/dist/discovery-W3VHVSUW.mjs +7 -0
- package/dist/discovery-W3VHVSUW.mjs.map +1 -0
- package/dist/index.d.mts +8888 -0
- package/dist/index.d.ts +8888 -0
- package/dist/index.js +67774 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +67249 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
import { isEvmChainId } from "@1delta/chain-registry";
|
|
3
|
+
var SOLANA_CHAIN_ID = "solana";
|
|
4
|
+
|
|
5
|
+
// src/lenders.ts
|
|
6
|
+
import { Lender, lenderBrandKey } from "@1delta/lender-registry";
|
|
7
|
+
import {
|
|
8
|
+
Lender as Lender2,
|
|
9
|
+
SVM_LENDERS,
|
|
10
|
+
lenderBrandKey as lenderBrandKey2,
|
|
11
|
+
isKamino,
|
|
12
|
+
isJupiterLend,
|
|
13
|
+
isSave,
|
|
14
|
+
isLoopscale,
|
|
15
|
+
isProject0,
|
|
16
|
+
isSvmLenderKey,
|
|
17
|
+
isMultiMarket,
|
|
18
|
+
hasCrossMarginRisk,
|
|
19
|
+
hasSubAccounts,
|
|
20
|
+
KAMINO_KEY_PREFIX,
|
|
21
|
+
kaminoMarketKey,
|
|
22
|
+
kaminoMarketFromKey,
|
|
23
|
+
JUPITER_LEND_KEY_PREFIX,
|
|
24
|
+
jupiterLendVaultKey,
|
|
25
|
+
jupiterLendVaultFromKey,
|
|
26
|
+
SAVE_KEY_PREFIX,
|
|
27
|
+
saveMarketKey,
|
|
28
|
+
saveMarketFromKey,
|
|
29
|
+
LOOPSCALE_KEY_PREFIX,
|
|
30
|
+
loopscaleMarketKey,
|
|
31
|
+
loopscaleMarketFromKey,
|
|
32
|
+
PROJECT_0_KEY_PREFIX,
|
|
33
|
+
project0MarketKey,
|
|
34
|
+
project0GroupFromKey
|
|
35
|
+
} from "@1delta/lender-registry";
|
|
36
|
+
var LENDER_BRAND_NAMES = {
|
|
37
|
+
[Lender.KAMINO]: "Kamino",
|
|
38
|
+
[Lender.JUPITER_LEND]: "Jupiter Lend",
|
|
39
|
+
[Lender.SAVE]: "Save",
|
|
40
|
+
[Lender.LOOPSCALE]: "Loopscale",
|
|
41
|
+
[Lender.PROJECT_0]: "Project 0"
|
|
42
|
+
};
|
|
43
|
+
var lenderBrandName = (lenderKey) => LENDER_BRAND_NAMES[lenderBrandKey(lenderKey)] ?? lenderKey;
|
|
44
|
+
var lenderDisplayName = (lenderKey, marketName) => {
|
|
45
|
+
const brand = LENDER_BRAND_NAMES[lenderBrandKey(lenderKey)];
|
|
46
|
+
if (!brand) return lenderKey;
|
|
47
|
+
return marketName ? `${brand} \xB7 ${marketName}` : brand;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// src/discovery.ts
|
|
51
|
+
var getLendersForChain = (chainId) => chainId === SOLANA_CHAIN_ID ? [
|
|
52
|
+
Lender2.KAMINO,
|
|
53
|
+
Lender2.JUPITER_LEND,
|
|
54
|
+
Lender2.SAVE,
|
|
55
|
+
Lender2.LOOPSCALE,
|
|
56
|
+
Lender2.PROJECT_0
|
|
57
|
+
] : [];
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
SOLANA_CHAIN_ID,
|
|
61
|
+
isEvmChainId,
|
|
62
|
+
LENDER_BRAND_NAMES,
|
|
63
|
+
lenderBrandName,
|
|
64
|
+
lenderDisplayName,
|
|
65
|
+
Lender2 as Lender,
|
|
66
|
+
SVM_LENDERS,
|
|
67
|
+
lenderBrandKey2 as lenderBrandKey,
|
|
68
|
+
isKamino,
|
|
69
|
+
isJupiterLend,
|
|
70
|
+
isSave,
|
|
71
|
+
isLoopscale,
|
|
72
|
+
isProject0,
|
|
73
|
+
isSvmLenderKey,
|
|
74
|
+
isMultiMarket,
|
|
75
|
+
hasCrossMarginRisk,
|
|
76
|
+
hasSubAccounts,
|
|
77
|
+
KAMINO_KEY_PREFIX,
|
|
78
|
+
kaminoMarketKey,
|
|
79
|
+
kaminoMarketFromKey,
|
|
80
|
+
JUPITER_LEND_KEY_PREFIX,
|
|
81
|
+
jupiterLendVaultKey,
|
|
82
|
+
jupiterLendVaultFromKey,
|
|
83
|
+
SAVE_KEY_PREFIX,
|
|
84
|
+
saveMarketKey,
|
|
85
|
+
saveMarketFromKey,
|
|
86
|
+
LOOPSCALE_KEY_PREFIX,
|
|
87
|
+
loopscaleMarketKey,
|
|
88
|
+
loopscaleMarketFromKey,
|
|
89
|
+
PROJECT_0_KEY_PREFIX,
|
|
90
|
+
project0MarketKey,
|
|
91
|
+
project0GroupFromKey,
|
|
92
|
+
getLendersForChain
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=chunk-KYY4ZKJR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/lenders.ts","../src/discovery.ts"],"sourcesContent":["/**\n * The vocabulary this package speaks. Every lending type is margin-fetcher's\n * own, imported TYPE-ONLY — `import type` is erased at build, so the runtime\n * graph of this package never reaches margin-fetcher (and so never viem);\n * `test/noViem.test.ts` pins that. Only the shapes margin-fetcher does not\n * name are declared here.\n */\nimport type { EModeData, PoolData } from '@1delta/margin-fetcher'\n\nexport type {\n ConfigEntry,\n EModeData,\n GenericCurrency,\n GenericTokenList,\n LenderUserResponse,\n PoolData,\n UserLendingPosition,\n} from '@1delta/margin-fetcher'\n\nexport type RewardsList = PoolData['rewards']\n\nexport { isEvmChainId } from '@1delta/chain-registry'\n\n/** The chain key every Solana row carries — `Chain.SOLANA`. */\nexport const SOLANA_CHAIN_ID = 'solana' as const\n\n/**\n * A Solana row: margin-fetcher's `PoolData` with the caps OPTIONAL — \"no\n * cap\" is `undefined`, \"closed\" is 0 plus the flag (UNIFIED_API_AUDIT C6).\n */\nexport type SolanaPoolData = Omit<PoolData, 'borrowCap' | 'supplyCap'> & {\n borrowCap?: number\n supplyCap?: number\n}\n\n/** What one lender's public-data fetch returns for one chain (margin-fetcher's public-data README \"Return Shape\"). */\nexport interface LenderPublicResponse {\n data: { [marketUid: string]: SolanaPoolData }\n /** Mode roster (Aave e-modes, Kamino elevation groups), keyed by mode id. */\n eModes?: { [modeId: string]: EModeData }\n chainId: string\n}\n\n/** `getLenderPublicData()` — every lender on the chain, keyed by lender key. */\nexport type LenderPublicDataMap = { [lender: string]: LenderPublicResponse }\n\n/**\n * A lending BASKET — one isolated, cross-margined pool with N assets, i.e.\n * one `lenderKey` of a multi-market lender. A Kamino market with 58\n * reserves and a Jupiter Lend vault with one collateral and one debt asset\n * are the SAME thing at this level. Derived from the rows (`describeBasket`),\n * never stored.\n */\nexport interface LendingBasketMeta {\n lenderKey: string\n /** The brand / family the key collapses to (`KAMINO`, `JUPITER_LEND`). */\n brand: string\n brandName: string\n /** Display name — `SOL/BTC Market`, `JLP / USDC`. */\n name: string\n /** A second line — `vault #8 · main`, the market pubkey. */\n subtitle?: string\n isolated: true\n crossMargin: true\n permissionless?: boolean\n primary?: boolean\n curated?: boolean\n /** Asset roles by market uid. */\n collateral: string[]\n debt: string[]\n positions?: number\n /** Sub-modes inside the basket (Kamino elevation groups). Absent = one mode. */\n modes?: { known: number; pending: number }\n leverage?: { pairs?: number; maxLeverage?: number }\n}\n\n/**\n * One position leg as the multi-account user state reads it — margin-fetcher's\n * `InitUserReserveResponse` leg plus the oracle-priced USD values\n * `createMultiAccountTypeUserState` prefers for risk.\n */\nexport interface SolanaUserPosition {\n marketUid: string\n /** Token units (decimal string), never raw. */\n deposits: string\n debt: string\n debtStable: '0'\n depositsUSD: number\n debtUSD: number\n debtStableUSD: 0\n /** USD at the venue's own oracle, for risk; falls back to depositsUSD / debtUSD. */\n depositsUSDOracle?: number\n debtUSDOracle?: number\n collateralEnabled: boolean\n claimableRewards: number\n}\n\n/** What a sub-account is, so a consumer can tell a loop from plain lending. */\nexport interface SolanaSubAccountInfo {\n /** `obligation` (Kamino, Save), `position` (Jupiter Lend NFT), `account` (Project 0), `loan` (Loopscale), `wallet` (receipt tokens held outside any account — Save cTokens). */\n kind: 'obligation' | 'position' | 'account' | 'loan' | 'wallet'\n /** The on-chain address the sub-account lives at (the posId for all but Jupiter Lend). */\n address?: string\n /** Kamino obligation tag (0 vanilla, 1 multiply, 2 lending, 3 leverage). */\n tag?: number\n /** `Vanilla`, `Multiply JitoSOL/SOL`, `#1`, `position 1234`. */\n label?: string\n}\n\n/**\n * C14 (UNIFIED_API_AUDIT §1, §10): ONE lender key's positions in the raw\n * multi-account shape margin-fetcher's `createMultiAccountTypeUserState`\n * takes — one sub-account per on-chain position (obligation, NFT, account,\n * loan), NEVER summed across them. `modes[posId]` is the sub-account's mode:\n * a config key (a Kamino elevation group, a Project 0 derived tag) or, on a\n * parameterized market (Loopscale), the position's own value.\n */\nexport interface SolanaUserPositions {\n chainId: string\n account: string\n lenderKey: string\n lendingPositions: {\n [posId: string]: { [marketUid: string]: SolanaUserPosition }\n }\n modes: { [posId: string]: string | number }\n accounts: { [posId: string]: SolanaSubAccountInfo }\n}\n\n/** A family's user fetch: every lender key the wallet touches, plus the family's own diagnostics. */\nexport interface SolanaUserResult<Ext = unknown> {\n positions: { [lenderKey: string]: SolanaUserPositions }\n ext?: Ext\n}\n","/**\n * Solana lender vocabulary. The families, their predicates, key builders and\n * trait predicates are `@1delta/lender-registry`'s (one registry for both\n * VMs); this module re-exports them under the names the fetchers use and adds\n * the display helpers.\n */\nimport { Lender, lenderBrandKey } from '@1delta/lender-registry'\n\nexport {\n Lender,\n SVM_LENDERS,\n lenderBrandKey,\n isKamino,\n isJupiterLend,\n isSave,\n isLoopscale,\n isProject0,\n isSvmLenderKey,\n isMultiMarket,\n hasCrossMarginRisk,\n hasSubAccounts,\n KAMINO_KEY_PREFIX,\n kaminoMarketKey,\n kaminoMarketFromKey,\n JUPITER_LEND_KEY_PREFIX,\n jupiterLendVaultKey,\n jupiterLendVaultFromKey,\n SAVE_KEY_PREFIX,\n saveMarketKey,\n saveMarketFromKey,\n LOOPSCALE_KEY_PREFIX,\n loopscaleMarketKey,\n loopscaleMarketFromKey,\n PROJECT_0_KEY_PREFIX,\n project0MarketKey,\n project0GroupFromKey,\n} from '@1delta/lender-registry'\n\nexport const LENDER_BRAND_NAMES: Record<string, string> = {\n [Lender.KAMINO]: 'Kamino',\n [Lender.JUPITER_LEND]: 'Jupiter Lend',\n [Lender.SAVE]: 'Save',\n [Lender.LOOPSCALE]: 'Loopscale',\n [Lender.PROJECT_0]: 'Project 0',\n}\n\nexport const lenderBrandName = (lenderKey: string) =>\n LENDER_BRAND_NAMES[lenderBrandKey(lenderKey)] ?? lenderKey\n\nexport const lenderDisplayName = (lenderKey: string, marketName?: string) => {\n const brand = LENDER_BRAND_NAMES[lenderBrandKey(lenderKey)]\n if (!brand) return lenderKey\n return marketName ? `${brand} · ${marketName}` : brand\n}\n","import { SOLANA_CHAIN_ID } from './types'\nimport { Lender } from './lenders'\n\n/**\n * Which lender FAMILIES are fetched for a chain. This is the function the\n * EVM repo learned the hard way to keep in one place: a family that has a\n * fetch branch but no discovery branch is fully built and invisible in\n * production, because nothing in production names keys — it enumerates\n * through here. `test/discoveryCoverage.test.ts` asserts every family with a\n * `fetchLenderAll` branch is returned here.\n */\nexport const getLendersForChain = (chainId: string): string[] =>\n chainId === SOLANA_CHAIN_ID\n ? [\n Lender.KAMINO,\n Lender.JUPITER_LEND,\n Lender.SAVE,\n Lender.LOOPSCALE,\n Lender.PROJECT_0,\n ]\n : []\n"],"mappings":";AAqBA,SAAS,oBAAoB;AAGtB,IAAM,kBAAkB;;;AClB/B,SAAS,QAAQ,sBAAsB;AAEvC;AAAA,EACE,UAAAA;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,IAAM,qBAA6C;AAAA,EACxD,CAAC,OAAO,MAAM,GAAG;AAAA,EACjB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,IAAI,GAAG;AAAA,EACf,CAAC,OAAO,SAAS,GAAG;AAAA,EACpB,CAAC,OAAO,SAAS,GAAG;AACtB;AAEO,IAAM,kBAAkB,CAAC,cAC9B,mBAAmB,eAAe,SAAS,CAAC,KAAK;AAE5C,IAAM,oBAAoB,CAAC,WAAmB,eAAwB;AAC3E,QAAM,QAAQ,mBAAmB,eAAe,SAAS,CAAC;AAC1D,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,aAAa,GAAG,KAAK,SAAM,UAAU,KAAK;AACnD;;;AC1CO,IAAM,qBAAqB,CAAC,YACjC,YAAY,kBACR;AAAA,EACEC,QAAO;AAAA,EACPA,QAAO;AAAA,EACPA,QAAO;AAAA,EACPA,QAAO;AAAA,EACPA,QAAO;AACT,IACA,CAAC;","names":["Lender","lenderBrandKey","Lender"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|