# Change Log

All notable changes to this project will be documented in this file
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
This project adheres to [Semantic Versioning](http://semver.org/).

## v10.1.1 - 2018-10-29

* Print a deprecation warning message when using the unrenamed SDK [Tim Perry]

## v10.1.0 - 2018-10-26

* Tests: Replace eventually.match checks to work in newer chai version [Thodoris Greasidis]
* Tests: Convert image spec to TypeScript [Thodoris Greasidis]
* Tests: Add support for TypeScript test cases [Thodoris Greasidis]
* Chore: Upgrade to balena-config-karma to v2.3.1 to support TS tests [Thodoris Greasidis]

## v10.0.9 - 2018-10-24

* Application.spec: Fix failing app creation test w/ too short name [Thodoris Greasidis]

## v10.0.8 - 2018-09-27

* Chore: Rely only on ResinCI for publishing to npm [Thodoris Greasidis]
* Chore: Do not run tests on prepack, to be compliant with resinCI [Thodoris Greasidis]
* Tests-billing: Update paid billing tests for the dynamic billing era [Thodoris Greasidis]

## v10.0.7 - 2018-08-20

* Change name and logic of normalizeAuthError method #566 [amdomanska]
* Report authentication errors more accurately #566 [Tim Perry]

## v10.0.6 - 2018-08-17

* Add support for 'all' in logs requests #556 [Tim Perry]

## v10.0.5 - 2018-08-17

* Typings: Allow numeric parameters to models.application.has() #570 [Thodoris Greasidis]
* Update logs tests to match the new API subscribe behaviour #570 [Tim Perry]

## v10.0.4 - 2018-08-10

* Update test command in readme #565 [Aga Domanska]

## v10.0.3 - 2018-08-09

* Fix bug in log stream setup error reporting #560 [Tim Perry]

## v10.0.2 - 2018-08-07

* Typings: Properly type User to Application navigation #562 [Thodoris Greasidis]

## v10.0.1 - 2018-08-06

* Restore disabled key generation tests for not found app/device #558 [Thodoris Greasidis]

## v10.0.0 - 2018-08-02

* *BREAKING*: Remove sdk.models.environmentVariables #554 [Tim Perry]
* Typings: Update to be compatible with TS 2.9 #554 [Thodoris Greasidis]
* Mark application.generateApiKey as deprecated #554 [Tim Perry]
* Support device service var overrides as models.device.serviceVar #554 [Tim Perry]
* Support service variables as models.service.var #554 [Tim Perry]
* Support device environment variables as models.device.envVar #554 [Tim Perry]
* Support device config variables as models.device.configVar #554 [Tim Perry]
* Support application environment vars as models.application.envVar #554 [Tim Perry]
* Support application config variables as models.application.configVar #554 [Tim Perry]
* Document getConfig's limitations when using API keys #554 [Tim Perry]
* *BREAKING*: The version option in os.getConfig() is now required #554 [Tim Perry]
* Allow moving devices to applications of the same arch type #554 [Thodoris Greasidis]
* Add transitional support for the name field on app & device env vars #554 [Thodoris Greasidis]
* Add device.start/stop/restartService methods #554 [Tim Perry]
* Deprecate device.stop/startApplication & getApplicationInfo #554 [Tim Perry]
* *BREAKING*: Remove (previously deprecated) application.getById #554 [Tim Perry]
* *BREAKING*: Remove device.enable/disableTcpPing #554 [Tim Perry]
* Add new properties to InvoiceInfo interface #554 [Dimitrios Lytras]
* Add support for release tags as models.release.tags #554 [Thodoris Greasidis]
* *BREAKING*: Return collaborator apps with models.applications.getAll #554 [Cameron Diver]
* *BREAKING*: Properly type resin-request to return Bluebird Promises #554 [Thodoris Greasidis]
* *BREAKING*: Update to resin-pine 7. Options are now $-prefixed ($filter) #554 [Tim Perry]
* *BREAKING*: Remove config.getMixpanelToken & config.getPubNubKeys #554 [Tim Perry]
* Add getAllByApplication lookup for services #554 [Tim Perry]
* *BREAKING*: Change device.name to device.device_name everywhere #554 [Tim Perry]
* Add models.image methods to look up individual image builds #554 [Tim Perry]
* Add release.getWithImageDetails to easily get full release details #554 [Tim Perry]
* *BREAKING*: Change models.build to models.release #554 [Tim Perry]
* Create device.getWithServiceDetails(), to show multicontainer state #554 [Tim Perry]
* *BREAKING*: Move to API v4 ('multicontainer') #554 [Tim Perry]

## v9.0.4 - 2018-07-20

* Add logs history & subscribe options to the TS typings #549 [Tim Perry]

## v9.0.3 - 2018-07-20

* Narrow the LogMessage typings to match the new API format #548 [Tim Perry]
* Support the count option in logs.subscribe #548 [Tim Perry]

## v9.0.2 - 2018-07-18

* Use a new npm token to fix travis deploys #545 [Thodoris Greasidis]

## v9.0.1 - 2018-07-18

* Pin bluebird typings to the latest working version #543 [Thodoris Greasidis]

## v9.0.0 - 2018-07-09

* Resin.logs.subscribe() now uses the API's streaming endpoint #529 [Ariel Flesler]
* Resin.logs.history() now uses the new API's custom endpoint #529 [Ariel Flesler]
* *BREAKING*: Remove log clearing methods (logs.clear & logs.historySinceClear) #529 [Ariel Flesler]

## v8.2.4 - 2018-07-09

* Print a 'please update' warning if any legacy logs methods are used, as they'll soon stop working #537 [Tim Perry]

## v8.2.3 - 2018-07-02

* Upgrade uglify & include (now-supported) streaming dependencies #534 [Tim Perry]

## v8.2.2 - 2018-06-25

* Disable half the builds (node 8 on appveyor, 6 on travis) to reduce API load #528 [Tim Perry]
* Delete an outdated test #528 [Ariel Flesler]
* Mark resin.logs.clear() & resin.logs.historySinceClear() as deprecated #528 [Ariel Flesler]

## v8.2.1 - 2018-05-09

* Fix ResourceNotFound detection on tag upserts for newer pine #503 [Thodoris Greasidis]

## v8.2.0 - 2018-02-14

* Include createApiKey in type definitions #470 [MoranF]

## v8.1.5 - 2018-02-14

* Make small corrections to typings for device.register #472 [Tim Perry]

## v8.1.4 - 2018-02-13

* Update tests to stop using various recently removed device types #473 [Tim Perry]

## v8.1.3 - 2018-01-29

* Fix bug when merging expand options #459 [Lucian Buzzo]

## v8.1.2 - 2018-01-26

* Update resin-register-device to ^5.0.0 #466 [Alexis Svinartchouk]

## v8.1.1 - 2018-01-18

* Deprecate passing an api key to the SDK constructor #460 [Tim Perry]

## v8.1.0 - 2018-01-18

* Export a method for generating a new API key #457 [MoranF]

## v8.0.3 - 2018-01-17

* Never internally select:[], since that not valid #461 [Tim Perry]

## v8.0.2 - 2018-01-11

* Add typings for application info #455 [Tim Perry]
* Ensure options params are optional in the typings #455 [Tim Perry]
* Ensure optional properties are included in log message types #455 [Tim Perry]

## v8.0.1 - 2018-01-10

* Upgrade typescript to 2.6 #454 [Tim Perry]

## v8.0.0 - 2018-01-08

* *BREAKING*: Stop exposing sdk.token object. #449 [MoranF]
* Change the getDashboardUrl to use the device UUID #449 [Thodoris Greasidis]

## v7.2.4 - 2018-01-05

* Fix tag updating when the build get's minified #451 [Thodoris Greasidis]

## v7.2.3 - 2017-12-22

* Include resin-request typings too #448 [Tim Perry]
* Expand the type definitions further to cover all remaining methods #448 [Tim Perry]

## v7.2.2 - 2017-12-21

* Prettify on build, to help run it locally, and ensure it's caught in CI #446 [Tim Perry]

## v7.2.1 - 2017-12-20

* Make sure types are published correctly #447 [Tim Perry]
* Type lots of extra previously untyped methods & features #447 [Tim Perry]

## v7.2.0 - 2017-12-19

* Include SDK typescript types in the SDK itself #445 [Tim Perry]

## v7.1.0 - 2017-11-29

* Add Application & Device Tag methods #433 [Thodoris Greasidis]

## v7.0.3 - 2017-11-29

* Start using Typescript #438 [Thodoris Greasidis]

## v7.0.2 - 2017-11-28

* Stop requiring tests to be configured with the test user id #437 [Tim Perry]
* Ensure browser console.logs appear in test output, to help debugging #437 [Tim Perry]

## v7.0.1 - 2017-10-17

* Ensure os.getMaxSatisfyingVersion returns exact results for exact matches #423 [Tim Perry]

## v7.0.0 - 2017-10-12

* *BREAKING*: Remove device.ensureSupervisorCompatibility - use semver directly instead #420 [Tim Perry]
* Fix breaking bugs in device.enable/disableTcpPing #420 [Tim Perry]
* Make device.update options optional #420 [Tim Perry]
* *BREAKING*: Upgrade to API v3. Main change is that all relationships & result properties now include verbs (e.g. device.application is now device.belongs_to__application). #420 [Tim Perry]
* *BREAKING*: Tie the SDK to a specific API version (removing `apiVersion` option) #420 [Tim Perry]
* *BREAKING*: Stop actively supporting node 4. #420 [Tim Perry]
* Change device registration to use a provisioning key #420 [Tim Perry]
* *BREAKING*: Remove (already deprecated) models.application.getApiKey() #420 [Tim Perry]
* *BREAKING*: Rename getAppWithOwner to getAppByOwner #420 [Tim Perry]
* *BREAKING*: Don't allow creating applications with discontinued device types #420 [Tim Perry]
* Make device.move throw ResinInvalidDeviceType for incompatible device types (not just Error) #420 [Tim Perry]
* *BREAKING*: Don't expand relationships by default. Pass { expand: '...' } options to opt in instead. #420 [Tim Perry]
* *BREAKING*: Remove device.application_name and device.dashboard_url #420 [Tim Perry]
* *BREAKING*: Remove application.online_devices and application.device_length #420 [Tim Perry]

## v6.15.0 - 2017-10-12

* Add application.generateProvisioningKey() #419 [Tim Perry]

## v6.14.8 - 2017-10-06

* Stop requests that don't need auth from failing if you have an invalid token #414 [Tim Perry]

## v6.14.7 - 2017-09-29

* Change GLOBAL to global to avoid deprecation warning with shared options #406 [Tim Perry]

## v6.14.6 - 2017-09-28

* Ensure that npm published files are always built afresh first #404 [Tim Perry]

## v6.14.5 - 2017-09-27

* Explicitly include build output in packaged releases #403 [Tim Perry]

## v6.14.4 - 2017-09-26

* Uncommit (though still publish) generated browser files #401 [Tim Perry]

## v6.14.3 - 2017-09-26

* Fix command PING to work properly #387 [Horia Delicoti]

## v6.14.2 - 2017-09-21

* Improve performance by select only the fields required where possible #396 [Tim Perry]

## v6.14.1 - 2017-09-18

* Update tests to use `v2` instead of `ewa` #360 [Pagan Gazzard]

## v6.14.0 - 2017-09-12

* Add lastOnline() method to device model #373 [Lucian Buzzo]

## v6.13.0 - 2017-09-12

* Add methods for generating an sdk instance using shared options #370 [Lucian Buzzo]

## v6.12.1 - 2017-09-11

* Update to resin-errors v2.9.0 #386 [Thodoris Greasidis]

## v6.12.0 - 2017-09-08

* Add reboot, shutdown and purge methods to application model and throw ResinSupervisorLockedError #379 [MoranF]

## v6.11.1 - 2017-09-06

* Change the Free tier plan title to Personal #375 [Thodoris Greasidis]

## v6.11.0 - 2017-09-06

* Detect Resin OS v1.0.0-pre devices and fill the os_version field #368 [Thodoris Greasidis]

## v6.10.1 - 2017-09-06

* Limit AppVeyor on npm v5.3 #381 [Thodoris Greasidis]

## v6.10.0 - 2017-08-31

* Expose resin-errors directly from the SDK as `.errors` #366 [Tim Perry]

## v6.9.0 - 2017-08-11

* Add function to allow looking up app based on name and owner username #352 [Cameron Diver]

## v6.8.0 - 2017-08-01

* Add self-billing related methods [Thodoris Greasidis]

## v6.7.1 - 2017-07-27

* Fix keys test after API update [Thodoris Greasidis]

## v6.7.0 - 2017-07-20

* Add the source property to builds [Thodoris Greasidis]

## v6.6.1 - 2017-07-10

* Validate env var names [Tim Perry]

## v6.6.0 - 2017-07-05

### Added

- A new method `models.application.grantSupportAccess` that allows resin.io support staff to access all devices in an application.
- A new method `models.application.revokeSupportAccess` that resin.io support staff access on all devices in an application.
- A new method `models.device.grantSupportAccess` that allows resin.io support staff to access a device.
- A new method `models.device.revokeSupportAccess` that revokes resin.io support staff access to a device.

## v6.5.0 - 2017-06-30

### Added

- A new method `models.application.enableDeviceUrls` that enables URLs for all devices in an application.
- A new method `models.application.disableDeviceUrls` that disables URLs for all devices in an application.

## v6.4.1 - 2017-05-24

### Fixed

- Don't include .env when publishing to npm
- Fix condition for travis to publish to npm


## v6.4.0 - 2017-05-23

### Added

- Document log subscriptions in detail

### Fixed

- Always choose a production image as the recommended version.
- Consistently order image versions.

## v6.3.1 - 2017-05-11

### Fixed

- Don't refresh tokens when making requests to the image maker

## v6.3.0 - 2017-05-11

### Fixed

- Fix documentation for device.getDashboardUrl()
- Stop config.* methods from refreshing the token (as they don't use it)

### Added

- The method `models.os.getConfig()` now accepts image configuration options.

## v6.2.0 - 2017-05-02

### Added

- Augment returned device object with device dashboard url property (`device.dashboard_url`)
- A new method `models.os.getConfig()` that retrieves an applications
	configuration as a json object.

### Changed

- Travis now runs builds against commits on master, in addition to PRs, to solve #309

## v6.1.0 - 2017-04-26

### Added

- Added a `device.generateDeviceKey` that can generate a device specific key for use by a device

### Changed

- Tagged commits are now automatically published to npm

## v6.0.1 - 2017-04-12

### Changed

- Sort OS versions taking their `rev` into account, if present

## v6.0.0 - 2017-04-07

### Changed

- `imageMakerUrl` is now set by default when used in the browser

### Cumulative recap of previous changes (see betas below) since 5.4.0

#### Breaking changes

- Ensure all environmentVariables.device methods return names as `.name`, never `.env_var_name`
- Removed the (already deprecated) `resin.models.device.restart()` method, in favor of `resin.models.device.restartApplication()`
- Changed `register()` to work with the new device registration flow. `register()` now returns device registration information (`{ id: "...", uuid: "...", api_key: "..." }`), but not the full device object.
- Changed `generateUUID()` to `generateUniqueKey()` to reflect that it should now be used for both generating a uuid and an api key.
- The error message on timeout has changed from "timeout" to "operation timed out". In addition the error thrown is now a Bluebird Promise.TimeoutError, instead of a raw Error.
- Deprecated `resin.models.application.getApiKey()` (use `.generateApiKey()` instead).

#### Additions

- Add `device.setCustomLocation` and `device.unsetCustomLocation`
- Expose `.pine` to more easily allow requests to unsupported resources
- Add support for the versioned OS downloads, see `resin.models.os.{getSupportedVersions, getMaxSatisfyingVersion}`.
- `resin.models.os.{getLastModified, download}` now support the `version` param.
- Add `resin.models.os.getDownloadSize`.
- Add `device.getAllByParentDevice` to allow querying for dependent devices by parent
- Add an optional parent id to `application.create`
- Include `update_timestamp` in builds from `resin.models.build.getAllByApplication()`
- Add `resin.models.build.get()` to load individual build data
- Allow arbitrary extra pinejs options in `key.getAll`, and all `build.get*`, `application.get*` and `device.get*` methods.
- Update the logs module to provide `historySinceLastClear` and `clear` methods.
- Add `resin.models.environmentVariables.device.getAllByApplication`
- Expose the internal resin-request and resin-token instances
- Add support for hooks to intercept requests, responses, and errors.
- Allow device & application ids for all methods, in addition to device uuids & application names, if the argument is a number instead of a string.
- Resin-SDK now works in a browser environment
- UMD and UMD-minified builds are now available at `build/resin-browser.js` and `build/resin-browser.min.js`

#### Fixes

- Encode plus symbols in version numbers when estimating the size of OS images
- Encode plus symbols in version numbers when downloading OS images
- Add placeholder support for new ResinOS version format to fix `resin-cli` issues.
- Fix `resin.models.os.getLastModified` which was returning invalid dates due to improper usage of the response headers.
- Fix potential issue with invalid dependencies by requiring resin-pine 5.0.2
- Ensure passwords are always submitted as strings when authenticating to make this more reliable in real world usage
- Ensure device/application.get (and related methods) return a clear error if given an undefined argument
- Ensure device/application.has returns false if passed undefined
- Corrected `environmentVariables.getAll` in documentation to `.getAllByApplication`

## v6.0.0-beta10 - 2017-04-06

### Changed

- Encode plus symbols in version numbers when estimating the size of OS images

## v6.0.0-beta9 - 2017-04-04

### Changed

- Encode plus symbols in version numbers when downloading OS images

## v6.0.0-beta8 - 2017-04-03

### Changed

- Add basic support for new ResinOS version format to fix `resin-cli` issues.
- **Breaking!** Upgrade resin-token to 4.0.0. This changes the browser token key to `resin-token`, and will drop all browser sessions.
- Add `device.setCustomLocation` and `device.unsetCustomLocation`
- Expose `.pine` to more easily allow requests to unsupported resources

## v6.0.0-beta7 - 2017-03-23

### Changed

- Fix `resin.models.os.getLastModified` which was returning invalid dates due to improper usage of the response headers.
- Add support for the versioned OS downloads, see
`resin.models.os.{getSupportedVersions, getMaxSatisfyingVersion}`.
- `resin.models.os.{getLastModified, download}` now support the `version` param.
- Add `resin.models.os.getDownloadSize`.
- Fix potential issue with invalid dependencies by requiring resin-pine 5.0.2

## v6.0.0-beta6 - 2017-03-21

### Changed

- Fix bug that broke `device.reboot` and `device.shutdown` with `_ is not defined`
- Add `device.getAllByParentDevice` to allow querying for dependent devices by parent
- Add an optional parent id to `application.create`
- Include `update_timestamp` in builds from `resin.models.build.getAllByApplication()`
- Add `resin.models.build.get()` to load individual build data
- Allow arbitrary extra pinejs options in `key.getAll`, and all `build.get*`, `application.get*` and `device.get*` methods.
- Ensure passwords are always submitted as strings when authenticating

## v6.0.0-beta5 - 2017-03-10

### Changed

- Update the logs module to provide `historySinceLastClear` and `clear` methods.
- Ensure device/application.get (and related methods) return a clear error if given an undefined argument
- Ensure device/application.has returns false if passed undefined

## v6.0.0-beta4 - 2017-02-27

### Changed

- Add `resin.models.environmentVariables.device.getAllByApplication`
- **Breaking!** Ensure all environmentVariables.device methods return names as `.name`, never `.env_var_name`

## v6.0.0-beta3 - 2017-02-24

### Changed

- Expose the internal resin-request and resin-token instances
- Corrected `environmentVariables.getAll` in documentation to `.getAllByApplication`
- Add support for hooks to intercept requests, responses, and errors.
- Deprecated `resin.models.application.getApiKey()` (use `.generateApiKey()` instead).
- **Breaking!** Removed the (already deprecated) `resin.models.device.restart()` method, in favor of `resin.models.device.restartApplication()`
- Add factory function defaults so all options are optional. Example: `require('resin-sdk')();`
- Allow device & application ids for all methods, in addition to device uuids & application names, if the argument is a number instead of a string.

## v6.0.0-beta2 - 2017-01-13

### Changed

- **Fixed** the issue with `resin-settings-client` not being installed in Node.js
- **Fixed** the issue with where the `settings.get('apiUrl')` was used instead of the provided option.

## v6.0.0-beta1 - 2017-01-11

### Changed

- **Breaking!** Changed `register()` to work with the new device registration flow. `register()` now return device registration information (`{ id: "...", uuid: "...", api_key: "..." }`), but not the full device object.
- **Breaking!** Changed `generateUUID()` to `generateUniqueKey()` to reflect that it should now be used for both generating a uuid and an api key.
- **Breaking!** The error message on timeout has changed from "timeout" to "operation timed out". In addition the error thrown is now a Bluebird Promise.TimeoutError, instead of a raw Error.
- Resin-SDK now works in a browser environment (experimental)
- UMD and UMD-minified builds are now available at `build/resin-browser.js` and `build/resin-browser.min.js`

## v5.4.0 - 2016-10-27

### Added

- Allow passing an optional `force` option to `resin.models.device.reboot()` and `resin.models.device.shutdown()`.

## v5.3.6 - 2016-09-26

### Changed

- Update pine filter expressions to avoid deprecation warnings.
- Return full uuid in `resin.models.device.getDeviceUrl()`.

## v5.3.5 - 2016-07-26

### Changed

- Upgrade `resin-device-logs` to v3.0.0.

## v5.3.4 - 2016-07-06

### Changed

- Make sure device functions expand shorter UUIDs before passing then to `pine`.

## v5.3.3 - 2016-06-15

### Changed

- Fix bug that caused `resin.models.device.move()` to not move devices referenced with shorter uuids.

## v5.3.2 - 2016-06-09

### Changed

- Increase HTTP timeout for requests that result in container actions.

## v5.3.1 - 2016-05-17

### Changed

- Fix a semver issue when checking the supervisor version on supervisor endpoints.

## v5.3.0 - 2016-04-26

### Added

- Implement `resin.models.device.getApplicationInfo()`.
- Implement `resin.models.device.startApplication()`.
- Implement `resin.models.device.stopApplication()`.
- Implement `resin.models.device.ping()`.
- Implement `resin.models.device.update()`.
- Implement `resin.models.device.shutdown()`.
- Implement `resin.models.device.purge()`.
- Implement `resin.models.device.enableTcpPing()`.
- Implement `resin.models.device.disableTcpPing()`.

### Changed

- Rename `resin.models.device.restart()` to `resin.models.device.restartApplication()`.
- Deprecate `resin.models.device.restart()`.

## v5.2.0 - 2016-02-29

### Added

- Support device type aliases.
- Implement `resin.models.build.getAllByApplication()`.
- Implement `resin.models.device.reboot()`.

### Changed

- Upgraded oudated dependencies.

## v5.1.0 - 2016-01-26

### Added

- Implement `resin.models.os.getLastModified()`.
- Implement `resin.models.device.getStatus()`.

### Changed

- Patch device types to be marked as ALPHA and BETA instead of PREVIEW and EXPERIMENTAL.
- Fix exception when fetching a device whose uuid only contains numbers.

## v5.0.1 - 2016-01-21

### Changed

- Upgrade `resin-request` to v4.0.0.

## v5.0.0 - 2016-01-20

### Added

- Implement integration tests.
- Support shorter uuids in all device functions.

### Changed

- Only return applications that belong to current user.
- Change license to Apache 2.0.
- Serve static unconfigured images.
- Ensure environment variable values are strings.

## v4.1.3 - 2015-11-24

- Upgrade `resin-device-logs` to v2.0.1.

## v4.1.2 - 2015-11-15

### Changed

- Fix bug in `resin.settings.getAll()` that caused the function to throw an error.

## v4.1.1 - 2015-11-12

### Changed

- Validate application device type before moving a device.

## v4.1.0 - 2015-11-11

### Added

- Implement `resin.models.device.move()`.

### Changed

- Port all documentation examples to JavaScript.

## v4.0.0 - 2015-10-21

### Added

- Implement `resin.auth.twoFactor.isEnabled()`.
- Implement `resin.auth.twoFactor.isPassed()`.
- Implement `resin.auth.twoFactor.challenge()`.

### Changed

- Require an `email` instead of `username` in `resin.auth.login()` and `resin.auth.authenticate()`.
- Support searching a device type slug by a slug.

## v3.0.0 - 2015-10-12

### Changed

- Make `resin.models.device.generateUUID()` async.

## v2.8.1 - 2015-10-12

### Changed

- Make `resin.models.config.getPubNubKeys()` and `resin.models.config.getMixpanelToken()` private.
- Fix `resin.models.device.generateUUID()` examples.

## v2.8.0 - 2015-09-24

### Added

- Implement `resin.models.device.restart()`.

## v2.7.3 - 2015-09-07

### Changed

- Upgrade Resin Settings Client to v3.1.0.

## v2.7.2 - 2015-09-07

### Changed

- Upgrade Resin Token to v2.4.2.

## v2.7.1 - 2015-09-07

### Changed

- Upgrade Resin Settings Client to v3.0.0.

## v2.7.0 - 2015-09-01

### Added

- Implement `resin.models.config.getMixpanelToken()`.

### Changed

- Reuse `resin-register-device` to provide device registration and uuid generation.

## v2.6.2 - 2015-08-28

### Changed

- Update Resin Request to v2.3.1.
- Fix bug that caused `authenticate()` to fail even with valid credentials.

## v2.6.1 - 2015-08-25

### Changed

- Update Resin Request to v2.3.0.

## v2.6.0 - 2015-08-25

### Added

- Implement `resin.models.config.getDeviceOptions()`.

### Changed

- Improve `resin.models.application.create()` documentation.

## v2.5.0 - 2015-08-24

### Added

- Set `RESIN` and `USER` as system environment variables.
- Make use of `@fulfil` and `@reject` JSDoc tags to document promises.

### Changed

- Upgrade Resin Request to v2.2.4.

## v2.4.1 - 2015-08-17

### Changed

- Upgrade Resin Settings Client to v2.1.0.
- Request GET /whoami to determine if a user is logged in `resin.auth.isLoggedIn()`.
- Fix bug that caused device environment variables to not have a `name` property.

## v2.4.0 - 2015-08-10

### Added

- Implement `resin.models.device.getManifestByApplication()`.
- Implement `resin.models.device.register()`.
- Check that device/application exists before attempting to remove.

### Changed

- Fix environment variables documentation.
- Fix `resin.models.key.get()` `undefined` issue.
- Fix `resin.models.key.create()` bug that caused no key to be created.
- Fix `resin.models.application.create()` example issue with device slugs.
- Upgrade `resin-errors` to v2.0.0.
- Upgrade `resin-request` to v2.2.3.
- Upgrade `resin-token` to v2.4.1.

## v2.3.1 - 2015-07-29

### Changed

- Fix undefined Authorization header issue.
- Fix HTTP request body issue in auth module.

## v2.3.0 - 2015-07-27

### Added

- Refresh token in an interval.

### Removed

- Remove deprecated `device.register()`.

## v2.2.0 - 2015-07-03

### Added

- Implement `resin.models.device.getLocalIPAddresses()`.

## v2.1.0 - 2015-07-01

### Changed

- Upgrade `resin-settings-client` to v1.4.0.

## v2.0.0 - 2015-06-29

### Added

- Implement `resin.logs.history()`.
- Implement `resin.models.device.register()`.
- Implement `resin.settings`.
- Start making use of a CHANGELOG.
- Improve unit testing.
- Add promise support.
- Check that a device exists before attempting `rename` operation.
- Reference devices by `uuid` instead of by name.
- Markdown JSDoc documentation in `DOCUMENTATION.md`.

### Changed

- Change interface and internal workings of `resin.logs.subscribe()`.
- "get all" functions now return an empty array if no resources instead of yielding an error.
- Update JSDoc annotations to use promises.

### Removed

- Remove HTML generated JSDoc documentation.
