@wildcatfi/wildcat-sdk 3.0.11 → 3.0.12

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.
@@ -0,0 +1,38 @@
1
+ import { ApolloClient, FetchPolicy, NormalizedCacheObject } from "@apollo/client";
2
+ import { SubgraphGetActiveLendersByMarketQueryVariables } from "./graphql";
3
+ import { Market } from "../market";
4
+ import { LenderRole } from "../account";
5
+ import { HooksCredential } from "../types";
6
+ import { BigNumber } from "ethers";
7
+ import { TokenAmount } from "../token";
8
+ export type GetActiveLendersByMarketOptions = SubgraphGetActiveLendersByMarketQueryVariables & {
9
+ fetchPolicy?: FetchPolicy;
10
+ market: Market;
11
+ };
12
+ type BasicLenderArgs = {
13
+ market: Market;
14
+ address: string;
15
+ scaledBalance: BigNumber;
16
+ addedTimestamp: number;
17
+ isKnownLender?: boolean;
18
+ /** For V2 markets - credentials on market hooks instance */
19
+ credential?: HooksCredential;
20
+ /** For V1 markets - whether lender has been manually approved on controller */
21
+ isAuthorizedOnController?: boolean;
22
+ role?: LenderRole;
23
+ };
24
+ export interface BasicLenderData extends BasicLenderArgs {
25
+ }
26
+ export declare class BasicLenderData {
27
+ constructor(args: BasicLenderArgs);
28
+ get marketBalance(): TokenAmount;
29
+ get credentialExpiry(): number | undefined;
30
+ get hasValidCredential(): boolean;
31
+ /** Shim for functions in app that use lender role */
32
+ get inferredRole(): LenderRole | undefined;
33
+ get canDeposit(): boolean;
34
+ get canWithdraw(): boolean;
35
+ }
36
+ export declare function getActiveLendersByMarket(subgraphClient: ApolloClient<NormalizedCacheObject>, { fetchPolicy, market, ...options }: GetActiveLendersByMarketOptions): Promise<BasicLenderData[]>;
37
+ export {};
38
+ //# sourceMappingURL=getActiveLendersByMarket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getActiveLendersByMarket.d.ts","sourceRoot":"","sources":["../../src/gql/getActiveLendersByMarket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAGL,8CAA8C,EAC/C,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAA4B,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,MAAM,MAAM,+BAA+B,GAAG,8CAA8C,GAAG;IAC7F,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,SAAS,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,eAAe,CAAC;IAE7B,gFAAgF;IAChF,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAGF,MAAM,WAAW,eAAgB,SAAQ,eAAe;CAAG;AAE3D,qBAAa,eAAe;gBACd,IAAI,EAAE,eAAe;IAIjC,IAAI,aAAa,IAAI,WAAW,CAE/B;IAED,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAKzC;IAED,IAAI,kBAAkB,IAAI,OAAO,CAGhC;IAED,qDAAqD;IACrD,IAAI,YAAY,IAAI,UAAU,GAAG,SAAS,CAWzC;IAED,IAAI,UAAU,IAAI,OAAO,CAwBxB;IAED,IAAI,WAAW,IAAI,OAAO,CA2BzB;CACF;AAED,wBAAsB,wBAAwB,CAC5C,cAAc,EAAE,YAAY,CAAC,qBAAqB,CAAC,EACnD,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,+BAA+B,GACnE,OAAO,CAAC,eAAe,EAAE,CAAC,CA4B5B"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getActiveLendersByMarket = exports.BasicLenderData = void 0;
4
+ const graphql_1 = require("./graphql");
5
+ const account_1 = require("../account");
6
+ const types_1 = require("../types");
7
+ const ethers_1 = require("ethers");
8
+ const utils_1 = require("../utils");
9
+ class BasicLenderData {
10
+ constructor(args) {
11
+ Object.assign(this, args);
12
+ }
13
+ get marketBalance() {
14
+ return this.market.marketToken.getAmount(this.market.scaleAmount(this.scaledBalance));
15
+ }
16
+ get credentialExpiry() {
17
+ if (this.credential && this.credential.lastProvider) {
18
+ return this.credential.lastApprovalTimestamp + this.credential.lastProvider.timeToLive;
19
+ }
20
+ return undefined;
21
+ }
22
+ get hasValidCredential() {
23
+ const expiry = this.credentialExpiry;
24
+ return expiry !== undefined && expiry >= Date.now() / 1000;
25
+ }
26
+ /** Shim for functions in app that use lender role */
27
+ get inferredRole() {
28
+ if (this.canDeposit) {
29
+ return account_1.LenderRole.DepositAndWithdraw;
30
+ }
31
+ if (this.canWithdraw) {
32
+ return account_1.LenderRole.WithdrawOnly;
33
+ }
34
+ if (this.credential?.isBlockedFromDeposits || this.role === account_1.LenderRole.Blocked) {
35
+ return account_1.LenderRole.Blocked;
36
+ }
37
+ return account_1.LenderRole.Null;
38
+ }
39
+ get canDeposit() {
40
+ if (this.market.isClosed)
41
+ return false;
42
+ if (this.market.version === types_1.MarketVersion.V1) {
43
+ if (this.role === account_1.LenderRole.Blocked)
44
+ return false;
45
+ if (this.role === account_1.LenderRole.DepositAndWithdraw ||
46
+ (this.role === account_1.LenderRole.Null && !!this.isAuthorizedOnController)) {
47
+ return true;
48
+ }
49
+ return false;
50
+ }
51
+ else {
52
+ const config = this.market.hooksConfig;
53
+ (0, utils_1.assert)(config !== undefined, `V2 market missing hooksConfig`);
54
+ // Can deposit if the market does not use the onDeposit hook
55
+ if (!config.flags.useOnDeposit)
56
+ return true;
57
+ // Can not deposit if the lender is blocked
58
+ if (this.credential?.isBlockedFromDeposits)
59
+ return false;
60
+ // Can deposit if lender has credential or market does not require one
61
+ if (config.depositRequiresAccess && !this.hasValidCredential) {
62
+ return false;
63
+ }
64
+ return true;
65
+ }
66
+ }
67
+ get canWithdraw() {
68
+ if (this.market.version === types_1.MarketVersion.V1) {
69
+ if (this.role === account_1.LenderRole.WithdrawOnly ||
70
+ this.role === account_1.LenderRole.DepositAndWithdraw ||
71
+ (this.role === account_1.LenderRole.Null && !!this.isAuthorizedOnController)) {
72
+ return true;
73
+ }
74
+ return false;
75
+ }
76
+ else {
77
+ const config = this.market.hooksConfig;
78
+ (0, utils_1.assert)(config !== undefined, `V2 market missing hooksConfig`);
79
+ // Can withdraw if market does not use wd hook
80
+ if (!config.flags.useOnQueueWithdrawal)
81
+ return true;
82
+ // Can not withdraw if market in fixed term
83
+ if (this.market.isInFixedTerm)
84
+ return false;
85
+ // Can not withdraw if market requires access and lender has no credential and is not a known lender
86
+ if (config.flags.useOnQueueWithdrawal &&
87
+ (config.kind === types_1.HooksKind.OpenTerm || config.queueWithdrawalRequiresAccess) &&
88
+ !(this.hasValidCredential || this.isKnownLender)) {
89
+ return false;
90
+ }
91
+ return true;
92
+ }
93
+ }
94
+ }
95
+ exports.BasicLenderData = BasicLenderData;
96
+ async function getActiveLendersByMarket(subgraphClient, { fetchPolicy, market, ...options }) {
97
+ const { data: { market: marketData } } = await subgraphClient.query({
98
+ query: graphql_1.GetActiveLendersByMarketDocument,
99
+ variables: {
100
+ market: market.address.toLowerCase(),
101
+ ...options
102
+ },
103
+ fetchPolicy
104
+ });
105
+ (0, utils_1.assert)(marketData !== undefined && marketData !== null, `Market not found ${market.address}`);
106
+ return marketData.lenders.map(({ controllerAuthorization, hooksAccess, knownLenderStatus, scaledBalance, role, ...rest }) => {
107
+ return new BasicLenderData({
108
+ ...rest,
109
+ market,
110
+ scaledBalance: ethers_1.BigNumber.from(scaledBalance),
111
+ credential: hooksAccess ? (0, utils_1.parseSubgraphLenderHooksAccess)(hooksAccess) : undefined,
112
+ isAuthorizedOnController: controllerAuthorization?.authorized,
113
+ isKnownLender: !!knownLenderStatus?.id,
114
+ role: (0, utils_1.parseSubgraphLenderStatus)(role)
115
+ });
116
+ });
117
+ }
118
+ exports.getActiveLendersByMarket = getActiveLendersByMarket;
119
+ //# sourceMappingURL=getActiveLendersByMarket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getActiveLendersByMarket.js","sourceRoot":"","sources":["../../src/gql/getActiveLendersByMarket.ts"],"names":[],"mappings":"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"}
@@ -12665,6 +12665,7 @@ export type SubgraphBasicLenderDataFragment = {
12665
12665
  id: string;
12666
12666
  address: string;
12667
12667
  scaledBalance: string;
12668
+ addedTimestamp: number;
12668
12669
  role: SubgraphLenderStatus;
12669
12670
  controllerAuthorization?: {
12670
12671
  __typename: "LenderAuthorization";
@@ -13818,6 +13819,11 @@ export type SubgraphGetMarketsAndLendersByHooksInstanceOrControllerQuery = {
13818
13819
  };
13819
13820
  export type SubgraphGetActiveLendersByMarketQueryVariables = Exact<{
13820
13821
  market: Scalars["ID"]["input"];
13822
+ accountFilter?: InputMaybe<SubgraphLenderAccount_Filter>;
13823
+ numAccounts?: InputMaybe<Scalars["Int"]["input"]>;
13824
+ skipAccounts?: InputMaybe<Scalars["Int"]["input"]>;
13825
+ orderAccounts?: InputMaybe<SubgraphLenderAccount_OrderBy>;
13826
+ directionAccounts?: InputMaybe<SubgraphOrderDirection>;
13821
13827
  }>;
13822
13828
  export type SubgraphGetActiveLendersByMarketQuery = {
13823
13829
  __typename: "Query";