diff --git a/package-lock.json b/package-lock.json index e4197cbb..d970911d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@seamapi/blueprint": "^0.52.2", "@seamapi/fake-seam-connect": "^1.77.0", "@seamapi/smith": "^0.5.2", - "@seamapi/types": "1.940.0", + "@seamapi/types": "1.941.0", "@swc/core": "^1.11.29", "@types/jsonwebtoken": "^9.0.6", "@types/node": "^24.10.9", @@ -49,7 +49,7 @@ "npm": ">=10.9.4" }, "peerDependencies": { - "@seamapi/types": "^1.940.0" + "@seamapi/types": "^1.941.0" }, "peerDependenciesMeta": { "@seamapi/types": { @@ -1405,9 +1405,9 @@ "license": "MIT" }, "node_modules/@seamapi/types": { - "version": "1.940.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.940.0.tgz", - "integrity": "sha512-NXMIOUGJysWBuyBeea2s9XlI7laqSaw4W8xRayDV9Q/K0P6gTqFEovNAkh6WkSbvcLSF9uBSQU6BjRWvLdImpA==", + "version": "1.941.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.941.0.tgz", + "integrity": "sha512-s/EEHq8d3r6EMNGeQBT6e9PPssU8TVCziedtp68BToKB7uQY0/+OVMr3+Zqvj7s4niSW5oJug2AKPFnnDfap6w==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 3af6d308..b902435e 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "npm": ">=10.9.4" }, "peerDependencies": { - "@seamapi/types": "^1.940.0" + "@seamapi/types": "^1.941.0" }, "peerDependenciesMeta": { "@seamapi/types": { @@ -102,7 +102,7 @@ "@seamapi/blueprint": "^0.52.2", "@seamapi/fake-seam-connect": "^1.77.0", "@seamapi/smith": "^0.5.2", - "@seamapi/types": "1.940.0", + "@seamapi/types": "1.941.0", "@swc/core": "^1.11.29", "@types/jsonwebtoken": "^9.0.6", "@types/node": "^24.10.9", diff --git a/src/lib/seam/connect/routes/seam-http-endpoints-without-workspace.ts b/src/lib/seam/connect/routes/seam-http-endpoints-without-workspace.ts index ef219e46..27fbd0ad 100644 --- a/src/lib/seam/connect/routes/seam-http-endpoints-without-workspace.ts +++ b/src/lib/seam/connect/routes/seam-http-endpoints-without-workspace.ts @@ -21,6 +21,12 @@ import { parseOptions, } from 'lib/seam/connect/parse-options.js' +import { + type SeamConsoleV1WorkspaceFeatureFlagsListOptions, + type SeamConsoleV1WorkspaceFeatureFlagsListParameters, + type SeamConsoleV1WorkspaceFeatureFlagsListRequest, + SeamHttpSeamConsoleV1WorkspaceFeatureFlags, +} from './seam/console/v1/workspace/feature-flags/index.js' import { type SeamCustomerV1ConnectorsAuthorizeOptions, type SeamCustomerV1ConnectorsAuthorizeParameters, @@ -100,6 +106,27 @@ export class SeamHttpEndpointsWithoutWorkspace { return new SeamHttpEndpointsWithoutWorkspace(constructorOptions) } + get '/seam/console/v1/workspace/feature_flags/list'(): ( + parameters?: SeamConsoleV1WorkspaceFeatureFlagsListParameters, + options?: SeamConsoleV1WorkspaceFeatureFlagsListOptions, + ) => SeamConsoleV1WorkspaceFeatureFlagsListRequest { + const { client, defaults } = this + if (!this.defaults.isUndocumentedApiEnabled) { + throw new Error( + 'Cannot use undocumented API without isUndocumentedApiEnabled', + ) + } + return function seamConsoleV1WorkspaceFeatureFlagsList( + ...args: Parameters + ): ReturnType { + const seam = SeamHttpSeamConsoleV1WorkspaceFeatureFlags.fromClient( + client, + defaults, + ) + return seam.list(...args) + } + } + get '/seam/customer/v1/connectors/authorize'(): ( parameters?: SeamCustomerV1ConnectorsAuthorizeParameters, options?: SeamCustomerV1ConnectorsAuthorizeOptions, @@ -146,6 +173,7 @@ export class SeamHttpEndpointsWithoutWorkspace { } export type SeamHttpEndpointWithoutWorkspaceQueryPaths = + | '/seam/console/v1/workspace/feature_flags/list' | '/seam/customer/v1/connectors/authorize' | '/workspaces/list' diff --git a/src/lib/seam/connect/routes/seam-http-endpoints.ts b/src/lib/seam/connect/routes/seam-http-endpoints.ts index 1df13495..863f1293 100644 --- a/src/lib/seam/connect/routes/seam-http-endpoints.ts +++ b/src/lib/seam/connect/routes/seam-http-endpoints.ts @@ -647,6 +647,15 @@ import { type SeamConsoleV1TimelinesGetRequest, SeamHttpSeamConsoleV1Timelines, } from './seam/console/v1/timelines/index.js' +import { + type SeamConsoleV1WorkspaceFeatureFlagsListOptions, + type SeamConsoleV1WorkspaceFeatureFlagsListParameters, + type SeamConsoleV1WorkspaceFeatureFlagsListRequest, + type SeamConsoleV1WorkspaceFeatureFlagsUpdateOptions, + type SeamConsoleV1WorkspaceFeatureFlagsUpdateParameters, + type SeamConsoleV1WorkspaceFeatureFlagsUpdateRequest, + SeamHttpSeamConsoleV1WorkspaceFeatureFlags, +} from './seam/console/v1/workspace/feature-flags/index.js' import { type SeamCustomerV1AccessGrantsListOptions, type SeamCustomerV1AccessGrantsListParameters, @@ -3510,6 +3519,48 @@ export class SeamHttpEndpoints { } } + get '/seam/console/v1/workspace/feature_flags/list'(): ( + parameters?: SeamConsoleV1WorkspaceFeatureFlagsListParameters, + options?: SeamConsoleV1WorkspaceFeatureFlagsListOptions, + ) => SeamConsoleV1WorkspaceFeatureFlagsListRequest { + const { client, defaults } = this + if (!this.defaults.isUndocumentedApiEnabled) { + throw new Error( + 'Cannot use undocumented API without isUndocumentedApiEnabled', + ) + } + return function seamConsoleV1WorkspaceFeatureFlagsList( + ...args: Parameters + ): ReturnType { + const seam = SeamHttpSeamConsoleV1WorkspaceFeatureFlags.fromClient( + client, + defaults, + ) + return seam.list(...args) + } + } + + get '/seam/console/v1/workspace/feature_flags/update'(): ( + parameters?: SeamConsoleV1WorkspaceFeatureFlagsUpdateParameters, + options?: SeamConsoleV1WorkspaceFeatureFlagsUpdateOptions, + ) => SeamConsoleV1WorkspaceFeatureFlagsUpdateRequest { + const { client, defaults } = this + if (!this.defaults.isUndocumentedApiEnabled) { + throw new Error( + 'Cannot use undocumented API without isUndocumentedApiEnabled', + ) + } + return function seamConsoleV1WorkspaceFeatureFlagsUpdate( + ...args: Parameters + ): ReturnType { + const seam = SeamHttpSeamConsoleV1WorkspaceFeatureFlags.fromClient( + client, + defaults, + ) + return seam.update(...args) + } + } + get '/seam/customer/v1/access_grants/list'(): ( parameters?: SeamCustomerV1AccessGrantsListParameters, options?: SeamCustomerV1AccessGrantsListOptions, @@ -5491,6 +5542,7 @@ export type SeamHttpEndpointQueryPaths = | '/seam/console/v1/lynx_migration/list_property_reservations' | '/seam/console/v1/sites/list' | '/seam/console/v1/timelines/get' + | '/seam/console/v1/workspace/feature_flags/list' | '/seam/customer/v1/access_grants/list' | '/seam/customer/v1/automation_runs/list' | '/seam/customer/v1/automations/get' @@ -5653,6 +5705,7 @@ export type SeamHttpEndpointMutationPaths = | '/seam/console/v1/sites/create' | '/seam/console/v1/sites/delete' | '/seam/console/v1/sites/update' + | '/seam/console/v1/workspace/feature_flags/update' | '/seam/customer/v1/access_grants/update' | '/seam/customer/v1/access_methods/encode' | '/seam/customer/v1/automations/delete' diff --git a/src/lib/seam/connect/routes/seam/console/v1/index.ts b/src/lib/seam/connect/routes/seam/console/v1/index.ts index ca42ba25..76a262f3 100644 --- a/src/lib/seam/connect/routes/seam/console/v1/index.ts +++ b/src/lib/seam/connect/routes/seam/console/v1/index.ts @@ -7,3 +7,4 @@ export * from './lynx-migration/index.js' export * from './sites/index.js' export * from './timelines/index.js' export * from './v1.js' +export * from './workspace/index.js' diff --git a/src/lib/seam/connect/routes/seam/console/v1/workspace/feature-flags/feature-flags.ts b/src/lib/seam/connect/routes/seam/console/v1/workspace/feature-flags/feature-flags.ts new file mode 100644 index 00000000..34e20e89 --- /dev/null +++ b/src/lib/seam/connect/routes/seam/console/v1/workspace/feature-flags/feature-flags.ts @@ -0,0 +1,259 @@ +/* + * Automatically generated by codegen/smith.ts. + * Do not edit this file or add other files to this directory. + */ + +import type { + RouteRequestBody, + RouteRequestParams, + RouteResponse, +} from '@seamapi/types/connect' + +import { seamApiLtsVersion } from 'lib/lts-version.js' +import { + getAuthHeadersForClientSessionToken, + warnOnInsecureuserIdentifierKey, +} from 'lib/seam/connect/auth.js' +import { type Client, createClient } from 'lib/seam/connect/client.js' +import { + isSeamHttpOptionsWithApiKey, + isSeamHttpOptionsWithClient, + isSeamHttpOptionsWithClientSessionToken, + isSeamHttpOptionsWithConsoleSessionToken, + isSeamHttpOptionsWithPersonalAccessToken, + type SeamHttpFromPublishableKeyOptions, + SeamHttpInvalidOptionsError, + type SeamHttpOptions, + type SeamHttpOptionsWithApiKey, + type SeamHttpOptionsWithClient, + type SeamHttpOptionsWithClientSessionToken, + type SeamHttpOptionsWithConsoleSessionToken, + type SeamHttpOptionsWithPersonalAccessToken, + type SeamHttpRequestOptions, +} from 'lib/seam/connect/options.js' +import { + limitToSeamHttpRequestOptions, + parseOptions, +} from 'lib/seam/connect/parse-options.js' +import { SeamHttpClientSessions } from 'lib/seam/connect/routes/client-sessions/index.js' +import { SeamHttpRequest } from 'lib/seam/connect/seam-http-request.js' +import { SeamPaginator } from 'lib/seam/connect/seam-paginator.js' +import type { SetNonNullable } from 'lib/types.js' + +export class SeamHttpSeamConsoleV1WorkspaceFeatureFlags { + client: Client + readonly defaults: Required + readonly ltsVersion = seamApiLtsVersion + static ltsVersion = seamApiLtsVersion + + constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) { + const options = parseOptions(apiKeyOrOptions) + if (!options.isUndocumentedApiEnabled) { + throw new Error( + 'Cannot use undocumented API without isUndocumentedApiEnabled', + ) + } + this.client = 'client' in options ? options.client : createClient(options) + this.defaults = limitToSeamHttpRequestOptions(options) + } + + static fromClient( + client: SeamHttpOptionsWithClient['client'], + options: Omit = {}, + ): SeamHttpSeamConsoleV1WorkspaceFeatureFlags { + const constructorOptions = { ...options, client } + if (!isSeamHttpOptionsWithClient(constructorOptions)) { + throw new SeamHttpInvalidOptionsError('Missing client') + } + return new SeamHttpSeamConsoleV1WorkspaceFeatureFlags(constructorOptions) + } + + static fromApiKey( + apiKey: SeamHttpOptionsWithApiKey['apiKey'], + options: Omit = {}, + ): SeamHttpSeamConsoleV1WorkspaceFeatureFlags { + const constructorOptions = { ...options, apiKey } + if (!isSeamHttpOptionsWithApiKey(constructorOptions)) { + throw new SeamHttpInvalidOptionsError('Missing apiKey') + } + return new SeamHttpSeamConsoleV1WorkspaceFeatureFlags(constructorOptions) + } + + static fromClientSessionToken( + clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'], + options: Omit< + SeamHttpOptionsWithClientSessionToken, + 'clientSessionToken' + > = {}, + ): SeamHttpSeamConsoleV1WorkspaceFeatureFlags { + const constructorOptions = { ...options, clientSessionToken } + if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) { + throw new SeamHttpInvalidOptionsError('Missing clientSessionToken') + } + return new SeamHttpSeamConsoleV1WorkspaceFeatureFlags(constructorOptions) + } + + static async fromPublishableKey( + publishableKey: string, + userIdentifierKey: string, + options: SeamHttpFromPublishableKeyOptions = {}, + ): Promise { + warnOnInsecureuserIdentifierKey(userIdentifierKey) + const clientOptions = parseOptions({ ...options, publishableKey }) + if (isSeamHttpOptionsWithClient(clientOptions)) { + throw new SeamHttpInvalidOptionsError( + 'The client option cannot be used with SeamHttpSeamConsoleV1WorkspaceFeatureFlags.fromPublishableKey', + ) + } + const client = createClient(clientOptions) + const clientSessions = SeamHttpClientSessions.fromClient(client) + const { token } = await clientSessions.getOrCreate({ + user_identifier_key: userIdentifierKey, + }) + return SeamHttpSeamConsoleV1WorkspaceFeatureFlags.fromClientSessionToken( + token, + options, + ) + } + + static fromConsoleSessionToken( + consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'], + workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'], + options: Omit< + SeamHttpOptionsWithConsoleSessionToken, + 'consoleSessionToken' | 'workspaceId' + > = {}, + ): SeamHttpSeamConsoleV1WorkspaceFeatureFlags { + const constructorOptions = { ...options, consoleSessionToken, workspaceId } + if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) { + throw new SeamHttpInvalidOptionsError( + 'Missing consoleSessionToken or workspaceId', + ) + } + return new SeamHttpSeamConsoleV1WorkspaceFeatureFlags(constructorOptions) + } + + static fromPersonalAccessToken( + personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'], + workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'], + options: Omit< + SeamHttpOptionsWithPersonalAccessToken, + 'personalAccessToken' | 'workspaceId' + > = {}, + ): SeamHttpSeamConsoleV1WorkspaceFeatureFlags { + const constructorOptions = { ...options, personalAccessToken, workspaceId } + if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) { + throw new SeamHttpInvalidOptionsError( + 'Missing personalAccessToken or workspaceId', + ) + } + return new SeamHttpSeamConsoleV1WorkspaceFeatureFlags(constructorOptions) + } + + createPaginator( + request: SeamHttpRequest, + ): SeamPaginator { + return new SeamPaginator(this, request) + } + + async updateClientSessionToken( + clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'], + ): Promise { + const { headers } = this.client.defaults + const authHeaders = getAuthHeadersForClientSessionToken({ + clientSessionToken, + }) + for (const key of Object.keys(authHeaders)) { + if (headers[key] == null) { + throw new Error( + 'Cannot update a clientSessionToken on a client created without a clientSessionToken', + ) + } + } + this.client.defaults.headers = { ...headers, ...authHeaders } + const clientSessions = SeamHttpClientSessions.fromClient(this.client) + await clientSessions.get() + } + + list( + parameters?: SeamConsoleV1WorkspaceFeatureFlagsListParameters, + options: SeamConsoleV1WorkspaceFeatureFlagsListOptions = {}, + ): SeamConsoleV1WorkspaceFeatureFlagsListRequest { + if (!this.defaults.isUndocumentedApiEnabled) { + throw new Error( + 'Cannot use undocumented API without isUndocumentedApiEnabled', + ) + } + return new SeamHttpRequest(this, { + pathname: '/seam/console/v1/workspace/feature_flags/list', + method: 'GET', + params: parameters, + responseKey: 'feature_flags', + options, + }) + } + + update( + parameters?: SeamConsoleV1WorkspaceFeatureFlagsUpdateParameters, + options: SeamConsoleV1WorkspaceFeatureFlagsUpdateOptions = {}, + ): SeamConsoleV1WorkspaceFeatureFlagsUpdateRequest { + if (!this.defaults.isUndocumentedApiEnabled) { + throw new Error( + 'Cannot use undocumented API without isUndocumentedApiEnabled', + ) + } + return new SeamHttpRequest(this, { + pathname: '/seam/console/v1/workspace/feature_flags/update', + method: 'POST', + body: parameters, + responseKey: 'feature_flag', + options, + }) + } +} + +export type SeamConsoleV1WorkspaceFeatureFlagsListParameters = + RouteRequestParams<'/seam/console/v1/workspace/feature_flags/list'> + +/** + * @deprecated Use SeamConsoleV1WorkspaceFeatureFlagsListParameters instead. + */ +export type SeamConsoleV1WorkspaceFeatureFlagsListParams = + SeamConsoleV1WorkspaceFeatureFlagsListParameters + +/** + * @deprecated Use SeamConsoleV1WorkspaceFeatureFlagsListRequest instead. + */ +export type SeamConsoleV1WorkspaceFeatureFlagsListResponse = SetNonNullable< + Required> +> + +export type SeamConsoleV1WorkspaceFeatureFlagsListRequest = SeamHttpRequest< + SeamConsoleV1WorkspaceFeatureFlagsListResponse, + 'feature_flags' +> + +export interface SeamConsoleV1WorkspaceFeatureFlagsListOptions {} + +export type SeamConsoleV1WorkspaceFeatureFlagsUpdateParameters = + RouteRequestBody<'/seam/console/v1/workspace/feature_flags/update'> + +/** + * @deprecated Use SeamConsoleV1WorkspaceFeatureFlagsUpdateParameters instead. + */ +export type SeamConsoleV1WorkspaceFeatureFlagsUpdateBody = + SeamConsoleV1WorkspaceFeatureFlagsUpdateParameters + +/** + * @deprecated Use SeamConsoleV1WorkspaceFeatureFlagsUpdateRequest instead. + */ +export type SeamConsoleV1WorkspaceFeatureFlagsUpdateResponse = SetNonNullable< + Required> +> + +export type SeamConsoleV1WorkspaceFeatureFlagsUpdateRequest = SeamHttpRequest< + SeamConsoleV1WorkspaceFeatureFlagsUpdateResponse, + 'feature_flag' +> + +export interface SeamConsoleV1WorkspaceFeatureFlagsUpdateOptions {} diff --git a/src/lib/seam/connect/routes/seam/console/v1/workspace/feature-flags/index.ts b/src/lib/seam/connect/routes/seam/console/v1/workspace/feature-flags/index.ts new file mode 100644 index 00000000..3ac63360 --- /dev/null +++ b/src/lib/seam/connect/routes/seam/console/v1/workspace/feature-flags/index.ts @@ -0,0 +1,6 @@ +/* + * Automatically generated by codegen/smith.ts. + * Do not edit this file or add other files to this directory. + */ + +export * from './feature-flags.js' diff --git a/src/lib/seam/connect/routes/seam/console/v1/workspace/index.ts b/src/lib/seam/connect/routes/seam/console/v1/workspace/index.ts new file mode 100644 index 00000000..3a97c552 --- /dev/null +++ b/src/lib/seam/connect/routes/seam/console/v1/workspace/index.ts @@ -0,0 +1,6 @@ +/* + * Automatically generated by codegen/smith.ts. + * Do not edit this file or add other files to this directory. + */ + +export * from './feature-flags/index.js'