# UAT Breeze Connect SDK

This is a package to integrate streaming of stocks or user's order-notification & call APIs through which you can fetch live/historical data, automate your trading strategies, and monitor your portfolio in real time.

## Setup NodeJS & npm

You must download and install Node.js and npm. Please click [here](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)

Once installed, You should initiate breeze project environment via npm

```
npm init
```

## Installing the client

You can install the latest release via npm

```
npm install uatbreezeconnect
```

Or, You can also install the specific release version via npm

```
npm i uatbreezeconnect@1.0.9-rc.2
```

## Websocket Usage

```javascript
var BreezeConnect = require('uatbreezeconnect').BreezeConnect;

// Initialize SDK
var breeze = new BreezeConnect({ "appKey": "your_api_key"});

// Obtain your session key from https://uatapi.icicidirect.com/apiuser/login?api_key=YOUR_API_KEY
// Incase your api-key has special characters(like +,=,!) then encode the api key before using in the url as shown below.
console.log("https://uatapi.icicidirect.com/apiuser/login?api_key="+encodeURI("your_api_key"))

// Generate Session by Promise method generateSession() and invoking user-defined websocket() inside then()
breeze.generateSession({secretKey:"your_secret_key",sessionToken:"your_api_session"}).then(function (resp) {
    // invoking user-defined method
    websocket();
}).catch(function (err) {
    console.log(err)
});

// Callback function to receive ticks.
function onTicks(ticks){
    console.log(ticks);
}

// User-defined method for websocket with different function to call.
function websocket(){
    
    // Connect to websocket
    breeze.wsConnect()
    
    // Assign the callbacks.
    breeze.onTicks = onTicks;

    // subscribe stocks feeds
    breeze.subscribeFeeds({exchangeCode:"NFO", stockCode:"ZEEENT", productType:"options", expiryDate:"31-Mar-2022", strikePrice:"350", right:"Call", getExchangeQuotes:true, getMarketDepth:false}).then(
        function(resp){
            console.log(resp);
        }
    )

    // subscribe stocks feeds by stock-token
    breeze.subscribeFeeds({stockToken:"1.1!500780"}).then(
        function(resp){
            console.log(resp);
        }
    )

    // unsubscribe stocks feeds
    breeze.unsubscribeFeeds({exchangeCode:"NFO", stockCode:"ZEEENT", productType:"options", expiryDate:"31-Mar-2022", strikePrice:"350", right:"Call", getExchangeQuotes:true, getMarketDepth:false}).then(
        function(resp){
            console.log(resp);
        }
    )

    // unsubscribe stocks feeds by stock-token
    breeze.unsubscribeFeeds({stockToken:"1.1!500780"}).then(
        function(resp){
            console.log(resp);
        }
    )

    // subscribe order notification feeds
    breeze.subscribeFeeds({getOrderNotification:true}).then(
        function(resp){
            console.log(resp);
        }
    )
}

```
---
**NOTE**

Examples for stock_token are "4.1!38071" or "1.1!500780".

exchange_code must be 'BSE', 'NSE', 'NDX', 'MCX' or 'NFO'.

stock_code should not be an empty string. Examples for stock_code are "WIPRO" or "ZEEENT".

product_type can be either 'Futures', 'Options' or an empty string. product_type can not be an empty string for exchange_code 'NDX', 'MCX' and 'NFO'. 

strike_date can be in DD-MMM-YYYY(Ex.: 01-Jan-2022) or an empty string. strike_date can not be an empty string for exchange_code 'NDX', 'MCX' and 'NFO'.

strike_price can be float-value in string or an empty string. strike_price can not be an empty string for product_type 'Options'.

right can be either 'Put', 'Call' or an empty string. right can not be an empty string for product_type 'Options'.

Either get_exchange_quotes must be True or get_market_depth must be True. Both get_exchange_quotes and get_market_depth can be True, But both must not be False.

---

## API Usage

