@kasufinance/kasu-sdk 2.4.2 → 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.
Files changed (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +189 -253
  3. package/dist/bundle.cjs.js +4775 -1794
  4. package/dist/bundle.esm.js +4764 -1816
  5. package/dist/domain/deposit-bounds.d.ts +62 -0
  6. package/dist/domain/deposit-bounds.js +84 -0
  7. package/dist/domain/deposit-bounds.js.map +1 -0
  8. package/dist/domain/deposit-bounds.test.js +135 -0
  9. package/dist/domain/deposit-bounds.test.js.map +1 -0
  10. package/dist/domain/index.d.ts +26 -0
  11. package/dist/domain/index.js +23 -0
  12. package/dist/domain/index.js.map +1 -0
  13. package/dist/domain/partners.d.ts +34 -0
  14. package/dist/domain/partners.js +43 -0
  15. package/dist/domain/partners.js.map +1 -0
  16. package/dist/domain/partners.test.d.ts +1 -0
  17. package/dist/domain/partners.test.js +53 -0
  18. package/dist/domain/partners.test.js.map +1 -0
  19. package/dist/domain/pools.d.ts +70 -0
  20. package/dist/domain/pools.js +134 -0
  21. package/dist/domain/pools.js.map +1 -0
  22. package/dist/domain/pools.test.d.ts +1 -0
  23. package/dist/domain/pools.test.js +184 -0
  24. package/dist/domain/pools.test.js.map +1 -0
  25. package/dist/domain/rates.d.ts +83 -0
  26. package/dist/domain/rates.js +120 -0
  27. package/dist/domain/rates.js.map +1 -0
  28. package/dist/domain/rates.test.d.ts +1 -0
  29. package/dist/domain/rates.test.js +181 -0
  30. package/dist/domain/rates.test.js.map +1 -0
  31. package/dist/domain/tranche-display-name.d.ts +17 -0
  32. package/dist/domain/tranche-display-name.js +30 -0
  33. package/dist/domain/tranche-display-name.js.map +1 -0
  34. package/dist/domain/tranche-display-name.test.d.ts +1 -0
  35. package/dist/domain/tranche-display-name.test.js +58 -0
  36. package/dist/domain/tranche-display-name.test.js.map +1 -0
  37. package/dist/domain/tranches.d.ts +89 -0
  38. package/dist/domain/tranches.js +150 -0
  39. package/dist/domain/tranches.js.map +1 -0
  40. package/dist/domain/tranches.test.d.ts +1 -0
  41. package/dist/domain/tranches.test.js +206 -0
  42. package/dist/domain/tranches.test.js.map +1 -0
  43. package/dist/facade/chain-configs.js +54 -0
  44. package/dist/facade/chain-configs.js.map +1 -1
  45. package/dist/facade/config.test.d.ts +1 -0
  46. package/dist/facade/config.test.js +216 -0
  47. package/dist/facade/config.test.js.map +1 -0
  48. package/dist/facade/deposits.d.ts +22 -1
  49. package/dist/facade/deposits.js +24 -1
  50. package/dist/facade/deposits.js.map +1 -1
  51. package/dist/facade/facade.test.d.ts +1 -0
  52. package/dist/{tests → facade}/facade.test.js +10 -5
  53. package/dist/facade/facade.test.js.map +1 -0
  54. package/dist/facade/index.d.ts +2 -1
  55. package/dist/facade/index.js +2 -0
  56. package/dist/facade/index.js.map +1 -1
  57. package/dist/facade/kasu.d.ts +49 -8
  58. package/dist/facade/kasu.js +117 -13
  59. package/dist/facade/kasu.js.map +1 -1
  60. package/dist/facade/strategies.d.ts +25 -0
  61. package/dist/facade/strategies.js +36 -0
  62. package/dist/facade/strategies.js.map +1 -1
  63. package/dist/facade/types.d.ts +57 -2
  64. package/dist/facade/unused-pool-ids.d.ts +31 -0
  65. package/dist/facade/unused-pool-ids.js +57 -0
  66. package/dist/facade/unused-pool-ids.js.map +1 -0
  67. package/dist/index.d.ts +1 -0
  68. package/dist/index.js +5 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/sdk-config.d.ts +11 -0
  71. package/dist/sdk-config.js +8 -1
  72. package/dist/sdk-config.js.map +1 -1
  73. package/dist/services/DataService/data-service.d.ts +5 -0
  74. package/dist/services/DataService/data-service.js +7 -2
  75. package/dist/services/DataService/data-service.js.map +1 -1
  76. package/dist/services/Locking/calculate-apy.test.d.ts +1 -0
  77. package/dist/services/Locking/calculate-apy.test.js +41 -0
  78. package/dist/services/Locking/calculate-apy.test.js.map +1 -0
  79. package/dist/services/Locking/locking.d.ts +14 -0
  80. package/dist/services/Locking/locking.js +16 -2
  81. package/dist/services/Locking/locking.js.map +1 -1
  82. package/dist/tests/sample.test.js +46 -25
  83. package/dist/tests/sample.test.js.map +1 -1
  84. package/package.json +43 -12
  85. package/src/domain/deposit-bounds.test.ts +200 -0
  86. package/src/domain/deposit-bounds.ts +118 -0
  87. package/src/domain/index.ts +70 -0
  88. package/src/domain/partners.test.ts +83 -0
  89. package/src/domain/partners.ts +66 -0
  90. package/src/domain/pools.test.ts +260 -0
  91. package/src/domain/pools.ts +150 -0
  92. package/src/domain/rates.test.ts +254 -0
  93. package/src/domain/rates.ts +120 -0
  94. package/src/domain/tranche-display-name.test.ts +96 -0
  95. package/src/domain/tranche-display-name.ts +34 -0
  96. package/src/domain/tranches.test.ts +300 -0
  97. package/src/domain/tranches.ts +177 -0
  98. package/src/facade/chain-configs.ts +55 -0
  99. package/src/facade/config.test.ts +265 -0
  100. package/src/facade/deposits.ts +25 -0
  101. package/src/{tests → facade}/facade.test.ts +10 -5
  102. package/src/facade/index.ts +4 -0
  103. package/src/facade/kasu.ts +155 -12
  104. package/src/facade/strategies.ts +36 -0
  105. package/src/facade/types.ts +60 -2
  106. package/src/facade/unused-pool-ids.ts +59 -0
  107. package/src/index.ts +6 -0
  108. package/src/sdk-config.ts +19 -1
  109. package/src/services/DataService/data-service.ts +7 -2
  110. package/src/services/Locking/calculate-apy.test.ts +52 -0
  111. package/src/services/Locking/locking.ts +16 -2
  112. package/src/tests/sample.test.ts +54 -33
  113. package/.eslintignore +0 -3
  114. package/.eslintrc.json +0 -90
  115. package/.github/workflows/ci.yml +0 -39
  116. package/.github/workflows/gitleaks.yml +0 -22
  117. package/.github/workflows/main.yml +0 -41
  118. package/.gitleaksignore +0 -19
  119. package/.prettierignore +0 -3
  120. package/.prettierrc +0 -28
  121. package/CLAUDE.md +0 -410
  122. package/copy-abi.ps1 +0 -15
  123. package/dist/tests/facade.test.js.map +0 -1
  124. package/index.ts +0 -2
  125. package/jest-config.ts +0 -9
  126. package/jest.config.js +0 -8
  127. package/rollup.config.js +0 -45
  128. package/tsconfig.json +0 -27
  129. /package/dist/{tests/facade.test.d.ts → domain/deposit-bounds.test.d.ts} +0 -0
@@ -1,42 +1,63 @@
1
+ /**
2
+ * Live-network spec. It talks to a real subgraph and a real RPC, so it is
3
+ * OPT-IN: it runs only under `LIVE_TESTS=1` (`npm run test:live`) and is
4
+ * skipped by `npm test` and `npm run test:unit`. A network problem must never
5
+ * be able to fail a pull request that did not touch the network.
6
+ *
7
+ * Known state: the stack it points at (`kasu-wip-sepolia` on The Graph Studio,
8
+ * with Base Sepolia addresses) is decommissioned, so `npm run test:live` fails
9
+ * on a missing deployment. That is pre-existing and unrelated to the gate; the
10
+ * spec needs retargeting at a live deployment before it means anything.
11
+ */
1
12
  import * as ethers from 'ethers';
2
13
 
3
14
  import { KasuSdk } from '..';
4
15
  import { SdkConfig } from '../sdk-config';
5
16
 
6
- test('subgraphCall', async () => {
7
- const provider = new ethers.providers.JsonRpcProvider(
8
- 'https://sepolia.base.org',
9
- );
17
+ const live = process.env.LIVE_TESTS === '1';
10
18
 
11
- const wallet = new ethers.Wallet(
12
- 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd',
13
- provider,
14
- );
15
- const config = new SdkConfig({
16
- subgraphUrl:
17
- 'https://api.studio.thegraph.com/query/63245/kasu-wip-sepolia/version/latest',
18
- contracts: {
19
- IKSULocking: '0x529A81c11ab6176c5E88670d293BB771800066a2',
20
- IKSULockBonus: '0xBBfFd5F744156FFc526df12F5e09dC7b208Be740',
21
- KSUToken: '0xa0f698Feb9Bc2BeA6E85eb071D5E3F59dc5bC56b',
22
- UserManager: '0xA788e9223fDd7c9Db91Ef133BbeB73515c174773',
23
- LendingPoolManager: '0xc074Aaf2565aae18db2c7498ee1387610a809F40',
24
- KasuAllowList: '0xaE94F9D187c9eA649ADd4966340831F7cc62B69c',
25
- SystemVariables: '0xB174a3240B23e595e90bC2736A5b8ec674Cba73A',
26
- UserLoyaltyRewards: '0x259631CE76FD9F65296549Cd81232aa59D53Dd0c',
27
- KsuPrice: '0x2027192aCFB4810Ad734A212F19d7030F698aCE3',
28
- ClearingCoordinator: '0x2027192aCFB4810Ad734A212F19d7030F698aCE3',
29
- KasuNFTs: '0x0000000000000000000000000000000000000000',
30
- ExternalTVL: '0x0000000000000000000000000000000000000000',
31
- },
32
- directusUrl: 'https://kasu-finance.directus.app',
33
- UNUSED_LENDING_POOL_IDS: [''],
34
- });
35
- const sdk = new KasuSdk(config, wallet);
19
+ (live ? describe : describe.skip)('live network — subgraph read', () => {
20
+ it('reads a user APY bonus through the subgraph', async () => {
21
+ const provider = new ethers.providers.JsonRpcProvider(
22
+ 'https://sepolia.base.org',
23
+ );
24
+
25
+ // Generated per run. This spec only reads, so the wallet never needs
26
+ // funds or a key that outlives the process — and a public repository
27
+ // must never carry one.
28
+ const wallet = ethers.Wallet.createRandom().connect(provider);
29
+
30
+ const config = new SdkConfig({
31
+ subgraphUrl:
32
+ 'https://api.studio.thegraph.com/query/63245/kasu-wip-sepolia/version/latest',
33
+ contracts: {
34
+ IKSULocking: '0x529A81c11ab6176c5E88670d293BB771800066a2',
35
+ IKSULockBonus: '0xBBfFd5F744156FFc526df12F5e09dC7b208Be740',
36
+ // The allow below is for a public Base Sepolia contract
37
+ // address, not a secret: the generic-api-key rule fires on a
38
+ // "Token" key name sitting next to a long hex literal.
39
+ KSUToken: '0xa0f698Feb9Bc2BeA6E85eb071D5E3F59dc5bC56b', // gitleaks:allow
40
+ UserManager: '0xA788e9223fDd7c9Db91Ef133BbeB73515c174773',
41
+ LendingPoolManager: '0xc074Aaf2565aae18db2c7498ee1387610a809F40',
42
+ KasuAllowList: '0xaE94F9D187c9eA649ADd4966340831F7cc62B69c',
43
+ SystemVariables: '0xB174a3240B23e595e90bC2736A5b8ec674Cba73A',
44
+ UserLoyaltyRewards:
45
+ '0x259631CE76FD9F65296549Cd81232aa59D53Dd0c',
46
+ KsuPrice: '0x2027192aCFB4810Ad734A212F19d7030F698aCE3',
47
+ ClearingCoordinator:
48
+ '0x2027192aCFB4810Ad734A212F19d7030F698aCE3',
49
+ KasuNFTs: '0x0000000000000000000000000000000000000000',
50
+ ExternalTVL: '0x0000000000000000000000000000000000000000',
51
+ },
52
+ directusUrl: 'https://kasu-finance.directus.app',
53
+ UNUSED_LENDING_POOL_IDS: [''],
54
+ });
55
+ const sdk = new KasuSdk(config, wallet);
36
56
 
37
- console.log(
38
- await sdk.UserLending.getUserApyBonus(
57
+ const bonus = await sdk.UserLending.getUserApyBonus(
39
58
  '0xef38c432682ab49095e00442aaa354e955ac03a5',
40
- ),
41
- );
59
+ );
60
+
61
+ expect(bonus).toBeDefined();
62
+ });
42
63
  });
package/.eslintignore DELETED
@@ -1,3 +0,0 @@
1
- /**/*.js
2
- src/contracts/**
3
- jest-config.ts
package/.eslintrc.json DELETED
@@ -1,90 +0,0 @@
1
- {
2
- "extends": [
3
- "plugin:@typescript-eslint/strict-type-checked",
4
- "plugin:@typescript-eslint/stylistic-type-checked",
5
- "plugin:import/errors",
6
- "plugin:import/warnings",
7
- "plugin:import/typescript",
8
- "prettier"
9
- ],
10
- "settings": {
11
- "import/resolver": {
12
- "node": {
13
- "extensions": [".js", ".jsx", ".ts", ".tsx", ".d.ts"], // add .d.ts here
14
- "moduleDirectory": ["src", "node_modules"]
15
- }
16
- }
17
- },
18
- "parserOptions": {
19
- "project": ["./tsconfig.json"] // Specify it only for TypeScript files
20
- },
21
- "ignorePatterns": [
22
- "node_modules",
23
- "src/contracts",
24
- "index.ts",
25
- "dist/**/*"
26
- ],
27
- "rules": {
28
- "@typescript-eslint/no-non-null-assertion": "warn",
29
- "@typescript-eslint/prefer-ts-expect-error": "warn",
30
- "@typescript-eslint/restrict-plus-operands": "warn",
31
- "@typescript-eslint/ban-ts-comment": [
32
- "warn",
33
- {
34
- "ts-expect-error": "allow-with-description",
35
- "ts-ignore": "allow-with-description"
36
- }
37
- ],
38
- "@typescript-eslint/ban-tslint-comment": "warn",
39
- "@typescript-eslint/no-explicit-any": "warn",
40
- "testing-library/prefer-screen-queries": "off",
41
- "@typescript-eslint/no-unused-vars": [
42
- "warn",
43
- {
44
- "argsIgnorePattern": "^_",
45
- "varsIgnorePattern": "^_"
46
- }
47
- ],
48
- "sort-imports": [
49
- "warn",
50
- {
51
- "ignoreCase": true,
52
- "ignoreDeclarationSort": true
53
- }
54
- ],
55
- "import/order": [
56
- "error",
57
- {
58
- "groups": [
59
- "builtin",
60
- "external",
61
- "internal",
62
- "parent",
63
- "sibling",
64
- "index"
65
- ],
66
- "pathGroups": [
67
- {
68
- "pattern": "src/**",
69
- "group": "internal",
70
- "position": "before"
71
- },
72
- {
73
- "pattern": "test/**",
74
- "group": "internal",
75
- "position": "before"
76
- }
77
- ],
78
- "pathGroupsExcludedImportTypes": ["builtin", "external"],
79
- "newlines-between": "always",
80
- "alphabetize": {
81
- "order": "asc",
82
- "caseInsensitive": true
83
- }
84
- }
85
- ],
86
- "@typescript-eslint/explicit-function-return-type": "error",
87
- "@typescript-eslint/explicit-module-boundary-types": "error"
88
- },
89
- "plugins": ["@typescript-eslint", "import"]
90
- }
@@ -1,39 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- - develop
8
- pull_request:
9
- branches:
10
- - main
11
- - develop
12
-
13
- permissions:
14
- contents: read
15
-
16
- jobs:
17
- quality-checks:
18
- runs-on: ubuntu-latest
19
- steps:
20
- - name: Checkout repository
21
- uses: actions/checkout@v4
22
-
23
- - name: Set up Node.js
24
- uses: actions/setup-node@v4
25
- with:
26
- node-version: 20
27
- cache: npm
28
-
29
- - name: Install dependencies
30
- run: npm ci
31
-
32
- - name: Generate contract typings
33
- run: npm run build-tc
34
-
35
- - name: Lint & type-check
36
- run: npm run build
37
-
38
- - name: Bundle library
39
- run: npm run rollup-build
@@ -1,22 +0,0 @@
1
- name: gitleaks
2
-
3
- on:
4
- push:
5
- branches: [main, master, develop]
6
- pull_request:
7
-
8
- permissions:
9
- contents: read
10
-
11
- jobs:
12
- gitleaks:
13
- runs-on: ubuntu-latest
14
- steps:
15
- - uses: actions/checkout@v4
16
- with:
17
- fetch-depth: 0
18
-
19
- - name: Run gitleaks
20
- run: |
21
- curl -sSfL https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz | tar -xz gitleaks
22
- ./gitleaks git --redact --no-banner .
@@ -1,41 +0,0 @@
1
- name: Verify release tag
2
-
3
- # npm publishes are intentionally manual (policy: always run `npm publish`
4
- # locally as a kasu_finance org member). This workflow only verifies the
5
- # pushed tag matches package.json — it does NOT publish.
6
-
7
- on:
8
- push:
9
- tags:
10
- - 'v[0-9]+.[0-9]+.[0-9]+'
11
-
12
- workflow_dispatch:
13
-
14
- jobs:
15
- verify:
16
- runs-on: ubuntu-latest
17
- permissions:
18
- contents: read
19
-
20
- steps:
21
- - uses: actions/checkout@v4
22
-
23
- - name: Get tag version
24
- id: tag_version
25
- run: |
26
- RAW_TAG="${GITHUB_REF#refs/tags/}"
27
- echo "TAG_VERSION=${RAW_TAG#v}" >> "$GITHUB_OUTPUT"
28
-
29
- - name: Read package version
30
- id: package_version
31
- run: |
32
- PKG_VERSION=$(node -p "require('./package.json').version")
33
- echo "PACKAGE_VERSION=$PKG_VERSION" >> "$GITHUB_OUTPUT"
34
-
35
- - name: Ensure tag matches package.json
36
- run: |
37
- if [ "${{ steps.tag_version.outputs.TAG_VERSION }}" != "${{ steps.package_version.outputs.PACKAGE_VERSION }}" ]; then
38
- echo "Tag ${{ steps.tag_version.outputs.TAG_VERSION }} does not match package.json ${{ steps.package_version.outputs.PACKAGE_VERSION }}."
39
- exit 1
40
- fi
41
- echo "Tag ${{ steps.tag_version.outputs.TAG_VERSION }} matches package.json. Run 'npm publish' locally to release."
package/.gitleaksignore DELETED
@@ -1,19 +0,0 @@
1
- # Baseline: historical findings triaged 2026-08-11 (real ones rotated, rest false positives).
2
- # New findings will still fail CI. Format: commit:file:rule:line
3
- 0a13e5c82c4b0dea51a1bca2bcffd4dbe7d9e9c8:src/config/sdk/mainnet.config.ts:generic-api-key:9
4
- 0a13e5c82c4b0dea51a1bca2bcffd4dbe7d9e9c8:src/config/sdk/testnet.config.ts:generic-api-key:9
5
- 1a0e64886602fdbb0789b72e3be80460dfb2a9bc:src/tests/sample.test.ts:generic-api-key:18
6
- 41992e186efdd602e49a07a9cfaa17a046194afd:src/tests/sample.test.ts:generic-api-key:20
7
- 61345a2c016dd28bd3fe647b01ae92321f4e6797:src/config/sdk/mainnet.config.ts:generic-api-key:9
8
- 61345a2c016dd28bd3fe647b01ae92321f4e6797:src/config/sdk/testnet.config.ts:generic-api-key:9
9
- 678e94f28e9894246569775e06b7bfc145c90db9:src/config/sdk/mainnet.config.ts:generic-api-key:9
10
- 678e94f28e9894246569775e06b7bfc145c90db9:src/config/sdk/testnet.config.ts:generic-api-key:9
11
- 76241c92f25050ca6b73e77ce0514abc8c5038d8:src/config/sdk/mainnet.config.ts:generic-api-key:9
12
- 76241c92f25050ca6b73e77ce0514abc8c5038d8:src/config/sdk/testnet.config.ts:generic-api-key:9
13
- aa4522559522cf1f207b834fbd0318ef96f1f635:src/app/api/kyc-challenge/route.ts:generic-api-key:5
14
- c65a422c4f96ba302c047fe1a4e3d6d74dcc2744:src/facade/chain-configs.ts:generic-api-key:18
15
- cee7050d62ae95f1b6d88592de8eaff576719d28:src/tests/sample.test.ts:generic-api-key:18
16
- f085d18b3b818f5853a934aee12ce1611afc738e:src/config/sdk/mainnet.config.ts:generic-api-key:9
17
- f085d18b3b818f5853a934aee12ce1611afc738e:src/config/sdk/testnet.config.ts:generic-api-key:9
18
- f92e12c74df7990a519eec7c4940a655cbaa3160:src/actions/getTokenPrice.ts:generic-api-key:52
19
- fc75e2491f414032d69a352f7a0e1fcd3f515f99:.env.local:generic-api-key:2
package/.prettierignore DELETED
@@ -1,3 +0,0 @@
1
- .nyc_output
2
- package-lock.json
3
- src/contracts/**
package/.prettierrc DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "arrowParens": "always",
3
- "singleQuote": true,
4
- "tabWidth": 4,
5
- "semi": true,
6
- "trailingComma": "all",
7
- "endOfLine": "auto",
8
- "overrides": [
9
- {
10
- "files": ".prettierrc",
11
- "options": {
12
- "parser": "json"
13
- }
14
- },
15
- {
16
- "files": ["*.ts", "*.mts"],
17
- "options": {
18
- "parser": "typescript"
19
- }
20
- },
21
- {
22
- "files": ["*.yml", "*.yaml"],
23
- "options": {
24
- "tabWidth": 2
25
- }
26
- }
27
- ]
28
- }