@@ -17,6 +17,7 @@ const ClientUserSettingManager = require('../managers/ClientUserSettingManager')
|
|||||||
const GuildManager = require('../managers/GuildManager');
|
const GuildManager = require('../managers/GuildManager');
|
||||||
const PresenceManager = require('../managers/PresenceManager');
|
const PresenceManager = require('../managers/PresenceManager');
|
||||||
const RelationshipManager = require('../managers/RelationshipManager');
|
const RelationshipManager = require('../managers/RelationshipManager');
|
||||||
|
const SessionManager = require('../managers/SessionManager');
|
||||||
const UserManager = require('../managers/UserManager');
|
const UserManager = require('../managers/UserManager');
|
||||||
const UserNoteManager = require('../managers/UserNoteManager');
|
const UserNoteManager = require('../managers/UserNoteManager');
|
||||||
const VoiceStateManager = require('../managers/VoiceStateManager');
|
const VoiceStateManager = require('../managers/VoiceStateManager');
|
||||||
@@ -156,6 +157,12 @@ class Client extends BaseClient {
|
|||||||
*/
|
*/
|
||||||
this.billing = new BillingManager(this);
|
this.billing = new BillingManager(this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All of the sessions of the client
|
||||||
|
* @type {SessionManager}
|
||||||
|
*/
|
||||||
|
this.sessions = new SessionManager(this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All of the settings {@link Object}
|
* All of the settings {@link Object}
|
||||||
* @type {ClientUserSettingManager}
|
* @type {ClientUserSettingManager}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ exports.PresenceManager = require('./managers/PresenceManager');
|
|||||||
exports.ReactionManager = require('./managers/ReactionManager');
|
exports.ReactionManager = require('./managers/ReactionManager');
|
||||||
exports.ReactionUserManager = require('./managers/ReactionUserManager');
|
exports.ReactionUserManager = require('./managers/ReactionUserManager');
|
||||||
exports.RoleManager = require('./managers/RoleManager');
|
exports.RoleManager = require('./managers/RoleManager');
|
||||||
|
exports.SessionManager = require('./managers/SessionManager');
|
||||||
exports.StageInstanceManager = require('./managers/StageInstanceManager');
|
exports.StageInstanceManager = require('./managers/StageInstanceManager');
|
||||||
exports.ThreadManager = require('./managers/ThreadManager');
|
exports.ThreadManager = require('./managers/ThreadManager');
|
||||||
exports.ThreadMemberManager = require('./managers/ThreadMemberManager');
|
exports.ThreadMemberManager = require('./managers/ThreadMemberManager');
|
||||||
@@ -132,6 +133,7 @@ exports.ReactionCollector = require('./structures/ReactionCollector');
|
|||||||
exports.ReactionEmoji = require('./structures/ReactionEmoji');
|
exports.ReactionEmoji = require('./structures/ReactionEmoji');
|
||||||
exports.RichPresenceAssets = require('./structures/Presence').RichPresenceAssets;
|
exports.RichPresenceAssets = require('./structures/Presence').RichPresenceAssets;
|
||||||
exports.Role = require('./structures/Role').Role;
|
exports.Role = require('./structures/Role').Role;
|
||||||
|
exports.Session = require('./structures/Session');
|
||||||
exports.StageChannel = require('./structures/StageChannel');
|
exports.StageChannel = require('./structures/StageChannel');
|
||||||
exports.StageInstance = require('./structures/StageInstance').StageInstance;
|
exports.StageInstance = require('./structures/StageInstance').StageInstance;
|
||||||
exports.Sticker = require('./structures/Sticker').Sticker;
|
exports.Sticker = require('./structures/Sticker').Sticker;
|
||||||
|
|||||||
53
src/managers/SessionManager.js
Normal file
53
src/managers/SessionManager.js
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const CachedManager = require('./CachedManager');
|
||||||
|
const Session = require('../structures/Session');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manages API methods for users and stores their cache.
|
||||||
|
* @extends {CachedManager}
|
||||||
|
*/
|
||||||
|
class SessionManager extends CachedManager {
|
||||||
|
constructor(client, iterable) {
|
||||||
|
super(client, Session, iterable);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The cache of Sessions
|
||||||
|
* @type {Collection<string, Session>}
|
||||||
|
* @name SessionManager#cache
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch all sessions of the client.
|
||||||
|
* @returns {Promise<SessionManager>}
|
||||||
|
*/
|
||||||
|
fetch() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.client.api.auth.sessions
|
||||||
|
.get()
|
||||||
|
.then(data => {
|
||||||
|
const allData = data.user_sessions;
|
||||||
|
this.cache.clear();
|
||||||
|
for (const session of allData) {
|
||||||
|
this._add(new Session(this.client, session), true, { id: session.id_hash });
|
||||||
|
}
|
||||||
|
resolve(this);
|
||||||
|
})
|
||||||
|
.catch(reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logout all client (remote).
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
logoutAllDevices() {
|
||||||
|
return this.client.api.auth.sessions.logout({
|
||||||
|
data: {
|
||||||
|
session_id_hashes: this.cache.map(session => session.id),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = SessionManager;
|
||||||
81
src/structures/Session.js
Normal file
81
src/structures/Session.js
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Base = require('./Base');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} SessionClientInfo
|
||||||
|
* @property {string} location Location of the client (using IP address)
|
||||||
|
* @property {string} platform Platform of the client
|
||||||
|
* @property {string} os Operating system of the client
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Client OAuth2 Application Team.
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Session extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
if ('id_hash' in data) {
|
||||||
|
/**
|
||||||
|
* The session hash id
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.id = data.id_hash;
|
||||||
|
}
|
||||||
|
if ('approx_last_used_time' in data) {
|
||||||
|
/**
|
||||||
|
* The approximate last used time
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.approxLastUsedTime = data.approx_last_used_time;
|
||||||
|
}
|
||||||
|
if ('client_info' in data) {
|
||||||
|
/**
|
||||||
|
* The client info
|
||||||
|
* @type {SessionClientInfo}
|
||||||
|
*/
|
||||||
|
this.clientInfo = data.client_info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The timestamp the client was last used at.
|
||||||
|
* @type {number}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get createdTimestamp() {
|
||||||
|
return this.createdAt.getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The time the client was last used at.
|
||||||
|
* @type {Date}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get createdAt() {
|
||||||
|
return new Date(this.approxLastUsedTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logout the client (remote).
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
logout() {
|
||||||
|
return this.client.api.auth.sessions.logout({
|
||||||
|
data: {
|
||||||
|
session_id_hashes: [this.id],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
toJSON() {
|
||||||
|
return super.toJSON();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Session;
|
||||||
23
typings/index.d.ts
vendored
23
typings/index.d.ts
vendored
@@ -779,6 +779,7 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
|
|||||||
public notes: UserNoteManager;
|
public notes: UserNoteManager;
|
||||||
public relationships: RelationshipManager;
|
public relationships: RelationshipManager;
|
||||||
public voiceStates: VoiceStateManager;
|
public voiceStates: VoiceStateManager;
|
||||||
|
public sessions: SessionManager;
|
||||||
public presences: PresenceManager;
|
public presences: PresenceManager;
|
||||||
public billing: BillingManager;
|
public billing: BillingManager;
|
||||||
public settings: ClientUserSettingManager;
|
public settings: ClientUserSettingManager;
|
||||||
@@ -2449,6 +2450,12 @@ export class WebEmbed {
|
|||||||
public static hiddenEmbed: string;
|
public static hiddenEmbed: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class SessionManager extends CachedManager<string, Session, any> {
|
||||||
|
private constructor(client: Client, iterable: Iterable<any>);
|
||||||
|
public fetch(): Promise<this>;
|
||||||
|
public logoutAllDevices(): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
export class BillingManager extends BaseManager {
|
export class BillingManager extends BaseManager {
|
||||||
constructor(client: Client);
|
constructor(client: Client);
|
||||||
public paymentSources: Collection<Snowflake, object>;
|
public paymentSources: Collection<Snowflake, object>;
|
||||||
@@ -2459,6 +2466,22 @@ export class BillingManager extends BaseManager {
|
|||||||
public fetchCurrentSubscription(): Promise<Collection<Snowflake, object>>;
|
public fetchCurrentSubscription(): Promise<Collection<Snowflake, object>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class Session extends Base {
|
||||||
|
constructor(client: Client);
|
||||||
|
public id?: string;
|
||||||
|
public clientInfo?: SessionClientInfo;
|
||||||
|
public approxLastUsedTime: string;
|
||||||
|
public readonly createdTimestamp: number;
|
||||||
|
public readonly createdAt: Date;
|
||||||
|
public logout(): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SessionClientInfo {
|
||||||
|
location?: string;
|
||||||
|
platform?: string;
|
||||||
|
os?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export class GuildBoost extends Base {
|
export class GuildBoost extends Base {
|
||||||
constructor(client: Client, data: object);
|
constructor(client: Client, data: object);
|
||||||
public id: Snowflake;
|
public id: Snowflake;
|
||||||
|
|||||||
Reference in New Issue
Block a user