Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 0 additions & 36 deletions packages/edge/src/commands/edge/channels/enroll.ts

This file was deleted.

67 changes: 0 additions & 67 deletions packages/edge/src/commands/edge/channels/unenroll.ts

This file was deleted.

45 changes: 45 additions & 0 deletions src/commands/edge/channels/enroll.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { type ArgumentsCamelCase, type Argv, type CommandModule } from 'yargs'

import { apiCommand, apiCommandBuilder, type APICommandFlags } from '../../../lib/command/api-command.js'
import { chooseChannelFn } from '../../../lib/command/util/edge/channels-choose.js'
import { chooseHub } from '../../../lib/command/util/hubs-choose.js'


export type CommandArgs =
& APICommandFlags
& {
hubId?: string
channel?: string
}

const command = 'edge:channels:enroll [hub-id]'

const describe = 'enroll a hub in a channel'

const builder = (yargs: Argv): Argv<CommandArgs> =>
apiCommandBuilder(yargs)
.positional('id', { describe: 'hub id', type: 'string' })
.option('channel', { alias: 'C', describe: 'channel id', type: 'string' })
.example([
['$0 edge:channels:enroll', 'prompt for channel and hub'],
[
'$0 edge:channels:enroll 8bbc88c2-8e59-4cad-ade2-b57021a2dbfd' +
' --channel b1a462c1-f63b-442c-8db9-4af7da31f187',
'enroll the specified hub in the specified channel',
],
])


const handler = async (argv: ArgumentsCamelCase<CommandArgs>): Promise<void> => {
const command = await apiCommand(argv)

const channelId = await chooseChannelFn({ includeReadOnly: true })( command, argv.channel )
const hubId = await chooseHub(command, argv.hubId, { useConfigDefault: true })

await command.client.channels.enrollHub(channelId, hubId)

console.log(`${hubId} enrolled in channel ${channelId}`)
}

const cmd: CommandModule<object, CommandArgs> = { command, describe, builder, handler }
export default cmd
73 changes: 73 additions & 0 deletions src/commands/edge/channels/unenroll.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { type ArgumentsCamelCase, type Argv, type CommandModule } from 'yargs'

import { type Device } from '@smartthings/core-sdk'

import { apiCommand, apiCommandBuilder, type APICommandFlags } from '../../../lib/command/api-command.js'

import { chooseChannelFn } from '../../../lib/command/util/edge/channels-choose.js'
import { listOwnedHubs } from '../../../lib/command/util/hubs.js'
import { chooseHub } from '../../../lib/command/util/hubs-choose.js'


export const maxHubsToCheckForEnrollments = 15

export type CommandArgs =
& APICommandFlags
& {
hubId?: string
channel?: string
}

const command = 'edge:channels:unenroll [hub-id]'

const describe = 'unenroll a hub from a channel'

const builder = (yargs: Argv): Argv<CommandArgs> =>
apiCommandBuilder(yargs)
.positional('id', { describe: 'hub id', type: 'string' })
.option('channel', { alias: 'C', describe: 'channel id', type: 'string' })
.example([
['$0 edge:channels:unenroll', 'prompt for channel and hub'],
[
'$0 edge:channels:unenroll 2fa0912f-cb73-424e-97f9-ffff76ea4f2a',
'prompt user for a channel the given hub is enrolled in and then unenroll it',
],
[
'$0 edge:channels:unenroll 2fa0912f-cb73-424e-97f9-ffff76ea4f2a ' +
'--channel fcd6ca9c-2764-4dbb-9bbe-d40c900c960f',
'unenroll the specified hub from the specified channel',
],
])

const handler = async (argv: ArgumentsCamelCase<CommandArgs>): Promise<void> => {
const command = await apiCommand(argv)

// A special listItems for `chooseHub` that will only include hubs which are enrolled in channels.
const listItems = async (): Promise<Device[]> => {
const hubs = await listOwnedHubs(command)
const hubsWithChannels = await Promise.all(hubs.map(async hub =>
({ hub, channels: await command.client.hubdevices.enrolledChannels(hub.deviceId) })))
return hubsWithChannels
.flat()
.filter(({ channels }) => channels.length > 0)
.map(({ hub }) => hub)
}
const hubId = await chooseHub(
command,
argv.hubId,
{ useConfigDefault: true, listItems },
)

const channelId = await chooseChannelFn({ includeReadOnly: true })(
command,
argv.channel,
{ listItems: () => command.client.hubdevices.enrolledChannels(hubId) },
)

await command.client.channels.unenrollHub(channelId, hubId)

console.log(`Hub ${hubId} unenrolled from channel ${channelId}.`)
}

const cmd: CommandModule<object, CommandArgs> = { command, describe, builder, handler }
export default cmd
4 changes: 4 additions & 0 deletions src/commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,15 @@ import edgeChannelsAssignCommand from './edge/channels/assign.js'
import edgeChannelsCreateCommand from './edge/channels/create.js'
import edgeChannelsDeleteCommand from './edge/channels/delete.js'
import edgeChannelsDriversCommand from './edge/channels/drivers.js'
import edgeChannelsEnrollCommand from './edge/channels/enroll.js'
import edgeChannelsEnrollmentsCommand from './edge/channels/enrollments.js'
import edgeChannelsInvitesCommand from './edge/channels/invites.js'
import edgeChannelsInvitesAcceptCommand from './edge/channels/invites/accept.js'
import edgeChannelsInvitesCreateCommand from './edge/channels/invites/create.js'
import edgeChannelsInvitesDeleteCommand from './edge/channels/invites/delete.js'
import edgeChannelsMetaInfoCommand from './edge/channels/metainfo.js'
import edgeChannelsUnassignCommand from './edge/channels/unassign.js'
import edgeChannelsUnenrollCommand from './edge/channels/unenroll.js'
import edgeDriversCommand from './edge/drivers.js'
import edgeDriversDefaultCommand from './edge/drivers/default.js'
import edgeDriversDeleteCommand from './edge/drivers/delete.js'
Expand Down Expand Up @@ -191,13 +193,15 @@ export const commands: CommandModule<object, any>[] = [
edgeChannelsCreateCommand,
edgeChannelsDeleteCommand,
edgeChannelsDriversCommand,
edgeChannelsEnrollCommand,
edgeChannelsEnrollmentsCommand,
edgeChannelsInvitesCommand,
edgeChannelsInvitesAcceptCommand,
edgeChannelsInvitesCreateCommand,
edgeChannelsInvitesDeleteCommand,
edgeChannelsMetaInfoCommand,
edgeChannelsUnassignCommand,
edgeChannelsUnenrollCommand,
edgeDriversCommand,
edgeDriversDefaultCommand,
edgeDriversDeleteCommand,
Expand Down