```javascript
var BreezeConnect = require('uatbreezeconnect').BreezeConnect;

// Initialize SDK
var breeze = new BreezeConnect({ "appKey": "your_api_key"});

// Obtain your session key from https://uatapi.icicidirect.com/apiuser/login?api_key=YOUR_API_KEY
// Incase your api-key has special characters(like +,=,!) then encode the api key before using in the url as shown below.
console.log("https://uatapi.icicidirect.com/apiuser/login?api_key="+encodeURI("your_api_key"))

// Generate Session by Promise method generateSession() and invoking user-defined apiCalls() inside then()
breeze.generateSession({secretKey:"your_secret_key",sessionToken:"your_api_session"}).then(function (resp) {
    // invoking user-defined method
    apiCalls();
}).catch(function (err) {
    console.log(err)
});

// Generate ISO8601 Date/DateTime String
var date_string = '04 JUL 2022'
var iso_date_string = new Date(date_string+" 05:30 +5:30").toISOString(); // '2022-07-04T00:00:00.000Z'
var date_time_string = '04 JUL 2022 09:00'
var iso_date_time_string = new Date(date_time_string+" +5:30").toISOString(); //'2022-07-04T03:30:00.000Z'

// User-defined method for apiCalls with various function to call various APIs.
function apiCalls() {

    // Following are the complete list of API method:

    // Get Customer details by api-session value.
    breeze.getCustomerDetails({apiSession:"your_api_session"}).then((resp) => {
            console.log(resp);
        })

    // Get Demat Holding details of your account.
    breeze.getDematHoldings().then((resp) => {
            console.log(resp);
        })

    // Get Funds details of your account.
    breeze.getFunds().then((resp) => {
            console.log(resp);
        })

    // Set Funds of your account by transaction-type as "Credit" or "Debit" with amount in numeric string as rupees and segment-type as "Equity" or "FNO".
    breeze.setFunds({transactionType:"debit",
                    amount:"200",
                    segment:"Equity"}).then((resp) => {
            console.log(resp);
        })

    // Get Historical Data for specific stock-code by mentioned interval either as "minute", "5minute", "30minutes" or as "day".
    breeze.getHistoricalData({interval:"1minute",
                            fromDate:"2021-11-15T04:00:00.000Z",
                            toDate:"2021-11-17T04:00:00.000Z",
                            stockCode:"AXIBAN",
                            exchangeCode:"NFO",
                            productType:"futures",
                            expiryDate:"2021-11-25T04:00:00.000Z",
                            right:"others",
                            strikePrice:"0"}).then((resp) => {
            console.log(resp);
        })

    // Add Margin to your account.
    breeze.addMargin({productType:"margin",
                    stockCode:"TCS",
                    exchangeCode:"BSE",
                    settlementId:"2021220",
                    addAmount:"100",
                    marginAmount:"3817.10",
                    openQuantity:"10",
                    coverQuantity:"0",
                    categoryIndexPerStock:"",
                    expiryDate:"",
                    right:"",
                    contractTag:"",
                    strikePrice:"",
                    segmentCode:""}).then((resp) => {
            console.log(resp);
        })

    // Get Margin of your account.
    breeze.getMargin({exchangeCode:"NSE"}).then((resp) => {
            console.log(resp);
        })

    // Place an order from your account.
    breeze.placeOrder({stockCode:"AXIBAN",
                        exchangeCode:"NFO",
                        product:"futures",
                        action:"buy",
                        orderType:"limit",
                        stoploss:"0",
                        quantity:"1200",
                        price:"712.00",
                        validity:"day",
                        validityDate:"2021-12-16T05:30:00.000Z",
                        disclosedQuantity:"0",
                        expiryDate:"2021-12-25T05:30:00.000Z",
                        right:"others",
                        strikePrice:"0",
                        userRemark:"Test"}).then((resp) => {
            console.log(resp);
        })

    // Get an order details by exchange-code and order-id from your account.
    breeze.getOrderDetail({exchangeCode:"NSE",
                        orderId:"20211116N100000023"}).then((resp) => {
            console.log(resp);
        })
    
    // Get order list of your account.
    breeze.getOrderList({exchangeCode:"NSE",
                        fromDate:"2021-11-01T05:30:00.000Z",
                        toDate:"2021-11-30T05:30:00.000Z"}).then((resp) => {
            console.log(resp);
        })

    // Cancel an order from your account whose status are not Executed.
    breeze.cancelOrder({exchangeCode:"NSE",
                        orderId:"20211116N100000022"}).then((resp) => {
            console.log(resp);
        })

    // Modify an order from your account whose status are not Executed.
    breeze.modifyOrder({orderId:"202111241100000002",
                        exchangeCode:"NFO",
                        orderType:"limit",
                        stoploss:"0",
                        quantity:"250",
                        price:"290100",
                        validity:"day",
                        disclosedQuantity:"0",
                        validityDate:"2021-12-30T05:30:00.000Z"}).then((resp) => {
            console.log(resp);
        })

    // Get Portfolio Holdings of your account.
    breeze.getPortfolioHoldings({exchangeCode:"NFO", 
                                fromDate:"2021-11-01T05:30:00.000Z", 
                                toDate:"2021-11-30T05:30:00.000Z",
                                stockCode:"", 
                                portfolioType:""}).then((resp) => {
            console.log(resp);
        })

    // Get Portfolio Positions from your account.
    breeze.getPortfolioPositions().then((resp) => {
            console.log(resp);
        })

    // Get quotes of mentioned stock-code
    breeze.getQuotes({stockCode:"AXIBAN",
                    exchangeCode:"NFO",
                    expiryDate:"2021-12-30T05:30:00.000Z",
                    productType:"futures",
                    right:"others",
                    strikePrice:"0"}).then((resp) => {
            console.log(resp);
        })

    // Sqauare off an order
    breeze.squareOff({sourceFlag:"",
                    stockCode:"NIFTY",
                    exchangeCode:"NFO",
                    quantity:"50",
                    price:"0",
                    action:"sell",
                    orderType:"market",
                    validity:"day",
                    stoploss:"0",
                    disclosedQuantity:"0",
                    protectionPercentage:"",
                    settlementId:"",
                    marginAmount:"",
                    openQuantity:"",
                    coverQuantity:"",
                    productType:"futures",
                    expiryDate:"2021-12-30T05:30:00.000Z",
                    right:"",
                    strikePrice:"0",
                    validityDate:"2021-12-16T05:30:00.000Z",
                    tradePassword:"",
                    aliasName:""}).then((resp) => {
            console.log(resp);
        })

    // Get trade list of your account.
    breeze.getTradeList({fromDate:"2021-09-28T05:30:00.000Z",
                        toDate:"2021-11-15T05:30:00.000Z",
                        exchangeCode:"NSE",
                        productType:"",
                        action:"",
                        stockCode:""}).then((resp) => {
            console.log(resp);
        })

    // Get trade detail of your account.
    breeze.getTradeDetail({exchangeCode:"NSE",
                            orderId:"20210928N100000067"}).then((resp) => {
            console.log(resp);
        })
}

```
