smartapi-javascript

```bash npm i smartapi-javascript ```

Usage no npm install needed!

<script type="module">
  import smartapiJavascript from 'https://cdn.skypack.dev/smartapi-javascript';
</script>

README

SmartAPI Javascript Client SDK

Installation

npm i smartapi-javascript

Getting started with API

let { SmartAPI, WebSocket } = require("smartapi-javascript");

let smart_api = new SmartAPI({
    api_key: "smartapi_key",    // PROVIDE YOUR API KEY HERE
     // OPTIONAL : If user has valid access token and refresh token then it can be directly passed to the constructor 
    // access_token: "YOUR_ACCESS_TOKEN",
    // refresh_token: "YOUR_REFRESH_TOKEN"
});

// If user does not have valid access token and refresh token then use generateSession method 
smart_api.generateSession("CLIENT_CODE", "PASSWORD")
    .then((data) => {
        return smart_api.getProfile();

        // User Methods
        // return smart_api.getProfile()

        // return smart_api.logout()

        // return smart_api.getRMS();

        // Order Methods
        // return smart_api.placeOrder({
        //     "variety": "NORMAL",
        //     "tradingsymbol": "SBIN-EQ",
        //     "symboltoken": "3045",
        //     "transactiontype": "BUY",
        //     "exchange": "NSE",
        //     "ordertype": "LIMIT",
        //     "producttype": "INTRADAY",
        //     "duration": "DAY",
        //     "price": "19500",
        //     "squareoff": "0",
        //     "stoploss": "0",
        //     "quantity": "1"
        // })

        // return smart_api.modifyOrder({
        //     "orderid": "201130000006424",
        //     "variety": "NORMAL",
        //     "tradingsymbol": "SBIN-EQ",
        //     "symboltoken": "3045",
        //     "transactiontype": "BUY",
        //     "exchange": "NSE",
        //     "ordertype": "LIMIT",
        //     "producttype": "INTRADAY",
        //     "duration": "DAY",
        //     "price": "19500",
        //     "squareoff": "0",
        //     "stoploss": "0",
        //     "quantity": "1"
        // });

        // return smart_api.cancelOrder({
        //     "variety": "NORMAL",
        //     "orderid": "201130000006424"
        // });

        // return smart_api.getOrderBook();

        // return smart_api.getTradeBook();

      
        // Portfolio Methods
        // return smart_api.getHolding();

        // return smart_api.getPosition();

        // return smart_api.convertPosition({
        //     "exchange": "NSE",
        //     "oldproducttype": "DELIVERY",
        //     "newproducttype": "MARGIN",
        //     "tradingsymbol": "SBIN-EQ",
        //     "transactiontype": "BUY",
        //     "quantity": 1,
        //     "type": "DAY"
        // });


        // GTT Methods
        // return smart_api.createRule({
        //    "tradingsymbol" : "SBIN-EQ",
        //    "symboltoken" : "3045",
        //    "exchange" : "NSE", 
        //    "producttype" : "MARGIN",
        //    "transactiontype" : "BUY",
        //    "price" : 100000,
        //    "qty" : 10,
        //    "disclosedqty": 10,
        //    "triggerprice" : 200000,
        //    "timeperiod" : 365
        // })
        // return smart_api.modifyRule({
        //             "id" : 1000014,
        //             "symboltoken" : "3045",
        //             "exchange" : "NSE", 
        //             "qty" : 10

        // })
        // return smart_api.cancelRule({
        //      "id" : 1000014,
        //      "symboltoken" : "3045",
        //      "exchange" : "NSE"
        // })
        // return smart_api.ruleDetails({
        //     "id" : 25
        // })
        // return smart_api.ruleList({
        //      "status" : ["NEW","CANCELLED"],
        //      "page" : 1,
        //      "count" : 10 
        // })

      // Historical Methods
        // return smart_api.getCandleData({
        //     "exchange": "NSE",
        //     "symboltoken": "3045",
        //     "interval": "ONE_MINUTE",
        //     "fromdate": "2021-02-10 09:00",
        //     "todate": "2021-02-10 09:20"
        // })
    })
    .then((data) => {
        // Profile details
    })
    .catch(ex => {
        //Log error
    })

    // TO HANDLE SESSION EXPIRY, USERS CAN PROVIDE A CUSTOM FUNCTION AS PARAMETER TO setSessionExpiryHook METHOD
    smart_api.setSessionExpiryHook(customSessionHook);

    function customSessionHook() {
        console.log("User loggedout");
        
        // NEW AUTHENTICATION CAN TAKE PLACE HERE
    }

Getting started with SmartAPI Websocket's

########################### Socket Sample Code Starts Here ###########################
// Old websocket

let web_socket = new WebSocket({
    client_code: "CLIENT_CODE",   
    feed_token: "FEED_TOKEN"
});

web_socket.connect()
    .then(() => {
        web_socket.runScript("SCRIPT", "TASK") // SCRIPT: nse_cm|2885, mcx_fo|222900  TASK: mw|sfi|dp

        setTimeout(function () {
            web_socket.close()
        }, 3000)
    })

web_socket.on('tick', receiveTick)


function receiveTick(data) {
    console.log("receiveTick:::::", data)
}

 ########################### Socket Sample Code Ends Here ###########################

 ########################### Socket Sample Code Starts Here ###########################
// New websocket

let web_socket = new WebSocketClient({
    clientcode: "CLIENT_CODE",    
    jwttoken: "jwt_token",
    apikey: "smartapi_key",
    feedtype: "order_feed",
});

web_socket.connect()
    .then(() => {
        web_socket.fetchData("ACTION_TYPE", "FEED_TYPE");  // ACTION_TYPE: subscribe | unsubscribe FEED_TYPE: order_feed

        setTimeout(function () {
            web_socket.close()
        }, 60000)
    });

web_socket.on('tick', receiveTick);


function receiveTick(data) {
    console.log("receiveTick:::::", data);
}

 ########################### Socket Sample Code Ends Here ###########################