# BRAID v0.8.5 > Websocket server for the Measure platform [![Build Status](https://semaphoreci.com/api/v1/projects/7767f0f3-4da6-4c84-9167-4db5402a3262/2573412/badge.svg)](https://semaphoreci.com/yardstick/braid) ## Essential Information: * braid uses [mocha (test framework)](https://www.npmjs.com/package/mocha), [chai (BDD/TDD assertion library)](https://www.npmjs.com/package/chai), [sinnon (spies, stubs, and mocks)](https://www.npmjs.com/package/sinon), [nyc (code coverage calculator)](https://www.npmjs.com/package/nyc) for our unit testing. Get aquainted with these packages to have a smooth unit testing experience. * For web sockets braid uses [ws](https://www.npmjs.com/package/ws) * braid uses [typescript](https://www.npmjs.com/package/typescript) for our primary code development because of it's opinionated type management among other things. Get a good understanding of what typescript is, it's benifits, drawbacks, and dev flow ## Local Development * you can see if braid is running by typing in `https://ysbraid.localhost:8443` * to connect to braid you need to use the url `wss://ysbraid.localhost:8443?token={token}` * the token is generated in the application that you're connecting to the braid app with (currently only measure has an implementation for this) * you can generate a token for development in you local console (`app-console`) with the following commands: ``` secret = "test" payload = { :data => { :client => 'client name (mhs is only one implemented currently)', :client_type => 'site (only one in use rite now)', :user_id => (yardstick user id), :user_type => '(teacher/user)', :channel => 'desired channel name' }, :sub => 'Braid JWT', :aud => "internal", :iss => 'Yardstick Software', :exp => Time.now.to_i + 120 * 3600 (optional)} token = JWT.encode payload, hmac_secret, "HS256" ``` * to test your changes before pushing you can run `compose test` ## Setting up * download the braid repo into a folder in the same directory as the primary yardstick folder * `vagrant up` in the primary yardstick folder * run the command `compose stop braid && compose rm braid && tsc && compose build braid && compose up -d` * `compose stop` stops the default braid container that `vagrant up` builds * `compose rm braid` removes the default braid container * `tsc` transpiles the typescript in braid into javascript * `compose build braid` builds the braid container based on the latest transpiled javascript files * `comopose up -d` builds the braid container based on the files in the braid folder, overriding the defaul braid build container