import * as Schema from "effect/Schema";import * as Context from "effect/Context";import * as HttpApi from "effect/unstable/httpapi/HttpApi";import * as HttpApiEndpoint from "effect/unstable/httpapi/HttpApiEndpoint";import * as HttpApiGroup from "effect/unstable/httpapi/HttpApiGroup";import * as HttpApiMiddleware from "effect/unstable/httpapi/HttpApiMiddleware";import * as HttpApiSchema from "effect/unstable/httpapi/HttpApiSchema";import * as HttpApiSecurity from "effect/unstable/httpapi/HttpApiSecurity";import * as OpenApi from "effect/unstable/httpapi/OpenApi"; import { EnvironmentId, ThreadId, TrimmedNonEmptyString } from "./baseSchemas.ts";import { ExecutionEnvironmentDescriptor } from "./environment.ts"; export const RelayAgentAwarenessPlatform = Schema.Literal("ios");export type RelayAgentAwarenessPlatform = typeof RelayAgentAwarenessPlatform.Type; export const RelayAgentAwarenessPhase = Schema.Literals([ "starting", "running", "waiting_for_approval", "waiting_for_input", "completed", "failed", "stale",]);export type RelayAgentAwarenessPhase = typeof RelayAgentAwarenessPhase.Type; export const RelayAgentAwarenessPreferences = Schema.Struct({ liveActivitiesEnabled: Schema.Boolean, notificationsEnabled: Schema.Boolean, notifyOnApproval: Schema.Boolean, notifyOnInput: Schema.Boolean, notifyOnCompletion: Schema.Boolean, notifyOnFailure: Schema.Boolean,});export type RelayAgentAwarenessPreferences = typeof RelayAgentAwarenessPreferences.Type; export const RelayDeviceRegistrationRequest = Schema.Struct({ deviceId: TrimmedNonEmptyString, label: TrimmedNonEmptyString, platform: RelayAgentAwarenessPlatform, iosMajorVersion: Schema.Int.check(Schema.isGreaterThanOrEqualTo(18)), appVersion: Schema.optional(TrimmedNonEmptyString), pushToken: Schema.optional(TrimmedNonEmptyString), pushToStartToken: Schema.optional(TrimmedNonEmptyString), preferences: RelayAgentAwarenessPreferences,});export type RelayDeviceRegistrationRequest = typeof RelayDeviceRegistrationRequest.Type; export const RelayClientDeviceRecord = Schema.Struct({ deviceId: TrimmedNonEmptyString, label: TrimmedNonEmptyString, platform: RelayAgentAwarenessPlatform, iosMajorVersion: Schema.Int.check(Schema.isGreaterThanOrEqualTo(18)), appVersion: Schema.NullOr(TrimmedNonEmptyString), notifications: Schema.Struct({ enabled: Schema.Boolean, notifyOnApproval: Schema.Boolean, notifyOnInput: Schema.Boolean, notifyOnCompletion: Schema.Boolean, notifyOnFailure: Schema.Boolean, }), liveActivities: Schema.Struct({ enabled: Schema.Boolean, }), updatedAt: TrimmedNonEmptyString,});export type RelayClientDeviceRecord = typeof RelayClientDeviceRecord.Type; export const RelayListDevicesResponse = Schema.Struct({ devices: Schema.Array(RelayClientDeviceRecord),});export type RelayListDevicesResponse = typeof RelayListDevicesResponse.Type; export const RelayLiveActivityRegistrationRequest = Schema.Struct({ deviceId: TrimmedNonEmptyString, activityPushToken: TrimmedNonEmptyString,});export type RelayLiveActivityRegistrationRequest = typeof RelayLiveActivityRegistrationRequest.Type; export const RelayDeviceUnregistrationParams = Schema.Struct({ deviceId: TrimmedNonEmptyString,});export type RelayDeviceUnregistrationParams = typeof RelayDeviceUnregistrationParams.Type; export const RelayAgentActivityState = Schema.Struct({ environmentId: EnvironmentId, threadId: ThreadId, projectTitle: TrimmedNonEmptyString, threadTitle: TrimmedNonEmptyString, phase: RelayAgentAwarenessPhase, headline: TrimmedNonEmptyString, detail: Schema.optional(TrimmedNonEmptyString), modelTitle: TrimmedNonEmptyString, updatedAt: TrimmedNonEmptyString, deepLink: TrimmedNonEmptyString,});export type RelayAgentActivityState = typeof RelayAgentActivityState.Type; export const RelayAgentActivityAggregateRow = Schema.Struct({ environmentId: EnvironmentId, threadId: ThreadId, projectTitle: TrimmedNonEmptyString, threadTitle: TrimmedNonEmptyString, modelTitle: TrimmedNonEmptyString, phase: RelayAgentAwarenessPhase, status: TrimmedNonEmptyString, updatedAt: TrimmedNonEmptyString, deepLink: TrimmedNonEmptyString,});export type RelayAgentActivityAggregateRow = typeof RelayAgentActivityAggregateRow.Type; export const RelayAgentActivityAggregateState = Schema.Struct({ title: TrimmedNonEmptyString, subtitle: TrimmedNonEmptyString, activeCount: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)), updatedAt: TrimmedNonEmptyString, activities: Schema.Array(RelayAgentActivityAggregateRow),});export type RelayAgentActivityAggregateState = typeof RelayAgentActivityAggregateState.Type; export const RelayManagedEndpointProviderKind = Schema.Literals([ "manual", "cloudflare_tunnel", "t3_relay",]);export type RelayManagedEndpointProviderKind = typeof RelayManagedEndpointProviderKind.Type; export const RelayManagedEndpoint = Schema.Struct({ httpBaseUrl: TrimmedNonEmptyString, wsBaseUrl: TrimmedNonEmptyString, providerKind: RelayManagedEndpointProviderKind,});export type RelayManagedEndpoint = typeof RelayManagedEndpoint.Type; export const RelayManagedEndpointOrigin = Schema.Struct({ localHttpHost: TrimmedNonEmptyString, localHttpPort: Schema.Int.check( Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(65_535), ),});export type RelayManagedEndpointOrigin = typeof RelayManagedEndpointOrigin.Type; export const RelayManagedEndpointRuntimeConfig = Schema.Struct({ providerKind: RelayManagedEndpointProviderKind, connectorToken: TrimmedNonEmptyString, tunnelId: Schema.optional(TrimmedNonEmptyString), tunnelName: Schema.optional(TrimmedNonEmptyString),});export type RelayManagedEndpointRuntimeConfig = typeof RelayManagedEndpointRuntimeConfig.Type; export const RelayLinkProofRequest = Schema.Struct({ challenge: Schema.String, relayIssuer: Schema.String, endpoint: RelayManagedEndpoint, origin: RelayManagedEndpointOrigin,});export type RelayLinkProofRequest = typeof RelayLinkProofRequest.Type; export const RelayEnvironmentConfigRequest = Schema.Struct({ relayUrl: Schema.String, relayIssuer: Schema.optional(Schema.String), cloudUserId: Schema.String, environmentCredential: Schema.String, cloudMintPublicKey: Schema.String, endpointRuntime: Schema.NullOr(RelayManagedEndpointRuntimeConfig),});export type RelayEnvironmentConfigRequest = typeof RelayEnvironmentConfigRequest.Type; const RelaySignedJwtRegisteredClaims = { iss: TrimmedNonEmptyString, aud: TrimmedNonEmptyString, sub: TrimmedNonEmptyString, jti: TrimmedNonEmptyString, iat: Schema.Int, exp: Schema.Int,} as const; export const RelayAgentActivityPublishProofPayload = Schema.Struct({ ...RelaySignedJwtRegisteredClaims, environmentId: EnvironmentId, threadId: ThreadId, state: Schema.NullOr(RelayAgentActivityState),});export type RelayAgentActivityPublishProofPayload = typeof RelayAgentActivityPublishProofPayload.Type;export type RelayAgentActivityPublishProof = string; export const RelayAgentActivityPublishRequest = Schema.Struct({ state: Schema.NullOr(RelayAgentActivityState).annotate({ description: "Current agent-awareness state, or null to remove the published state.", }), proof: TrimmedNonEmptyString.annotate({ description: "Environment-signed JWT covering this published activity state.", }),}).annotate({ description: "Publishes a signed agent-awareness update from an environment." });export type RelayAgentActivityPublishRequest = typeof RelayAgentActivityPublishRequest.Type; export const RelayEnvironmentLinkScope = Schema.Literals([ "agent_activity_notifications", "managed_tunnels",]);export type RelayEnvironmentLinkScope = typeof RelayEnvironmentLinkScope.Type; export const RelayEnvironmentLinkProofPayload = Schema.Struct({ ...RelaySignedJwtRegisteredClaims, challenge: TrimmedNonEmptyString, descriptor: ExecutionEnvironmentDescriptor, environmentId: EnvironmentId, environmentPublicKey: TrimmedNonEmptyString, endpoint: RelayManagedEndpoint, origin: RelayManagedEndpointOrigin, scopes: Schema.Array(RelayEnvironmentLinkScope),});export type RelayEnvironmentLinkProofPayload = typeof RelayEnvironmentLinkProofPayload.Type; export const RelayEnvironmentLinkProof = TrimmedNonEmptyString;export type RelayEnvironmentLinkProof = typeof RelayEnvironmentLinkProof.Type; export const RelayEnvironmentLinkChallengeRequest = Schema.Struct({ notificationsEnabled: Schema.Boolean.annotate({ description: "Whether this link may deliver push notifications.", }), liveActivitiesEnabled: Schema.Boolean.annotate({ description: "Whether this link may update Live Activities.", }), managedTunnelsEnabled: Schema.Boolean.annotate({ description: "Whether the relay should provision a managed tunnel for this environment.", }),}).annotate({ description: "Requested capabilities for a new environment-link challenge." });export type RelayEnvironmentLinkChallengeRequest = typeof RelayEnvironmentLinkChallengeRequest.Type; export const RelayEnvironmentLinkChallengeResponse = Schema.Struct({ challenge: TrimmedNonEmptyString, expiresAt: TrimmedNonEmptyString,});export type RelayEnvironmentLinkChallengeResponse = typeof RelayEnvironmentLinkChallengeResponse.Type; export const RelayEnvironmentLinkRequest = Schema.Struct({ deviceId: Schema.optional( TrimmedNonEmptyString.annotate({ description: "Optional client device identifier associated with this link.", }), ), proof: RelayEnvironmentLinkProof.annotate({ description: "Environment-signed proof bound to a previously issued link challenge.", }), notificationsEnabled: Schema.Boolean, liveActivitiesEnabled: Schema.Boolean, managedTunnelsEnabled: Schema.Boolean,}).annotate({ description: "Links an authenticated cloud user to a T3 environment." });export type RelayEnvironmentLinkRequest = typeof RelayEnvironmentLinkRequest.Type; export const RelayEnvironmentLinkResponse = Schema.Struct({ ok: Schema.Boolean, cloudUserId: TrimmedNonEmptyString, environmentId: EnvironmentId, endpoint: RelayManagedEndpoint, endpointRuntime: Schema.NullOr(RelayManagedEndpointRuntimeConfig), relayIssuer: TrimmedNonEmptyString, environmentCredential: TrimmedNonEmptyString, cloudMintPublicKey: TrimmedNonEmptyString,});export type RelayEnvironmentLinkResponse = typeof RelayEnvironmentLinkResponse.Type; export const RelayEnvironmentLinkProofInvalidReason = Schema.Literals([ "invalid_signature_or_scope", "descriptor_mismatch", "replayed_nonce", "challenge_invalid", "origin_not_allowed", "endpoint_not_secure",]);export type RelayEnvironmentLinkProofInvalidReason = typeof RelayEnvironmentLinkProofInvalidReason.Type; export const RelayEnvironmentLinkFailedReason = Schema.Literals([ "link_persistence_failed", "credential_persistence_failed", "replay_persistence_failed", "internal_error",]);export type RelayEnvironmentLinkFailedReason = typeof RelayEnvironmentLinkFailedReason.Type; export const RelayEnvironmentLinkUnavailableReason = Schema.Literals([ "managed_endpoint_not_configured", "managed_endpoint_provisioning_failed",]);export type RelayEnvironmentLinkUnavailableReason = typeof RelayEnvironmentLinkUnavailableReason.Type; export const RelayEnvironmentEndpointUnavailableReason = Schema.Literals([ "endpoint_request_failed", "endpoint_response_invalid",]);export type RelayEnvironmentEndpointUnavailableReason = typeof RelayEnvironmentEndpointUnavailableReason.Type; export const RelayAgentActivityPublishProofInvalidReason = Schema.Literals([ "invalid_signature_or_payload", "replayed_nonce",]);export type RelayAgentActivityPublishProofInvalidReason = typeof RelayAgentActivityPublishProofInvalidReason.Type; export const RelayAuthInvalidReason = Schema.Literals([ "missing_bearer", "invalid_bearer", "invalid_dpop", "not_authorized",]);export type RelayAuthInvalidReason = typeof RelayAuthInvalidReason.Type; export const RelayInternalErrorReason = Schema.Literals([ "database_unavailable", "persistence_failed", "upstream_unavailable", "internal_error",]);export type RelayInternalErrorReason = typeof RelayInternalErrorReason.Type; export class RelayAuthInvalidError extends Schema.TaggedErrorClass<RelayAuthInvalidError>()( "RelayAuthInvalidError", { code: Schema.Literal("auth_invalid"), reason: RelayAuthInvalidReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 },) {} export class RelayEnvironmentLinkProofExpiredError extends Schema.TaggedErrorClass<RelayEnvironmentLinkProofExpiredError>()( "RelayEnvironmentLinkProofExpiredError", { code: Schema.Literal("environment_link_proof_expired"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 },) {} export class RelayEnvironmentLinkProofInvalidError extends Schema.TaggedErrorClass<RelayEnvironmentLinkProofInvalidError>()( "RelayEnvironmentLinkProofInvalidError", { code: Schema.Literal("environment_link_proof_invalid"), reason: RelayEnvironmentLinkProofInvalidReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 400 },) {} export class RelayEnvironmentConnectNotAuthorizedError extends Schema.TaggedErrorClass<RelayEnvironmentConnectNotAuthorizedError>()( "RelayEnvironmentConnectNotAuthorizedError", { code: Schema.Literal("environment_connect_not_authorized"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 403 },) {} export class RelayEnvironmentEndpointUnavailableError extends Schema.TaggedErrorClass<RelayEnvironmentEndpointUnavailableError>()( "RelayEnvironmentEndpointUnavailableError", { code: Schema.Literal("environment_endpoint_unavailable"), reason: RelayEnvironmentEndpointUnavailableReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 502 },) {} export class RelayEnvironmentEndpointTimedOutError extends Schema.TaggedErrorClass<RelayEnvironmentEndpointTimedOutError>()( "RelayEnvironmentEndpointTimedOutError", { code: Schema.Literal("environment_endpoint_timed_out"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 504 },) {} export class RelayEnvironmentLinkFailedError extends Schema.TaggedErrorClass<RelayEnvironmentLinkFailedError>()( "RelayEnvironmentLinkFailedError", { code: Schema.Literal("environment_link_failed"), reason: RelayEnvironmentLinkFailedReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 500 },) {} export class RelayEnvironmentLinkUnavailableError extends Schema.TaggedErrorClass<RelayEnvironmentLinkUnavailableError>()( "RelayEnvironmentLinkUnavailableError", { code: Schema.Literal("environment_link_unavailable"), reason: RelayEnvironmentLinkUnavailableReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 503 },) {} export class RelayAgentActivityPublishProofExpiredError extends Schema.TaggedErrorClass<RelayAgentActivityPublishProofExpiredError>()( "RelayAgentActivityPublishProofExpiredError", { code: Schema.Literal("agent_activity_publish_proof_expired"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 },) {} export class RelayAgentActivityPublishProofInvalidError extends Schema.TaggedErrorClass<RelayAgentActivityPublishProofInvalidError>()( "RelayAgentActivityPublishProofInvalidError", { code: Schema.Literal("agent_activity_publish_proof_invalid"), reason: RelayAgentActivityPublishProofInvalidReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 },) {} export class RelayInternalError extends Schema.TaggedErrorClass<RelayInternalError>()( "RelayInternalError", { code: Schema.Literal("internal_error"), reason: RelayInternalErrorReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 500 },) {} export const RelayProtectedError = Schema.Union([ RelayAuthInvalidError, RelayEnvironmentLinkProofExpiredError, RelayEnvironmentLinkProofInvalidError, RelayEnvironmentConnectNotAuthorizedError, RelayEnvironmentEndpointUnavailableError, RelayEnvironmentEndpointTimedOutError, RelayEnvironmentLinkFailedError, RelayEnvironmentLinkUnavailableError, RelayAgentActivityPublishProofExpiredError, RelayAgentActivityPublishProofInvalidError, RelayInternalError,]);export type RelayProtectedError = typeof RelayProtectedError.Type; const RelayAuthAndInternalErrors = [RelayAuthInvalidError, RelayInternalError] as const; const RelayEnvironmentLinkErrors = [ RelayAuthInvalidError, RelayEnvironmentLinkProofExpiredError, RelayEnvironmentLinkProofInvalidError, RelayEnvironmentLinkUnavailableError, RelayEnvironmentLinkFailedError, RelayInternalError,] as const; const RelayEnvironmentConnectErrors = [ RelayAuthInvalidError, RelayEnvironmentConnectNotAuthorizedError, RelayEnvironmentEndpointUnavailableError, RelayEnvironmentEndpointTimedOutError, RelayInternalError,] as const; const RelayAgentActivityPublishErrors = [ RelayAuthInvalidError, RelayAgentActivityPublishProofExpiredError, RelayAgentActivityPublishProofInvalidError, RelayInternalError,] as const; export interface RelayClientPrincipalShape { readonly userId: string; readonly token: string; readonly proofKeyThumbprint?: string; readonly dpopScopes?: ReadonlyArray<RelayDpopAccessTokenScope>;} export class RelayClientPrincipal extends Context.Service< RelayClientPrincipal, RelayClientPrincipalShape>()("@t3tools/contracts/relay/RelayClientPrincipal") {} export interface RelayEnvironmentPrincipalShape { readonly environmentId: string; readonly environmentPublicKey: string;} export class RelayEnvironmentPrincipal extends Context.Service< RelayEnvironmentPrincipal, RelayEnvironmentPrincipalShape>()("@t3tools/contracts/relay/RelayEnvironmentPrincipal") {} const RelayClientBearerAuthorization = HttpApiSecurity.http({ scheme: "bearer" }).pipe( HttpApiSecurity.annotate( OpenApi.Description, "Clerk session or OAuth bearer token for the signed-in T3 Cloud user.", ),); export class RelayClientAuth extends HttpApiMiddleware.Service<Lines 1–500 of 971. Load more
import * as Schema from "effect/Schema"; import * as Context from "effect/Context"; import * as HttpApi from "effect/unstable/httpapi/HttpApi"; import * as HttpApiEndpoint from "effect/unstable/httpapi/HttpApiEndpoint"; import * as HttpApiGroup from "effect/unstable/httpapi/HttpApiGroup"; import * as HttpApiMiddleware from "effect/unstable/httpapi/HttpApiMiddleware"; import * as HttpApiSchema from "effect/unstable/httpapi/HttpApiSchema"; import * as HttpApiSecurity from "effect/unstable/httpapi/HttpApiSecurity"; import * as OpenApi from "effect/unstable/httpapi/OpenApi"; import { EnvironmentId, ThreadId, TrimmedNonEmptyString } from "./baseSchemas.ts"; import { ExecutionEnvironmentDescriptor } from "./environment.ts"; export const RelayAgentAwarenessPlatform = Schema.Literal("ios"); export type RelayAgentAwarenessPlatform = typeof RelayAgentAwarenessPlatform.Type; export const RelayAgentAwarenessPhase = Schema.Literals([ "starting", "running", "waiting_for_approval", "waiting_for_input", "completed", "failed", "stale", ]); export type RelayAgentAwarenessPhase = typeof RelayAgentAwarenessPhase.Type; export const RelayAgentAwarenessPreferences = Schema.Struct({ liveActivitiesEnabled: Schema.Boolean, notificationsEnabled: Schema.Boolean, notifyOnApproval: Schema.Boolean, notifyOnInput: Schema.Boolean, notifyOnCompletion: Schema.Boolean, notifyOnFailure: Schema.Boolean, }); export type RelayAgentAwarenessPreferences = typeof RelayAgentAwarenessPreferences.Type; export const RelayDeviceRegistrationRequest = Schema.Struct({ deviceId: TrimmedNonEmptyString, label: TrimmedNonEmptyString, platform: RelayAgentAwarenessPlatform, iosMajorVersion: Schema.Int.check(Schema.isGreaterThanOrEqualTo(18)), appVersion: Schema.optional(TrimmedNonEmptyString), pushToken: Schema.optional(TrimmedNonEmptyString), pushToStartToken: Schema.optional(TrimmedNonEmptyString), preferences: RelayAgentAwarenessPreferences, }); export type RelayDeviceRegistrationRequest = typeof RelayDeviceRegistrationRequest.Type; export const RelayClientDeviceRecord = Schema.Struct({ deviceId: TrimmedNonEmptyString, label: TrimmedNonEmptyString, platform: RelayAgentAwarenessPlatform, iosMajorVersion: Schema.Int.check(Schema.isGreaterThanOrEqualTo(18)), appVersion: Schema.NullOr(TrimmedNonEmptyString), notifications: Schema.Struct({ enabled: Schema.Boolean, notifyOnApproval: Schema.Boolean, notifyOnInput: Schema.Boolean, notifyOnCompletion: Schema.Boolean, notifyOnFailure: Schema.Boolean, }), liveActivities: Schema.Struct({ enabled: Schema.Boolean, }), updatedAt: TrimmedNonEmptyString, }); export type RelayClientDeviceRecord = typeof RelayClientDeviceRecord.Type; export const RelayListDevicesResponse = Schema.Struct({ devices: Schema.Array(RelayClientDeviceRecord), }); export type RelayListDevicesResponse = typeof RelayListDevicesResponse.Type; export const RelayLiveActivityRegistrationRequest = Schema.Struct({ deviceId: TrimmedNonEmptyString, activityPushToken: TrimmedNonEmptyString, }); export type RelayLiveActivityRegistrationRequest = typeof RelayLiveActivityRegistrationRequest.Type; export const RelayDeviceUnregistrationParams = Schema.Struct({ deviceId: TrimmedNonEmptyString, }); export type RelayDeviceUnregistrationParams = typeof RelayDeviceUnregistrationParams.Type; export const RelayAgentActivityState = Schema.Struct({ environmentId: EnvironmentId, threadId: ThreadId, projectTitle: TrimmedNonEmptyString, threadTitle: TrimmedNonEmptyString, phase: RelayAgentAwarenessPhase, headline: TrimmedNonEmptyString, detail: Schema.optional(TrimmedNonEmptyString), modelTitle: TrimmedNonEmptyString, updatedAt: TrimmedNonEmptyString, deepLink: TrimmedNonEmptyString, }); export type RelayAgentActivityState = typeof RelayAgentActivityState.Type; export const RelayAgentActivityAggregateRow = Schema.Struct({ environmentId: EnvironmentId, threadId: ThreadId, projectTitle: TrimmedNonEmptyString, threadTitle: TrimmedNonEmptyString, modelTitle: TrimmedNonEmptyString, phase: RelayAgentAwarenessPhase, status: TrimmedNonEmptyString, updatedAt: TrimmedNonEmptyString, deepLink: TrimmedNonEmptyString, }); export type RelayAgentActivityAggregateRow = typeof RelayAgentActivityAggregateRow.Type; export const RelayAgentActivityAggregateState = Schema.Struct({ title: TrimmedNonEmptyString, subtitle: TrimmedNonEmptyString, activeCount: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)), updatedAt: TrimmedNonEmptyString, activities: Schema.Array(RelayAgentActivityAggregateRow), }); export type RelayAgentActivityAggregateState = typeof RelayAgentActivityAggregateState.Type; export const RelayManagedEndpointProviderKind = Schema.Literals([ "manual", "cloudflare_tunnel", "t3_relay", ]); export type RelayManagedEndpointProviderKind = typeof RelayManagedEndpointProviderKind.Type; export const RelayManagedEndpoint = Schema.Struct({ httpBaseUrl: TrimmedNonEmptyString, wsBaseUrl: TrimmedNonEmptyString, providerKind: RelayManagedEndpointProviderKind, }); export type RelayManagedEndpoint = typeof RelayManagedEndpoint.Type; export const RelayManagedEndpointOrigin = Schema.Struct({ localHttpHost: TrimmedNonEmptyString, localHttpPort: Schema.Int.check( Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(65_535), ), }); export type RelayManagedEndpointOrigin = typeof RelayManagedEndpointOrigin.Type; export const RelayManagedEndpointRuntimeConfig = Schema.Struct({ providerKind: RelayManagedEndpointProviderKind, connectorToken: TrimmedNonEmptyString, tunnelId: Schema.optional(TrimmedNonEmptyString), tunnelName: Schema.optional(TrimmedNonEmptyString), }); export type RelayManagedEndpointRuntimeConfig = typeof RelayManagedEndpointRuntimeConfig.Type; export const RelayLinkProofRequest = Schema.Struct({ challenge: Schema.String, relayIssuer: Schema.String, endpoint: RelayManagedEndpoint, origin: RelayManagedEndpointOrigin, }); export type RelayLinkProofRequest = typeof RelayLinkProofRequest.Type; export const RelayEnvironmentConfigRequest = Schema.Struct({ relayUrl: Schema.String, relayIssuer: Schema.optional(Schema.String), cloudUserId: Schema.String, environmentCredential: Schema.String, cloudMintPublicKey: Schema.String, endpointRuntime: Schema.NullOr(RelayManagedEndpointRuntimeConfig), }); export type RelayEnvironmentConfigRequest = typeof RelayEnvironmentConfigRequest.Type; const RelaySignedJwtRegisteredClaims = { iss: TrimmedNonEmptyString, aud: TrimmedNonEmptyString, sub: TrimmedNonEmptyString, jti: TrimmedNonEmptyString, iat: Schema.Int, exp: Schema.Int, } as const; export const RelayAgentActivityPublishProofPayload = Schema.Struct({ ...RelaySignedJwtRegisteredClaims, environmentId: EnvironmentId, threadId: ThreadId, state: Schema.NullOr(RelayAgentActivityState), }); export type RelayAgentActivityPublishProofPayload = typeof RelayAgentActivityPublishProofPayload.Type; export type RelayAgentActivityPublishProof = string; export const RelayAgentActivityPublishRequest = Schema.Struct({ state: Schema.NullOr(RelayAgentActivityState).annotate({ description: "Current agent-awareness state, or null to remove the published state.", }), proof: TrimmedNonEmptyString.annotate({ description: "Environment-signed JWT covering this published activity state.", }), }).annotate({ description: "Publishes a signed agent-awareness update from an environment." }); export type RelayAgentActivityPublishRequest = typeof RelayAgentActivityPublishRequest.Type; export const RelayEnvironmentLinkScope = Schema.Literals([ "agent_activity_notifications", "managed_tunnels", ]); export type RelayEnvironmentLinkScope = typeof RelayEnvironmentLinkScope.Type; export const RelayEnvironmentLinkProofPayload = Schema.Struct({ ...RelaySignedJwtRegisteredClaims, challenge: TrimmedNonEmptyString, descriptor: ExecutionEnvironmentDescriptor, environmentId: EnvironmentId, environmentPublicKey: TrimmedNonEmptyString, endpoint: RelayManagedEndpoint, origin: RelayManagedEndpointOrigin, scopes: Schema.Array(RelayEnvironmentLinkScope), }); export type RelayEnvironmentLinkProofPayload = typeof RelayEnvironmentLinkProofPayload.Type; export const RelayEnvironmentLinkProof = TrimmedNonEmptyString; export type RelayEnvironmentLinkProof = typeof RelayEnvironmentLinkProof.Type; export const RelayEnvironmentLinkChallengeRequest = Schema.Struct({ notificationsEnabled: Schema.Boolean.annotate({ description: "Whether this link may deliver push notifications.", }), liveActivitiesEnabled: Schema.Boolean.annotate({ description: "Whether this link may update Live Activities.", }), managedTunnelsEnabled: Schema.Boolean.annotate({ description: "Whether the relay should provision a managed tunnel for this environment.", }), }).annotate({ description: "Requested capabilities for a new environment-link challenge." }); export type RelayEnvironmentLinkChallengeRequest = typeof RelayEnvironmentLinkChallengeRequest.Type; export const RelayEnvironmentLinkChallengeResponse = Schema.Struct({ challenge: TrimmedNonEmptyString, expiresAt: TrimmedNonEmptyString, }); export type RelayEnvironmentLinkChallengeResponse = typeof RelayEnvironmentLinkChallengeResponse.Type; export const RelayEnvironmentLinkRequest = Schema.Struct({ deviceId: Schema.optional( TrimmedNonEmptyString.annotate({ description: "Optional client device identifier associated with this link.", }), ), proof: RelayEnvironmentLinkProof.annotate({ description: "Environment-signed proof bound to a previously issued link challenge.", }), notificationsEnabled: Schema.Boolean, liveActivitiesEnabled: Schema.Boolean, managedTunnelsEnabled: Schema.Boolean, }).annotate({ description: "Links an authenticated cloud user to a T3 environment." }); export type RelayEnvironmentLinkRequest = typeof RelayEnvironmentLinkRequest.Type; export const RelayEnvironmentLinkResponse = Schema.Struct({ ok: Schema.Boolean, cloudUserId: TrimmedNonEmptyString, environmentId: EnvironmentId, endpoint: RelayManagedEndpoint, endpointRuntime: Schema.NullOr(RelayManagedEndpointRuntimeConfig), relayIssuer: TrimmedNonEmptyString, environmentCredential: TrimmedNonEmptyString, cloudMintPublicKey: TrimmedNonEmptyString, }); export type RelayEnvironmentLinkResponse = typeof RelayEnvironmentLinkResponse.Type; export const RelayEnvironmentLinkProofInvalidReason = Schema.Literals([ "invalid_signature_or_scope", "descriptor_mismatch", "replayed_nonce", "challenge_invalid", "origin_not_allowed", "endpoint_not_secure", ]); export type RelayEnvironmentLinkProofInvalidReason = typeof RelayEnvironmentLinkProofInvalidReason.Type; export const RelayEnvironmentLinkFailedReason = Schema.Literals([ "link_persistence_failed", "credential_persistence_failed", "replay_persistence_failed", "internal_error", ]); export type RelayEnvironmentLinkFailedReason = typeof RelayEnvironmentLinkFailedReason.Type; export const RelayEnvironmentLinkUnavailableReason = Schema.Literals([ "managed_endpoint_not_configured", "managed_endpoint_provisioning_failed", ]); export type RelayEnvironmentLinkUnavailableReason = typeof RelayEnvironmentLinkUnavailableReason.Type; export const RelayEnvironmentEndpointUnavailableReason = Schema.Literals([ "endpoint_request_failed", "endpoint_response_invalid", ]); export type RelayEnvironmentEndpointUnavailableReason = typeof RelayEnvironmentEndpointUnavailableReason.Type; export const RelayAgentActivityPublishProofInvalidReason = Schema.Literals([ "invalid_signature_or_payload", "replayed_nonce", ]); export type RelayAgentActivityPublishProofInvalidReason = typeof RelayAgentActivityPublishProofInvalidReason.Type; export const RelayAuthInvalidReason = Schema.Literals([ "missing_bearer", "invalid_bearer", "invalid_dpop", "not_authorized", ]); export type RelayAuthInvalidReason = typeof RelayAuthInvalidReason.Type; export const RelayInternalErrorReason = Schema.Literals([ "database_unavailable", "persistence_failed", "upstream_unavailable", "internal_error", ]); export type RelayInternalErrorReason = typeof RelayInternalErrorReason.Type; export class RelayAuthInvalidError extends Schema.TaggedErrorClass<RelayAuthInvalidError>()( "RelayAuthInvalidError", { code: Schema.Literal("auth_invalid"), reason: RelayAuthInvalidReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 }, ) {} export class RelayEnvironmentLinkProofExpiredError extends Schema.TaggedErrorClass<RelayEnvironmentLinkProofExpiredError>()( "RelayEnvironmentLinkProofExpiredError", { code: Schema.Literal("environment_link_proof_expired"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 }, ) {} export class RelayEnvironmentLinkProofInvalidError extends Schema.TaggedErrorClass<RelayEnvironmentLinkProofInvalidError>()( "RelayEnvironmentLinkProofInvalidError", { code: Schema.Literal("environment_link_proof_invalid"), reason: RelayEnvironmentLinkProofInvalidReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 400 }, ) {} export class RelayEnvironmentConnectNotAuthorizedError extends Schema.TaggedErrorClass<RelayEnvironmentConnectNotAuthorizedError>()( "RelayEnvironmentConnectNotAuthorizedError", { code: Schema.Literal("environment_connect_not_authorized"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 403 }, ) {} export class RelayEnvironmentEndpointUnavailableError extends Schema.TaggedErrorClass<RelayEnvironmentEndpointUnavailableError>()( "RelayEnvironmentEndpointUnavailableError", { code: Schema.Literal("environment_endpoint_unavailable"), reason: RelayEnvironmentEndpointUnavailableReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 502 }, ) {} export class RelayEnvironmentEndpointTimedOutError extends Schema.TaggedErrorClass<RelayEnvironmentEndpointTimedOutError>()( "RelayEnvironmentEndpointTimedOutError", { code: Schema.Literal("environment_endpoint_timed_out"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 504 }, ) {} export class RelayEnvironmentLinkFailedError extends Schema.TaggedErrorClass<RelayEnvironmentLinkFailedError>()( "RelayEnvironmentLinkFailedError", { code: Schema.Literal("environment_link_failed"), reason: RelayEnvironmentLinkFailedReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 500 }, ) {} export class RelayEnvironmentLinkUnavailableError extends Schema.TaggedErrorClass<RelayEnvironmentLinkUnavailableError>()( "RelayEnvironmentLinkUnavailableError", { code: Schema.Literal("environment_link_unavailable"), reason: RelayEnvironmentLinkUnavailableReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 503 }, ) {} export class RelayAgentActivityPublishProofExpiredError extends Schema.TaggedErrorClass<RelayAgentActivityPublishProofExpiredError>()( "RelayAgentActivityPublishProofExpiredError", { code: Schema.Literal("agent_activity_publish_proof_expired"), traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 }, ) {} export class RelayAgentActivityPublishProofInvalidError extends Schema.TaggedErrorClass<RelayAgentActivityPublishProofInvalidError>()( "RelayAgentActivityPublishProofInvalidError", { code: Schema.Literal("agent_activity_publish_proof_invalid"), reason: RelayAgentActivityPublishProofInvalidReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 401 }, ) {} export class RelayInternalError extends Schema.TaggedErrorClass<RelayInternalError>()( "RelayInternalError", { code: Schema.Literal("internal_error"), reason: RelayInternalErrorReason, traceId: TrimmedNonEmptyString, }, { httpApiStatus: 500 }, ) {} export const RelayProtectedError = Schema.Union([ RelayAuthInvalidError, RelayEnvironmentLinkProofExpiredError, RelayEnvironmentLinkProofInvalidError, RelayEnvironmentConnectNotAuthorizedError, RelayEnvironmentEndpointUnavailableError, RelayEnvironmentEndpointTimedOutError, RelayEnvironmentLinkFailedError, RelayEnvironmentLinkUnavailableError, RelayAgentActivityPublishProofExpiredError, RelayAgentActivityPublishProofInvalidError, RelayInternalError, ]); export type RelayProtectedError = typeof RelayProtectedError.Type; const RelayAuthAndInternalErrors = [RelayAuthInvalidError, RelayInternalError] as const; const RelayEnvironmentLinkErrors = [ RelayAuthInvalidError, RelayEnvironmentLinkProofExpiredError, RelayEnvironmentLinkProofInvalidError, RelayEnvironmentLinkUnavailableError, RelayEnvironmentLinkFailedError, RelayInternalError, ] as const; const RelayEnvironmentConnectErrors = [ RelayAuthInvalidError, RelayEnvironmentConnectNotAuthorizedError, RelayEnvironmentEndpointUnavailableError, RelayEnvironmentEndpointTimedOutError, RelayInternalError, ] as const; const RelayAgentActivityPublishErrors = [ RelayAuthInvalidError, RelayAgentActivityPublishProofExpiredError, RelayAgentActivityPublishProofInvalidError, RelayInternalError, ] as const; export interface RelayClientPrincipalShape { readonly userId: string; readonly token: string; readonly proofKeyThumbprint?: string; readonly dpopScopes?: ReadonlyArray<RelayDpopAccessTokenScope>; } export class RelayClientPrincipal extends Context.Service< RelayClientPrincipal, RelayClientPrincipalShape >()("@t3tools/contracts/relay/RelayClientPrincipal") {} export interface RelayEnvironmentPrincipalShape { readonly environmentId: string; readonly environmentPublicKey: string; } export class RelayEnvironmentPrincipal extends Context.Service< RelayEnvironmentPrincipal, RelayEnvironmentPrincipalShape >()("@t3tools/contracts/relay/RelayEnvironmentPrincipal") {} const RelayClientBearerAuthorization = HttpApiSecurity.http({ scheme: "bearer" }).pipe( HttpApiSecurity.annotate( OpenApi.Description, "Clerk session or OAuth bearer token for the signed-in T3 Cloud user.", ), ); export class RelayClientAuth extends HttpApiMiddleware.Service<