"use strict"; const api = require("../api.js"); const uri = require("../util/uri.js"); const events = require("../events.js"); class UserToken extends events.EventTarget { constructor() { super(); this._orig = {}; this._updateFromResponse({}); } get token() { return this._token; } get note() { return this._note; } get enabled() { return this._enabled; } get version() { return this._version; } get expirationTime() { return this._expirationTime; } get creationTime() { return this._creationTime; } get lastEditTime() { return this._lastEditTime; } get lastUsageTime() { return this._lastUsageTime; } set note(value) { this._note = value; } static fromResponse(response) { if (typeof response.results !== "undefined") { let tokenList = []; for (let responseToken of response.results) { const token = new UserToken(); token._updateFromResponse(responseToken); tokenList.push(token); } return tokenList; } else { const ret = new UserToken(); ret._updateFromResponse(response); return ret; } } static get(userName) { return api .get(uri.formatApiLink("user-tokens", userName)) .then((response) => { return Promise.resolve(UserToken.fromResponse(response)); }); } static create(userName, note, expirationTime) { let userTokenRequest = { enabled: true, }; if (note) { userTokenRequest.note = note; } if (expirationTime) { userTokenRequest.expirationTime = expirationTime; } return api .post(uri.formatApiLink("user-token", userName), userTokenRequest) .then((response) => { return Promise.resolve(UserToken.fromResponse(response)); }); } save(userName) { const detail = { version: this._version }; if (this._note !== this._orig._note) { detail.note = this._note; } return api .put( uri.formatApiLink("user-token", userName, this._orig._token), detail ) .then((response) => { this._updateFromResponse(response); this.dispatchEvent( new CustomEvent("change", { detail: { userToken: this, }, }) ); return Promise.resolve(this); }); } delete(userName) { return api .delete( uri.formatApiLink("user-token", userName, this._orig._token), { version: this._version, } ) .then((response) => { this.dispatchEvent( new CustomEvent("delete", { detail: { userToken: this, }, }) ); return Promise.resolve(); }); } _updateFromResponse(response) { const map = { _token: response.token, _note: response.note, _enabled: response.enabled, _expirationTime: response.expirationTime, _version: response.version, _creationTime: response.creationTime, _lastEditTime: response.lastEditTime, _lastUsageTime: response.lastUsageTime, }; Object.assign(this, map); Object.assign(this._orig, map); } } module.exports = UserToken;