torque-intelligence 0.1.0 → 0.1.2

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/README.md CHANGED
@@ -53,6 +53,10 @@ const ti = createTorqueIntelligence({
53
53
  | `getFeed` | Primary feed | `GET /api/v1/intelligence/feed` |
54
54
  | `getTradeAngles` | Desk angles | `GET /api/v1/intelligence/trade-angles` |
55
55
  | `getHappeningNow` | Timely signals | `GET /api/v1/intelligence/happening-now` |
56
+ | `getYieldOpportunities` | Yield Spotlight + idle-cash ideas | `GET /api/v1/opportunities/yield` |
57
+ | `getLendingOpportunities` | Lend/Borrow catalog APY + APR | `GET /api/v1/opportunities/lending` |
58
+ | `getFundingRadarWidget` | Funding radar (Home widget) | `GET /api/v1/widgets/funding-radar` |
59
+ | `getEarningsSpotlightWidget` | Earnings spotlight (Home widget) | `GET /api/v1/widgets/earnings-spotlight` |
56
60
  | `getCapabilities` | Manifest probe | `GET /api/v1/capabilities` |
57
61
 
58
62
  ## Errors
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import type { GetHappeningNowParams, GetIntelligenceFeedParams, GetTradeAnglesParams, HappeningNowResponseV1, IntelligenceFeedResponseV1, TradeAnglesResponseV1 } from '@torquefi/types/intelligence';
2
+ import type { GetLendingOpportunitiesParams, GetYieldOpportunitiesParams, LendingOpportunitiesResponseV1, YieldOpportunitiesResponseV1 } from '@torquefi/types/opportunities';
3
+ import type { EarningsSpotlightWidgetResponseV1, FundingRadarWidgetResponseV1 } from '@torquefi/types/widgets';
2
4
  import type { TorqueCapabilitiesProbe, TorquePlatformClientConfig } from '@torquefi/types/platform';
3
5
  import { TorqueIntelligenceError } from './errors';
4
6
  export interface TorqueIntelligenceOptions extends TorquePlatformClientConfig {
@@ -8,6 +10,8 @@ export interface TorqueIntelligenceOptions extends TorquePlatformClientConfig {
8
10
  export type { TorquePlatformClientConfig as TorqueIntelligenceConfig } from '@torquefi/types/platform';
9
11
  export { TorqueIntelligenceError };
10
12
  export type { GetHappeningNowParams, GetIntelligenceFeedParams, GetTradeAnglesParams, HappeningNowResponseV1, IntelligenceFeedResponseV1, IntelligenceItemV1, TradeAnglesResponseV1, } from '@torquefi/types/intelligence';
13
+ export type { GetLendingOpportunitiesParams, GetYieldOpportunitiesParams, LendingOpportunitiesResponseV1, YieldOpportunitiesResponseV1, } from '@torquefi/types/opportunities';
14
+ export type { EarningsSpotlightWidgetResponseV1, EarningsSpotlightRowV1, FundingRadarWidgetResponseV1, FundingRadarRowV1, WidgetMetaV1, } from '@torquefi/types/widgets';
11
15
  export declare class TorqueIntelligence {
12
16
  private readonly http;
13
17
  constructor(config: TorqueIntelligenceOptions);
@@ -20,6 +24,20 @@ export declare class TorqueIntelligence {
20
24
  getTradeAngles(params?: GetTradeAnglesParams): Promise<TradeAnglesResponseV1>;
21
25
  /** Timely macro/crypto signals. GET /api/v1/intelligence/happening-now */
22
26
  getHappeningNow(params?: GetHappeningNowParams): Promise<HappeningNowResponseV1>;
27
+ /**
28
+ * Yield Spotlight market APY + optional personalized idle-cash ideas.
29
+ * GET /api/v1/opportunities/yield
30
+ */
31
+ getYieldOpportunities(params?: GetYieldOpportunitiesParams): Promise<YieldOpportunitiesResponseV1>;
32
+ /**
33
+ * Lend/Borrow catalog rates — supply APY and borrow APR per market row.
34
+ * GET /api/v1/opportunities/lending
35
+ */
36
+ getLendingOpportunities(params?: GetLendingOpportunitiesParams): Promise<LendingOpportunitiesResponseV1>;
37
+ /** Hyperliquid funding radar — GET /api/v1/widgets/funding-radar */
38
+ getFundingRadarWidget(): Promise<FundingRadarWidgetResponseV1>;
39
+ /** Upcoming earnings spotlight — GET /api/v1/widgets/earnings-spotlight */
40
+ getEarningsSpotlightWidget(): Promise<EarningsSpotlightWidgetResponseV1>;
23
41
  /** Capability manifest probe. GET /api/v1/capabilities */
24
42
  getCapabilities(): Promise<TorqueCapabilitiesProbe>;
25
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAGnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAQlD,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B;IAC3E,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,YAAY,EAAE,0BAA0B,IAAI,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAEtG,OAAO,EAAE,uBAAuB,EAAE,CAAA;AAClC,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,8BAA8B,CAAA;AAmCrC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;gBAEvC,MAAM,EAAE,yBAAyB;IAK7C;;;OAGG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAOtF,6EAA6E;IACvE,cAAc,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAOnF,0EAA0E;IACpE,eAAe,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOtF,0DAA0D;IACpD,eAAe,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAIzD;;OAEG;IACH,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;CAe3D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,yBAAyB,GAAG,kBAAkB,CAE9F;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC7C,kBAAkB,CAepB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,8BAA8B,EAC9B,4BAA4B,EAC7B,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EACV,iCAAiC,EACjC,4BAA4B,EAC7B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAGnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAUlD,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B;IAC3E,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,YAAY,EAAE,0BAA0B,IAAI,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAEtG,OAAO,EAAE,uBAAuB,EAAE,CAAA;AAClC,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,iCAAiC,EACjC,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,GACb,MAAM,yBAAyB,CAAA;AAmChC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;gBAEvC,MAAM,EAAE,yBAAyB;IAK7C;;;OAGG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAOtF,6EAA6E;IACvE,cAAc,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAOnF,0EAA0E;IACpE,eAAe,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOtF;;;OAGG;IACG,qBAAqB,CACzB,MAAM,CAAC,EAAE,2BAA2B,GACnC,OAAO,CAAC,4BAA4B,CAAC;IAOxC;;;OAGG;IACG,uBAAuB,CAC3B,MAAM,CAAC,EAAE,6BAA6B,GACrC,OAAO,CAAC,8BAA8B,CAAC;IAO1C,oEAAoE;IAC9D,qBAAqB,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAOpE,2EAA2E;IACrE,0BAA0B,IAAI,OAAO,CAAC,iCAAiC,CAAC;IAO9E,0DAA0D;IACpD,eAAe,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAIzD;;OAEG;IACH,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;CAe3D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,yBAAyB,GAAG,kBAAkB,CAE9F;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC7C,kBAAkB,CAepB"}
package/dist/index.esm.js CHANGED
@@ -129,6 +129,37 @@ function buildHappeningNowQuery(params = {}) {
129
129
  const qs = sp.toString();
130
130
  return qs ? `?${qs}` : '';
131
131
  }
132
+ function buildYieldOpportunitiesQuery(params = {}) {
133
+ const sp = new URLSearchParams();
134
+ if (params.walletAddress?.trim()) {
135
+ sp.set('walletAddress', params.walletAddress.trim());
136
+ }
137
+ if (params.minIdleUsd != null && Number.isFinite(params.minIdleUsd)) {
138
+ sp.set('minIdleUsd', String(params.minIdleUsd));
139
+ }
140
+ if (params.maxPersonalized != null && Number.isFinite(params.maxPersonalized)) {
141
+ sp.set('maxPersonalized', String(params.maxPersonalized));
142
+ }
143
+ const qs = sp.toString();
144
+ return qs ? `?${qs}` : '';
145
+ }
146
+ function buildLendingOpportunitiesQuery(params = {}) {
147
+ const sp = new URLSearchParams();
148
+ if (params.chainId != null && Number.isFinite(params.chainId)) {
149
+ sp.set('chainId', String(params.chainId));
150
+ }
151
+ if (params.tokenFilter?.trim()) {
152
+ sp.set('tokenFilter', params.tokenFilter.trim());
153
+ }
154
+ if (params.protocol?.trim()) {
155
+ sp.set('protocol', params.protocol.trim());
156
+ }
157
+ if (params.limit != null && Number.isFinite(params.limit)) {
158
+ sp.set('limit', String(params.limit));
159
+ }
160
+ const qs = sp.toString();
161
+ return qs ? `?${qs}` : '';
162
+ }
132
163
 
133
164
  function validateConfig(config) {
134
165
  if (!config.apiKey?.trim()) {
@@ -179,6 +210,28 @@ class TorqueIntelligence {
179
210
  async getHappeningNow(params) {
180
211
  return torqueIntelligenceGet(this.http, `/api/v1/intelligence/happening-now${buildHappeningNowQuery(params)}`);
181
212
  }
213
+ /**
214
+ * Yield Spotlight market APY + optional personalized idle-cash ideas.
215
+ * GET /api/v1/opportunities/yield
216
+ */
217
+ async getYieldOpportunities(params) {
218
+ return torqueIntelligenceGet(this.http, `/api/v1/opportunities/yield${buildYieldOpportunitiesQuery(params)}`);
219
+ }
220
+ /**
221
+ * Lend/Borrow catalog rates — supply APY and borrow APR per market row.
222
+ * GET /api/v1/opportunities/lending
223
+ */
224
+ async getLendingOpportunities(params) {
225
+ return torqueIntelligenceGet(this.http, `/api/v1/opportunities/lending${buildLendingOpportunitiesQuery(params)}`);
226
+ }
227
+ /** Hyperliquid funding radar — GET /api/v1/widgets/funding-radar */
228
+ async getFundingRadarWidget() {
229
+ return torqueIntelligenceGet(this.http, '/api/v1/widgets/funding-radar');
230
+ }
231
+ /** Upcoming earnings spotlight — GET /api/v1/widgets/earnings-spotlight */
232
+ async getEarningsSpotlightWidget() {
233
+ return torqueIntelligenceGet(this.http, '/api/v1/widgets/earnings-spotlight');
234
+ }
182
235
  /** Capability manifest probe. GET /api/v1/capabilities */
183
236
  async getCapabilities() {
184
237
  return torqueIntelligenceGet(this.http, '/api/v1/capabilities');
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/errors.ts","../src/http.ts","../src/query.ts","../src/index.ts"],"sourcesContent":["export interface TorqueIntelligenceErrorDetails {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n}\n\nexport class TorqueIntelligenceError extends Error {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n\n constructor(message: string, options: TorqueIntelligenceErrorDetails) {\n super(message)\n this.name = 'TorqueIntelligenceError'\n this.code = options.code\n this.statusCode = options.statusCode\n this.details = options.details\n this.retryAfterMs = options.retryAfterMs\n Object.setPrototypeOf(this, TorqueIntelligenceError.prototype)\n }\n}\n\nexport function parseTorqueV1ErrorBody(\n body: unknown,\n statusCode: number,\n fallbackMessage: string,\n): TorqueIntelligenceError {\n const envelope = body as { error?: { code?: string; message?: string; details?: Record<string, unknown> } } | null\n const err = envelope?.error\n const code = typeof err?.code === 'string' ? err.code : 'API_ERROR'\n const message = typeof err?.message === 'string' ? err.message : fallbackMessage\n const details = err?.details\n const retryAfterRaw = details?.retryAfterMs\n const retryAfterMs =\n code === 'COOLDOWN' && typeof retryAfterRaw === 'number' && Number.isFinite(retryAfterRaw)\n ? retryAfterRaw\n : undefined\n\n return new TorqueIntelligenceError(message, {\n code,\n statusCode,\n details,\n retryAfterMs,\n })\n}\n","import { parseTorqueV1ErrorBody, TorqueIntelligenceError } from './errors'\n\nexport interface TorqueIntelligenceHttpConfig {\n apiKey: string\n baseUrl: string\n timeout: number\n cooldownRetries: number\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function torqueIntelligenceGet<T>(\n config: TorqueIntelligenceHttpConfig,\n path: string,\n attempt = 0,\n): Promise<T> {\n const url = `${config.baseUrl}${path}`\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), config.timeout)\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n },\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n const body: unknown = await response.json().catch(() => ({}))\n\n if (!response.ok) {\n const error = parseTorqueV1ErrorBody(\n body,\n response.status,\n `HTTP ${response.status}: ${response.statusText}`,\n )\n\n if (\n error.code === 'COOLDOWN' &&\n error.retryAfterMs != null &&\n attempt < config.cooldownRetries\n ) {\n await sleep(error.retryAfterMs)\n return torqueIntelligenceGet<T>(config, path, attempt + 1)\n }\n\n throw error\n }\n\n return body as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TorqueIntelligenceError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TorqueIntelligenceError('Request timeout', {\n code: 'TIMEOUT',\n statusCode: 408,\n })\n }\n throw new TorqueIntelligenceError(error.message, {\n code: 'NETWORK_ERROR',\n statusCode: 500,\n })\n }\n\n throw new TorqueIntelligenceError('Request failed', {\n code: 'UNKNOWN_ERROR',\n statusCode: 500,\n })\n }\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n IntelligenceItemKind,\n IntelligenceLaneId,\n} from '@torquefi/types/intelligence'\n\nfunction appendCsv(\n params: URLSearchParams,\n key: string,\n values: readonly string[] | undefined,\n): void {\n if (values?.length) {\n params.set(key, values.join(','))\n }\n}\n\nexport function buildFeedQuery(params: GetIntelligenceFeedParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n appendCsv(sp, 'lanes', params.lanes as IntelligenceLaneId[] | undefined)\n appendCsv(sp, 'kinds', params.kinds as IntelligenceItemKind[] | undefined)\n if (params.limit != null && Number.isFinite(params.limit)) {\n sp.set('limit', String(params.limit))\n }\n if (params.includeBrief) {\n sp.set('includeBrief', '1')\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildTradeAnglesQuery(params: GetTradeAnglesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildHappeningNowQuery(params: GetHappeningNowParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\nimport type { TorqueCapabilitiesProbe, TorquePlatformClientConfig } from '@torquefi/types/platform'\nimport { INTELLIGENCE_MANIFEST_VERSION } from '@torquefi/types/intelligence'\n\nimport { TorqueIntelligenceError } from './errors'\nimport { torqueIntelligenceGet, type TorqueIntelligenceHttpConfig } from './http'\nimport {\n buildFeedQuery,\n buildHappeningNowQuery,\n buildTradeAnglesQuery,\n} from './query'\n\nexport interface TorqueIntelligenceOptions extends TorquePlatformClientConfig {\n /** Automatic retries after 429 COOLDOWN (default 1). */\n cooldownRetries?: number\n}\n\nexport type { TorquePlatformClientConfig as TorqueIntelligenceConfig } from '@torquefi/types/platform'\n\nexport { TorqueIntelligenceError }\nexport type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n IntelligenceItemV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\n\nfunction validateConfig(config: TorqueIntelligenceOptions): void {\n if (!config.apiKey?.trim()) {\n throw new TorqueIntelligenceError('API key is required', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (config.timeout != null && (typeof config.timeout !== 'number' || config.timeout <= 0)) {\n throw new TorqueIntelligenceError('Timeout must be a positive number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (\n config.cooldownRetries != null &&\n (typeof config.cooldownRetries !== 'number' || config.cooldownRetries < 0)\n ) {\n throw new TorqueIntelligenceError('cooldownRetries must be a non-negative number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n}\n\nfunction toHttpConfig(config: TorqueIntelligenceOptions): TorqueIntelligenceHttpConfig {\n return {\n apiKey: config.apiKey.trim(),\n baseUrl: (config.baseUrl || 'https://app.torque.fi').replace(/\\/$/, ''),\n timeout: config.timeout ?? 30_000,\n cooldownRetries: config.cooldownRetries ?? 1,\n }\n}\n\nexport class TorqueIntelligence {\n private readonly http: TorqueIntelligenceHttpConfig\n\n constructor(config: TorqueIntelligenceOptions) {\n validateConfig(config)\n this.http = toHttpConfig(config)\n }\n\n /**\n * Primary integrator feed — normalized IntelligenceItemV1[], lanes, optional brief.\n * GET /api/v1/intelligence/feed\n */\n async getFeed(params?: GetIntelligenceFeedParams): Promise<IntelligenceFeedResponseV1> {\n return torqueIntelligenceGet<IntelligenceFeedResponseV1>(\n this.http,\n `/api/v1/intelligence/feed${buildFeedQuery(params)}`,\n )\n }\n\n /** Ranked trade angles (desk lane). GET /api/v1/intelligence/trade-angles */\n async getTradeAngles(params?: GetTradeAnglesParams): Promise<TradeAnglesResponseV1> {\n return torqueIntelligenceGet<TradeAnglesResponseV1>(\n this.http,\n `/api/v1/intelligence/trade-angles${buildTradeAnglesQuery(params)}`,\n )\n }\n\n /** Timely macro/crypto signals. GET /api/v1/intelligence/happening-now */\n async getHappeningNow(params?: GetHappeningNowParams): Promise<HappeningNowResponseV1> {\n return torqueIntelligenceGet<HappeningNowResponseV1>(\n this.http,\n `/api/v1/intelligence/happening-now${buildHappeningNowQuery(params)}`,\n )\n }\n\n /** Capability manifest probe. GET /api/v1/capabilities */\n async getCapabilities(): Promise<TorqueCapabilitiesProbe> {\n return torqueIntelligenceGet<TorqueCapabilitiesProbe>(this.http, '/api/v1/capabilities')\n }\n\n /**\n * Throws if the server manifest is older than the SDK's expected Intelligence schema version.\n */\n assertManifestCompatibility(manifestVersion: number): void {\n if (manifestVersion < INTELLIGENCE_MANIFEST_VERSION) {\n throw new TorqueIntelligenceError(\n `Server manifest v${manifestVersion} is older than client expectation v${INTELLIGENCE_MANIFEST_VERSION}`,\n {\n code: 'MANIFEST_MISMATCH',\n statusCode: 400,\n details: {\n serverVersion: manifestVersion,\n clientVersion: INTELLIGENCE_MANIFEST_VERSION,\n },\n },\n )\n }\n }\n}\n\nexport function createTorqueIntelligence(config: TorqueIntelligenceOptions): TorqueIntelligence {\n return new TorqueIntelligence(config)\n}\n\n/**\n * Reads TORQUE_API_KEY and optional TORQUE_BASE_URL from the environment.\n */\nexport function createTorqueIntelligenceFromEnv(\n overrides?: Partial<TorqueIntelligenceOptions>,\n): TorqueIntelligence {\n const apiKey = process.env.TORQUE_API_KEY || overrides?.apiKey\n if (!apiKey) {\n throw new TorqueIntelligenceError('TORQUE_API_KEY environment variable is required', {\n code: 'MISSING_ENV_VARS',\n statusCode: 400,\n })\n }\n\n return new TorqueIntelligence({\n apiKey,\n baseUrl: process.env.TORQUE_BASE_URL || overrides?.baseUrl,\n timeout: overrides?.timeout,\n cooldownRetries: overrides?.cooldownRetries,\n })\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/errors.ts","../src/http.ts","../src/query.ts","../src/index.ts"],"sourcesContent":["export interface TorqueIntelligenceErrorDetails {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n}\n\nexport class TorqueIntelligenceError extends Error {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n\n constructor(message: string, options: TorqueIntelligenceErrorDetails) {\n super(message)\n this.name = 'TorqueIntelligenceError'\n this.code = options.code\n this.statusCode = options.statusCode\n this.details = options.details\n this.retryAfterMs = options.retryAfterMs\n Object.setPrototypeOf(this, TorqueIntelligenceError.prototype)\n }\n}\n\nexport function parseTorqueV1ErrorBody(\n body: unknown,\n statusCode: number,\n fallbackMessage: string,\n): TorqueIntelligenceError {\n const envelope = body as { error?: { code?: string; message?: string; details?: Record<string, unknown> } } | null\n const err = envelope?.error\n const code = typeof err?.code === 'string' ? err.code : 'API_ERROR'\n const message = typeof err?.message === 'string' ? err.message : fallbackMessage\n const details = err?.details\n const retryAfterRaw = details?.retryAfterMs\n const retryAfterMs =\n code === 'COOLDOWN' && typeof retryAfterRaw === 'number' && Number.isFinite(retryAfterRaw)\n ? retryAfterRaw\n : undefined\n\n return new TorqueIntelligenceError(message, {\n code,\n statusCode,\n details,\n retryAfterMs,\n })\n}\n","import { parseTorqueV1ErrorBody, TorqueIntelligenceError } from './errors'\n\nexport interface TorqueIntelligenceHttpConfig {\n apiKey: string\n baseUrl: string\n timeout: number\n cooldownRetries: number\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function torqueIntelligenceGet<T>(\n config: TorqueIntelligenceHttpConfig,\n path: string,\n attempt = 0,\n): Promise<T> {\n const url = `${config.baseUrl}${path}`\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), config.timeout)\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n },\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n const body: unknown = await response.json().catch(() => ({}))\n\n if (!response.ok) {\n const error = parseTorqueV1ErrorBody(\n body,\n response.status,\n `HTTP ${response.status}: ${response.statusText}`,\n )\n\n if (\n error.code === 'COOLDOWN' &&\n error.retryAfterMs != null &&\n attempt < config.cooldownRetries\n ) {\n await sleep(error.retryAfterMs)\n return torqueIntelligenceGet<T>(config, path, attempt + 1)\n }\n\n throw error\n }\n\n return body as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TorqueIntelligenceError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TorqueIntelligenceError('Request timeout', {\n code: 'TIMEOUT',\n statusCode: 408,\n })\n }\n throw new TorqueIntelligenceError(error.message, {\n code: 'NETWORK_ERROR',\n statusCode: 500,\n })\n }\n\n throw new TorqueIntelligenceError('Request failed', {\n code: 'UNKNOWN_ERROR',\n statusCode: 500,\n })\n }\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n IntelligenceItemKind,\n IntelligenceLaneId,\n} from '@torquefi/types/intelligence'\nimport type {\n GetLendingOpportunitiesParams,\n GetYieldOpportunitiesParams,\n} from '@torquefi/types/opportunities'\n\nfunction appendCsv(\n params: URLSearchParams,\n key: string,\n values: readonly string[] | undefined,\n): void {\n if (values?.length) {\n params.set(key, values.join(','))\n }\n}\n\nexport function buildFeedQuery(params: GetIntelligenceFeedParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n appendCsv(sp, 'lanes', params.lanes as IntelligenceLaneId[] | undefined)\n appendCsv(sp, 'kinds', params.kinds as IntelligenceItemKind[] | undefined)\n if (params.limit != null && Number.isFinite(params.limit)) {\n sp.set('limit', String(params.limit))\n }\n if (params.includeBrief) {\n sp.set('includeBrief', '1')\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildTradeAnglesQuery(params: GetTradeAnglesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildHappeningNowQuery(params: GetHappeningNowParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildYieldOpportunitiesQuery(params: GetYieldOpportunitiesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.minIdleUsd != null && Number.isFinite(params.minIdleUsd)) {\n sp.set('minIdleUsd', String(params.minIdleUsd))\n }\n if (params.maxPersonalized != null && Number.isFinite(params.maxPersonalized)) {\n sp.set('maxPersonalized', String(params.maxPersonalized))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildLendingOpportunitiesQuery(params: GetLendingOpportunitiesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n if (params.tokenFilter?.trim()) {\n sp.set('tokenFilter', params.tokenFilter.trim())\n }\n if (params.protocol?.trim()) {\n sp.set('protocol', params.protocol.trim())\n }\n if (params.limit != null && Number.isFinite(params.limit)) {\n sp.set('limit', String(params.limit))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\nimport type {\n GetLendingOpportunitiesParams,\n GetYieldOpportunitiesParams,\n LendingOpportunitiesResponseV1,\n YieldOpportunitiesResponseV1,\n} from '@torquefi/types/opportunities'\nimport type {\n EarningsSpotlightWidgetResponseV1,\n FundingRadarWidgetResponseV1,\n} from '@torquefi/types/widgets'\nimport type { TorqueCapabilitiesProbe, TorquePlatformClientConfig } from '@torquefi/types/platform'\nimport { INTELLIGENCE_MANIFEST_VERSION } from '@torquefi/types/intelligence'\n\nimport { TorqueIntelligenceError } from './errors'\nimport { torqueIntelligenceGet, type TorqueIntelligenceHttpConfig } from './http'\nimport {\n buildFeedQuery,\n buildHappeningNowQuery,\n buildTradeAnglesQuery,\n buildYieldOpportunitiesQuery,\n buildLendingOpportunitiesQuery,\n} from './query'\n\nexport interface TorqueIntelligenceOptions extends TorquePlatformClientConfig {\n /** Automatic retries after 429 COOLDOWN (default 1). */\n cooldownRetries?: number\n}\n\nexport type { TorquePlatformClientConfig as TorqueIntelligenceConfig } from '@torquefi/types/platform'\n\nexport { TorqueIntelligenceError }\nexport type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n IntelligenceItemV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\nexport type {\n GetLendingOpportunitiesParams,\n GetYieldOpportunitiesParams,\n LendingOpportunitiesResponseV1,\n YieldOpportunitiesResponseV1,\n} from '@torquefi/types/opportunities'\nexport type {\n EarningsSpotlightWidgetResponseV1,\n EarningsSpotlightRowV1,\n FundingRadarWidgetResponseV1,\n FundingRadarRowV1,\n WidgetMetaV1,\n} from '@torquefi/types/widgets'\n\nfunction validateConfig(config: TorqueIntelligenceOptions): void {\n if (!config.apiKey?.trim()) {\n throw new TorqueIntelligenceError('API key is required', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (config.timeout != null && (typeof config.timeout !== 'number' || config.timeout <= 0)) {\n throw new TorqueIntelligenceError('Timeout must be a positive number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (\n config.cooldownRetries != null &&\n (typeof config.cooldownRetries !== 'number' || config.cooldownRetries < 0)\n ) {\n throw new TorqueIntelligenceError('cooldownRetries must be a non-negative number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n}\n\nfunction toHttpConfig(config: TorqueIntelligenceOptions): TorqueIntelligenceHttpConfig {\n return {\n apiKey: config.apiKey.trim(),\n baseUrl: (config.baseUrl || 'https://app.torque.fi').replace(/\\/$/, ''),\n timeout: config.timeout ?? 30_000,\n cooldownRetries: config.cooldownRetries ?? 1,\n }\n}\n\nexport class TorqueIntelligence {\n private readonly http: TorqueIntelligenceHttpConfig\n\n constructor(config: TorqueIntelligenceOptions) {\n validateConfig(config)\n this.http = toHttpConfig(config)\n }\n\n /**\n * Primary integrator feed — normalized IntelligenceItemV1[], lanes, optional brief.\n * GET /api/v1/intelligence/feed\n */\n async getFeed(params?: GetIntelligenceFeedParams): Promise<IntelligenceFeedResponseV1> {\n return torqueIntelligenceGet<IntelligenceFeedResponseV1>(\n this.http,\n `/api/v1/intelligence/feed${buildFeedQuery(params)}`,\n )\n }\n\n /** Ranked trade angles (desk lane). GET /api/v1/intelligence/trade-angles */\n async getTradeAngles(params?: GetTradeAnglesParams): Promise<TradeAnglesResponseV1> {\n return torqueIntelligenceGet<TradeAnglesResponseV1>(\n this.http,\n `/api/v1/intelligence/trade-angles${buildTradeAnglesQuery(params)}`,\n )\n }\n\n /** Timely macro/crypto signals. GET /api/v1/intelligence/happening-now */\n async getHappeningNow(params?: GetHappeningNowParams): Promise<HappeningNowResponseV1> {\n return torqueIntelligenceGet<HappeningNowResponseV1>(\n this.http,\n `/api/v1/intelligence/happening-now${buildHappeningNowQuery(params)}`,\n )\n }\n\n /**\n * Yield Spotlight market APY + optional personalized idle-cash ideas.\n * GET /api/v1/opportunities/yield\n */\n async getYieldOpportunities(\n params?: GetYieldOpportunitiesParams,\n ): Promise<YieldOpportunitiesResponseV1> {\n return torqueIntelligenceGet<YieldOpportunitiesResponseV1>(\n this.http,\n `/api/v1/opportunities/yield${buildYieldOpportunitiesQuery(params)}`,\n )\n }\n\n /**\n * Lend/Borrow catalog rates — supply APY and borrow APR per market row.\n * GET /api/v1/opportunities/lending\n */\n async getLendingOpportunities(\n params?: GetLendingOpportunitiesParams,\n ): Promise<LendingOpportunitiesResponseV1> {\n return torqueIntelligenceGet<LendingOpportunitiesResponseV1>(\n this.http,\n `/api/v1/opportunities/lending${buildLendingOpportunitiesQuery(params)}`,\n )\n }\n\n /** Hyperliquid funding radar — GET /api/v1/widgets/funding-radar */\n async getFundingRadarWidget(): Promise<FundingRadarWidgetResponseV1> {\n return torqueIntelligenceGet<FundingRadarWidgetResponseV1>(\n this.http,\n '/api/v1/widgets/funding-radar',\n )\n }\n\n /** Upcoming earnings spotlight — GET /api/v1/widgets/earnings-spotlight */\n async getEarningsSpotlightWidget(): Promise<EarningsSpotlightWidgetResponseV1> {\n return torqueIntelligenceGet<EarningsSpotlightWidgetResponseV1>(\n this.http,\n '/api/v1/widgets/earnings-spotlight',\n )\n }\n\n /** Capability manifest probe. GET /api/v1/capabilities */\n async getCapabilities(): Promise<TorqueCapabilitiesProbe> {\n return torqueIntelligenceGet<TorqueCapabilitiesProbe>(this.http, '/api/v1/capabilities')\n }\n\n /**\n * Throws if the server manifest is older than the SDK's expected Intelligence schema version.\n */\n assertManifestCompatibility(manifestVersion: number): void {\n if (manifestVersion < INTELLIGENCE_MANIFEST_VERSION) {\n throw new TorqueIntelligenceError(\n `Server manifest v${manifestVersion} is older than client expectation v${INTELLIGENCE_MANIFEST_VERSION}`,\n {\n code: 'MANIFEST_MISMATCH',\n statusCode: 400,\n details: {\n serverVersion: manifestVersion,\n clientVersion: INTELLIGENCE_MANIFEST_VERSION,\n },\n },\n )\n }\n }\n}\n\nexport function createTorqueIntelligence(config: TorqueIntelligenceOptions): TorqueIntelligence {\n return new TorqueIntelligence(config)\n}\n\n/**\n * Reads TORQUE_API_KEY and optional TORQUE_BASE_URL from the environment.\n */\nexport function createTorqueIntelligenceFromEnv(\n overrides?: Partial<TorqueIntelligenceOptions>,\n): TorqueIntelligence {\n const apiKey = process.env.TORQUE_API_KEY || overrides?.apiKey\n if (!apiKey) {\n throw new TorqueIntelligenceError('TORQUE_API_KEY environment variable is required', {\n code: 'MISSING_ENV_VARS',\n statusCode: 400,\n })\n }\n\n return new TorqueIntelligence({\n apiKey,\n baseUrl: process.env.TORQUE_BASE_URL || overrides?.baseUrl,\n timeout: overrides?.timeout,\n cooldownRetries: overrides?.cooldownRetries,\n })\n}\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -131,6 +131,37 @@ function buildHappeningNowQuery(params = {}) {
131
131
  const qs = sp.toString();
132
132
  return qs ? `?${qs}` : '';
133
133
  }
134
+ function buildYieldOpportunitiesQuery(params = {}) {
135
+ const sp = new URLSearchParams();
136
+ if (params.walletAddress?.trim()) {
137
+ sp.set('walletAddress', params.walletAddress.trim());
138
+ }
139
+ if (params.minIdleUsd != null && Number.isFinite(params.minIdleUsd)) {
140
+ sp.set('minIdleUsd', String(params.minIdleUsd));
141
+ }
142
+ if (params.maxPersonalized != null && Number.isFinite(params.maxPersonalized)) {
143
+ sp.set('maxPersonalized', String(params.maxPersonalized));
144
+ }
145
+ const qs = sp.toString();
146
+ return qs ? `?${qs}` : '';
147
+ }
148
+ function buildLendingOpportunitiesQuery(params = {}) {
149
+ const sp = new URLSearchParams();
150
+ if (params.chainId != null && Number.isFinite(params.chainId)) {
151
+ sp.set('chainId', String(params.chainId));
152
+ }
153
+ if (params.tokenFilter?.trim()) {
154
+ sp.set('tokenFilter', params.tokenFilter.trim());
155
+ }
156
+ if (params.protocol?.trim()) {
157
+ sp.set('protocol', params.protocol.trim());
158
+ }
159
+ if (params.limit != null && Number.isFinite(params.limit)) {
160
+ sp.set('limit', String(params.limit));
161
+ }
162
+ const qs = sp.toString();
163
+ return qs ? `?${qs}` : '';
164
+ }
134
165
 
135
166
  function validateConfig(config) {
136
167
  if (!config.apiKey?.trim()) {
@@ -181,6 +212,28 @@ class TorqueIntelligence {
181
212
  async getHappeningNow(params) {
182
213
  return torqueIntelligenceGet(this.http, `/api/v1/intelligence/happening-now${buildHappeningNowQuery(params)}`);
183
214
  }
215
+ /**
216
+ * Yield Spotlight market APY + optional personalized idle-cash ideas.
217
+ * GET /api/v1/opportunities/yield
218
+ */
219
+ async getYieldOpportunities(params) {
220
+ return torqueIntelligenceGet(this.http, `/api/v1/opportunities/yield${buildYieldOpportunitiesQuery(params)}`);
221
+ }
222
+ /**
223
+ * Lend/Borrow catalog rates — supply APY and borrow APR per market row.
224
+ * GET /api/v1/opportunities/lending
225
+ */
226
+ async getLendingOpportunities(params) {
227
+ return torqueIntelligenceGet(this.http, `/api/v1/opportunities/lending${buildLendingOpportunitiesQuery(params)}`);
228
+ }
229
+ /** Hyperliquid funding radar — GET /api/v1/widgets/funding-radar */
230
+ async getFundingRadarWidget() {
231
+ return torqueIntelligenceGet(this.http, '/api/v1/widgets/funding-radar');
232
+ }
233
+ /** Upcoming earnings spotlight — GET /api/v1/widgets/earnings-spotlight */
234
+ async getEarningsSpotlightWidget() {
235
+ return torqueIntelligenceGet(this.http, '/api/v1/widgets/earnings-spotlight');
236
+ }
184
237
  /** Capability manifest probe. GET /api/v1/capabilities */
185
238
  async getCapabilities() {
186
239
  return torqueIntelligenceGet(this.http, '/api/v1/capabilities');
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/errors.ts","../src/http.ts","../src/query.ts","../src/index.ts"],"sourcesContent":["export interface TorqueIntelligenceErrorDetails {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n}\n\nexport class TorqueIntelligenceError extends Error {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n\n constructor(message: string, options: TorqueIntelligenceErrorDetails) {\n super(message)\n this.name = 'TorqueIntelligenceError'\n this.code = options.code\n this.statusCode = options.statusCode\n this.details = options.details\n this.retryAfterMs = options.retryAfterMs\n Object.setPrototypeOf(this, TorqueIntelligenceError.prototype)\n }\n}\n\nexport function parseTorqueV1ErrorBody(\n body: unknown,\n statusCode: number,\n fallbackMessage: string,\n): TorqueIntelligenceError {\n const envelope = body as { error?: { code?: string; message?: string; details?: Record<string, unknown> } } | null\n const err = envelope?.error\n const code = typeof err?.code === 'string' ? err.code : 'API_ERROR'\n const message = typeof err?.message === 'string' ? err.message : fallbackMessage\n const details = err?.details\n const retryAfterRaw = details?.retryAfterMs\n const retryAfterMs =\n code === 'COOLDOWN' && typeof retryAfterRaw === 'number' && Number.isFinite(retryAfterRaw)\n ? retryAfterRaw\n : undefined\n\n return new TorqueIntelligenceError(message, {\n code,\n statusCode,\n details,\n retryAfterMs,\n })\n}\n","import { parseTorqueV1ErrorBody, TorqueIntelligenceError } from './errors'\n\nexport interface TorqueIntelligenceHttpConfig {\n apiKey: string\n baseUrl: string\n timeout: number\n cooldownRetries: number\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function torqueIntelligenceGet<T>(\n config: TorqueIntelligenceHttpConfig,\n path: string,\n attempt = 0,\n): Promise<T> {\n const url = `${config.baseUrl}${path}`\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), config.timeout)\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n },\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n const body: unknown = await response.json().catch(() => ({}))\n\n if (!response.ok) {\n const error = parseTorqueV1ErrorBody(\n body,\n response.status,\n `HTTP ${response.status}: ${response.statusText}`,\n )\n\n if (\n error.code === 'COOLDOWN' &&\n error.retryAfterMs != null &&\n attempt < config.cooldownRetries\n ) {\n await sleep(error.retryAfterMs)\n return torqueIntelligenceGet<T>(config, path, attempt + 1)\n }\n\n throw error\n }\n\n return body as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TorqueIntelligenceError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TorqueIntelligenceError('Request timeout', {\n code: 'TIMEOUT',\n statusCode: 408,\n })\n }\n throw new TorqueIntelligenceError(error.message, {\n code: 'NETWORK_ERROR',\n statusCode: 500,\n })\n }\n\n throw new TorqueIntelligenceError('Request failed', {\n code: 'UNKNOWN_ERROR',\n statusCode: 500,\n })\n }\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n IntelligenceItemKind,\n IntelligenceLaneId,\n} from '@torquefi/types/intelligence'\n\nfunction appendCsv(\n params: URLSearchParams,\n key: string,\n values: readonly string[] | undefined,\n): void {\n if (values?.length) {\n params.set(key, values.join(','))\n }\n}\n\nexport function buildFeedQuery(params: GetIntelligenceFeedParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n appendCsv(sp, 'lanes', params.lanes as IntelligenceLaneId[] | undefined)\n appendCsv(sp, 'kinds', params.kinds as IntelligenceItemKind[] | undefined)\n if (params.limit != null && Number.isFinite(params.limit)) {\n sp.set('limit', String(params.limit))\n }\n if (params.includeBrief) {\n sp.set('includeBrief', '1')\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildTradeAnglesQuery(params: GetTradeAnglesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildHappeningNowQuery(params: GetHappeningNowParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\nimport type { TorqueCapabilitiesProbe, TorquePlatformClientConfig } from '@torquefi/types/platform'\nimport { INTELLIGENCE_MANIFEST_VERSION } from '@torquefi/types/intelligence'\n\nimport { TorqueIntelligenceError } from './errors'\nimport { torqueIntelligenceGet, type TorqueIntelligenceHttpConfig } from './http'\nimport {\n buildFeedQuery,\n buildHappeningNowQuery,\n buildTradeAnglesQuery,\n} from './query'\n\nexport interface TorqueIntelligenceOptions extends TorquePlatformClientConfig {\n /** Automatic retries after 429 COOLDOWN (default 1). */\n cooldownRetries?: number\n}\n\nexport type { TorquePlatformClientConfig as TorqueIntelligenceConfig } from '@torquefi/types/platform'\n\nexport { TorqueIntelligenceError }\nexport type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n IntelligenceItemV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\n\nfunction validateConfig(config: TorqueIntelligenceOptions): void {\n if (!config.apiKey?.trim()) {\n throw new TorqueIntelligenceError('API key is required', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (config.timeout != null && (typeof config.timeout !== 'number' || config.timeout <= 0)) {\n throw new TorqueIntelligenceError('Timeout must be a positive number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (\n config.cooldownRetries != null &&\n (typeof config.cooldownRetries !== 'number' || config.cooldownRetries < 0)\n ) {\n throw new TorqueIntelligenceError('cooldownRetries must be a non-negative number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n}\n\nfunction toHttpConfig(config: TorqueIntelligenceOptions): TorqueIntelligenceHttpConfig {\n return {\n apiKey: config.apiKey.trim(),\n baseUrl: (config.baseUrl || 'https://app.torque.fi').replace(/\\/$/, ''),\n timeout: config.timeout ?? 30_000,\n cooldownRetries: config.cooldownRetries ?? 1,\n }\n}\n\nexport class TorqueIntelligence {\n private readonly http: TorqueIntelligenceHttpConfig\n\n constructor(config: TorqueIntelligenceOptions) {\n validateConfig(config)\n this.http = toHttpConfig(config)\n }\n\n /**\n * Primary integrator feed — normalized IntelligenceItemV1[], lanes, optional brief.\n * GET /api/v1/intelligence/feed\n */\n async getFeed(params?: GetIntelligenceFeedParams): Promise<IntelligenceFeedResponseV1> {\n return torqueIntelligenceGet<IntelligenceFeedResponseV1>(\n this.http,\n `/api/v1/intelligence/feed${buildFeedQuery(params)}`,\n )\n }\n\n /** Ranked trade angles (desk lane). GET /api/v1/intelligence/trade-angles */\n async getTradeAngles(params?: GetTradeAnglesParams): Promise<TradeAnglesResponseV1> {\n return torqueIntelligenceGet<TradeAnglesResponseV1>(\n this.http,\n `/api/v1/intelligence/trade-angles${buildTradeAnglesQuery(params)}`,\n )\n }\n\n /** Timely macro/crypto signals. GET /api/v1/intelligence/happening-now */\n async getHappeningNow(params?: GetHappeningNowParams): Promise<HappeningNowResponseV1> {\n return torqueIntelligenceGet<HappeningNowResponseV1>(\n this.http,\n `/api/v1/intelligence/happening-now${buildHappeningNowQuery(params)}`,\n )\n }\n\n /** Capability manifest probe. GET /api/v1/capabilities */\n async getCapabilities(): Promise<TorqueCapabilitiesProbe> {\n return torqueIntelligenceGet<TorqueCapabilitiesProbe>(this.http, '/api/v1/capabilities')\n }\n\n /**\n * Throws if the server manifest is older than the SDK's expected Intelligence schema version.\n */\n assertManifestCompatibility(manifestVersion: number): void {\n if (manifestVersion < INTELLIGENCE_MANIFEST_VERSION) {\n throw new TorqueIntelligenceError(\n `Server manifest v${manifestVersion} is older than client expectation v${INTELLIGENCE_MANIFEST_VERSION}`,\n {\n code: 'MANIFEST_MISMATCH',\n statusCode: 400,\n details: {\n serverVersion: manifestVersion,\n clientVersion: INTELLIGENCE_MANIFEST_VERSION,\n },\n },\n )\n }\n }\n}\n\nexport function createTorqueIntelligence(config: TorqueIntelligenceOptions): TorqueIntelligence {\n return new TorqueIntelligence(config)\n}\n\n/**\n * Reads TORQUE_API_KEY and optional TORQUE_BASE_URL from the environment.\n */\nexport function createTorqueIntelligenceFromEnv(\n overrides?: Partial<TorqueIntelligenceOptions>,\n): TorqueIntelligence {\n const apiKey = process.env.TORQUE_API_KEY || overrides?.apiKey\n if (!apiKey) {\n throw new TorqueIntelligenceError('TORQUE_API_KEY environment variable is required', {\n code: 'MISSING_ENV_VARS',\n statusCode: 400,\n })\n }\n\n return new TorqueIntelligence({\n apiKey,\n baseUrl: process.env.TORQUE_BASE_URL || overrides?.baseUrl,\n timeout: overrides?.timeout,\n cooldownRetries: overrides?.cooldownRetries,\n })\n}\n"],"names":["INTELLIGENCE_MANIFEST_VERSION"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/errors.ts","../src/http.ts","../src/query.ts","../src/index.ts"],"sourcesContent":["export interface TorqueIntelligenceErrorDetails {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n}\n\nexport class TorqueIntelligenceError extends Error {\n code: string\n statusCode: number\n details?: Record<string, unknown>\n retryAfterMs?: number\n\n constructor(message: string, options: TorqueIntelligenceErrorDetails) {\n super(message)\n this.name = 'TorqueIntelligenceError'\n this.code = options.code\n this.statusCode = options.statusCode\n this.details = options.details\n this.retryAfterMs = options.retryAfterMs\n Object.setPrototypeOf(this, TorqueIntelligenceError.prototype)\n }\n}\n\nexport function parseTorqueV1ErrorBody(\n body: unknown,\n statusCode: number,\n fallbackMessage: string,\n): TorqueIntelligenceError {\n const envelope = body as { error?: { code?: string; message?: string; details?: Record<string, unknown> } } | null\n const err = envelope?.error\n const code = typeof err?.code === 'string' ? err.code : 'API_ERROR'\n const message = typeof err?.message === 'string' ? err.message : fallbackMessage\n const details = err?.details\n const retryAfterRaw = details?.retryAfterMs\n const retryAfterMs =\n code === 'COOLDOWN' && typeof retryAfterRaw === 'number' && Number.isFinite(retryAfterRaw)\n ? retryAfterRaw\n : undefined\n\n return new TorqueIntelligenceError(message, {\n code,\n statusCode,\n details,\n retryAfterMs,\n })\n}\n","import { parseTorqueV1ErrorBody, TorqueIntelligenceError } from './errors'\n\nexport interface TorqueIntelligenceHttpConfig {\n apiKey: string\n baseUrl: string\n timeout: number\n cooldownRetries: number\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function torqueIntelligenceGet<T>(\n config: TorqueIntelligenceHttpConfig,\n path: string,\n attempt = 0,\n): Promise<T> {\n const url = `${config.baseUrl}${path}`\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), config.timeout)\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n },\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n const body: unknown = await response.json().catch(() => ({}))\n\n if (!response.ok) {\n const error = parseTorqueV1ErrorBody(\n body,\n response.status,\n `HTTP ${response.status}: ${response.statusText}`,\n )\n\n if (\n error.code === 'COOLDOWN' &&\n error.retryAfterMs != null &&\n attempt < config.cooldownRetries\n ) {\n await sleep(error.retryAfterMs)\n return torqueIntelligenceGet<T>(config, path, attempt + 1)\n }\n\n throw error\n }\n\n return body as T\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof TorqueIntelligenceError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TorqueIntelligenceError('Request timeout', {\n code: 'TIMEOUT',\n statusCode: 408,\n })\n }\n throw new TorqueIntelligenceError(error.message, {\n code: 'NETWORK_ERROR',\n statusCode: 500,\n })\n }\n\n throw new TorqueIntelligenceError('Request failed', {\n code: 'UNKNOWN_ERROR',\n statusCode: 500,\n })\n }\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n IntelligenceItemKind,\n IntelligenceLaneId,\n} from '@torquefi/types/intelligence'\nimport type {\n GetLendingOpportunitiesParams,\n GetYieldOpportunitiesParams,\n} from '@torquefi/types/opportunities'\n\nfunction appendCsv(\n params: URLSearchParams,\n key: string,\n values: readonly string[] | undefined,\n): void {\n if (values?.length) {\n params.set(key, values.join(','))\n }\n}\n\nexport function buildFeedQuery(params: GetIntelligenceFeedParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n appendCsv(sp, 'lanes', params.lanes as IntelligenceLaneId[] | undefined)\n appendCsv(sp, 'kinds', params.kinds as IntelligenceItemKind[] | undefined)\n if (params.limit != null && Number.isFinite(params.limit)) {\n sp.set('limit', String(params.limit))\n }\n if (params.includeBrief) {\n sp.set('includeBrief', '1')\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildTradeAnglesQuery(params: GetTradeAnglesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.force) {\n sp.set('force', '1')\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildHappeningNowQuery(params: GetHappeningNowParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildYieldOpportunitiesQuery(params: GetYieldOpportunitiesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.walletAddress?.trim()) {\n sp.set('walletAddress', params.walletAddress.trim())\n }\n if (params.minIdleUsd != null && Number.isFinite(params.minIdleUsd)) {\n sp.set('minIdleUsd', String(params.minIdleUsd))\n }\n if (params.maxPersonalized != null && Number.isFinite(params.maxPersonalized)) {\n sp.set('maxPersonalized', String(params.maxPersonalized))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n\nexport function buildLendingOpportunitiesQuery(params: GetLendingOpportunitiesParams = {}): string {\n const sp = new URLSearchParams()\n\n if (params.chainId != null && Number.isFinite(params.chainId)) {\n sp.set('chainId', String(params.chainId))\n }\n if (params.tokenFilter?.trim()) {\n sp.set('tokenFilter', params.tokenFilter.trim())\n }\n if (params.protocol?.trim()) {\n sp.set('protocol', params.protocol.trim())\n }\n if (params.limit != null && Number.isFinite(params.limit)) {\n sp.set('limit', String(params.limit))\n }\n\n const qs = sp.toString()\n return qs ? `?${qs}` : ''\n}\n","import type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\nimport type {\n GetLendingOpportunitiesParams,\n GetYieldOpportunitiesParams,\n LendingOpportunitiesResponseV1,\n YieldOpportunitiesResponseV1,\n} from '@torquefi/types/opportunities'\nimport type {\n EarningsSpotlightWidgetResponseV1,\n FundingRadarWidgetResponseV1,\n} from '@torquefi/types/widgets'\nimport type { TorqueCapabilitiesProbe, TorquePlatformClientConfig } from '@torquefi/types/platform'\nimport { INTELLIGENCE_MANIFEST_VERSION } from '@torquefi/types/intelligence'\n\nimport { TorqueIntelligenceError } from './errors'\nimport { torqueIntelligenceGet, type TorqueIntelligenceHttpConfig } from './http'\nimport {\n buildFeedQuery,\n buildHappeningNowQuery,\n buildTradeAnglesQuery,\n buildYieldOpportunitiesQuery,\n buildLendingOpportunitiesQuery,\n} from './query'\n\nexport interface TorqueIntelligenceOptions extends TorquePlatformClientConfig {\n /** Automatic retries after 429 COOLDOWN (default 1). */\n cooldownRetries?: number\n}\n\nexport type { TorquePlatformClientConfig as TorqueIntelligenceConfig } from '@torquefi/types/platform'\n\nexport { TorqueIntelligenceError }\nexport type {\n GetHappeningNowParams,\n GetIntelligenceFeedParams,\n GetTradeAnglesParams,\n HappeningNowResponseV1,\n IntelligenceFeedResponseV1,\n IntelligenceItemV1,\n TradeAnglesResponseV1,\n} from '@torquefi/types/intelligence'\nexport type {\n GetLendingOpportunitiesParams,\n GetYieldOpportunitiesParams,\n LendingOpportunitiesResponseV1,\n YieldOpportunitiesResponseV1,\n} from '@torquefi/types/opportunities'\nexport type {\n EarningsSpotlightWidgetResponseV1,\n EarningsSpotlightRowV1,\n FundingRadarWidgetResponseV1,\n FundingRadarRowV1,\n WidgetMetaV1,\n} from '@torquefi/types/widgets'\n\nfunction validateConfig(config: TorqueIntelligenceOptions): void {\n if (!config.apiKey?.trim()) {\n throw new TorqueIntelligenceError('API key is required', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (config.timeout != null && (typeof config.timeout !== 'number' || config.timeout <= 0)) {\n throw new TorqueIntelligenceError('Timeout must be a positive number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n if (\n config.cooldownRetries != null &&\n (typeof config.cooldownRetries !== 'number' || config.cooldownRetries < 0)\n ) {\n throw new TorqueIntelligenceError('cooldownRetries must be a non-negative number', {\n code: 'INVALID_CONFIG',\n statusCode: 400,\n })\n }\n}\n\nfunction toHttpConfig(config: TorqueIntelligenceOptions): TorqueIntelligenceHttpConfig {\n return {\n apiKey: config.apiKey.trim(),\n baseUrl: (config.baseUrl || 'https://app.torque.fi').replace(/\\/$/, ''),\n timeout: config.timeout ?? 30_000,\n cooldownRetries: config.cooldownRetries ?? 1,\n }\n}\n\nexport class TorqueIntelligence {\n private readonly http: TorqueIntelligenceHttpConfig\n\n constructor(config: TorqueIntelligenceOptions) {\n validateConfig(config)\n this.http = toHttpConfig(config)\n }\n\n /**\n * Primary integrator feed — normalized IntelligenceItemV1[], lanes, optional brief.\n * GET /api/v1/intelligence/feed\n */\n async getFeed(params?: GetIntelligenceFeedParams): Promise<IntelligenceFeedResponseV1> {\n return torqueIntelligenceGet<IntelligenceFeedResponseV1>(\n this.http,\n `/api/v1/intelligence/feed${buildFeedQuery(params)}`,\n )\n }\n\n /** Ranked trade angles (desk lane). GET /api/v1/intelligence/trade-angles */\n async getTradeAngles(params?: GetTradeAnglesParams): Promise<TradeAnglesResponseV1> {\n return torqueIntelligenceGet<TradeAnglesResponseV1>(\n this.http,\n `/api/v1/intelligence/trade-angles${buildTradeAnglesQuery(params)}`,\n )\n }\n\n /** Timely macro/crypto signals. GET /api/v1/intelligence/happening-now */\n async getHappeningNow(params?: GetHappeningNowParams): Promise<HappeningNowResponseV1> {\n return torqueIntelligenceGet<HappeningNowResponseV1>(\n this.http,\n `/api/v1/intelligence/happening-now${buildHappeningNowQuery(params)}`,\n )\n }\n\n /**\n * Yield Spotlight market APY + optional personalized idle-cash ideas.\n * GET /api/v1/opportunities/yield\n */\n async getYieldOpportunities(\n params?: GetYieldOpportunitiesParams,\n ): Promise<YieldOpportunitiesResponseV1> {\n return torqueIntelligenceGet<YieldOpportunitiesResponseV1>(\n this.http,\n `/api/v1/opportunities/yield${buildYieldOpportunitiesQuery(params)}`,\n )\n }\n\n /**\n * Lend/Borrow catalog rates — supply APY and borrow APR per market row.\n * GET /api/v1/opportunities/lending\n */\n async getLendingOpportunities(\n params?: GetLendingOpportunitiesParams,\n ): Promise<LendingOpportunitiesResponseV1> {\n return torqueIntelligenceGet<LendingOpportunitiesResponseV1>(\n this.http,\n `/api/v1/opportunities/lending${buildLendingOpportunitiesQuery(params)}`,\n )\n }\n\n /** Hyperliquid funding radar — GET /api/v1/widgets/funding-radar */\n async getFundingRadarWidget(): Promise<FundingRadarWidgetResponseV1> {\n return torqueIntelligenceGet<FundingRadarWidgetResponseV1>(\n this.http,\n '/api/v1/widgets/funding-radar',\n )\n }\n\n /** Upcoming earnings spotlight — GET /api/v1/widgets/earnings-spotlight */\n async getEarningsSpotlightWidget(): Promise<EarningsSpotlightWidgetResponseV1> {\n return torqueIntelligenceGet<EarningsSpotlightWidgetResponseV1>(\n this.http,\n '/api/v1/widgets/earnings-spotlight',\n )\n }\n\n /** Capability manifest probe. GET /api/v1/capabilities */\n async getCapabilities(): Promise<TorqueCapabilitiesProbe> {\n return torqueIntelligenceGet<TorqueCapabilitiesProbe>(this.http, '/api/v1/capabilities')\n }\n\n /**\n * Throws if the server manifest is older than the SDK's expected Intelligence schema version.\n */\n assertManifestCompatibility(manifestVersion: number): void {\n if (manifestVersion < INTELLIGENCE_MANIFEST_VERSION) {\n throw new TorqueIntelligenceError(\n `Server manifest v${manifestVersion} is older than client expectation v${INTELLIGENCE_MANIFEST_VERSION}`,\n {\n code: 'MANIFEST_MISMATCH',\n statusCode: 400,\n details: {\n serverVersion: manifestVersion,\n clientVersion: INTELLIGENCE_MANIFEST_VERSION,\n },\n },\n )\n }\n }\n}\n\nexport function createTorqueIntelligence(config: TorqueIntelligenceOptions): TorqueIntelligence {\n return new TorqueIntelligence(config)\n}\n\n/**\n * Reads TORQUE_API_KEY and optional TORQUE_BASE_URL from the environment.\n */\nexport function createTorqueIntelligenceFromEnv(\n overrides?: Partial<TorqueIntelligenceOptions>,\n): TorqueIntelligence {\n const apiKey = process.env.TORQUE_API_KEY || overrides?.apiKey\n if (!apiKey) {\n throw new TorqueIntelligenceError('TORQUE_API_KEY environment variable is required', {\n code: 'MISSING_ENV_VARS',\n statusCode: 400,\n })\n }\n\n return new TorqueIntelligence({\n apiKey,\n baseUrl: process.env.TORQUE_BASE_URL || overrides?.baseUrl,\n timeout: overrides?.timeout,\n cooldownRetries: overrides?.cooldownRetries,\n })\n}\n"],"names":["INTELLIGENCE_MANIFEST_VERSION"],"mappings":"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"}
package/dist/query.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import type { GetHappeningNowParams, GetIntelligenceFeedParams, GetTradeAnglesParams } from '@torquefi/types/intelligence';
2
+ import type { GetLendingOpportunitiesParams, GetYieldOpportunitiesParams } from '@torquefi/types/opportunities';
2
3
  export declare function buildFeedQuery(params?: GetIntelligenceFeedParams): string;
3
4
  export declare function buildTradeAnglesQuery(params?: GetTradeAnglesParams): string;
4
5
  export declare function buildHappeningNowQuery(params?: GetHappeningNowParams): string;
6
+ export declare function buildYieldOpportunitiesQuery(params?: GetYieldOpportunitiesParams): string;
7
+ export declare function buildLendingOpportunitiesQuery(params?: GetLendingOpportunitiesParams): string;
5
8
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EAGrB,MAAM,8BAA8B,CAAA;AAYrC,wBAAgB,cAAc,CAAC,MAAM,GAAE,yBAA8B,GAAG,MAAM,CAuB7E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,oBAAyB,GAAG,MAAM,CAY/E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,qBAA0B,GAAG,MAAM,CASjF"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EAGrB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EACV,6BAA6B,EAC7B,2BAA2B,EAC5B,MAAM,+BAA+B,CAAA;AAYtC,wBAAgB,cAAc,CAAC,MAAM,GAAE,yBAA8B,GAAG,MAAM,CAuB7E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,oBAAyB,GAAG,MAAM,CAY/E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,qBAA0B,GAAG,MAAM,CASjF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,GAAE,2BAAgC,GAAG,MAAM,CAe7F;AAED,wBAAgB,8BAA8B,CAAC,MAAM,GAAE,6BAAkC,GAAG,MAAM,CAkBjG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "torque-intelligence",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Official Torque Intelligence SDK — read-only feed client for Platform API v1",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -42,7 +42,7 @@
42
42
  "directory": "packages/torque-intelligence"
43
43
  },
44
44
  "dependencies": {
45
- "@torquefi/types": "^0.1.0"
45
+ "@torquefi/types": "^0.1.2"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@rollup/plugin-typescript": "^12.1.4",