From 882e298da7fbe8d3d34a3e893fa0bbd78d7a3528 Mon Sep 17 00:00:00 2001 From: David Wood Date: Sat, 13 May 2017 13:48:13 +0100 Subject: [PATCH 1/3] Add type to model constructors --- src/server/models.ts | 2 +- src/server/routes/attendees/create-attendee.ts | 4 ++-- src/server/routes/challenges/create-challenge.ts | 4 ++-- src/server/routes/hacks/create-hack.ts | 5 ++--- src/server/routes/teams/create-team.ts | 4 ++-- src/server/routes/users/create-user.ts | 4 ++-- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/server/models.ts b/src/server/models.ts index 201efb7..29f367b 100644 --- a/src/server/models.ts +++ b/src/server/models.ts @@ -69,7 +69,7 @@ export interface Attendee { attendeeid: string } -export interface AttendeeModel extends Attendee, Document { } +interface AttendeeModel extends Attendee, Document { } export const AttendeeSchema = new Schema({ attendeeid: { type: String, unique: true, required: true }, diff --git a/src/server/routes/attendees/create-attendee.ts b/src/server/routes/attendees/create-attendee.ts index 12215e3..916eb31 100644 --- a/src/server/routes/attendees/create-attendee.ts +++ b/src/server/routes/attendees/create-attendee.ts @@ -1,6 +1,6 @@ import { Request, IReply } from 'hapi' import { MongoDBErrors } from '../../models' -import { AttendeeModel } from '../../models' +import { Attendee, AttendeeModel } from '../../models' import { AttendeeResource } from '../../../resources' import * as Boom from 'boom' @@ -9,7 +9,7 @@ export default async function handler(request: Request, reply: IReply) { const attendee = new AttendeeModel({ attendeeid: requestDoc.data.id, - }) + } as Attendee) try { await attendee.save() diff --git a/src/server/routes/challenges/create-challenge.ts b/src/server/routes/challenges/create-challenge.ts index d03fa71..3805a15 100644 --- a/src/server/routes/challenges/create-challenge.ts +++ b/src/server/routes/challenges/create-challenge.ts @@ -1,6 +1,6 @@ import { Request, IReply } from 'hapi' import { MongoDBErrors } from '../../models' -import { ChallengeModel } from '../../models' +import { Challenge, ChallengeModel } from '../../models' import { ChallengeResource } from '../../../resources' import * as Boom from 'boom' import { slugify } from '../../utils' @@ -12,7 +12,7 @@ export default async function handler(req: Request, reply: IReply) { challengeid: slugify(requestDoc.data.attributes.name), name: requestDoc.data.attributes.name, members: [], - }) + } as Challenge) try { await challenge.save() diff --git a/src/server/routes/hacks/create-hack.ts b/src/server/routes/hacks/create-hack.ts index 9788ee5..8bf2767 100644 --- a/src/server/routes/hacks/create-hack.ts +++ b/src/server/routes/hacks/create-hack.ts @@ -1,6 +1,6 @@ import { Request, IReply } from 'hapi' import { MongoDBErrors } from '../../models' -import { HackModel } from '../../models' +import { Hack, HackModel } from '../../models' import { HackResource } from '../../../resources' import EventBroadcaster from '../../eventbroadcaster' import * as Boom from 'boom' @@ -12,8 +12,7 @@ export default async function handler(req: Request, reply: IReply) { const hack = new HackModel({ hackid: slugify(requestDoc.data.attributes.name), name: requestDoc.data.attributes.name, - members: [], - }) + } as Hack) try { await hack.save() diff --git a/src/server/routes/teams/create-team.ts b/src/server/routes/teams/create-team.ts index 95df91d..7834705 100644 --- a/src/server/routes/teams/create-team.ts +++ b/src/server/routes/teams/create-team.ts @@ -1,5 +1,5 @@ import { Request, IReply } from 'hapi' -import { UserModel, TeamModel, HackModel, MongoDBErrors } from '../../models' +import { Team, UserModel, TeamModel, HackModel, MongoDBErrors } from '../../models' import { JSONApi, TeamResource } from '../../../resources' import EventBroadcaster from '../../eventbroadcaster' import * as Boom from 'boom' @@ -36,7 +36,7 @@ export default async function handler(req: Request, reply: IReply) { motto: requestDoc.data.attributes.motto || null, members: [], entries: [], - }) + } as Team) let users: UserModel[] = [] let hacks: HackModel[] = [] diff --git a/src/server/routes/users/create-user.ts b/src/server/routes/users/create-user.ts index c8347cb..92b5f7a 100644 --- a/src/server/routes/users/create-user.ts +++ b/src/server/routes/users/create-user.ts @@ -1,5 +1,5 @@ import { Request, IReply } from 'hapi' -import { UserModel } from '../../models' +import { User, UserModel } from '../../models' import { MongoDBErrors } from '../../models' import { UserResource } from '../../../resources' import EventBroadcaster from '../../eventbroadcaster' @@ -11,7 +11,7 @@ export default async function handler(req: Request, reply: IReply) { const user = new UserModel({ userid: requestDoc.data.id, name: requestDoc.data.attributes.name, - }) + } as User) try { await user.save() From 3da4851a340a468c48d02963ad1642fd8acd4431 Mon Sep 17 00:00:00 2001 From: David Wood Date: Sat, 13 May 2017 15:57:15 +0100 Subject: [PATCH 2/3] Add auth details to request in auth strats --- src/server/models.ts | 1 + src/server/plugins/admin-auth-strategy.ts | 2 +- src/server/plugins/attendee-auth-strategy.ts | 28 +++++++++++++++----- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/server/models.ts b/src/server/models.ts index 29f367b..e7a4d44 100644 --- a/src/server/models.ts +++ b/src/server/models.ts @@ -67,6 +67,7 @@ export const ChallengeModel = model('Challenge', ChallengeSchema export interface Attendee { attendeeid: string + slackid: string } interface AttendeeModel extends Attendee, Document { } diff --git a/src/server/plugins/admin-auth-strategy.ts b/src/server/plugins/admin-auth-strategy.ts index 82308e6..591924a 100644 --- a/src/server/plugins/admin-auth-strategy.ts +++ b/src/server/plugins/admin-auth-strategy.ts @@ -15,7 +15,7 @@ const register: PluginRegister = (server, pluginOptions: CustomOptions, next) => if (username !== pluginOptions.username || password !== pluginOptions.password) { return callback(null, false) } - callback(null, true, { username }) + callback(null, true, { admin: true }) }, }) diff --git a/src/server/plugins/attendee-auth-strategy.ts b/src/server/plugins/attendee-auth-strategy.ts index 5a4ff54..900a2f8 100644 --- a/src/server/plugins/attendee-auth-strategy.ts +++ b/src/server/plugins/attendee-auth-strategy.ts @@ -17,7 +17,7 @@ async function validateAttendeeByEmailAddress(username: string, log: Logger) { log.info(`Finding attendee with email "${username}"...`) const attendees = await AttendeeModel - .find({ attendeeid: username }, '_id') + .find({ attendeeid: username }, '_id attendeeid slackid') .limit(1) .exec() @@ -25,7 +25,13 @@ async function validateAttendeeByEmailAddress(username: string, log: Logger) { return null } - return { username } + const attendee = attendees[0] + + return { + attendeeid: attendee._id, + email: attendee.attendeeid, + slackid: attendee.slackid, + } } async function validateAttendeeBySlackId(username: string, slack: WebClient, log: Logger) { @@ -37,12 +43,16 @@ async function validateAttendeeBySlackId(username: string, slack: WebClient, log log.info(`Finding attendee with slackid "${username}"...`) const attendee = await AttendeeModel - .findOne({ slackid: username }, '_id attendeeid') + .findOne({ slackid: username }, '_id attendeeid slackid') .exec() if (attendee !== null) { log.info(`Found attendee "${username}" to be "${attendee.attendeeid}`) - return { username: attendee.attendeeid } + return { + attendeeid: attendee._id, + email: attendee.attendeeid, + slackid: attendee.slackid, + } } log.info(`Looking up Slack profile for attendee "${username}"...`) @@ -57,16 +67,20 @@ async function validateAttendeeBySlackId(username: string, slack: WebClient, log log.info(`Found "${username}" to be "${slackUser.user.profile.email}"`) - const updateResponse = await AttendeeModel + const attendeeUpdate = await AttendeeModel .findOneAndUpdate({ attendeeid: slackUser.user.profile.email }, { slackid: slackUser.user.id }) .select('_id') .exec() - if (updateResponse === null) { + if (attendeeUpdate === null) { return null } - return { username: slackUser.user.profile.email } + return { + attendeeid: attendeeUpdate._id, + email: slackUser.user.profile.email, + slackid: slackUser.user.id, + } } function validateAttendeeUser(username: string, slack: WebClient, log: Logger) { From b628a8d723913f284b5205af2f84c85a120b2cda Mon Sep 17 00:00:00 2001 From: David Wood Date: Sat, 13 May 2017 17:11:20 +0100 Subject: [PATCH 3/3] Remove semi-colons in definition files --- src/mongoose.d.ts | 6 +- src/pusher.d.ts | 24 +-- src/resources.d.ts | 151 +++++++------ src/slack-client.d.ts | 478 +++++++++++++++++++++--------------------- src/slug.d.ts | 20 +- 5 files changed, 339 insertions(+), 340 deletions(-) diff --git a/src/mongoose.d.ts b/src/mongoose.d.ts index 9478190..3796ac8 100644 --- a/src/mongoose.d.ts +++ b/src/mongoose.d.ts @@ -1,8 +1,8 @@ declare module "mongoose" { export interface Document { - save(): Promise; + save(): Promise } export interface PopulateOption { - populate?: PopulateOption; + populate?: PopulateOption } -} \ No newline at end of file +} diff --git a/src/pusher.d.ts b/src/pusher.d.ts index 14b5ef1..62d8706 100644 --- a/src/pusher.d.ts +++ b/src/pusher.d.ts @@ -2,24 +2,24 @@ declare module "pusher" { namespace pusher { interface PusherStatic { - forURL(url: string): PusherClient; + forURL(url: string): PusherClient } interface PusherClient { - trigger(channel: string, event: string, data: any, socketId: string, callback: (err: Error) => void): void; - trigger(channels: string[], event: string, data: any, socketId: string, callback: (err: Error) => void): void; + trigger(channel: string, event: string, data: any, socketId: string, callback: (err: Error) => void): void + trigger(channels: string[], event: string, data: any, socketId: string, callback: (err: Error) => void): void } interface Config { - appId: string; - key: string; - secret: string; - encrypted?: boolean; - host?: string; - port?: number; - cluster?: string; + appId: string + key: string + secret: string + encrypted?: boolean + host?: string + port?: number + cluster?: string } } - var pusher: pusher.PusherStatic; + var pusher: pusher.PusherStatic - export = pusher; + export = pusher } diff --git a/src/resources.d.ts b/src/resources.d.ts index eaf1e81..6379759 100644 --- a/src/resources.d.ts +++ b/src/resources.d.ts @@ -5,12 +5,12 @@ export declare module JSONApi { } export interface LinkObject { - href: string; + href: string meta?: MetaObject } export interface LinksObject { - self?: string; + self?: string } export interface AttributesObject { @@ -18,52 +18,52 @@ export declare module JSONApi { } export interface ResourceIdentifierObject { - type: string; - id: string; - meta?: MetaObject; + type: string + id: string + meta?: MetaObject } export interface ToManyRelationshipsObject { - links?: LinksObject; - data: ResourceIdentifierObject[]; - meta?: MetaObject; + links?: LinksObject + data: ResourceIdentifierObject[] + meta?: MetaObject } export interface ToOneRelationshipsObject { - links?: LinksObject; - data: ResourceIdentifierObject; - meta?: MetaObject; + links?: LinksObject + data: ResourceIdentifierObject + meta?: MetaObject } export interface RelationshipsDictionary { - [index: string]: ToOneRelationshipsObject | ToManyRelationshipsObject; + [index: string]: ToOneRelationshipsObject | ToManyRelationshipsObject } export interface ResourceObject { - links?: LinksObject; - type: string; - id?: string; - attributes?: AttributesObject; - relationships?: RelationshipsDictionary; + links?: LinksObject + type: string + id?: string + attributes?: AttributesObject + relationships?: RelationshipsDictionary } export interface ErrorObject { - id?: string; - links?: LinksObject; - status?: string; - code?: string; - title?: string; - detail?: string; - source?: string; - meta?: MetaObject; + id?: string + links?: LinksObject + status?: string + code?: string + title?: string + detail?: string + source?: string + meta?: MetaObject } export interface TopLevelDocument { - links?: LinksObject; - data?: ResourceObject | ResourceObject[]; - errors?: ErrorObject[]; - meta?: MetaObject; - included?: ResourceObject[]; + links?: LinksObject + data?: ResourceObject | ResourceObject[] + errors?: ErrorObject[] + meta?: MetaObject + included?: ResourceObject[] } } @@ -78,13 +78,13 @@ export declare module UserResource { } export interface ResourceObject extends JSONApi.ResourceObject { - attributes?: AttributesObject; - relationships?: RelationshipsDictionary; + attributes?: AttributesObject + relationships?: RelationshipsDictionary } export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: ResourceObject; + links?: JSONApi.LinksObject + data: ResourceObject } } @@ -92,8 +92,8 @@ export declare module UserResource { export declare module UsersResource { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links: JSONApi.LinksObject; - data: UserResource.ResourceObject[]; + links: JSONApi.LinksObject + data: UserResource.ResourceObject[] } } @@ -101,23 +101,22 @@ export declare module UsersResource { export declare module TeamResource { export interface RelationshipsDictionary extends JSONApi.RelationshipsDictionary { - members: JSONApi.ToManyRelationshipsObject; - entries: JSONApi.ToManyRelationshipsObject; + members: JSONApi.ToManyRelationshipsObject } export interface AttributesObject extends JSONApi.AttributesObject { - name?: string; - motto?: string; + name?: string + motto?: string } export interface ResourceObject extends JSONApi.ResourceObject { - attributes?: AttributesObject; - relationships?: RelationshipsDictionary; + attributes?: AttributesObject + relationships?: RelationshipsDictionary } export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: ResourceObject; + links?: JSONApi.LinksObject + data: ResourceObject } } @@ -125,8 +124,8 @@ export declare module TeamResource { export declare module TeamsResource { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: TeamResource.ResourceObject[]; + links?: JSONApi.LinksObject + data: TeamResource.ResourceObject[] } } @@ -134,8 +133,8 @@ export declare module TeamsResource { export declare module TeamMembersRelationship { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: JSONApi.ResourceIdentifierObject[]; + links?: JSONApi.LinksObject + data: JSONApi.ResourceIdentifierObject[] } } @@ -143,8 +142,8 @@ export declare module TeamMembersRelationship { export declare module TeamEntriesRelationship { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: JSONApi.ResourceIdentifierObject[]; + links?: JSONApi.LinksObject + data: JSONApi.ResourceIdentifierObject[] } } @@ -152,16 +151,16 @@ export declare module TeamEntriesRelationship { export declare module HackResource { export interface AttributesObject extends JSONApi.AttributesObject { - name?: string; + name?: string } export interface ResourceObject extends JSONApi.ResourceObject { - attributes?: AttributesObject; + attributes?: AttributesObject } export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: ResourceObject; + links?: JSONApi.LinksObject + data: ResourceObject } } @@ -169,8 +168,8 @@ export declare module HackResource { export declare module HackChallengesRelationship { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: JSONApi.ResourceIdentifierObject[]; + links?: JSONApi.LinksObject + data: JSONApi.ResourceIdentifierObject[] } } @@ -178,8 +177,8 @@ export declare module HackChallengesRelationship { export declare module HacksResource { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: HackResource.ResourceObject[]; + links?: JSONApi.LinksObject + data: HackResource.ResourceObject[] } } @@ -187,8 +186,8 @@ export declare module HacksResource { export declare module ChallengesResource { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: ChallengeResource.ResourceObject[]; + links?: JSONApi.LinksObject + data: ChallengeResource.ResourceObject[] } } @@ -196,16 +195,16 @@ export declare module ChallengesResource { export declare module ChallengeResource { export interface AttributesObject extends JSONApi.AttributesObject { - name?: string; + name?: string } export interface ResourceObject extends JSONApi.ResourceObject { - attributes?: AttributesObject; + attributes?: AttributesObject } export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: ResourceObject; + links?: JSONApi.LinksObject + data: ResourceObject } } @@ -217,12 +216,12 @@ export declare module AttendeeResource { } export interface ResourceObject extends JSONApi.ResourceObject { - attributes?: AttributesObject; + attributes?: AttributesObject } export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: ResourceObject; + links?: JSONApi.LinksObject + data: ResourceObject } } @@ -230,8 +229,8 @@ export declare module AttendeeResource { export declare module AttendeesResource { export interface TopLevelDocument extends JSONApi.TopLevelDocument { - links?: JSONApi.LinksObject; - data: AttendeeResource.ResourceObject[]; + links?: JSONApi.LinksObject + data: AttendeeResource.ResourceObject[] } } @@ -240,15 +239,15 @@ export declare module Root { export interface TopLevelDocument extends JSONApi.TopLevelDocument { jsonapi: { - version: string; + version: string }, links: { - self: string; - teams: JSONApi.LinkObject; - users: JSONApi.LinkObject; - attendees: JSONApi.LinkObject; - hacks: JSONApi.LinkObject; - challenges: JSONApi.LinkObject; + self: string + teams: JSONApi.LinkObject + users: JSONApi.LinkObject + attendees: JSONApi.LinkObject + hacks: JSONApi.LinkObject + challenges: JSONApi.LinkObject } } diff --git a/src/slack-client.d.ts b/src/slack-client.d.ts index e5c2bb5..3407c4c 100644 --- a/src/slack-client.d.ts +++ b/src/slack-client.d.ts @@ -1,312 +1,312 @@ declare module "@slack/client" { interface Field { - value: string; - alt: string; + value: string + alt: string } interface Profile { - first_name: string; - last_name: string; - avatar_hash: string; - real_name: string; - real_name_normalized: string; - email: string; - image_24: string; - image_32: string; - image_48: string; - image_72: string; - image_192: string; - image_512: string; - fields: { [name: string]: Field }; + first_name: string + last_name: string + avatar_hash: string + real_name: string + real_name_normalized: string + email: string + image_24: string + image_32: string + image_48: string + image_72: string + image_192: string + image_512: string + fields: { [name: string]: Field } } interface User { - id: string; - team_id: string; - name: string; - deleted: boolean; - color: string; - real_name: string; - tz: string; - tz_label: string; - tz_offset: number; - profile: Profile; - is_admin: boolean; - is_owner: boolean; - is_primary_owner: boolean; - is_restricted: boolean; - is_ultra_restricted: boolean; - is_bot: boolean; - presence: string; + id: string + team_id: string + name: string + deleted: boolean + color: string + real_name: string + tz: string + tz_label: string + tz_offset: number + profile: Profile + is_admin: boolean + is_owner: boolean + is_primary_owner: boolean + is_restricted: boolean + is_ultra_restricted: boolean + is_bot: boolean + presence: string } interface Channel { - id: string; - name: string; - is_channel: boolean; - created: 1426851129; - creator: string; - is_archived: boolean; - is_general: boolean; - has_pins: boolean; - is_member: boolean; + id: string + name: string + is_channel: boolean + created: 1426851129 + creator: string + is_archived: boolean + is_general: boolean + has_pins: boolean + is_member: boolean } interface Message { - type: string; - user: string; - text: string; - ts: string; + type: string + user: string + text: string + ts: string } interface Group { - id: string; - name: string; - is_group: boolean; - created: number; - creator: string; - is_archived: boolean; - is_mpim: boolean; - has_pins: boolean; - is_open: boolean; - last_read: string; - latest: Message; - unread_count: number; - unread_count_display: number; - members: string[]; + id: string + name: string + is_group: boolean + created: number + creator: string + is_archived: boolean + is_mpim: boolean + has_pins: boolean + is_open: boolean + last_read: string + latest: Message + unread_count: number + unread_count_display: number + members: string[] topic: { - value: string; - creator: string; - last_set: number; - }; + value: string + creator: string + last_set: number + } purpose: { - value: string; - creator: string; - last_set: number; + value: string + creator: string + last_set: number } } interface DirectMessage { - id: string; - user: string; - created: number; - is_im: boolean; - is_org_shared: boolean; - has_pins: boolean; - last_read: string; - latest: Message; - unread_count: number; - unread_count_display: number; - is_open: boolean; + id: string + user: string + created: number + is_im: boolean + is_org_shared: boolean + has_pins: boolean + last_read: string + latest: Message + unread_count: number + unread_count_display: number + is_open: boolean } interface Bot { - id: string; - deleted: boolean; - name: string; + id: string + deleted: boolean + name: string icons: { - image_36: string; - image_48: string; - image_72: string; - }; + image_36: string + image_48: string + image_72: string + } } interface TeamPreferences { - default_channels: string[]; + default_channels: string[] who_can_manage_integrations: { type: string[] - }; - commands_only_regular: boolean; - posts_migrating: number; - allow_calls: boolean; - hide_referers: boolean; - msg_edit_window_mins: number; - allow_message_deletion: boolean; - calling_app_name: string; - display_real_names: boolean; - who_can_at_everyone: string; - who_can_at_channel: string; - who_can_create_channels: string; - who_can_archive_channels: string; - who_can_create_groups: string; - who_can_post_general: string; - who_can_kick_channels: string; - who_can_kick_groups: string; - retention_type: number; - retention_duration: number; - group_retention_type: number; - group_retention_duration: number; - dm_retention_type: number; - dm_retention_duration: number; - file_retention_duration: number; - file_retention_type: number; - allow_retention_override: boolean; - require_at_for_mention: boolean; - default_rxns: string[]; + } + commands_only_regular: boolean + posts_migrating: number + allow_calls: boolean + hide_referers: boolean + msg_edit_window_mins: number + allow_message_deletion: boolean + calling_app_name: string + display_real_names: boolean + who_can_at_everyone: string + who_can_at_channel: string + who_can_create_channels: string + who_can_archive_channels: string + who_can_create_groups: string + who_can_post_general: string + who_can_kick_channels: string + who_can_kick_groups: string + retention_type: number + retention_duration: number + group_retention_type: number + group_retention_duration: number + dm_retention_type: number + dm_retention_duration: number + file_retention_duration: number + file_retention_type: number + allow_retention_override: boolean + require_at_for_mention: boolean + default_rxns: string[] team_handy_rxns: { - restrict: boolean; + restrict: boolean list: { - name: string; - title: string; - }[]; - }; - compliance_export_start: number; - warn_before_at_channel: string; - disallow_public_file_urls: boolean; - who_can_create_delete_user_groups: string; - who_can_edit_user_groups: string; - who_can_change_team_profile: string; - allow_shared_channels: boolean; - display_email_addresses: boolean; - who_has_team_visibility: string; - invites_only_admins: boolean; - disable_file_uploads: string; - disable_file_editing: boolean; - disable_file_deleting: boolean; - who_can_create_shared_channels: string; + name: string + title: string + }[] + } + compliance_export_start: number + warn_before_at_channel: string + disallow_public_file_urls: boolean + who_can_create_delete_user_groups: string + who_can_edit_user_groups: string + who_can_change_team_profile: string + allow_shared_channels: boolean + display_email_addresses: boolean + who_has_team_visibility: string + invites_only_admins: boolean + disable_file_uploads: string + disable_file_editing: boolean + disable_file_deleting: boolean + who_can_create_shared_channels: string who_can_manage_shared_channels: { - type: string[]; - }; + type: string[] + } who_can_post_in_shared_channels: { - type: string[]; - }; - allow_shared_channel_perms_override: boolean; - dnd_enabled: boolean; - dnd_start_hour: string; - dnd_end_hour: string; - auth_mode: string; - invites_limit: boolean; + type: string[] + } + allow_shared_channel_perms_override: boolean + dnd_enabled: boolean + dnd_start_hour: string + dnd_end_hour: string + auth_mode: string + invites_limit: boolean } interface Team { - id: string; - name: string; - email_domain: string; - domain: string; - msg_edit_window_mins: number; - prefs: TeamPreferences; + id: string + name: string + email_domain: string + domain: string + msg_edit_window_mins: number + prefs: TeamPreferences icon: { - image_34: string; - image_44: string; - image_68: string; - image_88: string; - image_102: string; - image_132: string; - image_original: string; - image_230: string; - }; - over_storage_limit: boolean; - plan: string; - over_integrations_limit: boolean; + image_34: string + image_44: string + image_68: string + image_88: string + image_102: string + image_132: string + image_original: string + image_230: string + } + over_storage_limit: boolean + plan: string + over_integrations_limit: boolean } class MemoryDataStore { - clear(): void; + clear(): void - getUserById(userId: string): User; - getUserByName(name: string): User; - getUserByEmail(email: string): User; - getUserByBotId(email: string): User; - getChannelById(channelId: string): Channel; - getChannelByName(name: string): Channel; - getGroupById(groupId: string): Group; - getGroupByName(name: string): Group; - getDMById(dmId: string): DirectMessage; - getDMByName(name: string): DirectMessage; - getBotById(botId: string): Bot; - getBotByName(name: string): Bot; - getBotByUserId(userId: string): Bot; - getTeamById(teamId: string): Team; - getUnreadCount(): number; + getUserById(userId: string): User + getUserByName(name: string): User + getUserByEmail(email: string): User + getUserByBotId(email: string): User + getChannelById(channelId: string): Channel + getChannelByName(name: string): Channel + getGroupById(groupId: string): Group + getGroupByName(name: string): Group + getDMById(dmId: string): DirectMessage + getDMByName(name: string): DirectMessage + getBotById(botId: string): Bot + getBotByName(name: string): Bot + getBotByUserId(userId: string): Bot + getTeamById(teamId: string): Team + getUnreadCount(): number - setChannel(channel: Channel): void; - setGroup(group: Group): void; - setDM(dm: DirectMessage): void; - setUser(user: User): void; - setBot(bot: Bot): void; - setTeam(team: Team): void; + setChannel(channel: Channel): void + setGroup(group: Group): void + setDM(dm: DirectMessage): void + setUser(user: User): void + setBot(bot: Bot): void + setTeam(team: Team): void - upsertChannel(channel: Channel): void; - upsertGroup(group: Group): void; - upsertDM(dm: DirectMessage): void; - upsertUser(user: User): void; - upsertBot(bot: Bot): void; - upsertTeam(team: Team): void; + upsertChannel(channel: Channel): void + upsertGroup(group: Group): void + upsertDM(dm: DirectMessage): void + upsertUser(user: User): void + upsertBot(bot: Bot): void + upsertTeam(team: Team): void - removeChannel(channel: Channel): void; - removeGroup(group: Group): void; - removeDM(dm: DirectMessage): void; - removeUser(user: User): void; - removeBot(bot: Bot): void; - removeTeam(team: Team): void; + removeChannel(channel: Channel): void + removeGroup(group: Group): void + removeDM(dm: DirectMessage): void + removeUser(user: User): void + removeBot(bot: Bot): void + removeTeam(team: Team): void } interface ClientOptions { - socketFn?: (socketUrl: string, opts: { proxyURL?: string }) => any; - dataStore?: any; - autoReconnect?: boolean; - maxReconnectionAttempts?: number; - reconnectionBackoff?: number; - wsPingInterval?: number; - maxPongInterval?: number; - logLevel?: string; - logger?: (logLevel: string, logString: string) => void; - slackAPIUrl?: string; + socketFn?: (socketUrl: string, opts: { proxyURL?: string }) => any + dataStore?: any + autoReconnect?: boolean + maxReconnectionAttempts?: number + reconnectionBackoff?: number + wsPingInterval?: number + maxPongInterval?: number + logLevel?: string + logger?: (logLevel: string, logString: string) => void + slackAPIUrl?: string } interface BaseAPIClient { - slackAPIUrl: string; - userAgent: string; - dataStore: MemoryDataStore; - transport: (args: any, cb: Function) => void; + slackAPIUrl: string + userAgent: string + dataStore: MemoryDataStore + transport: (args: any, cb: Function) => void - emit(...args: any[]): void; - registerDataStore(dataStore: any): void; + emit(...args: any[]): void + registerDataStore(dataStore: any): void } class RtmClient implements BaseAPIClient { - constructor(token: string, opts?: ClientOptions); + constructor(token: string, opts?: ClientOptions) - slackAPIUrl: string; - userAgent: string; - dataStore: MemoryDataStore; - transport: (args: any, cb: Function) => void; + slackAPIUrl: string + userAgent: string + dataStore: MemoryDataStore + transport: (args: any, cb: Function) => void - emit(...args: any[]): void; - registerDataStore(dataStore: any): void; + emit(...args: any[]): void + registerDataStore(dataStore: any): void } class WebClient implements BaseAPIClient { - constructor(token: string, opts?: ClientOptions); + constructor(token: string, opts?: ClientOptions) - slackAPIUrl: string; - userAgent: string; - dataStore: MemoryDataStore; - transport: (args: any, cb: Function) => void; + slackAPIUrl: string + userAgent: string + dataStore: MemoryDataStore + transport: (args: any, cb: Function) => void - emit(...args: any[]): void; - registerDataStore(dataStore: any): void; + emit(...args: any[]): void + registerDataStore(dataStore: any): void - users: UsersApi; + users: UsersApi } interface UsersListResponse { - ok: boolean; - members: User[]; + ok: boolean + members: User[] } interface UsersInfoResponse { - ok: boolean; - user: User; + ok: boolean + user: User } interface UsersApi { - list(opts: any, optCb: (err: any, response: UsersListResponse) => void): void; - list(optCb: (err: any, response: UsersListResponse) => void): void; - list(opts?: any): Promise; + list(opts: any, optCb: (err: any, response: UsersListResponse) => void): void + list(optCb: (err: any, response: UsersListResponse) => void): void + list(opts?: any): Promise - info(user: string, optCb: (err: any, response: UsersInfoResponse) => void): void; - info(user: string): Promise; + info(user: string, optCb: (err: any, response: UsersInfoResponse) => void): void + info(user: string): Promise } class IncomingWebhook { } @@ -314,9 +314,9 @@ declare module "@slack/client" { class LegacyRtmClient { } var CLIENT_EVENTS: { - WEB: string; - RTM: string; - }; - var RTM_EVENTS: {}; - var RTM_MESSAGE_SUBTYPES: {}; + WEB: string + RTM: string + } + var RTM_EVENTS: {} + var RTM_MESSAGE_SUBTYPES: {} } diff --git a/src/slug.d.ts b/src/slug.d.ts index b4be27f..65833af 100644 --- a/src/slug.d.ts +++ b/src/slug.d.ts @@ -1,18 +1,18 @@ declare module "slug" { - function s(string: any, opts?: string): string; - function s(string: any, opts?: s.SlugOptions): string; + function s(string: any, opts?: string): string + function s(string: any, opts?: s.SlugOptions): string module s { export interface SlugOptions { - mode?: string; - replacement?: string; - remove?: boolean; - lower?: boolean; - charmap?: { [key: string]: string; }; - multicharmap?: { [key: string]: string; }; - symbols?: boolean; + mode?: string + replacement?: string + remove?: boolean + lower?: boolean + charmap?: { [key: string]: string } + multicharmap?: { [key: string]: string } + symbols?: boolean } } - export = s; + export = s }