diff --git a/package-lock.json b/package-lock.json index c616d222..a28c8a55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1056,6 +1056,7 @@ "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.313.0.tgz", "integrity": "sha512-uk/fRmMvtAgTjZwRLmjvfxIkS6+BR1V5b9M6oA5+5Q3y9iTK2e/57fRat5qsyb+R00rmlb8Lh/rqs7W0nHu2IA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.12.0", "npm": ">= 9.0.0" diff --git a/src/lib/blueprint.test.ts b/src/lib/blueprint.test.ts index 29b7dab0..a602dd06 100644 --- a/src/lib/blueprint.test.ts +++ b/src/lib/blueprint.test.ts @@ -4,7 +4,9 @@ import { createProperties, getPreferredMethod, getSemanticMethod, + getWorkspaceScope, type Method, + type OpenapiAuthMethod, } from 'lib/blueprint.js' import type { OpenapiOperation, OpenapiSchema } from 'lib/openapi.js' @@ -343,3 +345,49 @@ test('getPreferredMethod: delete and post', (t) => { 'Preferred method should be POST when both DELETE and POST are available', ) }) + +test('getWorkspaceScope: no auth methods', (t) => { + const authMethods: OpenapiAuthMethod[] = [] + t.is( + getWorkspaceScope(authMethods), + 'none', + 'Workspace scope should be "none" when no auth methods are present', + ) +}) + +test('getWorkspaceScope: only unscoped auth methods', (t) => { + const authMethods: OpenapiAuthMethod[] = [ + 'pat_without_workspace', + 'console_session_token_without_workspace', + ] + t.is( + getWorkspaceScope(authMethods), + 'none', + 'Workspace scope should be "none" when only unscoped auth methods are present', + ) +}) + +test('getWorkspaceScope: only scoped auth methods', (t) => { + const authMethods: OpenapiAuthMethod[] = [ + 'api_key', + 'client_session', + 'pat_with_workspace', + ] + t.is( + getWorkspaceScope(authMethods), + 'required', + 'Workspace scope should be "required" when only scoped auth methods are present', + ) +}) + +test('getWorkspaceScope: both scoped and unscoped auth methods', (t) => { + const authMethods: OpenapiAuthMethod[] = [ + 'pat_with_workspace', + 'pat_without_workspace', + ] + t.is( + getWorkspaceScope(authMethods), + 'optional', + 'Workspace scope should be "optional" when both scoped and unscoped auth methods are present', + ) +}) diff --git a/src/lib/blueprint.ts b/src/lib/blueprint.ts index e024a8e6..fb694905 100644 --- a/src/lib/blueprint.ts +++ b/src/lib/blueprint.ts @@ -73,6 +73,7 @@ export interface Endpoint { response: Response codeSamples: CodeSample[] authMethods: SeamAuthMethod[] + workspaceScope: SeamWorkspaceScope } export type SeamAuthMethod = @@ -82,6 +83,8 @@ export type SeamAuthMethod = | 'client_session_token' | 'publishable_key' +export type SeamWorkspaceScope = 'none' | 'optional' | 'required' + interface BaseParameter { name: string description: string @@ -503,12 +506,16 @@ const createEndpointFromOperation = async ( const request = createRequest(methods, operation, path) const response = createResponse(operation, path) - const authMethods = parsedOperation.security - .map((securitySchema) => { + const operationAuthMethods = parsedOperation.security.map( + (securitySchema) => { const [authMethod = ''] = Object.keys(securitySchema) - return mapOpenapiToSeamAuthMethod(authMethod) - }) + return authMethod as OpenapiAuthMethod + }, + ) + const endpointAuthMethods = operationAuthMethods + .map(mapOpenapiToSeamAuthMethod) .filter((authMethod): authMethod is SeamAuthMethod => authMethod != null) + const workspaceScope = getWorkspaceScope(operationAuthMethods) const endpoint: Omit = { title, @@ -523,7 +530,8 @@ const createEndpointFromOperation = async ( draftMessage, response, request, - authMethods, + authMethods: endpointAuthMethods, + workspaceScope, } return { @@ -542,7 +550,41 @@ const createEndpointFromOperation = async ( } } -type OpenapiAuthMethod = z.infer +export type OpenapiAuthMethod = z.infer + +export const getWorkspaceScope = ( + authMethods: OpenapiAuthMethod[], +): SeamWorkspaceScope => { + const hasWorkspaceUnscoped = authMethods.some((method) => + method.endsWith('_without_workspace'), + ) + + const workspaceScopedAuthMethods: OpenapiAuthMethod[] = [ + 'api_key', + 'client_session', + 'console_session_token_with_workspace', + 'pat_with_workspace', + 'publishable_key', + ] + const hasWorkspaceScoped = authMethods.some((method) => + workspaceScopedAuthMethods.includes(method), + ) + + const hasNoAuthMethods = !hasWorkspaceUnscoped && !hasWorkspaceScoped + if (hasNoAuthMethods) return 'none' + + const hasOnlyUnscopedAuth = hasWorkspaceUnscoped && !hasWorkspaceScoped + if (hasOnlyUnscopedAuth) return 'none' + + const hasBothScopedAndUnscoped = hasWorkspaceUnscoped && hasWorkspaceScoped + if (hasBothScopedAndUnscoped) return 'optional' + + const hasOnlyScopedAuth = !hasWorkspaceUnscoped && hasWorkspaceScoped + if (hasOnlyScopedAuth) return 'required' + + return 'none' +} + type KnownOpenapiAuthMethod = Exclude const mapOpenapiToSeamAuthMethod = ( @@ -552,7 +594,8 @@ const mapOpenapiToSeamAuthMethod = ( api_key: 'api_key', pat_with_workspace: 'personal_access_token', pat_without_workspace: 'personal_access_token', - console_session: 'console_session_token', + console_session_token_with_workspace: 'console_session_token', + console_session_token_without_workspace: 'console_session_token', client_session: 'client_session_token', publishable_key: 'publishable_key', } as const diff --git a/src/lib/index.ts b/src/lib/index.ts index 55ff67d6..2b932c64 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -11,6 +11,7 @@ export { type Response, type Route, type SeamAuthMethod, + type SeamWorkspaceScope, type TypesModule, type TypesModuleInput, TypesModuleSchema, diff --git a/src/lib/openapi-schema.ts b/src/lib/openapi-schema.ts index 56b2d49f..bd4f8bcc 100644 --- a/src/lib/openapi-schema.ts +++ b/src/lib/openapi-schema.ts @@ -44,7 +44,8 @@ export const AuthMethodSchema = z .enum([ 'api_key', 'client_session', - 'console_session', + 'console_session_token_with_workspace', + 'console_session_token_without_workspace', 'pat_with_workspace', 'pat_without_workspace', 'publishable_key', diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index 917f5d6d..ed7e97a1 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -387,6 +387,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get a foo', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -521,6 +522,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List foos', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -645,6 +647,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List planes', undocumentedMessage: '', + workspaceScope: 'none', }, ], isDeprecated: false, @@ -764,6 +767,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Deprecated and undocumented endpoint', undocumentedMessage: 'true', + workspaceScope: 'none', }, ], isDeprecated: true, @@ -883,6 +887,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Draft endpoint', undocumentedMessage: '', + workspaceScope: 'none', }, ], isDeprecated: false, @@ -1296,6 +1301,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get a foo', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -1446,6 +1452,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List foos', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -1586,6 +1593,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List planes', undocumentedMessage: '', + workspaceScope: 'none', }, ], isDeprecated: false, @@ -1721,6 +1729,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Deprecated and undocumented endpoint', undocumentedMessage: 'true', + workspaceScope: 'none', }, ], isDeprecated: true, @@ -1856,6 +1865,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Draft endpoint', undocumentedMessage: '', + workspaceScope: 'none', }, ], isDeprecated: false, diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index cb874e7b..0d558af8 100644 Binary files a/test/snapshots/blueprint.test.ts.snap and b/test/snapshots/blueprint.test.ts.snap differ diff --git a/test/snapshots/seam-blueprint.test.ts.md b/test/snapshots/seam-blueprint.test.ts.md index b262a467..c3203117 100644 --- a/test/snapshots/seam-blueprint.test.ts.md +++ b/test/snapshots/seam-blueprint.test.ts.md @@ -5595,6 +5595,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -5859,6 +5860,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -5929,6 +5931,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -5975,6 +5978,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6046,6 +6050,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6118,6 +6123,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6164,6 +6170,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6466,6 +6473,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6550,6 +6558,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -6633,6 +6642,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -6741,6 +6751,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6798,6 +6809,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6870,6 +6882,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -6929,6 +6942,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -7026,6 +7040,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -7094,6 +7109,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Add an ACS User to an Access Group', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -7139,6 +7155,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get an Access Group', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -7197,6 +7214,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Access Groups', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -7242,6 +7260,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Entrances Accessible to an Access Group', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -7287,6 +7306,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List ACS Users in an Access Group', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -7343,6 +7363,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Remove an ACS User from an Access Group', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -7404,6 +7425,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'No unmanaged access groups are currently implemented.', + workspaceScope: 'required', }, { authMethods: [ @@ -7462,6 +7484,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'No unmanaged access groups are currently implemented.', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -7523,6 +7546,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'Replaced by enrollment automations.', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -7636,6 +7660,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'Replaced by enrollment automations.', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -7709,6 +7734,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Assign a Credential to an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8032,6 +8058,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Create a Credential for an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8129,6 +8156,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Create an Offline Credential for an ACS User', undocumentedMessage: 'Unreleased.', + workspaceScope: 'required', }, { authMethods: [ @@ -8172,6 +8200,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Delete a Credential', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8217,6 +8246,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get a Credential', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8249,6 +8279,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Credentials', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8294,6 +8325,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Accessible Entrances', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8351,6 +8383,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Unassign a Credential from an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8421,6 +8454,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Update a Credential', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -8482,6 +8516,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get an Unmanaged Credential', undocumentedMessage: 'No unmanaged credentials are currently implemented.', + workspaceScope: 'required', }, { authMethods: [ @@ -8513,6 +8548,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Unmanaged Credentials', undocumentedMessage: 'No unmanaged credentials are currently implemented.', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -8587,6 +8623,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'Encoding a card is currently unimplemented.', + workspaceScope: 'required', }, { authMethods: [ @@ -8618,6 +8655,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'Encoders are in alpha.', + workspaceScope: 'required', }, { authMethods: [ @@ -8663,6 +8701,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'Reading a card is currently unimplemented.', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -8724,6 +8763,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get an Entrance', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8780,6 +8820,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Grant an ACS User Access to an Entrance', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8839,6 +8880,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Entrances', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -8898,6 +8940,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Credentials with Access to an Entrance', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -8961,6 +9004,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get an ACS System', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9011,6 +9055,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List ACS Systems', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9060,6 +9105,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Compatible Credential Manager ACS Systems', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -9133,6 +9179,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Add an ACS User to an Access Group', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9297,6 +9344,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Create an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9340,6 +9388,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Delete an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9385,6 +9434,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9496,6 +9546,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List ACS Users', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9542,6 +9593,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List ACS User-Accessible Entrances', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9598,6 +9650,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Remove an ACS User from an Access Group', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9641,6 +9694,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Revoke ACS User Access to All Entrances', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9684,6 +9738,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Suspend an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9727,6 +9782,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Unsuspend an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -9877,6 +9933,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Update an ACS User', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -9938,6 +9995,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'No unmanaged users are currently implemented.', + workspaceScope: 'required', }, { authMethods: [ @@ -10035,6 +10093,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'No unmanaged users are currently implemented.', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -10097,6 +10156,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -10142,6 +10202,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -10248,6 +10309,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'none', }, { authMethods: [ @@ -10291,6 +10353,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -10350,6 +10413,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [], @@ -10445,6 +10509,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'none', }, { authMethods: [ @@ -10541,6 +10606,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -10638,6 +10704,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -10681,6 +10748,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -10860,6 +10928,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -10903,6 +10972,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -10949,6 +11019,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11021,6 +11092,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -11088,6 +11160,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11120,6 +11193,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11178,6 +11252,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11247,6 +11322,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -11301,6 +11377,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: 'Deleting a device is no longer supported and will be removed.', + workspaceScope: 'required', }, { authMethods: [ @@ -11360,6 +11437,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11659,6 +11737,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Devices', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11722,6 +11801,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11833,6 +11913,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -11887,6 +11968,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11930,6 +12012,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -11973,6 +12056,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -12043,6 +12127,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -12341,6 +12426,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -12398,6 +12484,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -12481,6 +12568,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -12911,6 +12999,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -12981,6 +13070,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -13280,6 +13370,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -13339,6 +13430,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -13398,6 +13490,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -13454,6 +13547,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -13485,6 +13579,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -13795,6 +13890,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -13929,6 +14025,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -13998,6 +14095,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -14043,6 +14141,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -14102,6 +14201,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -14238,6 +14338,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -14292,6 +14393,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -14347,6 +14449,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -14405,6 +14508,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -14642,6 +14746,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -14711,6 +14816,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Activate a Climate Preset', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -14796,6 +14902,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set to Cool Mode', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -14981,6 +15088,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Create a Climate Preset', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15037,6 +15145,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Delete a Climate Preset', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15096,6 +15205,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get a Thermostat', undocumentedMessage: 'Will be removed.', + workspaceScope: 'required', }, { authMethods: [ @@ -15181,6 +15291,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set to Heat Mode', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15292,6 +15403,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set to Heat-Cool (Auto) Mode', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15591,6 +15703,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Thermostats', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15650,6 +15763,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set to Off Mode', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15706,6 +15820,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set the Fallback Climate Preset', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15813,6 +15928,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set the Fan Mode Setting', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15845,6 +15961,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set the HVAC Mode', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -15941,6 +16058,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Set a Temperature Threshold', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16127,6 +16245,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Update a Climate Preset', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -16262,6 +16381,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Create a Thermostat Schedule', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16306,6 +16426,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Delete a Thermostat Schedule', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16352,6 +16473,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get a Thermostat Schedule', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16411,6 +16533,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Thermostat Schedules', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16534,6 +16657,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Update a Thermostat Schedule', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -16602,6 +16726,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Add an ACS User to a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16686,6 +16811,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Create a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16729,6 +16855,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Delete a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16760,6 +16887,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16817,6 +16945,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Grant a User Identity Access to a Device', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16863,6 +16992,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List User Identities', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16908,6 +17038,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Accessible Devices for a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16954,6 +17085,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List ACS Systems Associated with a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -16999,6 +17131,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List ACS Users Associated with a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17055,6 +17188,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Remove an ACS User from a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17111,6 +17245,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Revoke Access to a Device from a User Identity', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17207,6 +17342,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -17261,6 +17397,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Delete an Enrollment Automation', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17307,6 +17444,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Get an Enrollment Automation', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17404,6 +17542,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'Launch an Enrollment Automation', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17450,6 +17589,7 @@ Generated by [AVA](https://avajs.dev). }, title: 'List Enrollment Automations', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -17519,6 +17659,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17562,6 +17703,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17607,6 +17749,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17639,6 +17782,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17696,6 +17840,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, @@ -17837,6 +17982,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'none', }, { authMethods: [ @@ -17870,6 +18016,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, { authMethods: [ @@ -17904,6 +18051,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'optional', }, { authMethods: [ @@ -17935,6 +18083,7 @@ Generated by [AVA](https://avajs.dev). }, title: '', undocumentedMessage: '', + workspaceScope: 'required', }, ], isDeprecated: false, diff --git a/test/snapshots/seam-blueprint.test.ts.snap b/test/snapshots/seam-blueprint.test.ts.snap index 059fd5f3..13071913 100644 Binary files a/test/snapshots/seam-blueprint.test.ts.snap and b/test/snapshots/seam-blueprint.test.ts.snap differ