From 595560ae5769cf00ac3a22bdb55139f2aa4b515b Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 10 Jan 2024 16:26:26 -0800 Subject: [PATCH] feat: Add networks --- generate-routes.ts | 1 + src/lib/seam/connect/routes/index.ts | 1 + .../routes/{network.ts => networks.ts} | 48 ++++++++++--------- src/lib/seam/connect/seam-http.ts | 5 ++ 4 files changed, 32 insertions(+), 23 deletions(-) rename src/lib/seam/connect/routes/{network.ts => networks.ts} (80%) diff --git a/generate-routes.ts b/generate-routes.ts index b230b376..25cc1160 100644 --- a/generate-routes.ts +++ b/generate-routes.ts @@ -28,6 +28,7 @@ const routePaths = [ '/devices/unmanaged', '/events', '/locks', + '/networks', '/noise_sensors', '/noise_sensors/noise_thresholds', '/phones', diff --git a/src/lib/seam/connect/routes/index.ts b/src/lib/seam/connect/routes/index.ts index 1ec83dd5..416f9192 100644 --- a/src/lib/seam/connect/routes/index.ts +++ b/src/lib/seam/connect/routes/index.ts @@ -16,6 +16,7 @@ export * from './devices.js' export * from './devices-unmanaged.js' export * from './events.js' export * from './locks.js' +export * from './networks.js' export * from './noise-sensors.js' export * from './noise-sensors-noise-thresholds.js' export * from './phones.js' diff --git a/src/lib/seam/connect/routes/network.ts b/src/lib/seam/connect/routes/networks.ts similarity index 80% rename from src/lib/seam/connect/routes/network.ts rename to src/lib/seam/connect/routes/networks.ts index 6372a33f..92160cb7 100644 --- a/src/lib/seam/connect/routes/network.ts +++ b/src/lib/seam/connect/routes/networks.ts @@ -31,7 +31,7 @@ import { import { SeamHttpClientSessions } from './client-sessions.js' -export class SeamHttpNetwork { +export class SeamHttpNetworks { client: Client readonly defaults: Required @@ -44,23 +44,23 @@ export class SeamHttpNetwork { static fromClient( client: SeamHttpOptionsWithClient['client'], options: Omit = {}, - ): SeamHttpNetwork { + ): SeamHttpNetworks { const constructorOptions = { ...options, client } if (!isSeamHttpOptionsWithClient(constructorOptions)) { throw new SeamHttpInvalidOptionsError('Missing client') } - return new SeamHttpNetwork(constructorOptions) + return new SeamHttpNetworks(constructorOptions) } static fromApiKey( apiKey: SeamHttpOptionsWithApiKey['apiKey'], options: Omit = {}, - ): SeamHttpNetwork { + ): SeamHttpNetworks { const constructorOptions = { ...options, apiKey } if (!isSeamHttpOptionsWithApiKey(constructorOptions)) { throw new SeamHttpInvalidOptionsError('Missing apiKey') } - return new SeamHttpNetwork(constructorOptions) + return new SeamHttpNetworks(constructorOptions) } static fromClientSessionToken( @@ -69,19 +69,19 @@ export class SeamHttpNetwork { SeamHttpOptionsWithClientSessionToken, 'clientSessionToken' > = {}, - ): SeamHttpNetwork { + ): SeamHttpNetworks { const constructorOptions = { ...options, clientSessionToken } if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) { throw new SeamHttpInvalidOptionsError('Missing clientSessionToken') } - return new SeamHttpNetwork(constructorOptions) + return new SeamHttpNetworks(constructorOptions) } static async fromPublishableKey( publishableKey: string, userIdentifierKey: string, options: SeamHttpFromPublishableKeyOptions = {}, - ): Promise { + ): Promise { warnOnInsecureuserIdentifierKey(userIdentifierKey) const clientOptions = parseOptions({ ...options, publishableKey }) if (isSeamHttpOptionsWithClient(clientOptions)) { @@ -94,7 +94,7 @@ export class SeamHttpNetwork { const { token } = await clientSessions.getOrCreate({ user_identifier_key: userIdentifierKey, }) - return SeamHttpNetwork.fromClientSessionToken(token, options) + return SeamHttpNetworks.fromClientSessionToken(token, options) } static fromConsoleSessionToken( @@ -104,14 +104,14 @@ export class SeamHttpNetwork { SeamHttpOptionsWithConsoleSessionToken, 'consoleSessionToken' | 'workspaceId' > = {}, - ): SeamHttpNetwork { + ): SeamHttpNetworks { const constructorOptions = { ...options, consoleSessionToken, workspaceId } if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) { throw new SeamHttpInvalidOptionsError( 'Missing consoleSessionToken or workspaceId', ) } - return new SeamHttpNetwork(constructorOptions) + return new SeamHttpNetworks(constructorOptions) } static fromPersonalAccessToken( @@ -121,18 +121,18 @@ export class SeamHttpNetwork { SeamHttpOptionsWithPersonalAccessToken, 'personalAccessToken' | 'workspaceId' > = {}, - ): SeamHttpNetwork { + ): SeamHttpNetworks { const constructorOptions = { ...options, personalAccessToken, workspaceId } if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) { throw new SeamHttpInvalidOptionsError( 'Missing personalAccessToken or workspaceId', ) } - return new SeamHttpNetwork(constructorOptions) + return new SeamHttpNetworks(constructorOptions) } - async get(body?: NetworkGetBody): Promise { - const { data } = await this.client.request({ + async get(body?: NetworksGetParams): Promise { + const { data } = await this.client.request({ url: '/networks/get', method: 'post', data: body, @@ -141,8 +141,10 @@ export class SeamHttpNetwork { return data.network } - async list(body?: NetworkListBody): Promise { - const { data } = await this.client.request({ + async list( + body?: NetworksListParams, + ): Promise { + const { data } = await this.client.request({ url: '/networks/list', method: 'post', data: body, @@ -152,18 +154,18 @@ export class SeamHttpNetwork { } } -export type NetworkGetBody = RouteRequestBody<'/networks/get'> +export type NetworksGetParams = RouteRequestBody<'/networks/get'> -export type NetworkGetResponse = SetNonNullable< +export type NetworksGetResponse = SetNonNullable< Required> > -export type NetworkGetOptions = never +export type NetworksGetOptions = never -export type NetworkListBody = RouteRequestBody<'/networks/list'> +export type NetworksListParams = RouteRequestBody<'/networks/list'> -export type NetworkListResponse = SetNonNullable< +export type NetworksListResponse = SetNonNullable< Required> > -export type NetworkListOptions = never +export type NetworksListOptions = never diff --git a/src/lib/seam/connect/seam-http.ts b/src/lib/seam/connect/seam-http.ts index 1855bbfa..31c2a42d 100644 --- a/src/lib/seam/connect/seam-http.ts +++ b/src/lib/seam/connect/seam-http.ts @@ -18,6 +18,7 @@ import { } from './options.js' import { limitToSeamHttpRequestOptions, parseOptions } from './parse-options.js' import { + SeamHttpNetworks, SeamHttpAccessCodes, SeamHttpAcs, SeamHttpActionAttempts, @@ -171,6 +172,10 @@ export class SeamHttp { return SeamHttpLocks.fromClient(this.client, this.defaults) } + get networks(): SeamHttpNetworks { + return SeamHttpNetworks.fromClient(this.client, this.defaults) + } + get noiseSensors(): SeamHttpNoiseSensors { return SeamHttpNoiseSensors.fromClient(this.client, this.defaults) }