@dimes-dot-fi/sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-BRANC7OH.mjs +283 -0
- package/dist/chunk-BRANC7OH.mjs.map +1 -0
- package/dist/chunk-JGK55KDX.cjs +283 -0
- package/dist/chunk-JGK55KDX.cjs.map +1 -0
- package/dist/chunk-LQ5LLBR6.mjs +312 -0
- package/dist/chunk-LQ5LLBR6.mjs.map +1 -0
- package/dist/chunk-XXTTXLCT.cjs +312 -0
- package/dist/chunk-XXTTXLCT.cjs.map +1 -0
- package/dist/contract/index.cjs +670 -0
- package/dist/contract/index.cjs.map +1 -0
- package/dist/contract/index.d.cts +83 -0
- package/dist/contract/index.d.ts +83 -0
- package/dist/contract/index.mjs +670 -0
- package/dist/contract/index.mjs.map +1 -0
- package/dist/dimes-client-BLIAuK4M.d.cts +1241 -0
- package/dist/dimes-client-BLIAuK4M.d.ts +1241 -0
- package/dist/dimes-error-BtDMi3Kv.d.ts +26 -0
- package/dist/dimes-error-DxzsfQo6.d.cts +26 -0
- package/dist/index.cjs +275 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +21 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.mjs +275 -0
- package/dist/index.mjs.map +1 -0
- package/dist/quote-ByZJRoPf.d.cts +29 -0
- package/dist/quote-CgmTKnIZ.d.ts +29 -0
- package/dist/react/index.cjs +166 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +41 -0
- package/dist/react/index.d.ts +41 -0
- package/dist/react/index.mjs +166 -0
- package/dist/react/index.mjs.map +1 -0
- package/package.json +111 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildQuoteParams,
|
|
3
|
+
executeQuote,
|
|
4
|
+
hintAdjustment,
|
|
5
|
+
marketMovedCodes,
|
|
6
|
+
quoteErrorHint
|
|
7
|
+
} from "./chunk-BRANC7OH.mjs";
|
|
8
|
+
import {
|
|
9
|
+
DimesApiError,
|
|
10
|
+
DimesContractError,
|
|
11
|
+
DimesError,
|
|
12
|
+
formatErrorMessage,
|
|
13
|
+
resolveFriendlyMessage
|
|
14
|
+
} from "./chunk-LQ5LLBR6.mjs";
|
|
15
|
+
|
|
16
|
+
// src/client/dimes-client.ts
|
|
17
|
+
import { decamelizeKeys } from "humps";
|
|
18
|
+
|
|
19
|
+
// src/client/http.ts
|
|
20
|
+
import { camelizeKeys } from "humps";
|
|
21
|
+
var HTTP_UNAUTHORIZED = 401;
|
|
22
|
+
var HTTP_TOO_MANY_REQUESTS = 429;
|
|
23
|
+
var DEFAULT_MAX_RETRIES = 3;
|
|
24
|
+
var DEFAULT_MAX_RETRY_DELAY_MS = 6e4;
|
|
25
|
+
var DEFAULT_RETRY_DELAY_MS = 1e3;
|
|
26
|
+
var BACKOFF_FACTOR = 2;
|
|
27
|
+
var MS_PER_SECOND = 1e3;
|
|
28
|
+
function sleep(ms) {
|
|
29
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
30
|
+
}
|
|
31
|
+
function parseRetryAfterMs(header, attempt) {
|
|
32
|
+
const fallbackMs = DEFAULT_RETRY_DELAY_MS * BACKOFF_FACTOR ** attempt;
|
|
33
|
+
if (!header) {
|
|
34
|
+
return fallbackMs;
|
|
35
|
+
}
|
|
36
|
+
const seconds = Number(header);
|
|
37
|
+
if (!Number.isNaN(seconds) && seconds >= 0) {
|
|
38
|
+
return seconds * MS_PER_SECOND;
|
|
39
|
+
}
|
|
40
|
+
const dateMs = Date.parse(header);
|
|
41
|
+
if (!Number.isNaN(dateMs)) {
|
|
42
|
+
return Math.max(0, dateMs - Date.now());
|
|
43
|
+
}
|
|
44
|
+
return fallbackMs;
|
|
45
|
+
}
|
|
46
|
+
async function throwFromResponse(response) {
|
|
47
|
+
const rawBody = await response.text();
|
|
48
|
+
let parsed;
|
|
49
|
+
try {
|
|
50
|
+
parsed = rawBody ? JSON.parse(rawBody) : null;
|
|
51
|
+
} catch {
|
|
52
|
+
parsed = null;
|
|
53
|
+
}
|
|
54
|
+
const code = parsed?.error?.code ?? "unknown_error";
|
|
55
|
+
const type = parsed?.error?.type ?? null;
|
|
56
|
+
const message = parsed?.error?.message ?? code ?? rawBody ?? `API error ${response.status}`;
|
|
57
|
+
const rawParams = parsed?.error?.params;
|
|
58
|
+
const params = rawParams ? camelizeKeys(rawParams) : null;
|
|
59
|
+
throw new DimesApiError({ status: response.status, code, type, message, params });
|
|
60
|
+
}
|
|
61
|
+
var HttpClient = class {
|
|
62
|
+
baseUrl;
|
|
63
|
+
auth;
|
|
64
|
+
fetchFn;
|
|
65
|
+
maxRetries;
|
|
66
|
+
maxRetryDelayMs;
|
|
67
|
+
constructor(options) {
|
|
68
|
+
this.baseUrl = options.baseUrl;
|
|
69
|
+
this.auth = options.auth;
|
|
70
|
+
this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
71
|
+
this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
72
|
+
this.maxRetryDelayMs = options.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS;
|
|
73
|
+
}
|
|
74
|
+
async request(path, options) {
|
|
75
|
+
const authHeaders = await this.auth.getHeaders();
|
|
76
|
+
const headers = {
|
|
77
|
+
"Content-Type": "application/json",
|
|
78
|
+
...authHeaders,
|
|
79
|
+
...options?.headers
|
|
80
|
+
};
|
|
81
|
+
let response = await this.fetchFn(`${this.baseUrl}${path}`, {
|
|
82
|
+
...options,
|
|
83
|
+
headers
|
|
84
|
+
});
|
|
85
|
+
if (response.status === HTTP_UNAUTHORIZED && this.auth.refresh) {
|
|
86
|
+
await this.auth.refresh();
|
|
87
|
+
const retryHeaders = await this.auth.getHeaders();
|
|
88
|
+
response = await this.fetchFn(`${this.baseUrl}${path}`, {
|
|
89
|
+
...options,
|
|
90
|
+
headers: { ...headers, ...retryHeaders }
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
for (let attempt = 0; response.status === HTTP_TOO_MANY_REQUESTS && attempt < this.maxRetries; attempt++) {
|
|
94
|
+
const delayMs = parseRetryAfterMs(response.headers.get("retry-after"), attempt);
|
|
95
|
+
if (delayMs > this.maxRetryDelayMs) {
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
await sleep(delayMs);
|
|
99
|
+
const freshAuth = await this.auth.getHeaders();
|
|
100
|
+
response = await this.fetchFn(`${this.baseUrl}${path}`, {
|
|
101
|
+
...options,
|
|
102
|
+
headers: { ...headers, ...freshAuth }
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (!response.ok) {
|
|
106
|
+
await throwFromResponse(response);
|
|
107
|
+
}
|
|
108
|
+
return camelizeKeys(await response.json());
|
|
109
|
+
}
|
|
110
|
+
async requestList(path, options) {
|
|
111
|
+
const result = await this.request(path, options);
|
|
112
|
+
return result.data;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
// src/client/dimes-client.ts
|
|
117
|
+
function buildQueryFromEntries(entries) {
|
|
118
|
+
const filtered = entries.filter(([, v]) => v !== void 0 && v !== null);
|
|
119
|
+
if (filtered.length === 0) {
|
|
120
|
+
return "";
|
|
121
|
+
}
|
|
122
|
+
const search = new URLSearchParams();
|
|
123
|
+
for (const [key, value] of filtered) {
|
|
124
|
+
search.set(
|
|
125
|
+
key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`),
|
|
126
|
+
String(value)
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
return `?${search.toString()}`;
|
|
130
|
+
}
|
|
131
|
+
var DimesClient = class {
|
|
132
|
+
http;
|
|
133
|
+
constructor(options) {
|
|
134
|
+
this.http = new HttpClient({
|
|
135
|
+
baseUrl: options.baseUrl ?? "https://api.dimes.fi",
|
|
136
|
+
auth: options.auth,
|
|
137
|
+
fetch: options.fetch,
|
|
138
|
+
maxRetries: options.maxRetries,
|
|
139
|
+
maxRetryDelayMs: options.maxRetryDelayMs
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
async getMarkets(params) {
|
|
143
|
+
const query = params ? buildQueryFromEntries(Object.entries(params)) : "";
|
|
144
|
+
return this.http.request(`/v1/prediction-markets/markets${query}`);
|
|
145
|
+
}
|
|
146
|
+
async getMarket(ticker) {
|
|
147
|
+
return this.http.request(`/v1/prediction-markets/markets/${encodeURIComponent(ticker)}`);
|
|
148
|
+
}
|
|
149
|
+
async createDraftQuote(params) {
|
|
150
|
+
return this.http.request("/v1/prediction-markets/draft-quotes", {
|
|
151
|
+
method: "POST",
|
|
152
|
+
body: JSON.stringify(decamelizeKeys(params))
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
async promoteDraftQuote(draftId) {
|
|
156
|
+
return this.http.request(`/v1/prediction-markets/promoted-quotes/${encodeURIComponent(draftId)}`, {
|
|
157
|
+
method: "POST"
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
async createQuote(params) {
|
|
161
|
+
return this.http.request("/v1/prediction-markets/quotes", {
|
|
162
|
+
method: "POST",
|
|
163
|
+
body: JSON.stringify(decamelizeKeys(params))
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
async getPositions(params) {
|
|
167
|
+
const query = params ? buildQueryFromEntries(Object.entries(params)) : "";
|
|
168
|
+
return this.http.requestList(`/v1/prediction-markets/positions${query}`);
|
|
169
|
+
}
|
|
170
|
+
async cancelPosition(positionId) {
|
|
171
|
+
await this.http.request(`/v1/prediction-markets/positions/${encodeURIComponent(positionId)}/cancel`, {
|
|
172
|
+
method: "POST"
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
async getContractInfo() {
|
|
176
|
+
return this.http.request("/v1/prediction-markets/contract-info");
|
|
177
|
+
}
|
|
178
|
+
async getLimits() {
|
|
179
|
+
return this.http.request("/v1/prediction-markets/limits");
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
// src/client/auth.ts
|
|
184
|
+
var ApiKeyAuth = class {
|
|
185
|
+
jwt = null;
|
|
186
|
+
expiresAt = 0;
|
|
187
|
+
refreshPromise = null;
|
|
188
|
+
apiKey;
|
|
189
|
+
walletAddress;
|
|
190
|
+
baseUrl;
|
|
191
|
+
fetchFn;
|
|
192
|
+
constructor(options) {
|
|
193
|
+
this.apiKey = options.apiKey;
|
|
194
|
+
this.walletAddress = options.walletAddress;
|
|
195
|
+
this.baseUrl = options.baseUrl ?? "https://api.dimes.fi";
|
|
196
|
+
this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
197
|
+
}
|
|
198
|
+
async getHeaders() {
|
|
199
|
+
const TOKEN_EXPIRY_BUFFER_MS = 3e4;
|
|
200
|
+
if (!this.jwt || Date.now() >= this.expiresAt - TOKEN_EXPIRY_BUFFER_MS) {
|
|
201
|
+
await this.refresh();
|
|
202
|
+
}
|
|
203
|
+
return { Authorization: `Bearer ${this.jwt}` };
|
|
204
|
+
}
|
|
205
|
+
async refresh() {
|
|
206
|
+
if (this.refreshPromise) {
|
|
207
|
+
await this.refreshPromise;
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
this.refreshPromise = this.fetchToken();
|
|
211
|
+
try {
|
|
212
|
+
await this.refreshPromise;
|
|
213
|
+
} finally {
|
|
214
|
+
this.refreshPromise = null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async fetchToken() {
|
|
218
|
+
const response = await this.fetchFn(`${this.baseUrl}/v1/prediction-markets/tokens`, {
|
|
219
|
+
method: "POST",
|
|
220
|
+
headers: {
|
|
221
|
+
"Content-Type": "application/json",
|
|
222
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
223
|
+
},
|
|
224
|
+
body: JSON.stringify({ wallet_address: this.walletAddress })
|
|
225
|
+
});
|
|
226
|
+
if (!response.ok) {
|
|
227
|
+
const text = await response.text();
|
|
228
|
+
throw new DimesError("auth_token_failed", `Failed to obtain auth token (${response.status}): ${text}`);
|
|
229
|
+
}
|
|
230
|
+
const data = await response.json();
|
|
231
|
+
this.jwt = data.token;
|
|
232
|
+
this.expiresAt = new Date(data.expires_at).getTime();
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
var JwtAuth = class {
|
|
236
|
+
tokenOrFn;
|
|
237
|
+
constructor(options) {
|
|
238
|
+
this.tokenOrFn = options.token;
|
|
239
|
+
}
|
|
240
|
+
async getHeaders() {
|
|
241
|
+
const token = typeof this.tokenOrFn === "function" ? await this.tokenOrFn() : this.tokenOrFn;
|
|
242
|
+
return { Authorization: `Bearer ${token}` };
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// src/types/aliases.ts
|
|
247
|
+
function isOpenPosition(p) {
|
|
248
|
+
return "current" in p;
|
|
249
|
+
}
|
|
250
|
+
function isClosedPosition(p) {
|
|
251
|
+
return "result" in p;
|
|
252
|
+
}
|
|
253
|
+
function leverageMaxBps(lev, side) {
|
|
254
|
+
const perSide = side === "yes" ? lev.maxYesBps : lev.maxNoBps;
|
|
255
|
+
return perSide ?? lev.maxBps ?? lev.minBps;
|
|
256
|
+
}
|
|
257
|
+
export {
|
|
258
|
+
ApiKeyAuth,
|
|
259
|
+
DimesApiError,
|
|
260
|
+
DimesClient,
|
|
261
|
+
DimesContractError,
|
|
262
|
+
DimesError,
|
|
263
|
+
JwtAuth,
|
|
264
|
+
buildQuoteParams,
|
|
265
|
+
executeQuote,
|
|
266
|
+
formatErrorMessage,
|
|
267
|
+
hintAdjustment,
|
|
268
|
+
isClosedPosition,
|
|
269
|
+
isOpenPosition,
|
|
270
|
+
leverageMaxBps,
|
|
271
|
+
marketMovedCodes,
|
|
272
|
+
quoteErrorHint,
|
|
273
|
+
resolveFriendlyMessage
|
|
274
|
+
};
|
|
275
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client/dimes-client.ts","../src/client/http.ts","../src/client/auth.ts","../src/types/aliases.ts"],"sourcesContent":["import { decamelizeKeys } from \"humps\";\nimport type { ContractInfo, CreateOfferParams, Market, Offer, Position, Paginated, CustomerLimit } from \"../types\";\nimport type { AuthProvider } from \"./auth\";\nimport { HttpClient } from \"./http\";\n\nexport interface DimesClientOptions {\n baseUrl?: string;\n auth: AuthProvider;\n fetch?: typeof globalThis.fetch;\n maxRetries?: number;\n maxRetryDelayMs?: number;\n}\n\nexport interface GetMarketsParams {\n cursor?: string;\n limit?: number;\n category?: string;\n status?: string;\n provider?: \"polymarket\" | \"kalshi\";\n}\n\nexport interface GetPositionsParams {\n cursor?: string;\n limit?: number;\n status?: \"open\" | \"closed\";\n}\n\nfunction buildQueryFromEntries(entries: [string, unknown][]): string {\n const filtered = entries.filter(([, v]) => v !== undefined && v !== null);\n if (filtered.length === 0) {\n return \"\";\n }\n\n const search = new URLSearchParams();\n for (const [key, value] of filtered) {\n search.set(\n key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`),\n String(value),\n );\n }\n\n return `?${search.toString()}`;\n}\n\nexport class DimesClient {\n private readonly http: HttpClient;\n\n constructor(options: DimesClientOptions) {\n this.http = new HttpClient({\n baseUrl: options.baseUrl ?? \"https://api.dimes.fi\",\n auth: options.auth,\n fetch: options.fetch,\n maxRetries: options.maxRetries,\n maxRetryDelayMs: options.maxRetryDelayMs,\n });\n }\n\n public async getMarkets(params?: GetMarketsParams): Promise<Paginated<Market>> {\n const query = params ? buildQueryFromEntries(Object.entries(params)) : \"\";\n return this.http.request<Paginated<Market>>(`/v1/prediction-markets/markets${query}`);\n }\n\n public async getMarket(ticker: string): Promise<Market> {\n return this.http.request<Market>(`/v1/prediction-markets/markets/${encodeURIComponent(ticker)}`);\n }\n\n public async createDraftQuote(params: CreateOfferParams): Promise<Offer> {\n return this.http.request<Offer>(\"/v1/prediction-markets/draft-quotes\", {\n method: \"POST\",\n body: JSON.stringify(decamelizeKeys(params)),\n });\n }\n\n public async promoteDraftQuote(draftId: string): Promise<Offer> {\n return this.http.request<Offer>(`/v1/prediction-markets/promoted-quotes/${encodeURIComponent(draftId)}`, {\n method: \"POST\",\n });\n }\n\n public async createQuote(params: CreateOfferParams): Promise<Offer> {\n return this.http.request<Offer>(\"/v1/prediction-markets/quotes\", {\n method: \"POST\",\n body: JSON.stringify(decamelizeKeys(params)),\n });\n }\n\n public async getPositions(params?: GetPositionsParams): Promise<Position[]> {\n const query = params ? buildQueryFromEntries(Object.entries(params)) : \"\";\n return this.http.requestList<Position>(`/v1/prediction-markets/positions${query}`);\n }\n\n public async cancelPosition(positionId: string): Promise<void> {\n await this.http.request<unknown>(`/v1/prediction-markets/positions/${encodeURIComponent(positionId)}/cancel`, {\n method: \"POST\",\n });\n }\n\n public async getContractInfo(): Promise<ContractInfo> {\n return this.http.request<ContractInfo>(\"/v1/prediction-markets/contract-info\");\n }\n\n public async getLimits(): Promise<CustomerLimit> {\n return this.http.request<CustomerLimit>(\"/v1/prediction-markets/limits\");\n }\n}\n","import { camelizeKeys, type Camelized } from \"humps\";\nimport { DimesApiError } from \"../errors/dimes-error\";\nimport type { AuthProvider } from \"./auth\";\n\nexport type { Camelized };\n\ninterface ApiErrorBody {\n error?: {\n type?: string;\n code?: string;\n message?: string;\n params?: Record<string, unknown>;\n };\n}\n\nconst HTTP_UNAUTHORIZED = 401;\nconst HTTP_TOO_MANY_REQUESTS = 429;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_MAX_RETRY_DELAY_MS = 60_000;\nconst DEFAULT_RETRY_DELAY_MS = 1000;\nconst BACKOFF_FACTOR = 2;\nconst MS_PER_SECOND = 1000;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseRetryAfterMs(header: string | null, attempt: number): number {\n const fallbackMs = DEFAULT_RETRY_DELAY_MS * BACKOFF_FACTOR ** attempt;\n if (!header) {\n return fallbackMs;\n }\n\n const seconds = Number(header);\n if (!Number.isNaN(seconds) && seconds >= 0) {\n return seconds * MS_PER_SECOND;\n }\n\n const dateMs = Date.parse(header);\n if (!Number.isNaN(dateMs)) {\n return Math.max(0, dateMs - Date.now());\n }\n\n return fallbackMs;\n}\n\n// eslint-disable-next-line complexity\nasync function throwFromResponse(response: Response): Promise<never> {\n const rawBody = await response.text();\n let parsed: ApiErrorBody | null;\n try {\n parsed = rawBody ? (JSON.parse(rawBody) as ApiErrorBody) : null;\n } catch {\n parsed = null;\n }\n\n const code = parsed?.error?.code ?? \"unknown_error\";\n const type = parsed?.error?.type ?? null;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const message = parsed?.error?.message ?? code ?? rawBody ?? `API error ${response.status}`;\n const rawParams = parsed?.error?.params;\n const params = rawParams ? (camelizeKeys(rawParams) as Record<string, unknown>) : null;\n\n throw new DimesApiError({ status: response.status, code, type, message, params });\n}\n\nexport interface HttpClientOptions {\n baseUrl: string;\n auth: AuthProvider;\n fetch?: typeof globalThis.fetch;\n maxRetries?: number;\n maxRetryDelayMs?: number;\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n\n private readonly auth: AuthProvider;\n\n private readonly fetchFn: typeof globalThis.fetch;\n\n private readonly maxRetries: number;\n\n private readonly maxRetryDelayMs: number;\n\n constructor(options: HttpClientOptions) {\n this.baseUrl = options.baseUrl;\n this.auth = options.auth;\n this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.maxRetryDelayMs = options.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS;\n }\n\n public async request<T>(path: string, options?: RequestInit): Promise<T> {\n const authHeaders = await this.auth.getHeaders();\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...authHeaders,\n ...(options?.headers as Record<string, string> | undefined),\n };\n\n let response = await this.fetchFn(`${this.baseUrl}${path}`, {\n ...options,\n headers,\n });\n\n if (response.status === HTTP_UNAUTHORIZED && this.auth.refresh) {\n await this.auth.refresh();\n const retryHeaders = await this.auth.getHeaders();\n response = await this.fetchFn(`${this.baseUrl}${path}`, {\n ...options,\n headers: { ...headers, ...retryHeaders },\n });\n }\n\n for (let attempt = 0; response.status === HTTP_TOO_MANY_REQUESTS && attempt < this.maxRetries; attempt++) {\n const delayMs = parseRetryAfterMs(response.headers.get(\"retry-after\"), attempt);\n if (delayMs > this.maxRetryDelayMs) {\n break;\n }\n await sleep(delayMs);\n const freshAuth = await this.auth.getHeaders();\n response = await this.fetchFn(`${this.baseUrl}${path}`, {\n ...options,\n headers: { ...headers, ...freshAuth },\n });\n }\n\n if (!response.ok) {\n await throwFromResponse(response);\n }\n\n return camelizeKeys(await response.json()) as T;\n }\n\n public async requestList<T>(path: string, options?: RequestInit): Promise<T[]> {\n const result = await this.request<{ data: T[] }>(path, options);\n return result.data;\n }\n}\n","import { DimesError } from \"../errors/dimes-error\";\n\nexport interface AuthProvider {\n getHeaders(): Promise<Record<string, string>>;\n refresh?(): Promise<void>;\n}\n\ninterface TokenResponse {\n token: string;\n expires_at: string;\n}\n\nexport interface ApiKeyAuthOptions {\n apiKey: string;\n walletAddress: string;\n baseUrl?: string;\n fetch?: typeof globalThis.fetch;\n}\n\nexport class ApiKeyAuth implements AuthProvider {\n private jwt: string | null = null;\n\n private expiresAt = 0;\n\n private refreshPromise: Promise<void> | null = null;\n\n private readonly apiKey: string;\n\n private readonly walletAddress: string;\n\n private readonly baseUrl: string;\n\n private readonly fetchFn: typeof globalThis.fetch;\n\n constructor(options: ApiKeyAuthOptions) {\n this.apiKey = options.apiKey;\n this.walletAddress = options.walletAddress;\n this.baseUrl = options.baseUrl ?? \"https://api.dimes.fi\";\n this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n public async getHeaders(): Promise<Record<string, string>> {\n const TOKEN_EXPIRY_BUFFER_MS = 30_000;\n if (!this.jwt || Date.now() >= this.expiresAt - TOKEN_EXPIRY_BUFFER_MS) {\n await this.refresh();\n }\n return { Authorization: `Bearer ${this.jwt}` };\n }\n\n public async refresh(): Promise<void> {\n if (this.refreshPromise) {\n await this.refreshPromise;\n return;\n }\n\n this.refreshPromise = this.fetchToken();\n try {\n await this.refreshPromise;\n } finally {\n this.refreshPromise = null;\n }\n }\n\n private async fetchToken(): Promise<void> {\n const response = await this.fetchFn(`${this.baseUrl}/v1/prediction-markets/tokens`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({ wallet_address: this.walletAddress }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new DimesError(\"auth_token_failed\", `Failed to obtain auth token (${response.status}): ${text}`);\n }\n\n const data = (await response.json()) as TokenResponse;\n this.jwt = data.token;\n this.expiresAt = new Date(data.expires_at).getTime();\n }\n}\n\nexport interface JwtAuthOptions {\n token: string | (() => Promise<string>);\n}\n\nexport class JwtAuth implements AuthProvider {\n private readonly tokenOrFn: string | (() => Promise<string>);\n\n constructor(options: JwtAuthOptions) {\n this.tokenOrFn = options.token;\n }\n\n public async getHeaders(): Promise<Record<string, string>> {\n const token = typeof this.tokenOrFn === \"function\" ? await this.tokenOrFn() : this.tokenOrFn;\n return { Authorization: `Bearer ${token}` };\n }\n}\n","import type { CamelizeKeys } from \"./camelize\";\nimport type { components } from \"./generated\";\n\ntype Raw = components[\"schemas\"];\n\nexport type Market = CamelizeKeys<Raw[\"CustomerMarket\"]>;\n\nexport type MarketLeverage = CamelizeKeys<Raw[\"CustomerLeverage\"]>;\n\nexport type MarketFees = CamelizeKeys<Raw[\"CustomerFees\"]>;\n\nexport type MarketPrices = CamelizeKeys<Raw[\"CustomerMarketPrices\"]>;\n\nexport type OriginationTier = CamelizeKeys<Raw[\"CustomerOriginationTier\"]>;\n\nexport type Offer = CamelizeKeys<Raw[\"ApiCustomerOffer\"]>;\n\nexport type OpenPosition = CamelizeKeys<Raw[\"CustomerOpenPosition\"]>;\n\nexport type ClosedPosition = CamelizeKeys<Raw[\"CustomerClosedPosition\"]>;\n\nexport type Position = OpenPosition | ClosedPosition;\n\nexport type PositionEntry = CamelizeKeys<Raw[\"CustomerPositionEntry\"]>;\n\nexport type PositionCurrent = CamelizeKeys<Raw[\"CustomerPositionCurrent\"]>;\n\nexport type PositionRisk = CamelizeKeys<Raw[\"CustomerPositionRisk\"]>;\n\nexport type PositionOpenFees = CamelizeKeys<Raw[\"CustomerPositionOpenFees\"]>;\n\nexport type PositionClosedFees = CamelizeKeys<Raw[\"CustomerPositionClosedFees\"]>;\n\nexport type PositionResult = CamelizeKeys<Raw[\"CustomerPositionResult\"]>;\n\nexport type PositionTiming = CamelizeKeys<Raw[\"CustomerPositionTiming\"]>;\n\nexport type PositionFailure = CamelizeKeys<Raw[\"CustomerPositionFailure\"]>;\n\nexport type PositionUnwind = CamelizeKeys<Raw[\"CustomerPositionUnwind\"]>;\n\nexport type PositionUnwindList = CamelizeKeys<Raw[\"CustomerPositionUnwindList\"]>;\n\nexport type ContractInfo = CamelizeKeys<Raw[\"CustomerContractInfo\"]>;\n\nexport type CustomerLimit = CamelizeKeys<Raw[\"CustomerLimit\"]>;\n\nexport type CreateTokenResult = CamelizeKeys<Raw[\"CreateTokenResult\"]>;\n\nexport interface CreateOfferParams {\n marketTicker: string;\n effectiveSide: \"yes\" | \"no\";\n leverageBps: number;\n notionalAmountUsdPips: string;\n slippageBps: number;\n pmProvider?: \"polymarket\" | \"kalshi\";\n}\n\nexport function isOpenPosition(p: Position): p is OpenPosition {\n return \"current\" in p;\n}\n\nexport function isClosedPosition(p: Position): p is ClosedPosition {\n return \"result\" in p;\n}\n\nexport function leverageMaxBps(lev: MarketLeverage, side: \"yes\" | \"no\"): number {\n const perSide = side === \"yes\" ? lev.maxYesBps : lev.maxNoBps;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return perSide ?? lev.maxBps ?? lev.minBps;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS,sBAAsB;;;ACA/B,SAAS,oBAAoC;AAe7C,IAAM,oBAAoB;AAC1B,IAAM,yBAAyB;AAC/B,IAAM,sBAAsB;AAC5B,IAAM,6BAA6B;AACnC,IAAM,yBAAyB;AAC/B,IAAM,iBAAiB;AACvB,IAAM,gBAAgB;AAEtB,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAEA,SAAS,kBAAkB,QAAuB,SAAyB;AACzE,QAAM,aAAa,yBAAyB,kBAAkB;AAC9D,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,OAAO,MAAM;AAC7B,MAAI,CAAC,OAAO,MAAM,OAAO,KAAK,WAAW,GAAG;AAC1C,WAAO,UAAU;AAAA,EACnB;AAEA,QAAM,SAAS,KAAK,MAAM,MAAM;AAChC,MAAI,CAAC,OAAO,MAAM,MAAM,GAAG;AACzB,WAAO,KAAK,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;AAAA,EACxC;AAEA,SAAO;AACT;AAGA,eAAe,kBAAkB,UAAoC;AACnE,QAAM,UAAU,MAAM,SAAS,KAAK;AACpC,MAAI;AACJ,MAAI;AACF,aAAS,UAAW,KAAK,MAAM,OAAO,IAAqB;AAAA,EAC7D,QAAQ;AACN,aAAS;AAAA,EACX;AAEA,QAAM,OAAO,QAAQ,OAAO,QAAQ;AACpC,QAAM,OAAO,QAAQ,OAAO,QAAQ;AAEpC,QAAM,UAAU,QAAQ,OAAO,WAAW,QAAQ,WAAW,aAAa,SAAS,MAAM;AACzF,QAAM,YAAY,QAAQ,OAAO;AACjC,QAAM,SAAS,YAAa,aAAa,SAAS,IAAgC;AAElF,QAAM,IAAI,cAAc,EAAE,QAAQ,SAAS,QAAQ,MAAM,MAAM,SAAS,OAAO,CAAC;AAClF;AAUO,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEjB,YAAY,SAA4B;AACtC,SAAK,UAAU,QAAQ;AACvB,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ,SAAS,WAAW,MAAM,KAAK,UAAU;AAChE,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,kBAAkB,QAAQ,mBAAmB;AAAA,EACpD;AAAA,EAEA,MAAa,QAAW,MAAc,SAAmC;AACvE,UAAM,cAAc,MAAM,KAAK,KAAK,WAAW;AAC/C,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,GAAG;AAAA,MACH,GAAI,SAAS;AAAA,IACf;AAEA,QAAI,WAAW,MAAM,KAAK,QAAQ,GAAG,KAAK,OAAO,GAAG,IAAI,IAAI;AAAA,MAC1D,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAED,QAAI,SAAS,WAAW,qBAAqB,KAAK,KAAK,SAAS;AAC9D,YAAM,KAAK,KAAK,QAAQ;AACxB,YAAM,eAAe,MAAM,KAAK,KAAK,WAAW;AAChD,iBAAW,MAAM,KAAK,QAAQ,GAAG,KAAK,OAAO,GAAG,IAAI,IAAI;AAAA,QACtD,GAAG;AAAA,QACH,SAAS,EAAE,GAAG,SAAS,GAAG,aAAa;AAAA,MACzC,CAAC;AAAA,IACH;AAEA,aAAS,UAAU,GAAG,SAAS,WAAW,0BAA0B,UAAU,KAAK,YAAY,WAAW;AACxG,YAAM,UAAU,kBAAkB,SAAS,QAAQ,IAAI,aAAa,GAAG,OAAO;AAC9E,UAAI,UAAU,KAAK,iBAAiB;AAClC;AAAA,MACF;AACA,YAAM,MAAM,OAAO;AACnB,YAAM,YAAY,MAAM,KAAK,KAAK,WAAW;AAC7C,iBAAW,MAAM,KAAK,QAAQ,GAAG,KAAK,OAAO,GAAG,IAAI,IAAI;AAAA,QACtD,GAAG;AAAA,QACH,SAAS,EAAE,GAAG,SAAS,GAAG,UAAU;AAAA,MACtC,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,kBAAkB,QAAQ;AAAA,IAClC;AAEA,WAAO,aAAa,MAAM,SAAS,KAAK,CAAC;AAAA,EAC3C;AAAA,EAEA,MAAa,YAAe,MAAc,SAAqC;AAC7E,UAAM,SAAS,MAAM,KAAK,QAAuB,MAAM,OAAO;AAC9D,WAAO,OAAO;AAAA,EAChB;AACF;;;ADhHA,SAAS,sBAAsB,SAAsC;AACnE,QAAM,WAAW,QAAQ,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,MAAM,UAAa,MAAM,IAAI;AACxE,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,IAAI,gBAAgB;AACnC,aAAW,CAAC,KAAK,KAAK,KAAK,UAAU;AACnC,WAAO;AAAA,MACL,IAAI,QAAQ,UAAU,CAAC,MAAM,IAAI,EAAE,YAAY,CAAC,EAAE;AAAA,MAClD,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AAEA,SAAO,IAAI,OAAO,SAAS,CAAC;AAC9B;AAEO,IAAM,cAAN,MAAkB;AAAA,EACN;AAAA,EAEjB,YAAY,SAA6B;AACvC,SAAK,OAAO,IAAI,WAAW;AAAA,MACzB,SAAS,QAAQ,WAAW;AAAA,MAC5B,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,MACf,YAAY,QAAQ;AAAA,MACpB,iBAAiB,QAAQ;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,WAAW,QAAuD;AAC7E,UAAM,QAAQ,SAAS,sBAAsB,OAAO,QAAQ,MAAM,CAAC,IAAI;AACvE,WAAO,KAAK,KAAK,QAA2B,iCAAiC,KAAK,EAAE;AAAA,EACtF;AAAA,EAEA,MAAa,UAAU,QAAiC;AACtD,WAAO,KAAK,KAAK,QAAgB,kCAAkC,mBAAmB,MAAM,CAAC,EAAE;AAAA,EACjG;AAAA,EAEA,MAAa,iBAAiB,QAA2C;AACvE,WAAO,KAAK,KAAK,QAAe,uCAAuC;AAAA,MACrE,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,eAAe,MAAM,CAAC;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,kBAAkB,SAAiC;AAC9D,WAAO,KAAK,KAAK,QAAe,0CAA0C,mBAAmB,OAAO,CAAC,IAAI;AAAA,MACvG,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,YAAY,QAA2C;AAClE,WAAO,KAAK,KAAK,QAAe,iCAAiC;AAAA,MAC/D,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,eAAe,MAAM,CAAC;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,aAAa,QAAkD;AAC1E,UAAM,QAAQ,SAAS,sBAAsB,OAAO,QAAQ,MAAM,CAAC,IAAI;AACvE,WAAO,KAAK,KAAK,YAAsB,mCAAmC,KAAK,EAAE;AAAA,EACnF;AAAA,EAEA,MAAa,eAAe,YAAmC;AAC7D,UAAM,KAAK,KAAK,QAAiB,oCAAoC,mBAAmB,UAAU,CAAC,WAAW;AAAA,MAC5G,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,kBAAyC;AACpD,WAAO,KAAK,KAAK,QAAsB,sCAAsC;AAAA,EAC/E;AAAA,EAEA,MAAa,YAAoC;AAC/C,WAAO,KAAK,KAAK,QAAuB,+BAA+B;AAAA,EACzE;AACF;;;AErFO,IAAM,aAAN,MAAyC;AAAA,EACtC,MAAqB;AAAA,EAErB,YAAY;AAAA,EAEZ,iBAAuC;AAAA,EAE9B;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEjB,YAAY,SAA4B;AACtC,SAAK,SAAS,QAAQ;AACtB,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,UAAU,QAAQ,SAAS,WAAW,MAAM,KAAK,UAAU;AAAA,EAClE;AAAA,EAEA,MAAa,aAA8C;AACzD,UAAM,yBAAyB;AAC/B,QAAI,CAAC,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK,YAAY,wBAAwB;AACtE,YAAM,KAAK,QAAQ;AAAA,IACrB;AACA,WAAO,EAAE,eAAe,UAAU,KAAK,GAAG,GAAG;AAAA,EAC/C;AAAA,EAEA,MAAa,UAAyB;AACpC,QAAI,KAAK,gBAAgB;AACvB,YAAM,KAAK;AACX;AAAA,IACF;AAEA,SAAK,iBAAiB,KAAK,WAAW;AACtC,QAAI;AACF,YAAM,KAAK;AAAA,IACb,UAAE;AACA,WAAK,iBAAiB;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAc,aAA4B;AACxC,UAAM,WAAW,MAAM,KAAK,QAAQ,GAAG,KAAK,OAAO,iCAAiC;AAAA,MAClF,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,KAAK,MAAM;AAAA,MACtC;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,gBAAgB,KAAK,cAAc,CAAC;AAAA,IAC7D,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAM,IAAI,WAAW,qBAAqB,gCAAgC,SAAS,MAAM,MAAM,IAAI,EAAE;AAAA,IACvG;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,SAAK,MAAM,KAAK;AAChB,SAAK,YAAY,IAAI,KAAK,KAAK,UAAU,EAAE,QAAQ;AAAA,EACrD;AACF;AAMO,IAAM,UAAN,MAAsC;AAAA,EAC1B;AAAA,EAEjB,YAAY,SAAyB;AACnC,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA,EAEA,MAAa,aAA8C;AACzD,UAAM,QAAQ,OAAO,KAAK,cAAc,aAAa,MAAM,KAAK,UAAU,IAAI,KAAK;AACnF,WAAO,EAAE,eAAe,UAAU,KAAK,GAAG;AAAA,EAC5C;AACF;;;ACzCO,SAAS,eAAe,GAAgC;AAC7D,SAAO,aAAa;AACtB;AAEO,SAAS,iBAAiB,GAAkC;AACjE,SAAO,YAAY;AACrB;AAEO,SAAS,eAAe,KAAqB,MAA4B;AAC9E,QAAM,UAAU,SAAS,QAAQ,IAAI,YAAY,IAAI;AAErD,SAAO,WAAW,IAAI,UAAU,IAAI;AACtC;","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { O as Offer, H as HintAdjustment } from './dimes-client-BLIAuK4M.cjs';
|
|
2
|
+
|
|
3
|
+
type Side = "yes" | "no";
|
|
4
|
+
interface QuoteParams {
|
|
5
|
+
marketTicker: string;
|
|
6
|
+
side: Side;
|
|
7
|
+
collateralUsd: number;
|
|
8
|
+
leverageBps: number;
|
|
9
|
+
slippageBps: number;
|
|
10
|
+
}
|
|
11
|
+
interface MarketMovedEvent {
|
|
12
|
+
originalDraft: Offer;
|
|
13
|
+
newDraft: Offer;
|
|
14
|
+
retryCount: number;
|
|
15
|
+
}
|
|
16
|
+
interface QuoteOptions {
|
|
17
|
+
maxRetries?: number;
|
|
18
|
+
autoCorrect?: boolean;
|
|
19
|
+
onDraftReady?: (draft: Offer) => void;
|
|
20
|
+
onMarketMoved?: (event: MarketMovedEvent) => boolean | undefined;
|
|
21
|
+
onCorrection?: (adjustment: HintAdjustment) => boolean | undefined;
|
|
22
|
+
}
|
|
23
|
+
interface QuoteResult {
|
|
24
|
+
offer: Offer;
|
|
25
|
+
corrections: HintAdjustment[];
|
|
26
|
+
retries: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type { MarketMovedEvent as M, QuoteParams as Q, Side as S, QuoteOptions as a, QuoteResult as b };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { O as Offer, H as HintAdjustment } from './dimes-client-BLIAuK4M.js';
|
|
2
|
+
|
|
3
|
+
type Side = "yes" | "no";
|
|
4
|
+
interface QuoteParams {
|
|
5
|
+
marketTicker: string;
|
|
6
|
+
side: Side;
|
|
7
|
+
collateralUsd: number;
|
|
8
|
+
leverageBps: number;
|
|
9
|
+
slippageBps: number;
|
|
10
|
+
}
|
|
11
|
+
interface MarketMovedEvent {
|
|
12
|
+
originalDraft: Offer;
|
|
13
|
+
newDraft: Offer;
|
|
14
|
+
retryCount: number;
|
|
15
|
+
}
|
|
16
|
+
interface QuoteOptions {
|
|
17
|
+
maxRetries?: number;
|
|
18
|
+
autoCorrect?: boolean;
|
|
19
|
+
onDraftReady?: (draft: Offer) => void;
|
|
20
|
+
onMarketMoved?: (event: MarketMovedEvent) => boolean | undefined;
|
|
21
|
+
onCorrection?: (adjustment: HintAdjustment) => boolean | undefined;
|
|
22
|
+
}
|
|
23
|
+
interface QuoteResult {
|
|
24
|
+
offer: Offer;
|
|
25
|
+
corrections: HintAdjustment[];
|
|
26
|
+
retries: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type { MarketMovedEvent as M, QuoteParams as Q, Side as S, QuoteOptions as a, QuoteResult as b };
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunkJGK55KDXcjs = require('../chunk-JGK55KDX.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkXXTTXLCTcjs = require('../chunk-XXTTXLCT.cjs');
|
|
7
|
+
|
|
8
|
+
// src/react/provider.tsx
|
|
9
|
+
var _react = require('react');
|
|
10
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
11
|
+
var DimesContext = _react.createContext.call(void 0, null);
|
|
12
|
+
function DimesProvider({ client, children }) {
|
|
13
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DimesContext.Provider, { value: client, children });
|
|
14
|
+
}
|
|
15
|
+
function useDimesClient() {
|
|
16
|
+
const client = _react.useContext.call(void 0, DimesContext);
|
|
17
|
+
if (!client) {
|
|
18
|
+
throw new (0, _chunkXXTTXLCTcjs.DimesError)("missing_provider", "useDimesClient must be used within a <DimesProvider>");
|
|
19
|
+
}
|
|
20
|
+
return client;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// src/react/use-quote.ts
|
|
24
|
+
|
|
25
|
+
function reducer(state, action) {
|
|
26
|
+
switch (action.type) {
|
|
27
|
+
case "loading":
|
|
28
|
+
return { phase: "loading-draft", corrections: [], retries: 0 };
|
|
29
|
+
case "draftReady":
|
|
30
|
+
return { ...state, phase: "draft-ready", draft: action.draft };
|
|
31
|
+
case "promoting":
|
|
32
|
+
return { ...state, phase: "promoting" };
|
|
33
|
+
case "marketMoved":
|
|
34
|
+
return { ...state, phase: "market-moved" };
|
|
35
|
+
case "done":
|
|
36
|
+
return {
|
|
37
|
+
phase: "promoted",
|
|
38
|
+
offer: action.result.offer,
|
|
39
|
+
corrections: action.result.corrections,
|
|
40
|
+
retries: action.result.retries,
|
|
41
|
+
draft: state.draft
|
|
42
|
+
};
|
|
43
|
+
case "error":
|
|
44
|
+
return { ...state, phase: "error", error: action.error };
|
|
45
|
+
case "reset":
|
|
46
|
+
return { phase: "idle", corrections: [], retries: 0 };
|
|
47
|
+
default:
|
|
48
|
+
return state;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function useQuote() {
|
|
52
|
+
const client = useDimesClient();
|
|
53
|
+
const [state, dispatch] = _react.useReducer.call(void 0, reducer, {
|
|
54
|
+
phase: "idle",
|
|
55
|
+
corrections: [],
|
|
56
|
+
retries: 0
|
|
57
|
+
});
|
|
58
|
+
const execute = _react.useCallback.call(void 0,
|
|
59
|
+
async (params, options) => {
|
|
60
|
+
dispatch({ type: "loading" });
|
|
61
|
+
try {
|
|
62
|
+
const result = await _chunkJGK55KDXcjs.executeQuote.call(void 0, client, params, {
|
|
63
|
+
...options,
|
|
64
|
+
onDraftReady: (draft) => {
|
|
65
|
+
dispatch({ type: "draftReady", draft });
|
|
66
|
+
dispatch({ type: "promoting" });
|
|
67
|
+
_optionalChain([options, 'optionalAccess', _ => _.onDraftReady, 'optionalCall', _2 => _2(draft)]);
|
|
68
|
+
},
|
|
69
|
+
onMarketMoved: (event) => {
|
|
70
|
+
dispatch({ type: "marketMoved" });
|
|
71
|
+
return _optionalChain([options, 'optionalAccess', _3 => _3.onMarketMoved, 'optionalCall', _4 => _4(event)]);
|
|
72
|
+
},
|
|
73
|
+
onCorrection: (adj) => {
|
|
74
|
+
return _optionalChain([options, 'optionalAccess', _5 => _5.onCorrection, 'optionalCall', _6 => _6(adj)]);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
dispatch({ type: "done", result });
|
|
78
|
+
return result;
|
|
79
|
+
} catch (err) {
|
|
80
|
+
dispatch({ type: "error", error: err });
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
[client]
|
|
85
|
+
);
|
|
86
|
+
const reset = _react.useCallback.call(void 0, () => {
|
|
87
|
+
dispatch({ type: "reset" });
|
|
88
|
+
}, []);
|
|
89
|
+
return { state, execute, reset };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// src/react/use-markets.ts
|
|
93
|
+
var _reactquery = require('@tanstack/react-query');
|
|
94
|
+
function useMarkets(params, queryOptions) {
|
|
95
|
+
const client = useDimesClient();
|
|
96
|
+
return _reactquery.useQuery.call(void 0, {
|
|
97
|
+
queryKey: ["dimes", "markets", params],
|
|
98
|
+
queryFn: () => client.getMarkets(params),
|
|
99
|
+
...queryOptions
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function useMarket(ticker, queryOptions) {
|
|
103
|
+
const client = useDimesClient();
|
|
104
|
+
return _reactquery.useQuery.call(void 0, {
|
|
105
|
+
queryKey: ["dimes", "market", ticker],
|
|
106
|
+
queryFn: () => client.getMarket(ticker),
|
|
107
|
+
enabled: !!ticker,
|
|
108
|
+
...queryOptions
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// src/react/use-positions.ts
|
|
113
|
+
|
|
114
|
+
function usePositions(params, queryOptions) {
|
|
115
|
+
const client = useDimesClient();
|
|
116
|
+
return _reactquery.useQuery.call(void 0, {
|
|
117
|
+
queryKey: ["dimes", "positions", params],
|
|
118
|
+
queryFn: () => client.getPositions(params),
|
|
119
|
+
...queryOptions
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// src/react/use-contract-info.ts
|
|
124
|
+
|
|
125
|
+
function useContractInfo(queryOptions) {
|
|
126
|
+
const client = useDimesClient();
|
|
127
|
+
return _reactquery.useQuery.call(void 0, {
|
|
128
|
+
queryKey: ["dimes", "contractInfo"],
|
|
129
|
+
queryFn: () => client.getContractInfo(),
|
|
130
|
+
staleTime: Infinity,
|
|
131
|
+
...queryOptions
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// src/react/use-limits.ts
|
|
136
|
+
|
|
137
|
+
function useLimits(queryOptions) {
|
|
138
|
+
const client = useDimesClient();
|
|
139
|
+
return _reactquery.useQuery.call(void 0, {
|
|
140
|
+
queryKey: ["dimes", "limits"],
|
|
141
|
+
queryFn: () => client.getLimits(),
|
|
142
|
+
...queryOptions
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// src/react/use-cancel-position.ts
|
|
147
|
+
|
|
148
|
+
function useCancelPosition(mutationOptions) {
|
|
149
|
+
const client = useDimesClient();
|
|
150
|
+
return _reactquery.useMutation.call(void 0, {
|
|
151
|
+
mutationFn: (positionId) => client.cancelPosition(positionId),
|
|
152
|
+
...mutationOptions
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
exports.DimesProvider = DimesProvider; exports.useCancelPosition = useCancelPosition; exports.useContractInfo = useContractInfo; exports.useDimesClient = useDimesClient; exports.useLimits = useLimits; exports.useMarket = useMarket; exports.useMarkets = useMarkets; exports.usePositions = usePositions; exports.useQuote = useQuote;
|
|
166
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/alexemery/bl/dimes-sdk/dist/react/index.cjs","../../src/react/provider.tsx","../../src/react/use-quote.ts","../../src/react/use-markets.ts","../../src/react/use-positions.ts","../../src/react/use-contract-info.ts","../../src/react/use-limits.ts","../../src/react/use-cancel-position.ts"],"names":["useQuery"],"mappings":"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","file":"/Users/alexemery/bl/dimes-sdk/dist/react/index.cjs","sourcesContent":[null,"import { createContext, useContext, type ReactNode } from \"react\";\nimport type { DimesClient } from \"../client/dimes-client\";\nimport { DimesError } from \"../errors/dimes-error\";\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DimesContext = createContext<DimesClient | null>(null);\n\nexport interface DimesProviderProps {\n client: DimesClient;\n children: ReactNode;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/explicit-function-return-type\nexport function DimesProvider({ client, children }: DimesProviderProps) {\n return <DimesContext.Provider value={client}>{children}</DimesContext.Provider>;\n}\n\nexport function useDimesClient(): DimesClient {\n const client = useContext(DimesContext);\n if (!client) {\n throw new DimesError(\"missing_provider\", \"useDimesClient must be used within a <DimesProvider>\");\n }\n return client;\n}\n","import { useCallback, useReducer } from \"react\";\nimport { executeQuote } from \"../quote/quote\";\nimport type { HintAdjustment } from \"../quote/quote-error-hints\";\nimport type { Offer } from \"../types\";\nimport type { QuoteOptions, QuoteParams, QuoteResult } from \"../types/quote\";\nimport { useDimesClient } from \"./provider\";\n\nexport type QuotePhase = \"idle\" | \"loading-draft\" | \"draft-ready\" | \"promoting\" | \"promoted\" | \"market-moved\" | \"error\";\n\nexport interface QuoteState {\n phase: QuotePhase;\n draft?: Offer;\n offer?: Offer;\n corrections: HintAdjustment[];\n retries: number;\n error?: unknown;\n}\n\ntype Action =\n | { type: \"loading\" }\n | { type: \"draftReady\"; draft: Offer }\n | { type: \"promoting\" }\n | { type: \"marketMoved\" }\n | { type: \"done\"; result: QuoteResult }\n | { type: \"error\"; error: unknown }\n | { type: \"reset\" };\n\nfunction reducer(state: QuoteState, action: Action): QuoteState {\n switch (action.type) {\n case \"loading\":\n return { phase: \"loading-draft\", corrections: [], retries: 0 };\n case \"draftReady\":\n return { ...state, phase: \"draft-ready\", draft: action.draft };\n case \"promoting\":\n return { ...state, phase: \"promoting\" };\n case \"marketMoved\":\n return { ...state, phase: \"market-moved\" };\n case \"done\":\n return {\n phase: \"promoted\",\n offer: action.result.offer,\n corrections: action.result.corrections,\n retries: action.result.retries,\n draft: state.draft,\n };\n case \"error\":\n return { ...state, phase: \"error\", error: action.error };\n case \"reset\":\n return { phase: \"idle\", corrections: [], retries: 0 };\n default:\n return state;\n }\n}\n\nexport interface UseQuoteReturn {\n state: QuoteState;\n execute: (params: QuoteParams, options?: QuoteOptions) => Promise<QuoteResult>;\n reset: () => void;\n}\n\nexport function useQuote(): UseQuoteReturn {\n const client = useDimesClient();\n const [state, dispatch] = useReducer(reducer, {\n phase: \"idle\",\n corrections: [],\n retries: 0,\n });\n\n const execute = useCallback(\n async (params: QuoteParams, options?: QuoteOptions): Promise<QuoteResult> => {\n dispatch({ type: \"loading\" });\n\n try {\n const result = await executeQuote(client, params, {\n ...options,\n onDraftReady: (draft) => {\n dispatch({ type: \"draftReady\", draft });\n dispatch({ type: \"promoting\" });\n options?.onDraftReady?.(draft);\n },\n onMarketMoved: (event) => {\n dispatch({ type: \"marketMoved\" });\n return options?.onMarketMoved?.(event);\n },\n onCorrection: (adj) => {\n return options?.onCorrection?.(adj);\n },\n });\n\n dispatch({ type: \"done\", result });\n return result;\n } catch (err) {\n dispatch({ type: \"error\", error: err });\n throw err;\n }\n },\n [client],\n );\n\n const reset = useCallback(() => {\n dispatch({ type: \"reset\" });\n }, []);\n\n return { state, execute, reset };\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport type { GetMarketsParams } from \"../client/dimes-client\";\nimport type { Market, Paginated } from \"../types\";\nimport { useDimesClient } from \"./provider\";\n\nexport function useMarkets(\n params?: GetMarketsParams,\n queryOptions?: Partial<UseQueryOptions<Paginated<Market>>>,\n): UseQueryResult<Paginated<Market>> {\n const client = useDimesClient();\n\n return useQuery({\n queryKey: [\"dimes\", \"markets\", params],\n queryFn: () => client.getMarkets(params),\n ...queryOptions,\n });\n}\n\nexport function useMarket(ticker: string, queryOptions?: Partial<UseQueryOptions<Market>>): UseQueryResult<Market> {\n const client = useDimesClient();\n\n return useQuery({\n queryKey: [\"dimes\", \"market\", ticker],\n queryFn: () => client.getMarket(ticker),\n enabled: !!ticker,\n ...queryOptions,\n });\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport type { GetPositionsParams } from \"../client/dimes-client\";\nimport type { Position } from \"../types\";\nimport { useDimesClient } from \"./provider\";\n\nexport function usePositions(\n params?: GetPositionsParams,\n queryOptions?: Partial<UseQueryOptions<Position[]>>,\n): UseQueryResult<Position[]> {\n const client = useDimesClient();\n\n return useQuery({\n queryKey: [\"dimes\", \"positions\", params],\n queryFn: () => client.getPositions(params),\n ...queryOptions,\n });\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport type { ContractInfo } from \"../types\";\nimport { useDimesClient } from \"./provider\";\n\nexport function useContractInfo(queryOptions?: Partial<UseQueryOptions<ContractInfo>>): UseQueryResult<ContractInfo> {\n const client = useDimesClient();\n\n return useQuery({\n queryKey: [\"dimes\", \"contractInfo\"],\n queryFn: () => client.getContractInfo(),\n staleTime: Infinity,\n ...queryOptions,\n });\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport type { CustomerLimit } from \"../types\";\nimport { useDimesClient } from \"./provider\";\n\nexport function useLimits(queryOptions?: Partial<UseQueryOptions<CustomerLimit>>): UseQueryResult<CustomerLimit> {\n const client = useDimesClient();\n\n return useQuery({\n queryKey: [\"dimes\", \"limits\"],\n queryFn: () => client.getLimits(),\n ...queryOptions,\n });\n}\n","import { useMutation, type UseMutationOptions, type UseMutationResult } from \"@tanstack/react-query\";\nimport { useDimesClient } from \"./provider\";\n\nexport function useCancelPosition(\n mutationOptions?: Partial<UseMutationOptions<void, Error, string>>,\n): UseMutationResult<void, Error, string> {\n const client = useDimesClient();\n\n return useMutation({\n mutationFn: (positionId: string) => client.cancelPosition(positionId),\n ...mutationOptions,\n });\n}\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { D as DimesClient, O as Offer, H as HintAdjustment, M as Market, G as GetMarketsParams, P as Paginated, j as GetPositionsParams, q as Position, e as ContractInfo, h as CustomerLimit } from '../dimes-client-BLIAuK4M.cjs';
|
|
4
|
+
import { Q as QuoteParams, a as QuoteOptions, b as QuoteResult } from '../quote-ByZJRoPf.cjs';
|
|
5
|
+
import { UseQueryOptions, UseQueryResult, UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
6
|
+
|
|
7
|
+
interface DimesProviderProps {
|
|
8
|
+
client: DimesClient;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
declare function DimesProvider({ client, children }: DimesProviderProps): react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare function useDimesClient(): DimesClient;
|
|
13
|
+
|
|
14
|
+
type QuotePhase = "idle" | "loading-draft" | "draft-ready" | "promoting" | "promoted" | "market-moved" | "error";
|
|
15
|
+
interface QuoteState {
|
|
16
|
+
phase: QuotePhase;
|
|
17
|
+
draft?: Offer;
|
|
18
|
+
offer?: Offer;
|
|
19
|
+
corrections: HintAdjustment[];
|
|
20
|
+
retries: number;
|
|
21
|
+
error?: unknown;
|
|
22
|
+
}
|
|
23
|
+
interface UseQuoteReturn {
|
|
24
|
+
state: QuoteState;
|
|
25
|
+
execute: (params: QuoteParams, options?: QuoteOptions) => Promise<QuoteResult>;
|
|
26
|
+
reset: () => void;
|
|
27
|
+
}
|
|
28
|
+
declare function useQuote(): UseQuoteReturn;
|
|
29
|
+
|
|
30
|
+
declare function useMarkets(params?: GetMarketsParams, queryOptions?: Partial<UseQueryOptions<Paginated<Market>>>): UseQueryResult<Paginated<Market>>;
|
|
31
|
+
declare function useMarket(ticker: string, queryOptions?: Partial<UseQueryOptions<Market>>): UseQueryResult<Market>;
|
|
32
|
+
|
|
33
|
+
declare function usePositions(params?: GetPositionsParams, queryOptions?: Partial<UseQueryOptions<Position[]>>): UseQueryResult<Position[]>;
|
|
34
|
+
|
|
35
|
+
declare function useContractInfo(queryOptions?: Partial<UseQueryOptions<ContractInfo>>): UseQueryResult<ContractInfo>;
|
|
36
|
+
|
|
37
|
+
declare function useLimits(queryOptions?: Partial<UseQueryOptions<CustomerLimit>>): UseQueryResult<CustomerLimit>;
|
|
38
|
+
|
|
39
|
+
declare function useCancelPosition(mutationOptions?: Partial<UseMutationOptions<void, Error, string>>): UseMutationResult<void, Error, string>;
|
|
40
|
+
|
|
41
|
+
export { DimesProvider, type DimesProviderProps, type QuotePhase, type QuoteState, type UseQuoteReturn, useCancelPosition, useContractInfo, useDimesClient, useLimits, useMarket, useMarkets, usePositions, useQuote };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { D as DimesClient, O as Offer, H as HintAdjustment, M as Market, G as GetMarketsParams, P as Paginated, j as GetPositionsParams, q as Position, e as ContractInfo, h as CustomerLimit } from '../dimes-client-BLIAuK4M.js';
|
|
4
|
+
import { Q as QuoteParams, a as QuoteOptions, b as QuoteResult } from '../quote-CgmTKnIZ.js';
|
|
5
|
+
import { UseQueryOptions, UseQueryResult, UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
6
|
+
|
|
7
|
+
interface DimesProviderProps {
|
|
8
|
+
client: DimesClient;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
declare function DimesProvider({ client, children }: DimesProviderProps): react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare function useDimesClient(): DimesClient;
|
|
13
|
+
|
|
14
|
+
type QuotePhase = "idle" | "loading-draft" | "draft-ready" | "promoting" | "promoted" | "market-moved" | "error";
|
|
15
|
+
interface QuoteState {
|
|
16
|
+
phase: QuotePhase;
|
|
17
|
+
draft?: Offer;
|
|
18
|
+
offer?: Offer;
|
|
19
|
+
corrections: HintAdjustment[];
|
|
20
|
+
retries: number;
|
|
21
|
+
error?: unknown;
|
|
22
|
+
}
|
|
23
|
+
interface UseQuoteReturn {
|
|
24
|
+
state: QuoteState;
|
|
25
|
+
execute: (params: QuoteParams, options?: QuoteOptions) => Promise<QuoteResult>;
|
|
26
|
+
reset: () => void;
|
|
27
|
+
}
|
|
28
|
+
declare function useQuote(): UseQuoteReturn;
|
|
29
|
+
|
|
30
|
+
declare function useMarkets(params?: GetMarketsParams, queryOptions?: Partial<UseQueryOptions<Paginated<Market>>>): UseQueryResult<Paginated<Market>>;
|
|
31
|
+
declare function useMarket(ticker: string, queryOptions?: Partial<UseQueryOptions<Market>>): UseQueryResult<Market>;
|
|
32
|
+
|
|
33
|
+
declare function usePositions(params?: GetPositionsParams, queryOptions?: Partial<UseQueryOptions<Position[]>>): UseQueryResult<Position[]>;
|
|
34
|
+
|
|
35
|
+
declare function useContractInfo(queryOptions?: Partial<UseQueryOptions<ContractInfo>>): UseQueryResult<ContractInfo>;
|
|
36
|
+
|
|
37
|
+
declare function useLimits(queryOptions?: Partial<UseQueryOptions<CustomerLimit>>): UseQueryResult<CustomerLimit>;
|
|
38
|
+
|
|
39
|
+
declare function useCancelPosition(mutationOptions?: Partial<UseMutationOptions<void, Error, string>>): UseMutationResult<void, Error, string>;
|
|
40
|
+
|
|
41
|
+
export { DimesProvider, type DimesProviderProps, type QuotePhase, type QuoteState, type UseQuoteReturn, useCancelPosition, useContractInfo, useDimesClient, useLimits, useMarket, useMarkets, usePositions, useQuote };
|