shoonya-sdk 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.cjs +19 -4
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +19 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -68,4 +68,5 @@ wsClient.connect();
|
|
|
68
68
|
- Auto Refresh Access Token When it is expired
|
|
69
69
|
- Sync Credentials and Tokens between Rest and WS Clients
|
|
70
70
|
- Reconnect with Shoonya WS at fixed time interval, which is configurable
|
|
71
|
+
- Configurable heartbeat timer to keep connection alive
|
|
71
72
|
- and more...
|
package/dist/index.cjs
CHANGED
|
@@ -773,6 +773,8 @@ var WebsocketClient = class extends import_events.EventEmitter {
|
|
|
773
773
|
logger;
|
|
774
774
|
retryCount = 0;
|
|
775
775
|
maxRetryAttempt;
|
|
776
|
+
isHeartbeatStarted = false;
|
|
777
|
+
heartbeatInterval;
|
|
776
778
|
/**
|
|
777
779
|
*
|
|
778
780
|
* @param params
|
|
@@ -785,9 +787,11 @@ var WebsocketClient = class extends import_events.EventEmitter {
|
|
|
785
787
|
cred,
|
|
786
788
|
logging = false,
|
|
787
789
|
logFileType = "SEPARATE",
|
|
788
|
-
maxRetryAttempt = 3
|
|
790
|
+
maxRetryAttempt = 3,
|
|
791
|
+
heartbeatInterval = 15e3
|
|
789
792
|
} = params || {};
|
|
790
793
|
this.maxRetryAttempt = maxRetryAttempt;
|
|
794
|
+
this.heartbeatInterval = heartbeatInterval;
|
|
791
795
|
this.logger = new logger_default(
|
|
792
796
|
"shoonya_ws-client",
|
|
793
797
|
1024 * 1024 * 10,
|
|
@@ -840,6 +844,7 @@ var WebsocketClient = class extends import_events.EventEmitter {
|
|
|
840
844
|
if (result.t === "ck" && result.s.toLowerCase() === "ok") {
|
|
841
845
|
setTimeout(() => {
|
|
842
846
|
this.logger.log("|WSClient| Connected with Shoonya WS.");
|
|
847
|
+
this.sendHeartbeat(this.heartbeatInterval);
|
|
843
848
|
this.emit("connected");
|
|
844
849
|
this.resubscribe();
|
|
845
850
|
}, 3e3);
|
|
@@ -927,6 +932,9 @@ var WebsocketClient = class extends import_events.EventEmitter {
|
|
|
927
932
|
close() {
|
|
928
933
|
this.ws.close(0);
|
|
929
934
|
}
|
|
935
|
+
isWsOpen() {
|
|
936
|
+
return this.ws.OPEN === this.ws.readyState;
|
|
937
|
+
}
|
|
930
938
|
resubscribe() {
|
|
931
939
|
if (this.subscribedTokens.length) {
|
|
932
940
|
const tokensToSub = Array.from(new Set(this.subscribedTokens));
|
|
@@ -1009,9 +1017,6 @@ var WebsocketClient = class extends import_events.EventEmitter {
|
|
|
1009
1017
|
}
|
|
1010
1018
|
return null;
|
|
1011
1019
|
}
|
|
1012
|
-
isWsOpen() {
|
|
1013
|
-
return this.ws.OPEN === this.ws.readyState;
|
|
1014
|
-
}
|
|
1015
1020
|
refreshAccessToken() {
|
|
1016
1021
|
this.logger.log("Trying to refresh the Access Token");
|
|
1017
1022
|
refreshAccessToken().then(() => {
|
|
@@ -1038,6 +1043,16 @@ var WebsocketClient = class extends import_events.EventEmitter {
|
|
|
1038
1043
|
}
|
|
1039
1044
|
return targetDate.getTime() - dateNow.getTime();
|
|
1040
1045
|
}
|
|
1046
|
+
sendHeartbeat(interval) {
|
|
1047
|
+
if (this.isHeartbeatStarted)
|
|
1048
|
+
return;
|
|
1049
|
+
this.isHeartbeatStarted = true;
|
|
1050
|
+
setInterval(() => {
|
|
1051
|
+
if (this.isWsOpen()) {
|
|
1052
|
+
this.ws.ping("ping");
|
|
1053
|
+
}
|
|
1054
|
+
}, interval);
|
|
1055
|
+
}
|
|
1041
1056
|
};
|
|
1042
1057
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1043
1058
|
0 && (module.exports = {
|
package/dist/index.d.cts
CHANGED
|
@@ -914,6 +914,8 @@ declare class WebsocketClient extends EventEmitter {
|
|
|
914
914
|
private logger;
|
|
915
915
|
private retryCount;
|
|
916
916
|
private maxRetryAttempt;
|
|
917
|
+
private isHeartbeatStarted;
|
|
918
|
+
private heartbeatInterval;
|
|
917
919
|
/**
|
|
918
920
|
*
|
|
919
921
|
* @param params
|
|
@@ -926,6 +928,7 @@ declare class WebsocketClient extends EventEmitter {
|
|
|
926
928
|
cred?: UserCred;
|
|
927
929
|
logFileType?: LoggerType;
|
|
928
930
|
maxRetryAttempt?: number;
|
|
931
|
+
heartbeatInterval?: number;
|
|
929
932
|
});
|
|
930
933
|
connect(): void;
|
|
931
934
|
private wsOpenEvent;
|
|
@@ -935,15 +938,16 @@ declare class WebsocketClient extends EventEmitter {
|
|
|
935
938
|
subscribe(scrips: string | string[], feedType?: FeedType): void;
|
|
936
939
|
unsubscribe(scrips: string | string[]): void;
|
|
937
940
|
close(): void;
|
|
941
|
+
isWsOpen(): boolean;
|
|
938
942
|
private resubscribe;
|
|
939
943
|
private send;
|
|
940
944
|
private refreshEveryMorning;
|
|
941
945
|
private parseDailyRefreshTime;
|
|
942
946
|
private validateTimezoneString;
|
|
943
947
|
private validateFeedType;
|
|
944
|
-
private isWsOpen;
|
|
945
948
|
private refreshAccessToken;
|
|
946
949
|
private calculateNextRefreshDelay;
|
|
950
|
+
private sendHeartbeat;
|
|
947
951
|
}
|
|
948
952
|
|
|
949
953
|
export { AddScripToWatchlist, BaseType, BaseTypeFail, BaseTypeSuccess, BaseTypeWithoutTime, BasketMargin, CancelOrder, ChangePassword, DailyTimeString, DepthSubscriptionUpdate, ExchMessage, Exchange, ExitSNOOrder, FeedType, ForgotPassword, GetClientDetails, GetHSToken, GetLimitsParam, GetListOfPredefinedMW, GetListOfPredefinedMWScrip, GetSecurityInfo, GetTokenExpiry, GetUserDetails, GetWatchlist, GetWatchlistNames, HistoricData, Holdings, IndexList, Limits, Login, LoginWithDevicePin, LogoutResponse, MakeKeysRequired, ModifyOrder, OptionChain, Order, OrderBook, OrderInput, OrderMargin, Path, PlaceOrder, PositionBook, ProductConversion, ProductType, RemoveScripFromWatchlist, RestClient, ScripInfo, SearchScrip, Segment, SetDevicePin, SingleOrderHistory, SingleOrderStatus, TopIndexList, TopIndexListNames, TradeBook, UserCred, ValidateHSToken, WebsocketClient, getQuotes, paths };
|
package/dist/index.d.ts
CHANGED
|
@@ -914,6 +914,8 @@ declare class WebsocketClient extends EventEmitter {
|
|
|
914
914
|
private logger;
|
|
915
915
|
private retryCount;
|
|
916
916
|
private maxRetryAttempt;
|
|
917
|
+
private isHeartbeatStarted;
|
|
918
|
+
private heartbeatInterval;
|
|
917
919
|
/**
|
|
918
920
|
*
|
|
919
921
|
* @param params
|
|
@@ -926,6 +928,7 @@ declare class WebsocketClient extends EventEmitter {
|
|
|
926
928
|
cred?: UserCred;
|
|
927
929
|
logFileType?: LoggerType;
|
|
928
930
|
maxRetryAttempt?: number;
|
|
931
|
+
heartbeatInterval?: number;
|
|
929
932
|
});
|
|
930
933
|
connect(): void;
|
|
931
934
|
private wsOpenEvent;
|
|
@@ -935,15 +938,16 @@ declare class WebsocketClient extends EventEmitter {
|
|
|
935
938
|
subscribe(scrips: string | string[], feedType?: FeedType): void;
|
|
936
939
|
unsubscribe(scrips: string | string[]): void;
|
|
937
940
|
close(): void;
|
|
941
|
+
isWsOpen(): boolean;
|
|
938
942
|
private resubscribe;
|
|
939
943
|
private send;
|
|
940
944
|
private refreshEveryMorning;
|
|
941
945
|
private parseDailyRefreshTime;
|
|
942
946
|
private validateTimezoneString;
|
|
943
947
|
private validateFeedType;
|
|
944
|
-
private isWsOpen;
|
|
945
948
|
private refreshAccessToken;
|
|
946
949
|
private calculateNextRefreshDelay;
|
|
950
|
+
private sendHeartbeat;
|
|
947
951
|
}
|
|
948
952
|
|
|
949
953
|
export { AddScripToWatchlist, BaseType, BaseTypeFail, BaseTypeSuccess, BaseTypeWithoutTime, BasketMargin, CancelOrder, ChangePassword, DailyTimeString, DepthSubscriptionUpdate, ExchMessage, Exchange, ExitSNOOrder, FeedType, ForgotPassword, GetClientDetails, GetHSToken, GetLimitsParam, GetListOfPredefinedMW, GetListOfPredefinedMWScrip, GetSecurityInfo, GetTokenExpiry, GetUserDetails, GetWatchlist, GetWatchlistNames, HistoricData, Holdings, IndexList, Limits, Login, LoginWithDevicePin, LogoutResponse, MakeKeysRequired, ModifyOrder, OptionChain, Order, OrderBook, OrderInput, OrderMargin, Path, PlaceOrder, PositionBook, ProductConversion, ProductType, RemoveScripFromWatchlist, RestClient, ScripInfo, SearchScrip, Segment, SetDevicePin, SingleOrderHistory, SingleOrderStatus, TopIndexList, TopIndexListNames, TradeBook, UserCred, ValidateHSToken, WebsocketClient, getQuotes, paths };
|
package/dist/index.js
CHANGED
|
@@ -745,6 +745,8 @@ var WebsocketClient = class extends EventEmitter {
|
|
|
745
745
|
logger;
|
|
746
746
|
retryCount = 0;
|
|
747
747
|
maxRetryAttempt;
|
|
748
|
+
isHeartbeatStarted = false;
|
|
749
|
+
heartbeatInterval;
|
|
748
750
|
/**
|
|
749
751
|
*
|
|
750
752
|
* @param params
|
|
@@ -757,9 +759,11 @@ var WebsocketClient = class extends EventEmitter {
|
|
|
757
759
|
cred,
|
|
758
760
|
logging = false,
|
|
759
761
|
logFileType = "SEPARATE",
|
|
760
|
-
maxRetryAttempt = 3
|
|
762
|
+
maxRetryAttempt = 3,
|
|
763
|
+
heartbeatInterval = 15e3
|
|
761
764
|
} = params || {};
|
|
762
765
|
this.maxRetryAttempt = maxRetryAttempt;
|
|
766
|
+
this.heartbeatInterval = heartbeatInterval;
|
|
763
767
|
this.logger = new logger_default(
|
|
764
768
|
"shoonya_ws-client",
|
|
765
769
|
1024 * 1024 * 10,
|
|
@@ -812,6 +816,7 @@ var WebsocketClient = class extends EventEmitter {
|
|
|
812
816
|
if (result.t === "ck" && result.s.toLowerCase() === "ok") {
|
|
813
817
|
setTimeout(() => {
|
|
814
818
|
this.logger.log("|WSClient| Connected with Shoonya WS.");
|
|
819
|
+
this.sendHeartbeat(this.heartbeatInterval);
|
|
815
820
|
this.emit("connected");
|
|
816
821
|
this.resubscribe();
|
|
817
822
|
}, 3e3);
|
|
@@ -899,6 +904,9 @@ var WebsocketClient = class extends EventEmitter {
|
|
|
899
904
|
close() {
|
|
900
905
|
this.ws.close(0);
|
|
901
906
|
}
|
|
907
|
+
isWsOpen() {
|
|
908
|
+
return this.ws.OPEN === this.ws.readyState;
|
|
909
|
+
}
|
|
902
910
|
resubscribe() {
|
|
903
911
|
if (this.subscribedTokens.length) {
|
|
904
912
|
const tokensToSub = Array.from(new Set(this.subscribedTokens));
|
|
@@ -981,9 +989,6 @@ var WebsocketClient = class extends EventEmitter {
|
|
|
981
989
|
}
|
|
982
990
|
return null;
|
|
983
991
|
}
|
|
984
|
-
isWsOpen() {
|
|
985
|
-
return this.ws.OPEN === this.ws.readyState;
|
|
986
|
-
}
|
|
987
992
|
refreshAccessToken() {
|
|
988
993
|
this.logger.log("Trying to refresh the Access Token");
|
|
989
994
|
refreshAccessToken().then(() => {
|
|
@@ -1010,6 +1015,16 @@ var WebsocketClient = class extends EventEmitter {
|
|
|
1010
1015
|
}
|
|
1011
1016
|
return targetDate.getTime() - dateNow.getTime();
|
|
1012
1017
|
}
|
|
1018
|
+
sendHeartbeat(interval) {
|
|
1019
|
+
if (this.isHeartbeatStarted)
|
|
1020
|
+
return;
|
|
1021
|
+
this.isHeartbeatStarted = true;
|
|
1022
|
+
setInterval(() => {
|
|
1023
|
+
if (this.isWsOpen()) {
|
|
1024
|
+
this.ws.ping("ping");
|
|
1025
|
+
}
|
|
1026
|
+
}, interval);
|
|
1027
|
+
}
|
|
1013
1028
|
};
|
|
1014
1029
|
export {
|
|
1015
1030
|
RestClient,
|