@naviprotocol/lending 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/account-cap.d.ts +1 -1
  2. package/dist/account-cap.js +26 -0
  3. package/dist/account-cap.js.map +1 -0
  4. package/dist/account.d.ts +2 -2
  5. package/dist/account.js +655 -0
  6. package/dist/account.js.map +1 -0
  7. package/dist/bcs.js +137 -0
  8. package/dist/bcs.js.map +1 -0
  9. package/dist/config.d.ts +1 -1
  10. package/dist/config.js +22 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/emode.d.ts +1 -1
  13. package/dist/emode.js +90 -0
  14. package/dist/emode.js.map +1 -0
  15. package/dist/flashloan.d.ts +1 -1
  16. package/dist/flashloan.js +94 -0
  17. package/dist/flashloan.js.map +1 -0
  18. package/dist/index.d.ts +17 -17
  19. package/dist/index.js +100 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/liquidate.d.ts +1 -1
  22. package/dist/liquidate.js +76 -0
  23. package/dist/liquidate.js.map +1 -0
  24. package/dist/market.d.ts +1 -1
  25. package/dist/market.js +121 -0
  26. package/dist/market.js.map +1 -0
  27. package/dist/oracle.d.ts +1 -1
  28. package/dist/oracle.js +204 -0
  29. package/dist/oracle.js.map +1 -0
  30. package/dist/package.json.js +8 -0
  31. package/dist/package.json.js.map +1 -0
  32. package/dist/pool.d.ts +1 -1
  33. package/dist/pool.js +391 -0
  34. package/dist/pool.js.map +1 -0
  35. package/dist/pyth.d.ts +1 -1
  36. package/dist/pyth.js +305 -0
  37. package/dist/pyth.js.map +1 -0
  38. package/dist/reward.d.ts +1 -1
  39. package/dist/reward.js +343 -0
  40. package/dist/reward.js.map +1 -0
  41. package/dist/services.js +52 -0
  42. package/dist/services.js.map +1 -0
  43. package/dist/sui.d.ts +1 -1
  44. package/dist/sui.js +121 -0
  45. package/dist/sui.js.map +1 -0
  46. package/dist/types.d.ts +2 -2
  47. package/dist/ua.js +16 -0
  48. package/dist/ua.js.map +1 -0
  49. package/dist/utils.d.ts +2 -2
  50. package/dist/utils.js +227 -0
  51. package/dist/utils.js.map +1 -0
  52. package/package.json +5 -5
  53. package/dist/index.esm.js +0 -2749
  54. package/dist/index.esm.js.map +0 -1
package/dist/ua.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ua.js","sources":["../src/ua.ts"],"sourcesContent":["import packageJson from '../package.json'\n\nconst sdkVersion = packageJson.version\n\nconst getNodeInfo = (): string => {\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n const nodeVersion: string = process.version\n const formattedNodeVersion: string = nodeVersion.startsWith('v')\n ? nodeVersion.substring(1)\n : nodeVersion\n\n return `Node.js ${formattedNodeVersion}`\n }\n return 'Node/Unknown'\n}\n\nexport const getUserAgent = (): string => {\n let environmentInfo: string = ''\n\n const isNode = typeof process !== 'undefined' && process.versions && process.versions.node\n\n if (isNode) {\n environmentInfo = `lending/${sdkVersion} (${getNodeInfo()})`\n }\n\n return environmentInfo\n}\n\nexport const userAgent = getUserAgent()\n"],"names":["sdkVersion","packageJson","getNodeInfo","nodeVersion","getUserAgent","environmentInfo","userAgent"],"mappings":";AAEA,MAAMA,IAAaC,EAAY,SAEzBC,IAAc,MAAc;AAChC,MAAI,OAAO,UAAY,OAAe,QAAQ,YAAY,QAAQ,SAAS,MAAM;AAC/E,UAAMC,IAAsB,QAAQ;AAKpC,WAAO,WAJ8BA,EAAY,WAAW,GAAG,IAC3DA,EAAY,UAAU,CAAC,IACvBA,CAEkC;AAAA,EACxC;AACA,SAAO;AACT,GAEaC,IAAe,MAAc;AACxC,MAAIC,IAA0B;AAI9B,SAFe,OAAO,UAAY,OAAe,QAAQ,YAAY,QAAQ,SAAS,SAGpFA,IAAkB,WAAWL,CAAU,KAAKE,EAAA,CAAa,MAGpDG;AACT,GAEaC,IAAYF,EAAA;"}
package/dist/utils.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { EMode, EModeIdentity, EModePool, Pool, TransactionResult } from './types';
1
+ import { EMode, EModeIdentity, EModePool, Pool, TransactionResult } from './types.js';
2
2
  import { DevInspectResults } from '@mysten/sui/jsonRpc';
