drishti-sdk 0.2.13 → 1.0.1
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 +51 -23
- package/dist/drishti-sdk.min.js +2 -0
- package/dist/drishti-sdk.min.js.map +7 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/websocket-types.d.ts +1 -0
- package/dist/websocket-types.d.ts.map +1 -1
- package/dist/websocket.d.ts +29 -10
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +146 -69
- package/dist/websocket.js.map +1 -1
- package/package.json +11 -4
package/README.md
CHANGED
|
@@ -151,6 +151,34 @@ try {
|
|
|
151
151
|
|
|
152
152
|
## WebSocket Usage (`/v1/ws`)
|
|
153
153
|
|
|
154
|
+
### Event listeners
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
import { DrishtiClient } from "drishti-sdk";
|
|
158
|
+
|
|
159
|
+
const client = new DrishtiClient({ apiKey: process.env.DRISHTI_API_KEY! });
|
|
160
|
+
|
|
161
|
+
const ws = client.websocket({
|
|
162
|
+
reconnectInitialDelayMs: 1000,
|
|
163
|
+
reconnectMaxDelayMs: 30000,
|
|
164
|
+
onReconnectAttempt: (attempt, delayMs, reason) => {
|
|
165
|
+
console.log("reconnect", { attempt, delayMs, reason });
|
|
166
|
+
},
|
|
167
|
+
onData: (event) => {
|
|
168
|
+
if (event.kind === "data") console.log(event.channel, event.data);
|
|
169
|
+
},
|
|
170
|
+
onAnnouncements: (announcement) => {
|
|
171
|
+
console.log("announcement", announcement);
|
|
172
|
+
},
|
|
173
|
+
onAlerts: (alert) => {
|
|
174
|
+
console.log("alert", alert);
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
await ws.subscribe({ product: "alerts", symbols: ["RELIANCE"] });
|
|
179
|
+
// listeners fire as events arrive; the session reconnects automatically
|
|
180
|
+
```
|
|
181
|
+
|
|
154
182
|
### Async iterator style
|
|
155
183
|
|
|
156
184
|
```ts
|
|
@@ -159,7 +187,6 @@ import { DrishtiClient } from "drishti-sdk";
|
|
|
159
187
|
const client = new DrishtiClient({ apiKey: process.env.DRISHTI_API_KEY! });
|
|
160
188
|
const ws = client.websocket();
|
|
161
189
|
|
|
162
|
-
await ws.connect();
|
|
163
190
|
await ws.subscribe({ product: "announcements", symbols: ["RELIANCE"], detailed: false });
|
|
164
191
|
|
|
165
192
|
for await (const event of ws.events()) {
|
|
@@ -173,30 +200,20 @@ for await (const event of ws.events()) {
|
|
|
173
200
|
}
|
|
174
201
|
```
|
|
175
202
|
|
|
176
|
-
|
|
203
|
+
Channel-specific listeners can be registered after connect:
|
|
177
204
|
|
|
178
205
|
```ts
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
206
|
+
const onAnnouncement = (announcement: Record<string, unknown>) => {
|
|
207
|
+
console.log("announcement", announcement);
|
|
208
|
+
};
|
|
182
209
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
reconnectInitialDelayMs: 1000,
|
|
186
|
-
reconnectMaxDelayMs: 30000,
|
|
187
|
-
onReconnectAttempt: (attempt, delayMs, reason) => {
|
|
188
|
-
console.log("reconnect", { attempt, delayMs, reason });
|
|
189
|
-
},
|
|
190
|
-
onData: (event) => {
|
|
191
|
-
if (event.kind === "data") console.log(event.channel, event.data);
|
|
192
|
-
},
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
await ws.connect();
|
|
196
|
-
await ws.subscribe({ product: "alerts", symbols: ["RELIANCE"] });
|
|
197
|
-
await ws.run();
|
|
210
|
+
ws.onAnnouncements(onAnnouncement);
|
|
211
|
+
ws.off("announcements", onAnnouncement);
|
|
198
212
|
```
|
|
199
213
|
|
|
214
|
+
The same channels are also available via `ws.on("announcements", handler)`.
|
|
215
|
+
`onData` still receives every data event across all channels.
|
|
216
|
+
|
|
200
217
|
Direct import is also supported:
|
|
201
218
|
|
|
202
219
|
```ts
|
|
@@ -221,23 +238,34 @@ Supported subscription products:
|
|
|
221
238
|
|
|
222
239
|
Useful session options:
|
|
223
240
|
|
|
224
|
-
- `autoReconnect`
|
|
225
241
|
- `reconnectInitialDelayMs`
|
|
226
242
|
- `reconnectMaxDelayMs`
|
|
227
243
|
- `reconnectBackoffMultiplier`
|
|
228
244
|
- `reconnectJitterRatio`
|
|
245
|
+
- `reconnectWarnAfterAttempts`
|
|
229
246
|
- `onSubscribed`
|
|
230
247
|
- `onData`
|
|
248
|
+
- `onNews`
|
|
249
|
+
- `onAnnouncements`
|
|
250
|
+
- `onEarnings`
|
|
251
|
+
- `onConcalls`
|
|
252
|
+
- `onAlerts`
|
|
231
253
|
- `onError`
|
|
232
254
|
- `onMessage`
|
|
233
255
|
- `onOpen`
|
|
234
256
|
- `onClose`
|
|
235
257
|
- `onReconnectAttempt`
|
|
258
|
+
- `onReconnectWarning`
|
|
259
|
+
|
|
260
|
+
The session connects automatically when created and keeps retrying in the
|
|
261
|
+
background after disconnects. Connection failures are retried with backoff; a
|
|
262
|
+
warning is logged (or `onReconnectWarning` is called) after repeated failures,
|
|
263
|
+
then retries continue indefinitely until `close()` is called.
|
|
236
264
|
|
|
237
265
|
Subscription messages accept an object shaped like
|
|
238
266
|
`{ product, symbols?, detailed? }`. Symbols are normalized to uppercase and
|
|
239
|
-
de-duplicated before the message is sent.
|
|
240
|
-
|
|
267
|
+
de-duplicated before the message is sent. Subscriptions are replayed after
|
|
268
|
+
every reconnect.
|
|
241
269
|
|
|
242
270
|
Event shapes:
|
|
243
271
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var DrishtiSDK=(()=>{var v=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var H=(r,e,t)=>e in r?v(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var J=(r,e)=>{for(var t in e)v(r,t,{get:e[t],enumerable:!0})},T=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of O(e))!Q.call(r,s)&&s!==t&&v(r,s,{get:()=>e[s],enumerable:!(n=L(e,s))||n.enumerable});return r};var _=r=>T(v({},"__esModule",{value:!0}),r);var i=(r,e,t)=>H(r,typeof e!="symbol"?e+"":e,t);var K={};J(K,{DEFAULT_BASE_URL:()=>P,DRISHTI_WS_PRODUCTS:()=>g,DrishtiApiError:()=>h,DrishtiClient:()=>D,DrishtiWebSocketError:()=>d,DrishtiWebSocketSession:()=>p,buildWebSocketUrl:()=>x,parseWebSocketMessage:()=>E,serializeAnnouncementsQueryParams:()=>R,serializeQueryParams:()=>l,streamProduct:()=>I});var d=class extends Error{constructor(e){super(e),this.name="DrishtiWebSocketError"}},h=class extends Error{constructor(t,n){super(`Drishti API error ${t}: ${String(n)}`);i(this,"statusCode");i(this,"body");this.name="DrishtiApiError",this.statusCode=t,this.body=n}};var g=["news","announcements","earnings","concalls","alerts"];function W(r){let e=new Set;for(let t of r??[]){let n=String(t).trim().toUpperCase();e.add(n)}return Array.from(e)}function x(r,e){let n=r.replace(/\/+$/,"").replace(/^https:/,"wss:").replace(/^http:/,"ws:"),s=new URL(`${n}/v1/ws`);return e&&s.searchParams.set("api_key",e),s.toString()}function E(r){let e;try{e=JSON.parse(r)}catch{return{kind:"error",message:"Invalid JSON"}}if(!e||typeof e!="object"||Array.isArray(e))return{kind:"error",message:"Expected a JSON object"};let t=e;if(t.status==="subscribed"){let n=Array.isArray(t.symbols)?t.symbols.map(s=>String(s)):[];return{kind:"subscribed",product:String(t.product??""),tier:String(t.tier??""),fullFeed:!!t.full_feed,symbols:n,detailed:t.detailed!==!1}}if(t.error!==void 0)return{kind:"error",message:String(t.error),code:t.code===void 0||t.code===null?void 0:String(t.code)};if(t.channel!==void 0){let n=String(t.channel),s=t.data;return s&&typeof s=="object"&&!Array.isArray(s)?f(n)?{kind:"data",channel:n,data:s}:{kind:"data",channel:n,data:s}:f(n)?{kind:"data",channel:n,data:{raw:s}}:{kind:"data",channel:n,data:{raw:s}}}return{kind:"raw",payload:t}}function f(r){return g.includes(r)}function A(r){return JSON.stringify({op:"subscribe",product:r.product,symbols:W(r.symbols),detailed:r.detailed!==!1})}var p=class{constructor(e){i(this,"apiKey");i(this,"baseUrl");i(this,"headers");i(this,"webSocketImpl");i(this,"reconnectInitialDelayMs");i(this,"reconnectMaxDelayMs");i(this,"reconnectBackoffMultiplier");i(this,"reconnectJitterRatio");i(this,"reconnectWarnAfterAttempts");i(this,"onOpen");i(this,"onClose");i(this,"onReconnectAttempt");i(this,"onReconnectWarning");i(this,"handlers",new Map);i(this,"channelHandlers",new Map);i(this,"subscriptions",new Map);i(this,"socket",null);i(this,"queue",[]);i(this,"waiters",[]);i(this,"manuallyClosed",!1);i(this,"maintainingConnection",!1);if(!e.apiKey||e.apiKey.trim().length===0)throw new Error("DrishtiWebSocketSession requires a non-empty apiKey");this.apiKey=e.apiKey,this.baseUrl=e.baseUrl??P,this.headers={...e.headers??{}},this.webSocketImpl=e.webSocketImpl??WebSocket,this.reconnectInitialDelayMs=Math.max(100,e.reconnectInitialDelayMs??1e3),this.reconnectMaxDelayMs=Math.max(this.reconnectInitialDelayMs,e.reconnectMaxDelayMs??3e4),this.reconnectBackoffMultiplier=Math.max(1,e.reconnectBackoffMultiplier??2),this.reconnectJitterRatio=Math.min(1,Math.max(0,e.reconnectJitterRatio??.2)),this.reconnectWarnAfterAttempts=Math.max(1,e.reconnectWarnAfterAttempts??10),this.onOpen=e.onOpen,this.onClose=e.onClose,this.onReconnectAttempt=e.onReconnectAttempt,this.onReconnectWarning=e.onReconnectWarning,e.onSubscribed&&this.on("subscribed",e.onSubscribed),e.onData&&this.on("data",e.onData),e.onNews&&this.on("news",e.onNews),e.onAnnouncements&&this.on("announcements",e.onAnnouncements),e.onEarnings&&this.on("earnings",e.onEarnings),e.onConcalls&&this.on("concalls",e.onConcalls),e.onAlerts&&this.on("alerts",e.onAlerts),e.onError&&this.on("error",e.onError),e.onMessage&&this.on("message",e.onMessage),this.startConnectionMaintenance("initial")}get connected(){return this.socket!==null&&this.socket.readyState===this.webSocketImpl.OPEN}on(e,t){if(f(e)){this.addChannelListener(e,t);return}this.addEventListener(e,t)}off(e,t){if(f(e)){this.removeChannelListener(e,t);return}this.removeEventListener(e,t)}onNews(e){this.addChannelListener("news",e)}onAnnouncements(e){this.addChannelListener("announcements",e)}onEarnings(e){this.addChannelListener("earnings",e)}onConcalls(e){this.addChannelListener("concalls",e)}onAlerts(e){this.addChannelListener("alerts",e)}addEventListener(e,t){let n=this.handlers.get(e)??[];n.push(t),this.handlers.set(e,n)}removeEventListener(e,t){let s=(this.handlers.get(e)??[]).filter(a=>a!==t);if(s.length===0){this.handlers.delete(e);return}this.handlers.set(e,s)}addChannelListener(e,t){let n=this.channelHandlers.get(e)??[];n.push(t),this.channelHandlers.set(e,n)}removeChannelListener(e,t){let s=(this.channelHandlers.get(e)??[]).filter(a=>a!==t);if(s.length===0){this.channelHandlers.delete(e);return}this.channelHandlers.set(e,s)}startConnectionMaintenance(e){this.manuallyClosed||this.maintainingConnection||this.connected||this.maintainConnection(e)}async maintainConnection(e){if(this.manuallyClosed||this.maintainingConnection||this.connected)return;this.maintainingConnection=!0;let t=0,n=this.reconnectInitialDelayMs;for(;!this.manuallyClosed&&!this.connected;){t+=1,t>1&&(await this.onReconnectAttempt?.(t-1,n,e),await new Promise(s=>setTimeout(s,this.withJitter(n))));try{let s=await this.openSocket();this.socket=s,await this.resubscribeAll(),await this.onOpen?.(),t=0,n=this.reconnectInitialDelayMs;break}catch{n>=this.reconnectMaxDelayMs&&t>=this.reconnectWarnAfterAttempts&&(await this.emitReconnectWarning(t,e),t=0),n=Math.min(Math.floor(n*this.reconnectBackoffMultiplier),this.reconnectMaxDelayMs)}}this.maintainingConnection=!1}async emitReconnectWarning(e,t){if(this.onReconnectWarning){await this.onReconnectWarning(e,t);return}console.warn(`[drishti-sdk] WebSocket still unable to connect after ${e} attempts (${t}); retrying`)}async openSocket(){let e=this.createSocket();return await new Promise((t,n)=>{let s=()=>{c(),t()},a=()=>{c(),n(new d("WebSocket connection failed"))},o=u=>{c();let k="code"in u?u.code:0;n(new d(`WebSocket closed before open (code ${k})`))},c=()=>{e.removeEventListener("open",s),e.removeEventListener("error",a),e.removeEventListener("close",o)};e.addEventListener("open",s),e.addEventListener("error",a),e.addEventListener("close",o)}),this.attachSocketHandlers(e),e}attachSocketHandlers(e){e.addEventListener("message",t=>{let n=typeof t.data=="string"?t.data:String(t.data);this.handleIncoming(n)}),e.addEventListener("close",()=>{if(this.socket=null,this.onClose?.("WebSocket closed"),this.manuallyClosed){this.rejectWaiters("WebSocket closed");return}this.startConnectionMaintenance("WebSocket closed")})}createSocket(){let e=x(this.baseUrl,this.apiKey),t=this.webSocketImpl,n={...this.headers,"X-API-Key":this.apiKey};try{return new t(e,void 0,{headers:n})}catch{return new this.webSocketImpl(e)}}async close(){if(this.manuallyClosed=!0,this.maintainingConnection=!1,this.socket===null){this.rejectWaiters("WebSocket closed");return}this.socket.close(),this.socket=null,this.rejectWaiters("WebSocket closed")}async subscribe(e){let t={product:e.product,symbols:W(e.symbols),detailed:e.detailed!==!1};this.subscriptions.set(e.product,t),this.startConnectionMaintenance("subscribe"),!(!this.connected||this.socket===null)&&this.socket.send(A(t))}async dispatch(e){let t=[e.kind,"message"];for(let a of t){let o=this.handlers.get(a)??[];for(let c of o)await c(e)}if(e.kind!=="data"||!f(e.channel))return;let n=this.channelHandlers.get(e.channel)??[],s=e.data;for(let a of n)await a(s)}async handleIncoming(e){let t=E(e);await this.dispatch(t);let n=this.waiters.shift();if(n){n.resolve(t);return}this.queue.push(t)}rejectWaiters(e){let t=new d(e);for(;this.waiters.length>0;)this.waiters.shift()?.reject(t)}async resubscribeAll(){if(!(!this.connected||this.socket===null))for(let e of this.subscriptions.values())this.socket.send(A(e))}withJitter(e){if(this.reconnectJitterRatio<=0)return e;let t=Math.floor(e*this.reconnectJitterRatio),n=Math.floor(Math.random()*(t*2+1))-t;return Math.max(0,e+n)}async nextEvent(){let e=this.queue.shift();if(e)return e;if(this.manuallyClosed)throw new d("WebSocket closed");return await new Promise((t,n)=>{this.waiters.push({resolve:t,reject:n})})}async*events(){for(this.startConnectionMaintenance("events");!this.manuallyClosed;)yield await this.nextEvent()}};async function*I(r){let e=new p({apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,webSocketImpl:r.webSocketImpl});try{await e.subscribe({product:r.product,symbols:r.symbols,detailed:r.detailed});for await(let t of e.events())t.kind==="data"&&(yield t.data)}finally{await e.close()}}function U(r){return r.join(",")}function l(r,e=[]){let t=new Set(e),n={};for(let[s,a]of Object.entries(r))if(a!=null){if(t.has(s)&&Array.isArray(a)){a.length>0&&(n[s]=U(a));continue}(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(n[s]=a)}return n}function R(r){return l(r,["symbols","scrip_codes","categories"])}var P="https://developers.manasija.in";function M(r){if(!r||typeof r!="object"||Array.isArray(r))return r;let e=r;return e.earnings_table===void 0&&e.earnings_table_extraction!==void 0&&(e.earnings_table=e.earnings_table_extraction),e}function j(r,e){let t=r.replace(/\/+$/,""),n=e.replace(/^\/+/,"");return`${t}/${n}`}async function q(r){if(r.status===204)return null;let e=r.headers.get("content-type")??"",t;if(e.includes("application/json")){let n=await r.text();t=n.length>0?JSON.parse(n):null}else t=await r.text();if(!r.ok)throw new h(r.status,t);return t}var D=class{constructor(e){i(this,"baseUrl");i(this,"apiKey");i(this,"extraHeaders");i(this,"fetchImpl");i(this,"retryOptions");if(this.baseUrl=e.baseUrl??P,this.apiKey=e.apiKey,this.extraHeaders={...e.headers},this.fetchImpl=e.fetchImpl,this.retryOptions={maxRetries:e.retry?.maxRetries??2,initialDelayMs:e.retry?.initialDelayMs??300,maxDelayMs:e.retry?.maxDelayMs??5e3,multiplier:e.retry?.multiplier??2,retryOnStatuses:e.retry?.retryOnStatuses??[408,409,425,429,500,502,503,504]},!this.apiKey||this.apiKey.trim().length===0)throw new Error("DrishtiClient requires a non-empty apiKey")}resolveRetryOptions(e){return{maxRetries:e?.maxRetries??this.retryOptions.maxRetries,initialDelayMs:e?.initialDelayMs??this.retryOptions.initialDelayMs,maxDelayMs:e?.maxDelayMs??this.retryOptions.maxDelayMs,multiplier:e?.multiplier??this.retryOptions.multiplier,retryOnStatuses:e?.retryOnStatuses??this.retryOptions.retryOnStatuses}}shouldRetry(e,t,n){return t?n.includes(t.status):e instanceof TypeError}computeDelayMs(e,t){let n=t.initialDelayMs*Math.pow(t.multiplier,Math.max(0,e-1));return Math.min(t.maxDelayMs,n)}mergeHeaders(e){let t=new Headers(e);for(let[n,s]of Object.entries(this.extraHeaders))t.set(n,s);return t.set("X-API-Key",this.apiKey),t}buildPath(e,t){if(!t)return e;let n=e.replace(/:([a-zA-Z0-9_]+)/g,(s,a)=>{let o=t[a];if(o==null)throw new Error(`Missing required path param: ${a}`);return encodeURIComponent(String(o))});return n=n.replace(/\{([a-zA-Z0-9_]+)\}/g,(s,a)=>{let o=t[a];if(o==null)throw new Error(`Missing required path param: ${a}`);return encodeURIComponent(String(o))}),n}appendQuery(e,t){if(t){for(let[n,s]of Object.entries(t))if(s!=null){if(Array.isArray(s)){for(let a of s)a!=null&&e.searchParams.append(n,String(a));continue}e.searchParams.set(n,String(s))}}}async request(e,t,n={}){let s=this.buildPath(t,n.pathParams).replace(/^\/+/,""),a=new URL(j(this.baseUrl,s));this.appendQuery(a,n.query);let o=this.mergeHeaders({Accept:"application/json",...n.headers}),c=typeof FormData<"u"&&n.body instanceof FormData,u;n.body===void 0||n.body===null?u=void 0:c?u=n.body:(u=JSON.stringify(n.body),o.set("Content-Type","application/json"));let k=this.fetchImpl?this.fetchImpl.bind(globalThis):((m,y)=>globalThis.fetch(m,y)),S=this.resolveRetryOptions(n.retry),w=S.maxRetries+1,C=null;for(let m=1;m<=w;m+=1){let y=null;try{if(y=await k(a.toString(),{method:e.toUpperCase(),headers:o,body:u}),y.ok||m>=w||!this.shouldRetry(null,y,S.retryOnStatuses))return q(y)}catch(b){if(C=b,m>=w||!this.shouldRetry(b,null,S.retryOnStatuses))throw b}let B=this.computeDelayMs(m,S);await new Promise(b=>setTimeout(b,B))}throw C instanceof Error?C:new Error("Request failed after retries")}get(e,t={}){return this.request("GET",e,t)}post(e,t={}){return this.request("POST",e,t)}put(e,t={}){return this.request("PUT",e,t)}patch(e,t={}){return this.request("PATCH",e,t)}delete(e,t={}){return this.request("DELETE",e,t)}getNews(e={}){return this.get("/v1/news",{query:l(e,["symbols","scrip_codes"])})}getSymbolsMetadata(e){return this.get("/v1/symbols/metadata",{query:l(e,["symbols","scrip_codes"])})}getAnnouncementsCategories(){return this.get("/v1/announcements/categories")}getAnnouncements(e={}){return this.get("/v1/announcements",{query:R(e)})}getAnnouncementsAttachments(e){return this.get("/v1/announcements/attachments",{query:l(e,["ids"])})}postDailySummary(e){return this.post("/v1/daily-summary",{body:e.body})}getEarnings(e={}){return this.get("/v1/earnings",{query:l(e,["symbols","scrip_codes"])}).then(t=>(t.data=t.data.map(n=>M(n)),t))}getEarningsDetail(e){return this.get("/v1/earnings/detail",{query:l(e)}).then(t=>M(t))}getEarningsAttachments(e){return this.get("/v1/earnings/attachments",{query:l(e,["ids"])})}getConcalls(e={}){return this.get("/v1/concalls",{query:l(e,["symbols","scrip_codes"])})}getUpcomingConcalls(e={}){return this.get("/v1/concalls/upcoming",{query:l(e,["symbols","scrip_codes"])})}getConcallsDetail(e){return this.get("/v1/concalls/detail",{query:l(e)})}getConcallsTranscript(e){return this.get("/v1/concalls/transcript",{query:l(e)})}postConcallsTranscripts(e){return this.post("/v1/concalls/transcripts",{body:{items:e.items}})}getAlerts(e={}){return this.get("/v1/alerts",{query:l(e,["symbols","scrip_codes","type"])})}getAccount(){return this.get("/v1/account")}getAccountLimits(){return this.get("/v1/account/limits")}getAccountUsage(){return this.get("/v1/account/usage")}getAccountLedger(e={}){return this.get("/v1/account/ledger",{query:l(e)})}postBatchJobs(e){return this.postBatchJobsFile(e)}postBatchJobsFile(e){let t=new FormData;return t.append("file",e.file,e.filename??"batch.jsonl"),e.display_name!==void 0&&t.append("display_name",e.display_name),e.metadata!==void 0&&t.append("metadata",e.metadata),this.post("/v1/batch/jobs",{body:t})}getBatchJobs(e={}){return this.get("/v1/batch/jobs",{query:l(e)})}getBatchJobsJobId(e){return this.get("/v1/batch/jobs/{job_id}",{pathParams:{job_id:e.job_id}})}deleteBatchJobsJobId(e){return this.delete("/v1/batch/jobs/{job_id}",{pathParams:{job_id:e.job_id}})}getBatchJobsJobIdResults(e){return this.get("/v1/batch/jobs/{job_id}/results",{pathParams:{job_id:e.job_id}})}async waitForBatchJobCompletion(e){let t=e.pollIntervalMs??2e3,n=e.timeoutMs??300*1e3,s=new Set((e.terminalStatuses??["succeeded","partial","failed","cancelled","completed"]).map(o=>o.toLowerCase())),a=Date.now();for(;;){let o=await this.getBatchJobsJobId({job_id:e.job_id});if(s.has(o.status.toLowerCase()))return o;if(Date.now()-a>=n)throw new Error(`Timed out waiting for batch job ${e.job_id} to complete`);await new Promise(c=>setTimeout(c,t))}}async submitBatchJobAndWait(e){let t=await this.postBatchJobsFile({file:e.file,filename:e.filename,display_name:e.display_name,metadata:e.metadata});return this.waitForBatchJobCompletion({job_id:t.id,pollIntervalMs:e.pollIntervalMs,timeoutMs:e.timeoutMs,terminalStatuses:e.terminalStatuses})}websocket(e={}){return new p({apiKey:this.apiKey,baseUrl:this.baseUrl,headers:this.extraHeaders,...e})}};return _(K);})();
|
|
2
|
+
//# sourceMappingURL=drishti-sdk.min.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/errors.ts", "../src/websocket-types.ts", "../src/websocket.ts", "../src/params.ts", "../src/client.ts"],
|
|
4
|
+
"sourcesContent": ["export { DEFAULT_BASE_URL, DrishtiClient } from \"./client.js\";\nexport type {\n BatchWaitOptions,\n DrishtiClientOptions,\n JsonBody,\n PathParams,\n QueryParams,\n QueryValue,\n RetryOptions,\n RequestOptions,\n} from \"./client.js\";\nexport type * from \"./types.js\";\nexport type * from \"./params.js\";\nexport { serializeAnnouncementsQueryParams, serializeQueryParams } from \"./params.js\";\nexport { DrishtiApiError, DrishtiWebSocketError } from \"./errors.js\";\nexport type { ApiErrorBody } from \"./errors.js\";\nexport {\n DRISHTI_WS_PRODUCTS,\n DrishtiWebSocketSession,\n buildWebSocketUrl,\n parseWebSocketMessage,\n streamProduct,\n} from \"./websocket.js\";\nexport type {\n ChannelDataHandler,\n DrishtiWebSocketProduct,\n DrishtiWebSocketSessionOptions,\n DataEvent,\n DataPayloadByChannel,\n ErrorEvent,\n KnownDataEvent,\n RawEvent,\n SubscribeOptions,\n SubscribedEvent,\n UnknownDataEvent,\n WebSocketEvent,\n WebSocketHandler,\n} from \"./websocket.js\";\n", "export type ApiErrorBody = unknown;\n\nexport class DrishtiWebSocketError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"DrishtiWebSocketError\";\n }\n}\n\nexport class DrishtiApiError extends Error {\n readonly statusCode: number;\n readonly body: ApiErrorBody;\n\n constructor(statusCode: number, body: ApiErrorBody) {\n super(`Drishti API error ${statusCode}: ${String(body)}`);\n this.name = \"DrishtiApiError\";\n this.statusCode = statusCode;\n this.body = body;\n }\n}\n", "import type {\n Alert,\n AnnouncementDetail,\n AnnouncementListItem,\n Concall,\n ConcallListItem,\n EarningsDetail,\n EarningsListItem,\n NewsItem,\n} from \"./types.js\";\n\nexport const DRISHTI_WS_PRODUCTS = [\n \"news\",\n \"announcements\",\n \"earnings\",\n \"concalls\",\n \"alerts\",\n] as const;\n\nexport type DrishtiWebSocketProduct = (typeof DRISHTI_WS_PRODUCTS)[number];\n\nexport type SubscribeOptions = Readonly<{\n product: DrishtiWebSocketProduct;\n symbols?: readonly string[];\n detailed?: boolean;\n}>;\n\nexport type SubscribedEvent = Readonly<{\n kind: \"subscribed\";\n product: string;\n tier: string;\n fullFeed: boolean;\n symbols: string[];\n detailed: boolean;\n}>;\n\nexport type DataPayloadByChannel = Readonly<{\n news: NewsItem;\n announcements: AnnouncementDetail | AnnouncementListItem;\n earnings: EarningsDetail | EarningsListItem;\n concalls: Concall | ConcallListItem;\n alerts: Alert;\n}>;\n\nexport type KnownDataEvent = {\n [K in DrishtiWebSocketProduct]: Readonly<{\n kind: \"data\";\n channel: K;\n data: DataPayloadByChannel[K];\n }>;\n}[DrishtiWebSocketProduct];\n\nexport type UnknownDataEvent = Readonly<{\n kind: \"data\";\n channel: string;\n data: Record<string, unknown>;\n}>;\n\nexport type DataEvent = KnownDataEvent | UnknownDataEvent;\n\nexport type ErrorEvent = Readonly<{\n kind: \"error\";\n message: string;\n code?: string;\n}>;\n\nexport type RawEvent = Readonly<{\n kind: \"raw\";\n payload: Record<string, unknown>;\n}>;\n\nexport type WebSocketEvent = SubscribedEvent | DataEvent | ErrorEvent | RawEvent;\n\nexport type WebSocketHandler = (event: WebSocketEvent) => void | Promise<void>;\n\nexport type ChannelDataHandler<K extends DrishtiWebSocketProduct> = (\n data: DataPayloadByChannel[K],\n) => void | Promise<void>;\n", "import { DEFAULT_BASE_URL } from \"./client.js\";\nimport { DrishtiWebSocketError } from \"./errors.js\";\nimport {\n DRISHTI_WS_PRODUCTS,\n} from \"./websocket-types.js\";\nimport type {\n ChannelDataHandler,\n DrishtiWebSocketProduct,\n DataPayloadByChannel,\n SubscribeOptions,\n WebSocketEvent,\n WebSocketHandler,\n} from \"./websocket-types.js\";\n\nexport {\n DRISHTI_WS_PRODUCTS,\n type DrishtiWebSocketProduct,\n type DataEvent,\n type DataPayloadByChannel,\n type ErrorEvent,\n type KnownDataEvent,\n type RawEvent,\n type SubscribeOptions,\n type SubscribedEvent,\n type UnknownDataEvent,\n type ChannelDataHandler,\n type WebSocketEvent,\n type WebSocketHandler,\n} from \"./websocket-types.js\";\n\nexport type DrishtiWebSocketSessionOptions = Readonly<{\n apiKey: string;\n baseUrl?: string;\n headers?: Record<string, string>;\n webSocketImpl?: typeof WebSocket;\n reconnectInitialDelayMs?: number;\n reconnectMaxDelayMs?: number;\n reconnectBackoffMultiplier?: number;\n reconnectJitterRatio?: number;\n reconnectWarnAfterAttempts?: number;\n onSubscribed?: WebSocketHandler;\n onData?: WebSocketHandler;\n onNews?: ChannelDataHandler<\"news\">;\n onAnnouncements?: ChannelDataHandler<\"announcements\">;\n onEarnings?: ChannelDataHandler<\"earnings\">;\n onConcalls?: ChannelDataHandler<\"concalls\">;\n onAlerts?: ChannelDataHandler<\"alerts\">;\n onError?: WebSocketHandler;\n onMessage?: WebSocketHandler;\n onOpen?: () => void | Promise<void>;\n onClose?: (reason: string) => void | Promise<void>;\n onReconnectAttempt?: (attempt: number, delayMs: number, reason: string) => void | Promise<void>;\n onReconnectWarning?: (attempt: number, reason: string) => void | Promise<void>;\n}>;\n\nfunction normalizeSymbols(symbols: readonly string[] | undefined): string[] {\n const seen = new Set<string>();\n for (const symbol of symbols ?? []) {\n const token = String(symbol).trim().toUpperCase();\n seen.add(token);\n }\n return Array.from(seen);\n}\n\nexport function buildWebSocketUrl(baseUrl: string, apiKey?: string): string {\n const base = baseUrl.replace(/\\/+$/, \"\");\n const wsBase = base.replace(/^https:/, \"wss:\").replace(/^http:/, \"ws:\");\n const url = new URL(`${wsBase}/v1/ws`);\n if (apiKey) {\n url.searchParams.set(\"api_key\", apiKey);\n }\n return url.toString();\n}\n\nexport function parseWebSocketMessage(raw: string): WebSocketEvent {\n let payload: unknown;\n try {\n payload = JSON.parse(raw) as unknown;\n } catch {\n return { kind: \"error\", message: \"Invalid JSON\" };\n }\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return { kind: \"error\", message: \"Expected a JSON object\" };\n }\n const record = payload as Record<string, unknown>;\n if (record.status === \"subscribed\") {\n const symbols = Array.isArray(record.symbols)\n ? record.symbols.map((item) => String(item))\n : [];\n return {\n kind: \"subscribed\",\n product: String(record.product ?? \"\"),\n tier: String(record.tier ?? \"\"),\n fullFeed: Boolean(record.full_feed),\n symbols,\n detailed: record.detailed !== false,\n };\n }\n if (record.error !== undefined) {\n return {\n kind: \"error\",\n message: String(record.error),\n code: record.code === undefined || record.code === null ? undefined : String(record.code),\n };\n }\n if (record.channel !== undefined) {\n const channel = String(record.channel);\n const data = record.data;\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n if (isDrishtiWebSocketProduct(channel)) {\n return {\n kind: \"data\",\n channel,\n data: data as DataPayloadByChannel[typeof channel],\n };\n }\n return {\n kind: \"data\",\n channel,\n data: data as Record<string, unknown>,\n };\n }\n if (isDrishtiWebSocketProduct(channel)) {\n return {\n kind: \"data\",\n channel,\n data: { raw: data } as unknown as DataPayloadByChannel[typeof channel],\n };\n }\n return {\n kind: \"data\",\n channel,\n data: { raw: data },\n };\n }\n return { kind: \"raw\", payload: record };\n}\n\nfunction isDrishtiWebSocketProduct(value: string): value is DrishtiWebSocketProduct {\n return (DRISHTI_WS_PRODUCTS as readonly string[]).includes(value);\n}\n\nfunction subscribeMessage(options: SubscribeOptions): string {\n return JSON.stringify({\n op: \"subscribe\",\n product: options.product,\n symbols: normalizeSymbols(options.symbols),\n detailed: options.detailed !== false,\n });\n}\n\nexport class DrishtiWebSocketSession {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n private readonly webSocketImpl: typeof WebSocket;\n private readonly reconnectInitialDelayMs: number;\n private readonly reconnectMaxDelayMs: number;\n private readonly reconnectBackoffMultiplier: number;\n private readonly reconnectJitterRatio: number;\n private readonly reconnectWarnAfterAttempts: number;\n private readonly onOpen?: () => void | Promise<void>;\n private readonly onClose?: (reason: string) => void | Promise<void>;\n private readonly onReconnectAttempt?: (attempt: number, delayMs: number, reason: string) => void | Promise<void>;\n private readonly onReconnectWarning?: (attempt: number, reason: string) => void | Promise<void>;\n private readonly handlers = new Map<string, WebSocketHandler[]>();\n private readonly channelHandlers = new Map<DrishtiWebSocketProduct, ChannelDataHandler<DrishtiWebSocketProduct>[]>();\n private readonly subscriptions = new Map<DrishtiWebSocketProduct, SubscribeOptions>();\n private socket: WebSocket | null = null;\n private readonly queue: WebSocketEvent[] = [];\n private readonly waiters: Array<{\n resolve: (event: WebSocketEvent) => void;\n reject: (error: Error) => void;\n }> = [];\n private manuallyClosed = false;\n private maintainingConnection = false;\n\n constructor(options: DrishtiWebSocketSessionOptions) {\n if (!options.apiKey || options.apiKey.trim().length === 0) {\n throw new Error(\"DrishtiWebSocketSession requires a non-empty apiKey\");\n }\n this.apiKey = options.apiKey;\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.headers = { ...(options.headers ?? {}) };\n this.webSocketImpl = options.webSocketImpl ?? WebSocket;\n this.reconnectInitialDelayMs = Math.max(100, options.reconnectInitialDelayMs ?? 1_000);\n this.reconnectMaxDelayMs = Math.max(this.reconnectInitialDelayMs, options.reconnectMaxDelayMs ?? 30_000);\n this.reconnectBackoffMultiplier = Math.max(1, options.reconnectBackoffMultiplier ?? 2);\n this.reconnectJitterRatio = Math.min(1, Math.max(0, options.reconnectJitterRatio ?? 0.2));\n this.reconnectWarnAfterAttempts = Math.max(1, options.reconnectWarnAfterAttempts ?? 10);\n this.onOpen = options.onOpen;\n this.onClose = options.onClose;\n this.onReconnectAttempt = options.onReconnectAttempt;\n this.onReconnectWarning = options.onReconnectWarning;\n if (options.onSubscribed) {\n this.on(\"subscribed\", options.onSubscribed);\n }\n if (options.onData) {\n this.on(\"data\", options.onData);\n }\n if (options.onNews) {\n this.on(\"news\", options.onNews);\n }\n if (options.onAnnouncements) {\n this.on(\"announcements\", options.onAnnouncements);\n }\n if (options.onEarnings) {\n this.on(\"earnings\", options.onEarnings);\n }\n if (options.onConcalls) {\n this.on(\"concalls\", options.onConcalls);\n }\n if (options.onAlerts) {\n this.on(\"alerts\", options.onAlerts);\n }\n if (options.onError) {\n this.on(\"error\", options.onError);\n }\n if (options.onMessage) {\n this.on(\"message\", options.onMessage);\n }\n this.startConnectionMaintenance(\"initial\");\n }\n\n get connected(): boolean {\n return this.socket !== null && this.socket.readyState === this.webSocketImpl.OPEN;\n }\n\n on(eventName: \"data\" | \"subscribed\" | \"error\" | \"message\" | \"raw\", handler: WebSocketHandler): void;\n on<K extends DrishtiWebSocketProduct>(channel: K, handler: ChannelDataHandler<K>): void;\n on(eventName: string, handler: WebSocketHandler | ChannelDataHandler<DrishtiWebSocketProduct>): void {\n if (isDrishtiWebSocketProduct(eventName)) {\n this.addChannelListener(eventName, handler as ChannelDataHandler<DrishtiWebSocketProduct>);\n return;\n }\n this.addEventListener(eventName, handler as WebSocketHandler);\n }\n\n off(eventName: \"data\" | \"subscribed\" | \"error\" | \"message\" | \"raw\", handler: WebSocketHandler): void;\n off<K extends DrishtiWebSocketProduct>(channel: K, handler: ChannelDataHandler<K>): void;\n off(eventName: string, handler: WebSocketHandler | ChannelDataHandler<DrishtiWebSocketProduct>): void {\n if (isDrishtiWebSocketProduct(eventName)) {\n this.removeChannelListener(eventName, handler as ChannelDataHandler<DrishtiWebSocketProduct>);\n return;\n }\n this.removeEventListener(eventName, handler as WebSocketHandler);\n }\n\n onNews(handler: ChannelDataHandler<\"news\">): void {\n this.addChannelListener(\"news\", handler as ChannelDataHandler<DrishtiWebSocketProduct>);\n }\n\n onAnnouncements(handler: ChannelDataHandler<\"announcements\">): void {\n this.addChannelListener(\"announcements\", handler as ChannelDataHandler<DrishtiWebSocketProduct>);\n }\n\n onEarnings(handler: ChannelDataHandler<\"earnings\">): void {\n this.addChannelListener(\"earnings\", handler as ChannelDataHandler<DrishtiWebSocketProduct>);\n }\n\n onConcalls(handler: ChannelDataHandler<\"concalls\">): void {\n this.addChannelListener(\"concalls\", handler as ChannelDataHandler<DrishtiWebSocketProduct>);\n }\n\n onAlerts(handler: ChannelDataHandler<\"alerts\">): void {\n this.addChannelListener(\"alerts\", handler as ChannelDataHandler<DrishtiWebSocketProduct>);\n }\n\n private addEventListener(eventName: string, handler: WebSocketHandler): void {\n const existing = this.handlers.get(eventName) ?? [];\n existing.push(handler);\n this.handlers.set(eventName, existing);\n }\n\n private removeEventListener(eventName: string, handler: WebSocketHandler): void {\n const existing = this.handlers.get(eventName) ?? [];\n const next = existing.filter((item) => item !== handler);\n if (next.length === 0) {\n this.handlers.delete(eventName);\n return;\n }\n this.handlers.set(eventName, next);\n }\n\n private addChannelListener(\n channel: DrishtiWebSocketProduct,\n handler: ChannelDataHandler<DrishtiWebSocketProduct>,\n ): void {\n const existing = this.channelHandlers.get(channel) ?? [];\n existing.push(handler);\n this.channelHandlers.set(channel, existing);\n }\n\n private removeChannelListener(\n channel: DrishtiWebSocketProduct,\n handler: ChannelDataHandler<DrishtiWebSocketProduct>,\n ): void {\n const existing = this.channelHandlers.get(channel) ?? [];\n const next = existing.filter((item) => item !== handler);\n if (next.length === 0) {\n this.channelHandlers.delete(channel);\n return;\n }\n this.channelHandlers.set(channel, next);\n }\n\n private startConnectionMaintenance(reason: string): void {\n if (this.manuallyClosed || this.maintainingConnection || this.connected) {\n return;\n }\n void this.maintainConnection(reason);\n }\n\n private async maintainConnection(reason: string): Promise<void> {\n if (this.manuallyClosed || this.maintainingConnection || this.connected) {\n return;\n }\n this.maintainingConnection = true;\n let attempt = 0;\n let delay = this.reconnectInitialDelayMs;\n while (!this.manuallyClosed && !this.connected) {\n attempt += 1;\n if (attempt > 1) {\n await this.onReconnectAttempt?.(attempt - 1, delay, reason);\n await new Promise((resolve) => setTimeout(resolve, this.withJitter(delay)));\n }\n try {\n const socket = await this.openSocket();\n this.socket = socket;\n await this.resubscribeAll();\n await this.onOpen?.();\n attempt = 0;\n delay = this.reconnectInitialDelayMs;\n break;\n } catch {\n if (delay >= this.reconnectMaxDelayMs && attempt >= this.reconnectWarnAfterAttempts) {\n await this.emitReconnectWarning(attempt, reason);\n attempt = 0;\n }\n delay = Math.min(\n Math.floor(delay * this.reconnectBackoffMultiplier),\n this.reconnectMaxDelayMs,\n );\n }\n }\n this.maintainingConnection = false;\n }\n\n private async emitReconnectWarning(attempt: number, reason: string): Promise<void> {\n if (this.onReconnectWarning) {\n await this.onReconnectWarning(attempt, reason);\n return;\n }\n console.warn(\n `[drishti-sdk] WebSocket still unable to connect after ${attempt} attempts (${reason}); retrying`,\n );\n }\n\n private async openSocket(): Promise<WebSocket> {\n const socket = this.createSocket();\n await new Promise<void>((resolve, reject) => {\n const onOpen = (): void => {\n cleanup();\n resolve();\n };\n const onError = (): void => {\n cleanup();\n reject(new DrishtiWebSocketError(\"WebSocket connection failed\"));\n };\n const onClose = (event: CloseEvent): void => {\n cleanup();\n const code = \"code\" in event ? event.code : 0;\n reject(new DrishtiWebSocketError(`WebSocket closed before open (code ${code})`));\n };\n const cleanup = (): void => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.removeEventListener(\"close\", onClose);\n };\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n socket.addEventListener(\"close\", onClose);\n });\n this.attachSocketHandlers(socket);\n return socket;\n }\n\n private attachSocketHandlers(socket: WebSocket): void {\n socket.addEventListener(\"message\", (messageEvent) => {\n const raw = typeof messageEvent.data === \"string\" ? messageEvent.data : String(messageEvent.data);\n void this.handleIncoming(raw);\n });\n socket.addEventListener(\"close\", () => {\n this.socket = null;\n void this.onClose?.(\"WebSocket closed\");\n if (this.manuallyClosed) {\n this.rejectWaiters(\"WebSocket closed\");\n return;\n }\n this.startConnectionMaintenance(\"WebSocket closed\");\n });\n }\n\n private createSocket(): WebSocket {\n const url = buildWebSocketUrl(this.baseUrl, this.apiKey);\n const impl = this.webSocketImpl as unknown as {\n new (url: string, protocols?: string | string[], options?: { headers?: Record<string, string> }): WebSocket;\n };\n const headers = { ...this.headers, \"X-API-Key\": this.apiKey };\n try {\n return new impl(url, undefined, { headers });\n } catch {\n return new this.webSocketImpl(url);\n }\n }\n\n async close(): Promise<void> {\n this.manuallyClosed = true;\n this.maintainingConnection = false;\n if (this.socket === null) {\n this.rejectWaiters(\"WebSocket closed\");\n return;\n }\n this.socket.close();\n this.socket = null;\n this.rejectWaiters(\"WebSocket closed\");\n }\n\n async subscribe(options: SubscribeOptions): Promise<void> {\n const normalized: SubscribeOptions = {\n product: options.product,\n symbols: normalizeSymbols(options.symbols),\n detailed: options.detailed !== false,\n };\n this.subscriptions.set(options.product, normalized);\n this.startConnectionMaintenance(\"subscribe\");\n if (!this.connected || this.socket === null) {\n return;\n }\n this.socket.send(subscribeMessage(normalized));\n }\n\n private async dispatch(event: WebSocketEvent): Promise<void> {\n const names = [event.kind, \"message\"];\n for (const name of names) {\n const handlers = this.handlers.get(name) ?? [];\n for (const handler of handlers) {\n await handler(event);\n }\n }\n if (event.kind !== \"data\" || !isDrishtiWebSocketProduct(event.channel)) {\n return;\n }\n const channelHandlers = this.channelHandlers.get(event.channel) ?? [];\n const payload = event.data as DataPayloadByChannel[typeof event.channel];\n for (const handler of channelHandlers) {\n await handler(payload);\n }\n }\n\n private async handleIncoming(raw: string): Promise<void> {\n const event = parseWebSocketMessage(raw);\n await this.dispatch(event);\n const waiter = this.waiters.shift();\n if (waiter) {\n waiter.resolve(event);\n return;\n }\n this.queue.push(event);\n }\n\n private rejectWaiters(message: string): void {\n const error = new DrishtiWebSocketError(message);\n while (this.waiters.length > 0) {\n this.waiters.shift()?.reject(error);\n }\n }\n\n private async resubscribeAll(): Promise<void> {\n if (!this.connected || this.socket === null) {\n return;\n }\n for (const options of this.subscriptions.values()) {\n this.socket.send(subscribeMessage(options));\n }\n }\n\n private withJitter(delayMs: number): number {\n if (this.reconnectJitterRatio <= 0) {\n return delayMs;\n }\n const spread = Math.floor(delayMs * this.reconnectJitterRatio);\n const offset = Math.floor(Math.random() * (spread * 2 + 1)) - spread;\n return Math.max(0, delayMs + offset);\n }\n\n private async nextEvent(): Promise<WebSocketEvent> {\n const queued = this.queue.shift();\n if (queued) {\n return queued;\n }\n if (this.manuallyClosed) {\n throw new DrishtiWebSocketError(\"WebSocket closed\");\n }\n return await new Promise<WebSocketEvent>((resolve, reject) => {\n this.waiters.push({ resolve, reject });\n });\n }\n\n async *events(): AsyncGenerator<WebSocketEvent> {\n this.startConnectionMaintenance(\"events\");\n while (!this.manuallyClosed) {\n yield await this.nextEvent();\n }\n }\n}\n\nexport async function* streamProduct(options: {\n apiKey: string;\n product: DrishtiWebSocketProduct;\n symbols?: readonly string[];\n detailed?: boolean;\n baseUrl?: string;\n headers?: Record<string, string>;\n webSocketImpl?: typeof WebSocket;\n}): AsyncGenerator<Record<string, unknown>> {\n const session = new DrishtiWebSocketSession({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n headers: options.headers,\n webSocketImpl: options.webSocketImpl,\n });\n try {\n await session.subscribe({\n product: options.product,\n symbols: options.symbols,\n detailed: options.detailed,\n });\n for await (const event of session.events()) {\n if (event.kind === \"data\") {\n yield event.data;\n }\n }\n } finally {\n await session.close();\n }\n}\n", "/** Query parameter models aligned with drishti-api /v1 route definitions. */\n\nimport type { SymbolQuarterKey } from \"./types.js\";\n\nexport type NewsSentiment = \"positive\" | \"negative\" | \"neutral\";\n\n/** ISO date or datetime string (e.g. 2026-05-01 or 2026-05-11T23:59:59Z). */\nexport type IsoDateTimeParam = string;\n\n/** Fiscal quarter key accepted by detail routes (e.g. q4_26). */\nexport type FiscalQuarterParam = string;\n\nexport type NewsQueryParams = {\n /** Serialized as comma-separated `symbols`. */\n symbols?: string[];\n /** Serialized as comma-separated `scrip_codes`. */\n scrip_codes?: string[];\n sentiment?: NewsSentiment;\n /** Query key: `from`. */\n from?: IsoDateTimeParam;\n to?: IsoDateTimeParam;\n page?: number;\n limit?: number;\n};\n\nexport type PaginatedFeedQueryParams = {\n symbols?: string[];\n scrip_codes?: string[];\n from?: IsoDateTimeParam;\n to?: IsoDateTimeParam;\n detailed?: boolean;\n page?: number;\n limit?: number;\n};\n\n/** GET /v1/announcements list filter. */\nexport type AnnouncementsListQueryParams = PaginatedFeedQueryParams & {\n categories?: string[];\n important?: boolean;\n};\n\nexport type AnnouncementsQueryParams = AnnouncementsListQueryParams;\n\n/** GET /v1/earnings \u2014 same filters as announcements except categories. */\nexport type EarningsQueryParams = PaginatedFeedQueryParams;\n\nexport type ConcallsQueryParams = PaginatedFeedQueryParams;\n\nexport type UpcomingConcallsQueryParams = {\n symbols?: string[];\n scrip_codes?: string[];\n detailed?: boolean;\n page?: number;\n limit?: number;\n};\n\nexport type AlertsQueryParams = {\n symbols?: string[];\n scrip_codes?: string[];\n /** Alert type filter. Query key: `type`. */\n type?: string[];\n from?: IsoDateTimeParam;\n to?: IsoDateTimeParam;\n important?: boolean;\n page?: number;\n limit?: number;\n};\n\n/** GET /v1/announcements/attachments and GET /v1/earnings/attachments */\nexport type DocumentIdsQueryParams = {\n ids: string[];\n};\n\n/** GET /v1/symbols/metadata */\nexport type SymbolMetadataQueryParams = {\n symbols?: string[];\n scrip_codes?: string[];\n};\n\n/** Optional flags for GET /v1/earnings/detail and GET /v1/concalls/detail */\nexport type SymbolQuarterDetailQueryParams = {\n detailed?: boolean;\n};\n\n/** GET /v1/earnings/detail, GET /v1/concalls/detail, GET /v1/concalls/transcript */\nexport type SymbolQuarterQueryParams = SymbolQuarterDetailQueryParams & {\n symbol?: string;\n scrip_code?: string;\n quarter: string;\n};\n\nexport type ConcallTranscriptBatchParams = {\n items: SymbolQuarterKey[];\n};\n\nexport type BatchJobIdParams = {\n job_id: string | number;\n};\n\nexport type DailySummaryParams = {\n body: DailySummaryRequestBody;\n};\n\n/** GET /v1/account/ledger */\nexport type AccountLedgerQueryParams = {\n limit?: number;\n};\n\n/** GET /v1/batch/jobs */\nexport type BatchJobsListQueryParams = {\n limit?: number;\n};\n\nexport type DailySummaryPortfolioItem = {\n symbol: string;\n exposure: number;\n};\n\nexport type DailySummaryRequestBody = {\n portfolio: DailySummaryPortfolioItem[];\n};\n\nexport type QueryPrimitive = string | number | boolean;\n\nfunction joinList(values: string[]): string {\n return values.join(\",\");\n}\n\n/**\n * Convert a params object to flat query-string fields for HTTP.\n * Keys listed in `listKeys` are joined with commas (drishti-api list filter convention).\n */\nexport function serializeQueryParams<T extends object>(\n params: T,\n listKeys: readonly (keyof T & string)[] = []\n): Record<string, QueryPrimitive> {\n const listKeySet = new Set<string>(listKeys);\n const out: Record<string, QueryPrimitive> = {};\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null) continue;\n if (listKeySet.has(key) && Array.isArray(value)) {\n if (value.length > 0) out[key] = joinList(value);\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n out[key] = value;\n }\n }\n return out;\n}\n\n/** Announcements list vs by-id modes use different query keys. */\nexport function serializeAnnouncementsQueryParams(\n params: AnnouncementsQueryParams\n): Record<string, QueryPrimitive> {\n return serializeQueryParams(params, [\"symbols\", \"scrip_codes\", \"categories\"]);\n}\n", "import { DrishtiApiError } from \"./errors.js\";\nimport { DrishtiWebSocketSession, type DrishtiWebSocketSessionOptions } from \"./websocket.js\";\nimport {\n serializeAnnouncementsQueryParams,\n serializeQueryParams,\n type AccountLedgerQueryParams,\n type AlertsQueryParams,\n type AnnouncementsQueryParams,\n type BatchJobsListQueryParams,\n type ConcallsQueryParams,\n type UpcomingConcallsQueryParams,\n type DocumentIdsQueryParams,\n type EarningsQueryParams,\n type NewsQueryParams,\n type SymbolMetadataQueryParams,\n type SymbolQuarterQueryParams,\n type ConcallTranscriptBatchParams,\n type BatchJobIdParams,\n type DailySummaryParams,\n} from \"./params.js\";\nimport type {\n AccountDetailResponse,\n AccountLimitsResponse,\n AccountUsageEnvelope,\n Alert,\n AnnouncementDetail,\n AnnouncementListItem,\n EarningsDetail,\n EarningsListItem,\n BatchAttachmentLookupResponse,\n BatchJobCancelResponse,\n BatchJobListResponse,\n BatchJobResponse,\n Concall,\n ConcallArtifactUrlsResponse,\n ConcallTranscriptBatchResponse,\n UpcomingConcall,\n JsonValue,\n LedgerListResponse,\n NewsItem,\n PaginatedResponse,\n StringListResponse,\n SummaryResponse,\n SymbolMetadataResponse,\n} from \"./types.js\";\n\nexport const DEFAULT_BASE_URL = \"https://developers.manasija.in\";\n\nexport type JsonBody = Record<string, JsonValue> | JsonValue[] | null;\nexport type QueryValue = string | number | boolean | null | undefined;\n/** Serialized query string map used by low-level `request()`. Prefer endpoint param types on client methods. */\nexport type QueryParams = Record<string, QueryValue | QueryValue[]>;\nexport type PathParams = Record<string, string | number>;\nexport type RequestOptions = Readonly<{\n body?: JsonBody | FormData;\n query?: QueryParams;\n pathParams?: PathParams;\n headers?: Record<string, string>;\n retry?: RetryOptions;\n}>;\n\nexport type RetryOptions = Readonly<{\n maxRetries?: number;\n initialDelayMs?: number;\n maxDelayMs?: number;\n multiplier?: number;\n retryOnStatuses?: number[];\n}>;\n\nexport type DrishtiClientOptions = Readonly<{\n apiKey: string;\n baseUrl?: string;\n headers?: Record<string, string>;\n fetchImpl?: typeof fetch;\n retry?: RetryOptions;\n}>;\n\nexport type BatchWaitOptions = Readonly<{\n pollIntervalMs?: number;\n timeoutMs?: number;\n terminalStatuses?: string[];\n}>;\n\nfunction normalizeEarningsItemPayload(item: unknown): unknown {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) {\n return item;\n }\n const record = item as Record<string, unknown>;\n if (record.earnings_table === undefined && record.earnings_table_extraction !== undefined) {\n record.earnings_table = record.earnings_table_extraction;\n }\n return record;\n}\n\nfunction joinUrl(base: string, path: string): string {\n const b = base.replace(/\\/+$/, \"\");\n const p = path.replace(/^\\/+/, \"\");\n return `${b}/${p}`;\n}\n\nasync function parseResponse<TResponse extends JsonValue | string | null>(response: Response): Promise<TResponse> {\n if (response.status === 204) {\n return null as TResponse;\n }\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n let data: JsonValue | string | null;\n if (contentType.includes(\"application/json\")) {\n const text = await response.text();\n data = text.length > 0 ? (JSON.parse(text) as JsonValue) : null;\n } else {\n data = await response.text();\n }\n if (!response.ok) {\n throw new DrishtiApiError(response.status, data);\n }\n return data as TResponse;\n}\n\nexport class DrishtiClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly extraHeaders: Record<string, string>;\n private readonly fetchImpl?: typeof fetch;\n private readonly retryOptions: Required<RetryOptions>;\n\n constructor(options: DrishtiClientOptions) {\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.apiKey = options.apiKey;\n this.extraHeaders = { ...options.headers };\n this.fetchImpl = options.fetchImpl;\n this.retryOptions = {\n maxRetries: options.retry?.maxRetries ?? 2,\n initialDelayMs: options.retry?.initialDelayMs ?? 300,\n maxDelayMs: options.retry?.maxDelayMs ?? 5000,\n multiplier: options.retry?.multiplier ?? 2,\n retryOnStatuses: options.retry?.retryOnStatuses ?? [408, 409, 425, 429, 500, 502, 503, 504],\n };\n if (!this.apiKey || this.apiKey.trim().length === 0) {\n throw new Error(\"DrishtiClient requires a non-empty apiKey\");\n }\n }\n\n private resolveRetryOptions(override?: RetryOptions): Required<RetryOptions> {\n return {\n maxRetries: override?.maxRetries ?? this.retryOptions.maxRetries,\n initialDelayMs: override?.initialDelayMs ?? this.retryOptions.initialDelayMs,\n maxDelayMs: override?.maxDelayMs ?? this.retryOptions.maxDelayMs,\n multiplier: override?.multiplier ?? this.retryOptions.multiplier,\n retryOnStatuses: override?.retryOnStatuses ?? this.retryOptions.retryOnStatuses,\n };\n }\n\n private shouldRetry(error: unknown, response: Response | null, retryOnStatuses: number[]): boolean {\n if (response) {\n return retryOnStatuses.includes(response.status);\n }\n return error instanceof TypeError;\n }\n\n private computeDelayMs(attempt: number, options: Required<RetryOptions>): number {\n const exp = options.initialDelayMs * Math.pow(options.multiplier, Math.max(0, attempt - 1));\n return Math.min(options.maxDelayMs, exp);\n }\n\n private mergeHeaders(init?: HeadersInit): Headers {\n const h = new Headers(init);\n for (const [k, v] of Object.entries(this.extraHeaders)) {\n h.set(k, v);\n }\n h.set(\"X-API-Key\", this.apiKey);\n return h;\n }\n\n private buildPath(pathTemplate: string, pathParams?: PathParams): string {\n if (!pathParams) {\n return pathTemplate;\n }\n let resolved = pathTemplate.replace(/:([a-zA-Z0-9_]+)/g, (_whole: string, key: string): string => {\n const value = pathParams[key];\n if (value === undefined || value === null) {\n throw new Error(`Missing required path param: ${key}`);\n }\n return encodeURIComponent(String(value));\n });\n resolved = resolved.replace(/\\{([a-zA-Z0-9_]+)\\}/g, (_whole: string, key: string): string => {\n const value = pathParams[key];\n if (value === undefined || value === null) {\n throw new Error(`Missing required path param: ${key}`);\n }\n return encodeURIComponent(String(value));\n });\n return resolved;\n }\n\n private appendQuery(url: URL, query?: QueryParams): void {\n if (!query) {\n return;\n }\n for (const [key, rawValue] of Object.entries(query)) {\n if (rawValue === undefined || rawValue === null) {\n continue;\n }\n if (Array.isArray(rawValue)) {\n for (const value of rawValue) {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n }\n continue;\n }\n url.searchParams.set(key, String(rawValue));\n }\n }\n\n async request<TResponse extends JsonValue | string | null>(method: string, path: string, options: RequestOptions = {}): Promise<TResponse> {\n const resolvedPath = this.buildPath(path, options.pathParams).replace(/^\\/+/, \"\");\n const url = new URL(joinUrl(this.baseUrl, resolvedPath));\n this.appendQuery(url, options.query);\n const headers = this.mergeHeaders({ Accept: \"application/json\", ...options.headers });\n const isFormData = typeof FormData !== \"undefined\" && options.body instanceof FormData;\n let body: BodyInit | undefined;\n if (options.body === undefined || options.body === null) {\n body = undefined;\n } else if (isFormData) {\n body = options.body;\n } else {\n body = JSON.stringify(options.body);\n headers.set(\"Content-Type\", \"application/json\");\n }\n const fetchFn = this.fetchImpl\n ? this.fetchImpl.bind(globalThis)\n : ((input: RequestInfo | URL, init?: RequestInit) => globalThis.fetch(input, init));\n const retryOptions = this.resolveRetryOptions(options.retry);\n const maxAttempts = retryOptions.maxRetries + 1;\n let lastError: unknown = null;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n let response: Response | null = null;\n try {\n response = await fetchFn(url.toString(), {\n method: method.toUpperCase(),\n headers,\n body,\n });\n if (response.ok || attempt >= maxAttempts || !this.shouldRetry(null, response, retryOptions.retryOnStatuses)) {\n return parseResponse<TResponse>(response);\n }\n } catch (error) {\n lastError = error;\n if (attempt >= maxAttempts || !this.shouldRetry(error, null, retryOptions.retryOnStatuses)) {\n throw error;\n }\n }\n const delayMs = this.computeDelayMs(attempt, retryOptions);\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n throw lastError instanceof Error ? lastError : new Error(\"Request failed after retries\");\n }\n\n get<TResponse extends JsonValue | string | null>(path: string, options: Omit<RequestOptions, \"body\"> = {}): Promise<TResponse> {\n return this.request<TResponse>(\"GET\", path, options);\n }\n\n post<TResponse extends JsonValue | string | null>(path: string, options: RequestOptions = {}): Promise<TResponse> {\n return this.request<TResponse>(\"POST\", path, options);\n }\n\n put<TResponse extends JsonValue | string | null>(path: string, options: RequestOptions = {}): Promise<TResponse> {\n return this.request<TResponse>(\"PUT\", path, options);\n }\n\n patch<TResponse extends JsonValue | string | null>(path: string, options: RequestOptions = {}): Promise<TResponse> {\n return this.request<TResponse>(\"PATCH\", path, options);\n }\n\n delete<TResponse extends JsonValue | string | null>(path: string, options: Omit<RequestOptions, \"body\"> = {}): Promise<TResponse> {\n return this.request<TResponse>(\"DELETE\", path, options);\n }\n\n getNews(params: NewsQueryParams = {}): Promise<PaginatedResponse<NewsItem>> {\n return this.get<PaginatedResponse<NewsItem>>(\"/v1/news\", {\n query: serializeQueryParams(params, [\"symbols\", \"scrip_codes\"]),\n });\n }\n\n getSymbolsMetadata(params: SymbolMetadataQueryParams): Promise<SymbolMetadataResponse> {\n return this.get<SymbolMetadataResponse>(\"/v1/symbols/metadata\", {\n query: serializeQueryParams(params, [\"symbols\", \"scrip_codes\"]),\n });\n }\n\n getAnnouncementsCategories(): Promise<StringListResponse> {\n return this.get<StringListResponse>(\"/v1/announcements/categories\");\n }\n\n getAnnouncements(\n params: AnnouncementsQueryParams = {}\n ): Promise<PaginatedResponse<AnnouncementListItem | AnnouncementDetail>> {\n return this.get<PaginatedResponse<AnnouncementListItem | AnnouncementDetail>>(\"/v1/announcements\", {\n query: serializeAnnouncementsQueryParams(params),\n });\n }\n\n getAnnouncementsAttachments(params: DocumentIdsQueryParams): Promise<BatchAttachmentLookupResponse> {\n return this.get<BatchAttachmentLookupResponse>(\"/v1/announcements/attachments\", {\n query: serializeQueryParams(params, [\"ids\"]),\n });\n }\n\n postDailySummary(params: DailySummaryParams): Promise<SummaryResponse> {\n return this.post<SummaryResponse>(\"/v1/daily-summary\", { body: params.body });\n }\n\n getEarnings(\n params: EarningsQueryParams = {}\n ): Promise<PaginatedResponse<EarningsListItem | EarningsDetail>> {\n return this.get<PaginatedResponse<EarningsListItem | EarningsDetail>>(\"/v1/earnings\", {\n query: serializeQueryParams(params, [\"symbols\", \"scrip_codes\"]),\n }).then((response) => {\n response.data = response.data.map(\n (item) => normalizeEarningsItemPayload(item) as EarningsListItem | EarningsDetail\n );\n return response;\n });\n }\n\n getEarningsDetail(params: SymbolQuarterQueryParams): Promise<EarningsListItem | EarningsDetail> {\n return this.get<EarningsListItem | EarningsDetail>(\"/v1/earnings/detail\", {\n query: serializeQueryParams(params),\n }).then(\n (response) => normalizeEarningsItemPayload(response) as EarningsListItem | EarningsDetail\n );\n }\n\n getEarningsAttachments(params: DocumentIdsQueryParams): Promise<BatchAttachmentLookupResponse> {\n return this.get<BatchAttachmentLookupResponse>(\"/v1/earnings/attachments\", {\n query: serializeQueryParams(params, [\"ids\"]),\n });\n }\n\n getConcalls(params: ConcallsQueryParams = {}): Promise<PaginatedResponse<Concall>> {\n return this.get<PaginatedResponse<Concall>>(\"/v1/concalls\", {\n query: serializeQueryParams(params, [\"symbols\", \"scrip_codes\"]),\n });\n }\n\n getUpcomingConcalls(\n params: UpcomingConcallsQueryParams = {},\n ): Promise<PaginatedResponse<UpcomingConcall>> {\n return this.get<PaginatedResponse<UpcomingConcall>>(\"/v1/concalls/upcoming\", {\n query: serializeQueryParams(params, [\"symbols\", \"scrip_codes\"]),\n });\n }\n\n getConcallsDetail(params: SymbolQuarterQueryParams): Promise<Concall> {\n return this.get<Concall>(\"/v1/concalls/detail\", { query: serializeQueryParams(params) });\n }\n\n getConcallsTranscript(params: SymbolQuarterQueryParams): Promise<ConcallArtifactUrlsResponse> {\n return this.get<ConcallArtifactUrlsResponse>(\"/v1/concalls/transcript\", {\n query: serializeQueryParams(params),\n });\n }\n\n postConcallsTranscripts(params: ConcallTranscriptBatchParams): Promise<ConcallTranscriptBatchResponse> {\n return this.post<ConcallTranscriptBatchResponse>(\"/v1/concalls/transcripts\", { body: { items: params.items } });\n }\n\n getAlerts(params: AlertsQueryParams = {}): Promise<PaginatedResponse<Alert>> {\n return this.get<PaginatedResponse<Alert>>(\"/v1/alerts\", {\n query: serializeQueryParams(params, [\"symbols\", \"scrip_codes\", \"type\"]),\n });\n }\n\n getAccount(): Promise<AccountDetailResponse> {\n return this.get<AccountDetailResponse>(\"/v1/account\");\n }\n\n getAccountLimits(): Promise<AccountLimitsResponse> {\n return this.get<AccountLimitsResponse>(\"/v1/account/limits\");\n }\n\n getAccountUsage(): Promise<AccountUsageEnvelope> {\n return this.get<AccountUsageEnvelope>(\"/v1/account/usage\");\n }\n\n getAccountLedger(params: AccountLedgerQueryParams = {}): Promise<LedgerListResponse> {\n return this.get<LedgerListResponse>(\"/v1/account/ledger\", { query: serializeQueryParams(params) });\n }\n\n postBatchJobs(params: {\n file: Blob;\n filename?: string;\n display_name?: string;\n metadata?: string;\n }): Promise<BatchJobResponse> {\n return this.postBatchJobsFile(params);\n }\n\n postBatchJobsFile(params: {\n file: Blob;\n filename?: string;\n display_name?: string;\n metadata?: string;\n }): Promise<BatchJobResponse> {\n const form = new FormData();\n form.append(\"file\", params.file, params.filename ?? \"batch.jsonl\");\n if (params.display_name !== undefined) {\n form.append(\"display_name\", params.display_name);\n }\n if (params.metadata !== undefined) {\n form.append(\"metadata\", params.metadata);\n }\n return this.post<BatchJobResponse>(\"/v1/batch/jobs\", { body: form });\n }\n\n getBatchJobs(params: BatchJobsListQueryParams = {}): Promise<BatchJobListResponse> {\n return this.get<BatchJobListResponse>(\"/v1/batch/jobs\", { query: serializeQueryParams(params) });\n }\n\n getBatchJobsJobId(params: BatchJobIdParams): Promise<BatchJobResponse> {\n return this.get<BatchJobResponse>(\"/v1/batch/jobs/{job_id}\", { pathParams: { job_id: params.job_id } });\n }\n\n deleteBatchJobsJobId(params: BatchJobIdParams): Promise<BatchJobCancelResponse> {\n return this.delete<BatchJobCancelResponse>(\"/v1/batch/jobs/{job_id}\", { pathParams: { job_id: params.job_id } });\n }\n\n getBatchJobsJobIdResults(params: BatchJobIdParams): Promise<string> {\n return this.get<string>(\"/v1/batch/jobs/{job_id}/results\", { pathParams: { job_id: params.job_id } });\n }\n\n async waitForBatchJobCompletion(\n params: BatchJobIdParams & BatchWaitOptions\n ): Promise<BatchJobResponse> {\n const pollIntervalMs = params.pollIntervalMs ?? 2000;\n const timeoutMs = params.timeoutMs ?? 5 * 60 * 1000;\n const terminalStatuses = new Set(\n (params.terminalStatuses ?? [\"succeeded\", \"partial\", \"failed\", \"cancelled\", \"completed\"]).map((s) => s.toLowerCase())\n );\n const startedAt = Date.now();\n while (true) {\n const job = await this.getBatchJobsJobId({ job_id: params.job_id });\n if (terminalStatuses.has(job.status.toLowerCase())) {\n return job;\n }\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for batch job ${params.job_id} to complete`);\n }\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n }\n }\n\n async submitBatchJobAndWait(\n params: {\n file: Blob;\n filename?: string;\n display_name?: string;\n metadata?: string;\n } & BatchWaitOptions\n ): Promise<BatchJobResponse> {\n const job = await this.postBatchJobsFile({\n file: params.file,\n filename: params.filename,\n display_name: params.display_name,\n metadata: params.metadata,\n });\n return this.waitForBatchJobCompletion({\n job_id: job.id,\n pollIntervalMs: params.pollIntervalMs,\n timeoutMs: params.timeoutMs,\n terminalStatuses: params.terminalStatuses,\n });\n }\n\n websocket(\n options: Omit<DrishtiWebSocketSessionOptions, \"apiKey\" | \"baseUrl\" | \"headers\"> = {},\n ): DrishtiWebSocketSession {\n return new DrishtiWebSocketSession({\n apiKey: this.apiKey,\n baseUrl: this.baseUrl,\n headers: this.extraHeaders,\n ...options,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["index_exports", "__export", "DEFAULT_BASE_URL", "DRISHTI_WS_PRODUCTS", "DrishtiApiError", "DrishtiClient", "DrishtiWebSocketError", "DrishtiWebSocketSession", "buildWebSocketUrl", "parseWebSocketMessage", "serializeAnnouncementsQueryParams", "serializeQueryParams", "streamProduct", "DrishtiWebSocketError", "message", "DrishtiApiError", "statusCode", "body", "__publicField", "DRISHTI_WS_PRODUCTS", "normalizeSymbols", "symbols", "seen", "symbol", "token", "buildWebSocketUrl", "baseUrl", "apiKey", "wsBase", "url", "parseWebSocketMessage", "raw", "payload", "record", "item", "channel", "data", "isDrishtiWebSocketProduct", "value", "DRISHTI_WS_PRODUCTS", "subscribeMessage", "options", "DrishtiWebSocketSession", "__publicField", "DEFAULT_BASE_URL", "eventName", "handler", "existing", "next", "reason", "attempt", "delay", "resolve", "socket", "reject", "onOpen", "cleanup", "onError", "DrishtiWebSocketError", "onClose", "event", "code", "messageEvent", "impl", "headers", "normalized", "names", "name", "handlers", "channelHandlers", "waiter", "message", "error", "delayMs", "spread", "offset", "queued", "streamProduct", "session", "joinList", "values", "serializeQueryParams", "params", "listKeys", "listKeySet", "out", "key", "value", "serializeAnnouncementsQueryParams", "DEFAULT_BASE_URL", "normalizeEarningsItemPayload", "item", "record", "joinUrl", "base", "path", "b", "p", "parseResponse", "response", "contentType", "data", "text", "DrishtiApiError", "DrishtiClient", "options", "__publicField", "override", "error", "retryOnStatuses", "attempt", "exp", "init", "h", "k", "v", "pathTemplate", "pathParams", "resolved", "_whole", "key", "value", "url", "query", "rawValue", "method", "resolvedPath", "headers", "isFormData", "body", "fetchFn", "input", "retryOptions", "maxAttempts", "lastError", "delayMs", "resolve", "params", "serializeQueryParams", "serializeAnnouncementsQueryParams", "form", "pollIntervalMs", "timeoutMs", "terminalStatuses", "s", "startedAt", "job", "DrishtiWebSocketSession"]
|
|
7
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export { serializeAnnouncementsQueryParams, serializeQueryParams } from "./param
|
|
|
6
6
|
export { DrishtiApiError, DrishtiWebSocketError } from "./errors.js";
|
|
7
7
|
export type { ApiErrorBody } from "./errors.js";
|
|
8
8
|
export { DRISHTI_WS_PRODUCTS, DrishtiWebSocketSession, buildWebSocketUrl, parseWebSocketMessage, streamProduct, } from "./websocket.js";
|
|
9
|
-
export type { DrishtiWebSocketProduct, DrishtiWebSocketSessionOptions, DataEvent, DataPayloadByChannel, ErrorEvent, KnownDataEvent, RawEvent, SubscribeOptions, SubscribedEvent, UnknownDataEvent, WebSocketEvent, WebSocketHandler, } from "./websocket.js";
|
|
9
|
+
export type { ChannelDataHandler, DrishtiWebSocketProduct, DrishtiWebSocketSessionOptions, DataEvent, DataPayloadByChannel, ErrorEvent, KnownDataEvent, RawEvent, SubscribeOptions, SubscribedEvent, UnknownDataEvent, WebSocketEvent, WebSocketHandler, } from "./websocket.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
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,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,aAAa,CAAC;AACjC,OAAO,EAAE,iCAAiC,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,aAAa,CAAC;AACjC,OAAO,EAAE,iCAAiC,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -45,4 +45,5 @@ export type RawEvent = Readonly<{
|
|
|
45
45
|
}>;
|
|
46
46
|
export type WebSocketEvent = SubscribedEvent | DataEvent | ErrorEvent | RawEvent;
|
|
47
47
|
export type WebSocketHandler = (event: WebSocketEvent) => void | Promise<void>;
|
|
48
|
+
export type ChannelDataHandler<K extends DrishtiWebSocketProduct> = (data: DataPayloadByChannel[K]) => void | Promise<void>;
|
|
48
49
|
//# sourceMappingURL=websocket-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-types.d.ts","sourceRoot":"","sources":["../src/websocket-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mBAAmB,sEAMtB,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,uBAAuB,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,kBAAkB,GAAG,oBAAoB,CAAC;IACzD,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAAC;IAC5C,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAC;IACpC,MAAM,EAAE,KAAK,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG;KAC1B,CAAC,IAAI,uBAAuB,GAAG,QAAQ,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC;QACX,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;KAC/B,CAAC;CACH,CAAC,uBAAuB,CAAC,CAAC;AAE3B,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"websocket-types.d.ts","sourceRoot":"","sources":["../src/websocket-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mBAAmB,sEAMtB,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,uBAAuB,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,kBAAkB,GAAG,oBAAoB,CAAC;IACzD,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAAC;IAC5C,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAC;IACpC,MAAM,EAAE,KAAK,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG;KAC1B,CAAC,IAAI,uBAAuB,GAAG,QAAQ,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC;QACX,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;KAC/B,CAAC;CACH,CAAC,uBAAuB,CAAC,CAAC;AAE3B,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/E,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,uBAAuB,IAAI,CAClE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/websocket.d.ts
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import type { DrishtiWebSocketProduct, SubscribeOptions, WebSocketEvent, WebSocketHandler } from "./websocket-types.js";
|
|
2
|
-
export { DRISHTI_WS_PRODUCTS, type DrishtiWebSocketProduct, type DataEvent, type DataPayloadByChannel, type ErrorEvent, type KnownDataEvent, type RawEvent, type SubscribeOptions, type SubscribedEvent, type UnknownDataEvent, type WebSocketEvent, type WebSocketHandler, } from "./websocket-types.js";
|
|
1
|
+
import type { ChannelDataHandler, DrishtiWebSocketProduct, SubscribeOptions, WebSocketEvent, WebSocketHandler } from "./websocket-types.js";
|
|
2
|
+
export { DRISHTI_WS_PRODUCTS, type DrishtiWebSocketProduct, type DataEvent, type DataPayloadByChannel, type ErrorEvent, type KnownDataEvent, type RawEvent, type SubscribeOptions, type SubscribedEvent, type UnknownDataEvent, type ChannelDataHandler, type WebSocketEvent, type WebSocketHandler, } from "./websocket-types.js";
|
|
3
3
|
export type DrishtiWebSocketSessionOptions = Readonly<{
|
|
4
4
|
apiKey: string;
|
|
5
5
|
baseUrl?: string;
|
|
6
6
|
headers?: Record<string, string>;
|
|
7
7
|
webSocketImpl?: typeof WebSocket;
|
|
8
|
-
autoReconnect?: boolean;
|
|
9
8
|
reconnectInitialDelayMs?: number;
|
|
10
9
|
reconnectMaxDelayMs?: number;
|
|
11
10
|
reconnectBackoffMultiplier?: number;
|
|
12
11
|
reconnectJitterRatio?: number;
|
|
12
|
+
reconnectWarnAfterAttempts?: number;
|
|
13
13
|
onSubscribed?: WebSocketHandler;
|
|
14
14
|
onData?: WebSocketHandler;
|
|
15
|
+
onNews?: ChannelDataHandler<"news">;
|
|
16
|
+
onAnnouncements?: ChannelDataHandler<"announcements">;
|
|
17
|
+
onEarnings?: ChannelDataHandler<"earnings">;
|
|
18
|
+
onConcalls?: ChannelDataHandler<"concalls">;
|
|
19
|
+
onAlerts?: ChannelDataHandler<"alerts">;
|
|
15
20
|
onError?: WebSocketHandler;
|
|
16
21
|
onMessage?: WebSocketHandler;
|
|
17
22
|
onOpen?: () => void | Promise<void>;
|
|
18
23
|
onClose?: (reason: string) => void | Promise<void>;
|
|
19
24
|
onReconnectAttempt?: (attempt: number, delayMs: number, reason: string) => void | Promise<void>;
|
|
25
|
+
onReconnectWarning?: (attempt: number, reason: string) => void | Promise<void>;
|
|
20
26
|
}>;
|
|
21
27
|
export declare function buildWebSocketUrl(baseUrl: string, apiKey?: string): string;
|
|
22
28
|
export declare function parseWebSocketMessage(raw: string): WebSocketEvent;
|
|
@@ -25,26 +31,41 @@ export declare class DrishtiWebSocketSession {
|
|
|
25
31
|
private readonly baseUrl;
|
|
26
32
|
private readonly headers;
|
|
27
33
|
private readonly webSocketImpl;
|
|
28
|
-
private readonly autoReconnect;
|
|
29
34
|
private readonly reconnectInitialDelayMs;
|
|
30
35
|
private readonly reconnectMaxDelayMs;
|
|
31
36
|
private readonly reconnectBackoffMultiplier;
|
|
32
37
|
private readonly reconnectJitterRatio;
|
|
38
|
+
private readonly reconnectWarnAfterAttempts;
|
|
33
39
|
private readonly onOpen?;
|
|
34
40
|
private readonly onClose?;
|
|
35
41
|
private readonly onReconnectAttempt?;
|
|
42
|
+
private readonly onReconnectWarning?;
|
|
36
43
|
private readonly handlers;
|
|
44
|
+
private readonly channelHandlers;
|
|
37
45
|
private readonly subscriptions;
|
|
38
46
|
private socket;
|
|
39
47
|
private readonly queue;
|
|
40
48
|
private readonly waiters;
|
|
41
|
-
private closed;
|
|
42
49
|
private manuallyClosed;
|
|
43
|
-
private
|
|
50
|
+
private maintainingConnection;
|
|
44
51
|
constructor(options: DrishtiWebSocketSessionOptions);
|
|
45
52
|
get connected(): boolean;
|
|
46
|
-
on(eventName:
|
|
47
|
-
|
|
53
|
+
on(eventName: "data" | "subscribed" | "error" | "message" | "raw", handler: WebSocketHandler): void;
|
|
54
|
+
on<K extends DrishtiWebSocketProduct>(channel: K, handler: ChannelDataHandler<K>): void;
|
|
55
|
+
off(eventName: "data" | "subscribed" | "error" | "message" | "raw", handler: WebSocketHandler): void;
|
|
56
|
+
off<K extends DrishtiWebSocketProduct>(channel: K, handler: ChannelDataHandler<K>): void;
|
|
57
|
+
onNews(handler: ChannelDataHandler<"news">): void;
|
|
58
|
+
onAnnouncements(handler: ChannelDataHandler<"announcements">): void;
|
|
59
|
+
onEarnings(handler: ChannelDataHandler<"earnings">): void;
|
|
60
|
+
onConcalls(handler: ChannelDataHandler<"concalls">): void;
|
|
61
|
+
onAlerts(handler: ChannelDataHandler<"alerts">): void;
|
|
62
|
+
private addEventListener;
|
|
63
|
+
private removeEventListener;
|
|
64
|
+
private addChannelListener;
|
|
65
|
+
private removeChannelListener;
|
|
66
|
+
private startConnectionMaintenance;
|
|
67
|
+
private maintainConnection;
|
|
68
|
+
private emitReconnectWarning;
|
|
48
69
|
private openSocket;
|
|
49
70
|
private attachSocketHandlers;
|
|
50
71
|
private createSocket;
|
|
@@ -54,11 +75,9 @@ export declare class DrishtiWebSocketSession {
|
|
|
54
75
|
private handleIncoming;
|
|
55
76
|
private rejectWaiters;
|
|
56
77
|
private resubscribeAll;
|
|
57
|
-
private reconnectLoop;
|
|
58
78
|
private withJitter;
|
|
59
79
|
private nextEvent;
|
|
60
80
|
events(): AsyncGenerator<WebSocketEvent>;
|
|
61
|
-
run(): Promise<void>;
|
|
62
81
|
}
|
|
63
82
|
export declare function streamProduct(options: {
|
|
64
83
|
apiKey: string;
|
package/dist/websocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,uBAAuB,EAEvB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;IACjC,
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
package/dist/websocket.js
CHANGED
|
@@ -99,22 +99,23 @@ export class DrishtiWebSocketSession {
|
|
|
99
99
|
baseUrl;
|
|
100
100
|
headers;
|
|
101
101
|
webSocketImpl;
|
|
102
|
-
autoReconnect;
|
|
103
102
|
reconnectInitialDelayMs;
|
|
104
103
|
reconnectMaxDelayMs;
|
|
105
104
|
reconnectBackoffMultiplier;
|
|
106
105
|
reconnectJitterRatio;
|
|
106
|
+
reconnectWarnAfterAttempts;
|
|
107
107
|
onOpen;
|
|
108
108
|
onClose;
|
|
109
109
|
onReconnectAttempt;
|
|
110
|
+
onReconnectWarning;
|
|
110
111
|
handlers = new Map();
|
|
112
|
+
channelHandlers = new Map();
|
|
111
113
|
subscriptions = new Map();
|
|
112
114
|
socket = null;
|
|
113
115
|
queue = [];
|
|
114
116
|
waiters = [];
|
|
115
|
-
closed = false;
|
|
116
117
|
manuallyClosed = false;
|
|
117
|
-
|
|
118
|
+
maintainingConnection = false;
|
|
118
119
|
constructor(options) {
|
|
119
120
|
if (!options.apiKey || options.apiKey.trim().length === 0) {
|
|
120
121
|
throw new Error("DrishtiWebSocketSession requires a non-empty apiKey");
|
|
@@ -123,49 +124,151 @@ export class DrishtiWebSocketSession {
|
|
|
123
124
|
this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
|
|
124
125
|
this.headers = { ...(options.headers ?? {}) };
|
|
125
126
|
this.webSocketImpl = options.webSocketImpl ?? WebSocket;
|
|
126
|
-
this.autoReconnect = options.autoReconnect ?? false;
|
|
127
127
|
this.reconnectInitialDelayMs = Math.max(100, options.reconnectInitialDelayMs ?? 1_000);
|
|
128
128
|
this.reconnectMaxDelayMs = Math.max(this.reconnectInitialDelayMs, options.reconnectMaxDelayMs ?? 30_000);
|
|
129
129
|
this.reconnectBackoffMultiplier = Math.max(1, options.reconnectBackoffMultiplier ?? 2);
|
|
130
130
|
this.reconnectJitterRatio = Math.min(1, Math.max(0, options.reconnectJitterRatio ?? 0.2));
|
|
131
|
+
this.reconnectWarnAfterAttempts = Math.max(1, options.reconnectWarnAfterAttempts ?? 10);
|
|
131
132
|
this.onOpen = options.onOpen;
|
|
132
133
|
this.onClose = options.onClose;
|
|
133
134
|
this.onReconnectAttempt = options.onReconnectAttempt;
|
|
135
|
+
this.onReconnectWarning = options.onReconnectWarning;
|
|
134
136
|
if (options.onSubscribed) {
|
|
135
137
|
this.on("subscribed", options.onSubscribed);
|
|
136
138
|
}
|
|
137
139
|
if (options.onData) {
|
|
138
140
|
this.on("data", options.onData);
|
|
139
141
|
}
|
|
142
|
+
if (options.onNews) {
|
|
143
|
+
this.on("news", options.onNews);
|
|
144
|
+
}
|
|
145
|
+
if (options.onAnnouncements) {
|
|
146
|
+
this.on("announcements", options.onAnnouncements);
|
|
147
|
+
}
|
|
148
|
+
if (options.onEarnings) {
|
|
149
|
+
this.on("earnings", options.onEarnings);
|
|
150
|
+
}
|
|
151
|
+
if (options.onConcalls) {
|
|
152
|
+
this.on("concalls", options.onConcalls);
|
|
153
|
+
}
|
|
154
|
+
if (options.onAlerts) {
|
|
155
|
+
this.on("alerts", options.onAlerts);
|
|
156
|
+
}
|
|
140
157
|
if (options.onError) {
|
|
141
158
|
this.on("error", options.onError);
|
|
142
159
|
}
|
|
143
160
|
if (options.onMessage) {
|
|
144
161
|
this.on("message", options.onMessage);
|
|
145
162
|
}
|
|
163
|
+
this.startConnectionMaintenance("initial");
|
|
146
164
|
}
|
|
147
165
|
get connected() {
|
|
148
166
|
return this.socket !== null && this.socket.readyState === this.webSocketImpl.OPEN;
|
|
149
167
|
}
|
|
150
168
|
on(eventName, handler) {
|
|
169
|
+
if (isDrishtiWebSocketProduct(eventName)) {
|
|
170
|
+
this.addChannelListener(eventName, handler);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.addEventListener(eventName, handler);
|
|
174
|
+
}
|
|
175
|
+
off(eventName, handler) {
|
|
176
|
+
if (isDrishtiWebSocketProduct(eventName)) {
|
|
177
|
+
this.removeChannelListener(eventName, handler);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this.removeEventListener(eventName, handler);
|
|
181
|
+
}
|
|
182
|
+
onNews(handler) {
|
|
183
|
+
this.addChannelListener("news", handler);
|
|
184
|
+
}
|
|
185
|
+
onAnnouncements(handler) {
|
|
186
|
+
this.addChannelListener("announcements", handler);
|
|
187
|
+
}
|
|
188
|
+
onEarnings(handler) {
|
|
189
|
+
this.addChannelListener("earnings", handler);
|
|
190
|
+
}
|
|
191
|
+
onConcalls(handler) {
|
|
192
|
+
this.addChannelListener("concalls", handler);
|
|
193
|
+
}
|
|
194
|
+
onAlerts(handler) {
|
|
195
|
+
this.addChannelListener("alerts", handler);
|
|
196
|
+
}
|
|
197
|
+
addEventListener(eventName, handler) {
|
|
151
198
|
const existing = this.handlers.get(eventName) ?? [];
|
|
152
199
|
existing.push(handler);
|
|
153
200
|
this.handlers.set(eventName, existing);
|
|
154
201
|
}
|
|
155
|
-
|
|
156
|
-
|
|
202
|
+
removeEventListener(eventName, handler) {
|
|
203
|
+
const existing = this.handlers.get(eventName) ?? [];
|
|
204
|
+
const next = existing.filter((item) => item !== handler);
|
|
205
|
+
if (next.length === 0) {
|
|
206
|
+
this.handlers.delete(eventName);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
this.handlers.set(eventName, next);
|
|
210
|
+
}
|
|
211
|
+
addChannelListener(channel, handler) {
|
|
212
|
+
const existing = this.channelHandlers.get(channel) ?? [];
|
|
213
|
+
existing.push(handler);
|
|
214
|
+
this.channelHandlers.set(channel, existing);
|
|
215
|
+
}
|
|
216
|
+
removeChannelListener(channel, handler) {
|
|
217
|
+
const existing = this.channelHandlers.get(channel) ?? [];
|
|
218
|
+
const next = existing.filter((item) => item !== handler);
|
|
219
|
+
if (next.length === 0) {
|
|
220
|
+
this.channelHandlers.delete(channel);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
this.channelHandlers.set(channel, next);
|
|
224
|
+
}
|
|
225
|
+
startConnectionMaintenance(reason) {
|
|
226
|
+
if (this.manuallyClosed || this.maintainingConnection || this.connected) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
void this.maintainConnection(reason);
|
|
230
|
+
}
|
|
231
|
+
async maintainConnection(reason) {
|
|
232
|
+
if (this.manuallyClosed || this.maintainingConnection || this.connected) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
this.maintainingConnection = true;
|
|
236
|
+
let attempt = 0;
|
|
237
|
+
let delay = this.reconnectInitialDelayMs;
|
|
238
|
+
while (!this.manuallyClosed && !this.connected) {
|
|
239
|
+
attempt += 1;
|
|
240
|
+
if (attempt > 1) {
|
|
241
|
+
await this.onReconnectAttempt?.(attempt - 1, delay, reason);
|
|
242
|
+
await new Promise((resolve) => setTimeout(resolve, this.withJitter(delay)));
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
const socket = await this.openSocket();
|
|
246
|
+
this.socket = socket;
|
|
247
|
+
await this.resubscribeAll();
|
|
248
|
+
await this.onOpen?.();
|
|
249
|
+
attempt = 0;
|
|
250
|
+
delay = this.reconnectInitialDelayMs;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
if (delay >= this.reconnectMaxDelayMs && attempt >= this.reconnectWarnAfterAttempts) {
|
|
255
|
+
await this.emitReconnectWarning(attempt, reason);
|
|
256
|
+
attempt = 0;
|
|
257
|
+
}
|
|
258
|
+
delay = Math.min(Math.floor(delay * this.reconnectBackoffMultiplier), this.reconnectMaxDelayMs);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
this.maintainingConnection = false;
|
|
262
|
+
}
|
|
263
|
+
async emitReconnectWarning(attempt, reason) {
|
|
264
|
+
if (this.onReconnectWarning) {
|
|
265
|
+
await this.onReconnectWarning(attempt, reason);
|
|
157
266
|
return;
|
|
158
267
|
}
|
|
159
|
-
|
|
160
|
-
this.closed = false;
|
|
161
|
-
const socket = await this.openSocket();
|
|
162
|
-
this.socket = socket;
|
|
163
|
-
await this.resubscribeAll();
|
|
164
|
-
await this.onOpen?.();
|
|
268
|
+
console.warn(`[drishti-sdk] WebSocket still unable to connect after ${attempt} attempts (${reason}); retrying`);
|
|
165
269
|
}
|
|
166
270
|
async openSocket() {
|
|
167
|
-
const
|
|
168
|
-
const socket = this.createSocket(url);
|
|
271
|
+
const socket = this.createSocket();
|
|
169
272
|
await new Promise((resolve, reject) => {
|
|
170
273
|
const onOpen = () => {
|
|
171
274
|
cleanup();
|
|
@@ -175,12 +278,19 @@ export class DrishtiWebSocketSession {
|
|
|
175
278
|
cleanup();
|
|
176
279
|
reject(new DrishtiWebSocketError("WebSocket connection failed"));
|
|
177
280
|
};
|
|
281
|
+
const onClose = (event) => {
|
|
282
|
+
cleanup();
|
|
283
|
+
const code = "code" in event ? event.code : 0;
|
|
284
|
+
reject(new DrishtiWebSocketError(`WebSocket closed before open (code ${code})`));
|
|
285
|
+
};
|
|
178
286
|
const cleanup = () => {
|
|
179
287
|
socket.removeEventListener("open", onOpen);
|
|
180
288
|
socket.removeEventListener("error", onError);
|
|
289
|
+
socket.removeEventListener("close", onClose);
|
|
181
290
|
};
|
|
182
291
|
socket.addEventListener("open", onOpen);
|
|
183
292
|
socket.addEventListener("error", onError);
|
|
293
|
+
socket.addEventListener("close", onClose);
|
|
184
294
|
});
|
|
185
295
|
this.attachSocketHandlers(socket);
|
|
186
296
|
return socket;
|
|
@@ -194,53 +304,46 @@ export class DrishtiWebSocketSession {
|
|
|
194
304
|
this.socket = null;
|
|
195
305
|
void this.onClose?.("WebSocket closed");
|
|
196
306
|
if (this.manuallyClosed) {
|
|
197
|
-
this.closed = true;
|
|
198
|
-
this.rejectWaiters("WebSocket closed");
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (!this.autoReconnect) {
|
|
202
|
-
this.closed = true;
|
|
203
307
|
this.rejectWaiters("WebSocket closed");
|
|
204
308
|
return;
|
|
205
309
|
}
|
|
206
|
-
|
|
310
|
+
this.startConnectionMaintenance("WebSocket closed");
|
|
207
311
|
});
|
|
208
312
|
}
|
|
209
|
-
createSocket(
|
|
313
|
+
createSocket() {
|
|
314
|
+
const url = buildWebSocketUrl(this.baseUrl, this.apiKey);
|
|
210
315
|
const impl = this.webSocketImpl;
|
|
211
316
|
const headers = { ...this.headers, "X-API-Key": this.apiKey };
|
|
212
317
|
try {
|
|
213
318
|
return new impl(url, undefined, { headers });
|
|
214
319
|
}
|
|
215
320
|
catch {
|
|
216
|
-
|
|
217
|
-
// Fallback to query-param auth for compatibility.
|
|
218
|
-
return new this.webSocketImpl(buildWebSocketUrl(this.baseUrl, this.apiKey));
|
|
321
|
+
return new this.webSocketImpl(url);
|
|
219
322
|
}
|
|
220
323
|
}
|
|
221
324
|
async close() {
|
|
222
325
|
this.manuallyClosed = true;
|
|
223
|
-
this.
|
|
326
|
+
this.maintainingConnection = false;
|
|
224
327
|
if (this.socket === null) {
|
|
225
|
-
this.closed = true;
|
|
226
328
|
this.rejectWaiters("WebSocket closed");
|
|
227
329
|
return;
|
|
228
330
|
}
|
|
229
|
-
this.closed = true;
|
|
230
331
|
this.socket.close();
|
|
231
332
|
this.socket = null;
|
|
232
333
|
this.rejectWaiters("WebSocket closed");
|
|
233
334
|
}
|
|
234
335
|
async subscribe(options) {
|
|
235
|
-
|
|
336
|
+
const normalized = {
|
|
236
337
|
product: options.product,
|
|
237
338
|
symbols: normalizeSymbols(options.symbols),
|
|
238
339
|
detailed: options.detailed !== false,
|
|
239
|
-
}
|
|
340
|
+
};
|
|
341
|
+
this.subscriptions.set(options.product, normalized);
|
|
342
|
+
this.startConnectionMaintenance("subscribe");
|
|
240
343
|
if (!this.connected || this.socket === null) {
|
|
241
|
-
|
|
344
|
+
return;
|
|
242
345
|
}
|
|
243
|
-
this.socket.send(subscribeMessage(
|
|
346
|
+
this.socket.send(subscribeMessage(normalized));
|
|
244
347
|
}
|
|
245
348
|
async dispatch(event) {
|
|
246
349
|
const names = [event.kind, "message"];
|
|
@@ -250,6 +353,14 @@ export class DrishtiWebSocketSession {
|
|
|
250
353
|
await handler(event);
|
|
251
354
|
}
|
|
252
355
|
}
|
|
356
|
+
if (event.kind !== "data" || !isDrishtiWebSocketProduct(event.channel)) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
const channelHandlers = this.channelHandlers.get(event.channel) ?? [];
|
|
360
|
+
const payload = event.data;
|
|
361
|
+
for (const handler of channelHandlers) {
|
|
362
|
+
await handler(payload);
|
|
363
|
+
}
|
|
253
364
|
}
|
|
254
365
|
async handleIncoming(raw) {
|
|
255
366
|
const event = parseWebSocketMessage(raw);
|
|
@@ -275,32 +386,6 @@ export class DrishtiWebSocketSession {
|
|
|
275
386
|
this.socket.send(subscribeMessage(options));
|
|
276
387
|
}
|
|
277
388
|
}
|
|
278
|
-
async reconnectLoop(reason) {
|
|
279
|
-
if (this.reconnecting || this.manuallyClosed) {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
this.reconnecting = true;
|
|
283
|
-
let attempt = 0;
|
|
284
|
-
let delay = this.reconnectInitialDelayMs;
|
|
285
|
-
while (!this.manuallyClosed) {
|
|
286
|
-
attempt += 1;
|
|
287
|
-
await this.onReconnectAttempt?.(attempt, delay, reason);
|
|
288
|
-
await new Promise((resolve) => setTimeout(resolve, this.withJitter(delay)));
|
|
289
|
-
try {
|
|
290
|
-
const socket = await this.openSocket();
|
|
291
|
-
this.socket = socket;
|
|
292
|
-
this.closed = false;
|
|
293
|
-
await this.resubscribeAll();
|
|
294
|
-
await this.onOpen?.();
|
|
295
|
-
this.reconnecting = false;
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
catch {
|
|
299
|
-
delay = Math.min(Math.floor(delay * this.reconnectBackoffMultiplier), this.reconnectMaxDelayMs);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
this.reconnecting = false;
|
|
303
|
-
}
|
|
304
389
|
withJitter(delayMs) {
|
|
305
390
|
if (this.reconnectJitterRatio <= 0) {
|
|
306
391
|
return delayMs;
|
|
@@ -314,7 +399,7 @@ export class DrishtiWebSocketSession {
|
|
|
314
399
|
if (queued) {
|
|
315
400
|
return queued;
|
|
316
401
|
}
|
|
317
|
-
if (this.
|
|
402
|
+
if (this.manuallyClosed) {
|
|
318
403
|
throw new DrishtiWebSocketError("WebSocket closed");
|
|
319
404
|
}
|
|
320
405
|
return await new Promise((resolve, reject) => {
|
|
@@ -322,18 +407,11 @@ export class DrishtiWebSocketSession {
|
|
|
322
407
|
});
|
|
323
408
|
}
|
|
324
409
|
async *events() {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
}
|
|
328
|
-
while (!this.closed) {
|
|
410
|
+
this.startConnectionMaintenance("events");
|
|
411
|
+
while (!this.manuallyClosed) {
|
|
329
412
|
yield await this.nextEvent();
|
|
330
413
|
}
|
|
331
414
|
}
|
|
332
|
-
async run() {
|
|
333
|
-
for await (const _event of this.events()) {
|
|
334
|
-
// Callbacks run during handleIncoming; keep the read loop alive.
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
415
|
}
|
|
338
416
|
export async function* streamProduct(options) {
|
|
339
417
|
const session = new DrishtiWebSocketSession({
|
|
@@ -342,7 +420,6 @@ export async function* streamProduct(options) {
|
|
|
342
420
|
headers: options.headers,
|
|
343
421
|
webSocketImpl: options.webSocketImpl,
|
|
344
422
|
});
|
|
345
|
-
await session.connect();
|
|
346
423
|
try {
|
|
347
424
|
await session.subscribe({
|
|
348
425
|
product: options.product,
|
package/dist/websocket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drishti-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "TypeScript/JavaScript client for the Drishti API (/v1)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
|
+
"unpkg": "dist/drishti-sdk.min.js",
|
|
9
|
+
"jsdelivr": "dist/drishti-sdk.min.js",
|
|
10
|
+
"browser": "dist/drishti-sdk.min.js",
|
|
8
11
|
"sideEffects": false,
|
|
9
12
|
"exports": {
|
|
10
13
|
".": {
|
|
@@ -26,14 +29,18 @@
|
|
|
26
29
|
"LICENSE"
|
|
27
30
|
],
|
|
28
31
|
"scripts": {
|
|
29
|
-
"build": "tsc",
|
|
30
|
-
"
|
|
32
|
+
"build": "tsc && npm run build:browser",
|
|
33
|
+
"build:browser": "esbuild src/index.ts --bundle --minify --format=iife --global-name=DrishtiSDK --platform=browser --target=es2020 --sourcemap --legal-comments=none --outfile=dist/drishti-sdk.min.js",
|
|
34
|
+
"prepublishOnly": "npm run build",
|
|
35
|
+
"ws:listen-all": "node scripts/ws-listen-all.mjs"
|
|
31
36
|
},
|
|
32
37
|
"engines": {
|
|
33
38
|
"node": ">=18"
|
|
34
39
|
},
|
|
35
40
|
"devDependencies": {
|
|
36
|
-
"
|
|
41
|
+
"esbuild": "^0.28.0",
|
|
42
|
+
"typescript": "~5.6.0",
|
|
43
|
+
"ws": "^8.21.0"
|
|
37
44
|
},
|
|
38
45
|
"license": "MIT",
|
|
39
46
|
"repository": {
|