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 +4 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +53 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/query.d.ts +3 -0
- package/dist/query.d.ts.map +1 -1
- package/package.json +2 -2
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
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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');
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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":";;AAOM,MAAO,uBAAwB,SAAQ,KAAK,CAAA;IAMhD,WAAA,CAAY,OAAe,EAAE,OAAuC,EAAA;QAClE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,yBAAyB;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,uBAAuB,CAAC,SAAS,CAAC;IAChE;AACD;SAEe,sBAAsB,CACpC,IAAa,EACb,UAAkB,EAClB,eAAuB,EAAA;IAEvB,MAAM,QAAQ,GAAG,IAAiG;AAClH,IAAA,MAAM,GAAG,GAAG,QAAQ,EAAE,KAAK;AAC3B,IAAA,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,GAAG,GAAG,CAAC,IAAI,GAAG,WAAW;AACnE,IAAA,MAAM,OAAO,GAAG,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,GAAG,CAAC,OAAO,GAAG,eAAe;AAChF,IAAA,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO;AAC5B,IAAA,MAAM,aAAa,GAAG,OAAO,EAAE,YAAY;AAC3C,IAAA,MAAM,YAAY,GAChB,IAAI,KAAK,UAAU,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa;AACvF,UAAE;UACA,SAAS;AAEf,IAAA,OAAO,IAAI,uBAAuB,CAAC,OAAO,EAAE;QAC1C,IAAI;QACJ,UAAU;QACV,OAAO;QACP,YAAY;AACb,KAAA,CAAC;AACJ;;ACrCA,SAAS,KAAK,CAAC,EAAU,EAAA;AACvB,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D;AAEO,eAAe,qBAAqB,CACzC,MAAoC,EACpC,IAAY,EACZ,OAAO,GAAG,CAAC,EAAA;IAEX,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,OAAO,CAAA,EAAG,IAAI,CAAA,CAAE;AACtC,IAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,IAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;AAEtE,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,EAAE,kBAAkB;AAC1B,gBAAA,aAAa,EAAE,CAAA,OAAA,EAAU,MAAM,CAAC,MAAM,CAAA,CAAE;AACzC,aAAA;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;AAC1B,SAAA,CAAC;QAEF,YAAY,CAAC,SAAS,CAAC;AAEvB,QAAA,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAE7D,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,sBAAsB,CAClC,IAAI,EACJ,QAAQ,CAAC,MAAM,EACf,QAAQ,QAAQ,CAAC,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAC,UAAU,CAAA,CAAE,CAClD;AAED,YAAA,IACE,KAAK,CAAC,IAAI,KAAK,UAAU;gBACzB,KAAK,CAAC,YAAY,IAAI,IAAI;AAC1B,gBAAA,OAAO,GAAG,MAAM,CAAC,eAAe,EAChC;AACA,gBAAA,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC/B,OAAO,qBAAqB,CAAI,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;YAC5D;AAEA,YAAA,MAAM,KAAK;QACb;AAEA,QAAA,OAAO,IAAS;IAClB;IAAE,OAAO,KAAK,EAAE;QACd,YAAY,CAAC,SAAS,CAAC;AAEvB,QAAA,IAAI,KAAK,YAAY,uBAAuB,EAAE;AAC5C,YAAA,MAAM,KAAK;QACb;AAEA,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AAC/B,gBAAA,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE;AACnD,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,GAAG;AAChB,iBAAA,CAAC;YACJ;AACA,YAAA,MAAM,IAAI,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE;AAC/C,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,UAAU,EAAE,GAAG;AAChB,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE;AAClD,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;IACJ;AACF;;ACrEA,SAAS,SAAS,CAChB,MAAuB,EACvB,GAAW,EACX,MAAqC,EAAA;AAErC,IAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AAClB,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC;AACF;AAEM,SAAU,cAAc,CAAC,MAAA,GAAoC,EAAE,EAAA;AACnE,IAAA,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE;AAEhC,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE;AAChC,QAAA,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACtD;AACA,IAAA,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC7D,QAAA,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C;IACA,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAyC,CAAC;IACxE,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAA2C,CAAC;AAC1E,IAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACzD,QAAA,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC;AACA,IAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,QAAA,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC;IAC7B;AACA,IAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,QAAA,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB;AAEA,IAAA,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,GAAG,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,GAAG,EAAE;AAC3B;AAEM,SAAU,qBAAqB,CAAC,MAAA,GAA+B,EAAE,EAAA;AACrE,IAAA,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE;AAEhC,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE;AAChC,QAAA,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACtD;AACA,IAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,QAAA,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB;AAEA,IAAA,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,GAAG,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,GAAG,EAAE;AAC3B;AAEM,SAAU,sBAAsB,CAAC,MAAA,GAAgC,EAAE,EAAA;AACvE,IAAA,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE;AAEhC,IAAA,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC7D,QAAA,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C;AAEA,IAAA,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,GAAG,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,GAAG,EAAE;AAC3B;AAEM,SAAU,4BAA4B,CAAC,MAAA,GAAsC,EAAE,EAAA;AACnF,IAAA,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE;AAEhC,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE;AAChC,QAAA,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACtD;AACA,IAAA,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACnE,QAAA,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjD;AACA,IAAA,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE;AAC7E,QAAA,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC3D;AAEA,IAAA,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,GAAG,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,GAAG,EAAE;AAC3B;AAEM,SAAU,8BAA8B,CAAC,MAAA,GAAwC,EAAE,EAAA;AACvF,IAAA,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE;AAEhC,IAAA,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC7D,QAAA,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C;AACA,IAAA,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;AAC9B,QAAA,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAClD;AACA,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AAC3B,QAAA,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5C;AACA,IAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACzD,QAAA,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC;AAEA,IAAA,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,GAAG,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,GAAG,EAAE;AAC3B;;AC7CA,SAAS,cAAc,CAAC,MAAiC,EAAA;IACvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;AAC1B,QAAA,MAAM,IAAI,uBAAuB,CAAC,qBAAqB,EAAE;AACvD,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;IACJ;IACA,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,KAAK,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE;AACzF,QAAA,MAAM,IAAI,uBAAuB,CAAC,mCAAmC,EAAE;AACrE,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;IACJ;AACA,IAAA,IACE,MAAM,CAAC,eAAe,IAAI,IAAI;AAC9B,SAAC,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,EAC1E;AACA,QAAA,MAAM,IAAI,uBAAuB,CAAC,+CAA+C,EAAE;AACjF,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;IACJ;AACF;AAEA,SAAS,YAAY,CAAC,MAAiC,EAAA;IACrD,OAAO;AACL,QAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AAC5B,QAAA,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,uBAAuB,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACvE,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAM;AACjC,QAAA,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC;KAC7C;AACH;MAEa,kBAAkB,CAAA;AAG7B,IAAA,WAAA,CAAY,MAAiC,EAAA;QAC3C,cAAc,CAAC,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;IAClC;AAEA;;;AAGG;IACH,MAAM,OAAO,CAAC,MAAkC,EAAA;AAC9C,QAAA,OAAO,qBAAqB,CAC1B,IAAI,CAAC,IAAI,EACT,CAAA,yBAAA,EAA4B,cAAc,CAAC,MAAM,CAAC,CAAA,CAAE,CACrD;IACH;;IAGA,MAAM,cAAc,CAAC,MAA6B,EAAA;AAChD,QAAA,OAAO,qBAAqB,CAC1B,IAAI,CAAC,IAAI,EACT,CAAA,iCAAA,EAAoC,qBAAqB,CAAC,MAAM,CAAC,CAAA,CAAE,CACpE;IACH;;IAGA,MAAM,eAAe,CAAC,MAA8B,EAAA;AAClD,QAAA,OAAO,qBAAqB,CAC1B,IAAI,CAAC,IAAI,EACT,CAAA,kCAAA,EAAqC,sBAAsB,CAAC,MAAM,CAAC,CAAA,CAAE,CACtE;IACH;AAEA;;;AAGG;IACH,MAAM,qBAAqB,CACzB,MAAoC,EAAA;AAEpC,QAAA,OAAO,qBAAqB,CAC1B,IAAI,CAAC,IAAI,EACT,CAAA,2BAAA,EAA8B,4BAA4B,CAAC,MAAM,CAAC,CAAA,CAAE,CACrE;IACH;AAEA;;;AAGG;IACH,MAAM,uBAAuB,CAC3B,MAAsC,EAAA;AAEtC,QAAA,OAAO,qBAAqB,CAC1B,IAAI,CAAC,IAAI,EACT,CAAA,6BAAA,EAAgC,8BAA8B,CAAC,MAAM,CAAC,CAAA,CAAE,CACzE;IACH;;AAGA,IAAA,MAAM,qBAAqB,GAAA;QACzB,OAAO,qBAAqB,CAC1B,IAAI,CAAC,IAAI,EACT,+BAA+B,CAChC;IACH;;AAGA,IAAA,MAAM,0BAA0B,GAAA;QAC9B,OAAO,qBAAqB,CAC1B,IAAI,CAAC,IAAI,EACT,oCAAoC,CACrC;IACH;;AAGA,IAAA,MAAM,eAAe,GAAA;QACnB,OAAO,qBAAqB,CAA0B,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC;IAC1F;AAEA;;AAEG;AACH,IAAA,2BAA2B,CAAC,eAAuB,EAAA;AACjD,QAAA,IAAI,eAAe,GAAG,6BAA6B,EAAE;YACnD,MAAM,IAAI,uBAAuB,CAC/B,CAAA,iBAAA,EAAoB,eAAe,CAAA,mCAAA,EAAsC,6BAA6B,EAAE,EACxG;AACE,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,UAAU,EAAE,GAAG;AACf,gBAAA,OAAO,EAAE;AACP,oBAAA,aAAa,EAAE,eAAe;AAC9B,oBAAA,aAAa,EAAE,6BAA6B;AAC7C,iBAAA;AACF,aAAA,CACF;QACH;IACF;AACD;AAEK,SAAU,wBAAwB,CAAC,MAAiC,EAAA;AACxE,IAAA,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC;AACvC;AAEA;;AAEG;AACG,SAAU,+BAA+B,CAC7C,SAA8C,EAAA;IAE9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,EAAE,MAAM;IAC9D,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,MAAM,IAAI,uBAAuB,CAAC,iDAAiD,EAAE;AACnF,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;IACJ;IAEA,OAAO,IAAI,kBAAkB,CAAC;QAC5B,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,EAAE,OAAO;QAC1D,OAAO,EAAE,SAAS,EAAE,OAAO;QAC3B,eAAe,EAAE,SAAS,EAAE,eAAe;AAC5C,KAAA,CAAC;AACJ;;;;"}
|
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
|
package/dist/query.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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.
|
|
45
|
+
"@torquefi/types": "^0.1.2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@rollup/plugin-typescript": "^12.1.4",
|