3
3
  import { Transaction } from '@mysten/sui/transactions';
4
4
  import { BcsType } from '@mysten/sui/bcs';
5
5
  import { default as BigNumber } from 'bignumber.js';
6
- import { SuiPriceServiceConnection } from './pyth';
6
+ import { SuiPriceServiceConnection } from './pyth.js';
7
7
 
8
8
  /**
9
9
  * Default Sui client for callers that do not pass one, matching v1 behavior:
package/dist/utils.js ADDED
@@ -0,0 +1,227 @@
1
+ import h from "lodash.camelcase";
2
+ import { Transaction as w } from "@mysten/sui/transactions";
3
+ import { normalizeStructTag as g, fromBase64 as I } from "@mysten/sui/utils";
4
+ import i from "bignumber.js";
5
+ import { userAgent as a } from "./ua.js";
6
+ import { createNaviSuiClient as S } from "./sui.js";
7
+ import { SuiPriceServiceConnection as T } from "./pyth.js";
8
+ import { getNaviSdkConfigVersion as f } from "./services.js";
9
+ const j = S();
10
+ function l(e) {
11
+ return e ? e instanceof Uint8Array ? Array.from(e) : Array.isArray(e) ? e : Array.from(I(e)) : [];
12
+ }
13
+ function b(e) {
14
+ const r = e?.commandResults ?? [], t = e?.Transaction ?? e?.FailedTransaction ?? {}, n = t.effects?.errors?.[0] ?? t.effects?.status?.error ?? t.status?.error ?? t.status?.errors?.[0];
15
+ return n && console.warn("[lending] devInspect(core simulate) returned error:", n), {
16
+ effects: t.effects,
17
+ events: t.events,
18
+ error: n,
19
+ results: r.map((o) => ({
20
+ returnValues: (o.returnValues ?? []).map((s) => [l(s.bcs), ""]),
21
+ mutableReferenceOutputs: (o.mutatedReferences ?? []).map((s) => [
22
+ "",
23
+ l(s.bcs),
24
+ ""
25
+ ])
26
+ }))
27
+ };
28
+ }
29
+ async function N(e, r) {
30
+ const t = e?.core;
31
+ if (typeof t?.simulateTransaction != "function")
32
+ throw new Error("devInspectTransaction requires a Sui v2 Core-capable client");
33
+ const n = r.transaction ?? r.transactionBlock;
34
+ n instanceof w && n.setSenderIfNotSet(r.sender);
35
+ const o = await t.simulateTransaction({
36
+ transaction: n,
37
+ checksEnabled: !1,
38
+ include: {
39
+ effects: !0,
40
+ events: !0,
41
+ commandResults: !0
42
+ }
43
+ });
44
+ return b(o);
45
+ }
46
+ function p(e) {
47
+ return {
48
+ json: !!e?.showContent,
49
+ display: !!e?.showDisplay,
50
+ previousTransaction: !!e?.showPreviousTransaction,
51
+ objectBcs: !!e?.showBcs
52
+ };
53
+ }
54
+ function m(e) {
55
+ return !e || e instanceof Error ? {
56
+ error: e instanceof Error ? { code: "notFound", error: e.message } : void 0
57
+ } : {
58
+ data: {
59
+ objectId: e.objectId,
60
+ version: e.version,
61
+ digest: e.digest,
62
+ type: e.type,
63
+ owner: e.owner,
64
+ previousTransaction: e.previousTransaction,
65
+ content: e.json === void 0 ? void 0 : {
66
+ dataType: "moveObject",
67
+ type: e.type,
68
+ fields: e.json
69
+ },
70
+ display: e.display
71
+ }
72
+ };
73
+ }
74
+ async function U(e, r) {
75
+ const t = e?.core;
76
+ if (typeof t?.getObject != "function")
77
+ throw new Error("getSuiObject requires a Sui v2 Core-capable client");
78
+ const { object: n } = await t.getObject({
79
+ objectId: r.id,
80
+ include: p(r.options)
81
+ });
82
+ return m(n);
83
+ }
84
+ async function q(e, r) {
85
+ const t = e?.core;
86
+ if (typeof t?.getObjects != "function")
87
+ throw new Error("multiGetSuiObjects requires a Sui v2 Core-capable client");
88
+ const { objects: n } = await t.getObjects({
89
+ objectIds: r.ids,
90
+ include: p(r.options)
91
+ });
92
+ return n.map(m);
93
+ }
94
+ function y(e) {
95
+ const r = [];
96
+ let t = !1;
97
+ return e.forEach((n, o) => {
98
+ const s = o === e.length - 1;
99
+ if (typeof n == "object" && n !== null && s) {
100
+ const { client: c, disableCache: v, cacheTime: O, ...u } = n;
101
+ u.__naviSdkServiceConfigVersion = f(), r.push(u), t = !0;
102
+ } else
103
+ r.push(n);
104
+ }), t || r.push({
105
+ __naviSdkServiceConfigVersion: f()
106
+ }), JSON.stringify(r);
107
+ }
108
+ function P(e) {
109
+ const r = {};
110
+ return (...t) => {
111
+ const n = y(t);
112
+ return r[n] || (r[n] = e(...t).finally(() => {
113
+ delete r[n];
114
+ })), r[n];
115
+ };
116
+ }
117
+ function z(e) {
118
+ let r = {};
119
+ return (...t) => {
120
+ const n = t[t.length - 1], o = y(t), s = r[o];
121
+ return !n?.disableCache && typeof s?.data < "u" && (typeof n?.cacheTime > "u" || n.cacheTime > Date.now() - s.cacheAt) ? Promise.resolve(s.data) : e(...t).then((c) => (r[o] = {
122
+ data: c,
123
+ cacheAt: Date.now()
124
+ }, c));
125
+ };
126
+ }
127
+ function d(e) {
128
+ return Array.isArray(e) ? e.map((r) => d(r)) : e != null && typeof e == "object" ? Object.keys(e).reduce(
129
+ (r, t) => ({
130
+ ...r,
131
+ [h(t)]: d(e[t])
132
+ }),
133
+ {}
134
+ ) : e;
135
+ }
136
+ function _(e, r) {
137
+ if (e == null)
138
+ throw new Error("Transaction value is required");
139
+ return typeof e == "object" ? e : r(e);
140
+ }
141
+ function F(e, r) {
142
+ return typeof r == "string" ? e.object(r) : typeof r == "object" && r.$kind ? r : e.object(r.contract.pool);
143
+ }
144
+ function x(e, r, t) {
145
+ if (e.results && e.results.length > 0) {
146
+ if (e.results[0].returnValues && e.results[0].returnValues.length > 0)
147
+ return e.results[0].returnValues.map((n, o) => (r[o] || r[0]).parse(Uint8Array.from(n[0])));
148
+ } else if (e.error)
149
+ return console.log(`Get an error, msg: ${e.error}`), [];
150
+ return [];
151
+ }
152
+ function G(e) {
153
+ return g(e);
154
+ }
155
+ function H(e) {
156
+ const r = (e || 0) / Math.pow(10, 27);
157
+ return r > Math.pow(10, 5) ? 1 / 0 : r;
158
+ }
159
+ new T("https://hermes.pyth.network", {
160
+ timeout: 2e4
161
+ });
162
+ const C = 27, K = (e, r) => {
163
+ if (!Number(e) || !Number(r)) return new i(0);
164
+ const t = new i(1).shiftedBy(1 * C), n = t.multipliedBy(new i(0.5));
165
+ return new i(e).multipliedBy(new i(r)).plus(n).dividedBy(t).integerValue(i.ROUND_DOWN);
166
+ }, $ = a ? {
167
+ "User-Agent": a
168
+ } : {};
169
+ function J(e, r = "uniqueId") {
170
+ return e.reduce(
171
+ (t, n) => (t[n[r]] = n, t),
172
+ {}
173
+ );
174
+ }
175
+ function L(e, r = "uniqueId") {
176
+ return e.reduce(
177
+ (t, n) => (t[n[r]] = n, t),
178
+ {}
179
+ );
180
+ }
181
+ function W(e, r) {
182
+ const t = e.emodes.find((o) => o.emodeId === r.emodeId);
183
+ if (!t)
184
+ throw new Error("EMode not found in pool");
185
+ const n = t.assets.find((o) => o.assetId === e.id);
186
+ return {
187
+ ...e,
188
+ emode: {
189
+ ...n,
190
+ emodeId: t.emodeId
191
+ },
192
+ isEMode: !0
193
+ };
194
+ }
195
+ function Q(e) {
196
+ const [r, t] = e.split("-");
197
+ return !r || !t ? null : {
198
+ marketKey: r,
199
+ poolId: parseInt(t)
200
+ };
201
+ }
202
+ function X() {
203
+ return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
204
+ }
205
+ export {
206
+ C as Rate_Decimals,
207
+ d as camelize,
208
+ N as devInspectTransaction,
209
+ L as getEmodesMap,
210
+ J as getPoolsMap,
211
+ U as getSuiObject,
212
+ q as multiGetSuiObjects,
213
+ G as normalizeCoinType,
214
+ x as parseDevInspectResult,
215
+ Q as parsePoolUID,
216
+ F as parseTxPoolValue,
217
+ _ as parseTxValue,
218
+ W as poolToEModePool,
219
+ H as processContractHealthFactor,
220
+ K as rayMathMulIndex,
221
+ $ as requestHeaders,
222
+ j as suiClient,
223
+ X as uuid,
224
+ z as withCache,
225
+ P as withSingleton
226
+ };
227
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["/**\n * Lending Utilities\n *\n * This module provides utility functions for the lending protocol, including\n * caching mechanisms, data transformation, transaction parsing, and blockchain\n * interaction helpers.\n *\n * @module LendingUtils\n */\n\nimport type { CacheOption, EMode, EModeIdentity, EModePool, Pool, TransactionResult } from './types'\nimport type { DevInspectResults } from '@mysten/sui/jsonRpc'\nimport camelCase from 'lodash.camelcase'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { BcsType } from '@mysten/sui/bcs'\nimport { fromBase64, normalizeStructTag } from '@mysten/sui/utils'\nimport BigNumber from 'bignumber.js'\nimport { userAgent } from './ua'\nimport { createNaviSuiClient } from './sui'\nimport { SuiPriceServiceConnection } from './pyth'\nimport { getNaviSdkConfigVersion } from './services'\n\n/**\n * Default Sui client for callers that do not pass one, matching v1 behavior:\n * a public mainnet fullnode (gRPC). Fine for development and low volume;\n * production should pass its own client (private endpoint / auth headers).\n */\nexport const suiClient = createNaviSuiClient()\n\ntype CoreCommandOutput = {\n bcs?: Uint8Array | number[] | string | null\n}\n\ntype CoreCommandResult = {\n returnValues?: CoreCommandOutput[]\n mutatedReferences?: CoreCommandOutput[]\n}\n\nfunction toByteArray(value: Uint8Array | number[] | string | null | undefined) {\n if (!value) {\n return []\n }\n if (value instanceof Uint8Array) {\n return Array.from(value)\n }\n if (Array.isArray(value)) {\n return value\n }\n return Array.from(fromBase64(value))\n}\n\nfunction normalizeCoreDevInspectResult(result: any): DevInspectResults {\n const commandResults = (result?.commandResults ?? []) as CoreCommandResult[]\n const tx = result?.Transaction ?? result?.FailedTransaction ?? {}\n const error =\n tx.effects?.errors?.[0] ??\n tx.effects?.status?.error ??\n tx.status?.error ??\n tx.status?.errors?.[0]\n\n if (error) {\n // Report only, do not alter control flow: the Core simulateTransaction\n // abort/error was previously computed but never surfaced, letting reward/\n // positions batches silently return empty on some on-chain states. Warn so\n // it is traceable; callers decide whether to abort (we do not throw here to\n // avoid changing existing behavior).\n console.warn('[lending] devInspect(core simulate) returned error:', error)\n }\n\n return {\n effects: tx.effects,\n events: tx.events,\n error,\n results: commandResults.map((command) => ({\n returnValues: (command.returnValues ?? []).map((output) => [toByteArray(output.bcs), '']),\n mutableReferenceOutputs: (command.mutatedReferences ?? []).map((output) => [\n '',\n toByteArray(output.bcs),\n ''\n ])\n }))\n } as unknown as DevInspectResults\n}\n\nexport async function devInspectTransaction(\n client: any,\n options: {\n transactionBlock?: Transaction | Uint8Array\n transaction?: Transaction | Uint8Array\n sender: string\n }\n): Promise<DevInspectResults> {\n const core = client?.core as\n | {\n simulateTransaction?(options: any): Promise<any>\n }\n | undefined\n\n if (typeof core?.simulateTransaction !== 'function') {\n throw new Error('devInspectTransaction requires a Sui v2 Core-capable client')\n }\n const transaction = options.transaction ?? options.transactionBlock\n if (transaction instanceof Transaction) {\n transaction.setSenderIfNotSet(options.sender)\n }\n const result = await core.simulateTransaction({\n transaction,\n checksEnabled: false,\n include: {\n effects: true,\n events: true,\n commandResults: true\n }\n })\n return normalizeCoreDevInspectResult(result)\n}\n\nfunction toCoreObjectInclude(options?: Record<string, any>) {\n return {\n json: Boolean(options?.showContent),\n display: Boolean(options?.showDisplay),\n previousTransaction: Boolean(options?.showPreviousTransaction),\n objectBcs: Boolean(options?.showBcs)\n }\n}\n\nfunction normalizeCoreObjectResponse(object: any) {\n if (!object || object instanceof Error) {\n return {\n error: object instanceof Error ? { code: 'notFound', error: object.message } : undefined\n }\n }\n\n return {\n data: {\n objectId: object.objectId,\n version: object.version,\n digest: object.digest,\n type: object.type,\n owner: object.owner,\n previousTransaction: object.previousTransaction,\n content:\n object.json === undefined\n ? undefined\n : {\n dataType: 'moveObject',\n type: object.type,\n fields: object.json\n },\n display: object.display\n }\n }\n}\n\nexport async function getSuiObject(\n client: any,\n options: { id: string; options?: Record<string, any> }\n) {\n const core = client?.core as\n | {\n getObject?(options: any): Promise<any>\n }\n | undefined\n\n if (typeof core?.getObject !== 'function') {\n throw new Error('getSuiObject requires a Sui v2 Core-capable client')\n }\n const { object } = await core.getObject({\n objectId: options.id,\n include: toCoreObjectInclude(options.options)\n })\n return normalizeCoreObjectResponse(object)\n}\n\nexport async function multiGetSuiObjects(\n client: any,\n options: { ids: string[]; options?: Record<string, any> }\n) {\n const core = client?.core as\n | {\n getObjects?(options: any): Promise<any>\n }\n | undefined\n\n if (typeof core?.getObjects !== 'function') {\n throw new Error('multiGetSuiObjects requires a Sui v2 Core-capable client')\n }\n const { objects } = await core.getObjects({\n objectIds: options.ids,\n include: toCoreObjectInclude(options.options)\n })\n return objects.map(normalizeCoreObjectResponse)\n}\n\n/**\n * Generates a cache key from function arguments\n *\n * This function creates a unique key for caching by serializing the arguments\n * and removing cache-specific options that shouldn't affect the cache key.\n *\n * @param args - Function arguments to generate key from\n * @returns JSON string representing the arguments\n */\nfunction argsKey(args: any[]) {\n const serializedArgs = [] as any[]\n let serviceConfigVersionIncluded = false\n\n args.forEach((option: any, index) => {\n const isLast = index === args.length - 1\n if (typeof option === 'object' && option !== null && isLast) {\n const { client, disableCache, cacheTime, ...rest } = option\n rest.__naviSdkServiceConfigVersion = getNaviSdkConfigVersion()\n serializedArgs.push(rest)\n serviceConfigVersionIncluded = true\n } else {\n serializedArgs.push(option)\n }\n })\n\n if (!serviceConfigVersionIncluded) {\n serializedArgs.push({\n __naviSdkServiceConfigVersion: getNaviSdkConfigVersion()\n })\n }\n\n return JSON.stringify(serializedArgs)\n}\n\n/**\n * Wraps a function with singleton behavior to prevent duplicate concurrent calls\n *\n * This decorator ensures that if the same function is called with the same arguments\n * while a previous call is still pending, it returns the existing promise instead\n * of making a new call.\n *\n * @param fn - Function to wrap with singleton behavior\n * @returns Wrapped function with singleton behavior\n */\nexport function withSingleton<T extends (...args: any[]) => Promise<any>>(fn: T): T {\n const promiseMap: Record<string, Promise<any> | null> = {}\n\n return ((...args: any[]) => {\n const key = argsKey(args)\n if (promiseMap[key]) {\n return promiseMap[key]\n }\n promiseMap[key] = fn(...args).finally(() => {\n delete promiseMap[key]\n })\n return promiseMap[key]\n }) as T\n}\n\n/**\n * Wraps a function with caching behavior\n *\n * This decorator caches function results based on arguments and cache options.\n * It respects cache time settings and can be disabled per call.\n *\n * @param fn - Function to wrap with caching behavior\n * @returns Wrapped function with caching behavior\n */\nexport function withCache<T extends (...args: any[]) => Promise<any>>(fn: T): T {\n let cache: Record<\n string,\n {\n data: any\n cacheAt: number\n }\n > = {}\n\n return ((...args: any[]) => {\n const options = args[args.length - 1] as Partial<CacheOption>\n const key = argsKey(args)\n const cacheData = cache[key]\n\n // Check if cache is valid and not disabled\n if (!options?.disableCache && typeof cacheData?.data !== 'undefined') {\n if (\n typeof options?.cacheTime === 'undefined' ||\n options.cacheTime > Date.now() - cacheData.cacheAt\n ) {\n // Wrap in Promise.resolve to honor the declared `Promise<any>` return type.\n // Returning the cached value synchronously breaks `.then()` chaining at call sites.\n return Promise.resolve(cacheData.data)\n }\n }\n\n // Execute function and cache result\n return fn(...args).then((result) => {\n cache[key] = {\n data: result,\n cacheAt: Date.now()\n }\n return result\n })\n }) as T\n}\n\n/**\n * Converts object keys from snake_case to camelCase recursively\n *\n * This function transforms all keys in an object (including nested objects and arrays)\n * from snake_case format to camelCase format.\n *\n * @param obj - Object to transform\n * @returns Object with camelCase keys\n */\nexport function camelize<T extends Record<string, any>>(obj: T): T {\n if (Array.isArray(obj)) {\n return obj.map((v) => camelize(v)) as unknown as T\n } else if (obj != null && typeof obj === 'object') {\n return Object.keys(obj).reduce(\n (result, key) => ({\n ...result,\n [camelCase(key)]: camelize(obj[key])\n }),\n {} as T\n )\n }\n return obj\n}\n\n/**\n * Parses a value for use in transaction building\n *\n * This function converts various value types into the appropriate format\n * for transaction building, handling both primitive types and existing\n * transaction results.\n *\n * @param value - Value to parse (string, number, boolean, or object)\n * @param format - Format function to apply to the value\n * @returns Transaction result in the appropriate format\n */\nexport function parseTxValue(\n value: string | number | boolean | object | null | undefined,\n format: any\n): TransactionResult {\n if (value === undefined || value === null) {\n throw new Error('Transaction value is required')\n }\n if (typeof value === 'object') {\n return value as TransactionResult\n }\n return format(value) as TransactionResult\n}\n\n/**\n * Parses a pool value for use in transaction building\n *\n * This function handles different pool representations and converts them\n * to the appropriate transaction object format.\n *\n * @param tx - Transaction object to build\n * @param value - Pool value (string, Pool object, or TransactionResult)\n * @returns Transaction result representing the pool\n */\nexport function parseTxPoolValue(tx: Transaction, value: string | Pool | TransactionResult) {\n if (typeof value === 'string') {\n return tx.object(value)\n }\n if (typeof value === 'object' && (value as TransactionResult).$kind) {\n return value as TransactionResult\n }\n return tx.object((value as Pool).contract.pool)\n}\n\n/**\n * Parses the result of a devInspectTransactionBlock call\n *\n * This function extracts and parses return values from transaction inspection\n * results using BCS (Binary Canonical Serialization) types.\n *\n * @param data - DevInspectResults from transaction inspection\n * @param parseTypes - Array of BCS types to parse the return values\n * @param options - Optional configuration including error handling\n * @returns Parsed result data\n */\nexport function parseDevInspectResult<T>(\n data: DevInspectResults,\n parseTypes: BcsType<any>[],\n options?: {\n throwError?: boolean\n }\n): T {\n if (data.results && data.results.length > 0) {\n if (data.results[0].returnValues && data.results[0].returnValues.length > 0) {\n return data.results[0].returnValues.map((item, index) => {\n const parseType = parseTypes[index] || parseTypes[0]\n return parseType.parse(Uint8Array.from(item[0]))\n }) as T\n }\n } else if (data.error) {\n console.log(`Get an error, msg: ${data.error}`)\n if (options?.throwError) {\n throw new Error(data.error)\n }\n return [] as T\n }\n return [] as T\n}\n\n/**\n * Normalizes a coin type string using Sui's struct tag normalization\n *\n * @param coinType - Coin type string to normalize\n * @returns Normalized coin type string\n */\nexport function normalizeCoinType(coinType: string) {\n return normalizeStructTag(coinType)\n}\n\n/**\n * Processes health factor values from contract format to human-readable format\n *\n * This function converts the raw health factor value from the contract\n * (which is typically a large integer) to a more readable decimal format.\n *\n * @param hf - Raw health factor value from contract\n * @returns Processed health factor value\n */\nexport function processContractHealthFactor(hf: number) {\n const healthFactor = (hf || 0) / Math.pow(10, 27)\n if (healthFactor > Math.pow(10, 5)) {\n return Infinity\n }\n return healthFactor\n}\n\n/**\n * Pyth price service connection for oracle price feeds\n *\n * This connection is used to fetch real-time price data from the Pyth network\n * for various assets in the lending protocol.\n */\nexport const suiPythConnection = new SuiPriceServiceConnection('https://hermes.pyth.network', {\n timeout: 20000\n})\n\nexport const Rate_Decimals = 27\n\nexport const rayMathMulIndex = (amount: string | number, index: string | number) => {\n if (!Number(amount) || !Number(index)) return new BigNumber(0)\n const ray = new BigNumber(1).shiftedBy(1 * Rate_Decimals)\n const halfRay = ray.multipliedBy(new BigNumber(0.5))\n return new BigNumber(amount)\n .multipliedBy(new BigNumber(index))\n .plus(halfRay)\n .dividedBy(ray)\n .integerValue(BigNumber.ROUND_DOWN)\n}\n\nexport const requestHeaders = !!userAgent\n ? {\n 'User-Agent': userAgent\n }\n : ({} as HeadersInit)\n\nexport function getPoolsMap(pools: Pool[], key: 'uniqueId' | 'id' = 'uniqueId') {\n return pools.reduce(\n (acc, pool) => {\n acc[pool[key]] = pool\n return acc\n },\n {} as Record<string, Pool>\n )\n}\n\nexport function getEmodesMap(emodes: EMode[], key: 'uniqueId' | 'emodeId' = 'uniqueId') {\n return emodes.reduce(\n (acc, emode) => {\n acc[emode[key]] = emode\n return acc\n },\n {} as Record<string, EMode>\n )\n}\n\nexport function poolToEModePool(pool: Pool, emodeIdentity: EModeIdentity): EModePool {\n const emode = pool.emodes.find((emode) => emode.emodeId === emodeIdentity.emodeId)\n if (!emode) {\n throw new Error('EMode not found in pool')\n }\n const emodeAsset = emode.assets.find((asset) => asset.assetId === pool.id)!\n return {\n ...pool,\n emode: {\n ...emodeAsset,\n emodeId: emode.emodeId\n },\n isEMode: true\n }\n}\n\nexport function parsePoolUID(uid: string) {\n const [marketKey, poolId] = uid.split('-')\n if (!marketKey || !poolId) {\n return null\n }\n return {\n marketKey: marketKey,\n poolId: parseInt(poolId)\n }\n}\n\nexport function uuid() {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID()\n }\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)\n}\n"],"names":["suiClient","createNaviSuiClient","toByteArray","value","fromBase64","normalizeCoreDevInspectResult","result","commandResults","tx","error","command","output","devInspectTransaction","client","options","core","transaction","Transaction","toCoreObjectInclude","normalizeCoreObjectResponse","object","getSuiObject","multiGetSuiObjects","objects","argsKey","args","serializedArgs","serviceConfigVersionIncluded","option","index","isLast","disableCache","cacheTime","rest","getNaviSdkConfigVersion","withSingleton","fn","promiseMap","key","withCache","cache","cacheData","camelize","obj","v","camelCase","parseTxValue","format","parseTxPoolValue","parseDevInspectResult","data","parseTypes","item","normalizeCoinType","coinType","normalizeStructTag","processContractHealthFactor","hf","healthFactor","SuiPriceServiceConnection","Rate_Decimals","rayMathMulIndex","amount","BigNumber","ray","halfRay","requestHeaders","userAgent","getPoolsMap","pools","acc","pool","getEmodesMap","emodes","emode","poolToEModePool","emodeIdentity","emodeAsset","asset","parsePoolUID","uid","marketKey","poolId","uuid"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naviprotocol/lending",
3
- "version": "2.0.6",
3
+ "version": "2.0.7",
4
4
  "description": "NAVI Lending SDK",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -16,8 +16,8 @@
16
16
  "type": "git",
17
17
  "url": "https://github.com/naviprotocol/naviprotocol-monorepo.git"
18
18
  },
19
- "main": "dist/index.esm.js",
20
- "module": "dist/index.esm.js",
19
+ "main": "dist/index.js",
20
+ "module": "dist/index.js",
21
21
  "types": "dist/index.d.ts",
22
22
  "source": "src/index.ts",
23
23
  "files": [
@@ -28,8 +28,8 @@
28
28
  "./package.json": "./package.json",
29
29
  ".": {
30
30
  "types": "./dist/index.d.ts",
31
- "import": "./dist/index.esm.js",
32
- "default": "./dist/index.esm.js"
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
33
33
  }
34
34
  },
35
35
  "publishConfig": {