/** * Shared Fly.io transport: token secret resolution, Machines REST, GraphQL, * Prometheus / logs on api.fly.io, organization resolution, and dry-run * mutation previews. * * Auth is secret-backed (not OAuth). The default user secret is `flyApiToken`. * Extra Fly accounts use `account: "work"` → secret `flyApiToken-work`. * Placeholders resolve on approved hosts only. */ export const MACHINES_API_BASE_URL = 'https://api.machines.dev/v1' export const FLY_API_BASE_URL = 'https://api.fly.io' export const FLY_GRAPHQL_URL = 'https://api.fly.io/graphql' export const MACHINES_HOST = 'api.machines.dev' export const FLY_API_HOST = 'api.fly.io' export const DEFAULT_API_TOKEN_SECRET = 'flyApiToken' export const MACHINES_OPENAPI_SPEC = 'https://docs.machines.dev/spec/openapi3.json' export const API_TOKEN_SETUP_URL = 'https://kody.codes/account/secrets/new?name=flyApiToken&description=Fly.io%20API%20token%20for%20Machines%2C%20GraphQL%2C%20logs%2C%20and%20Prometheus&allowedHosts=api.machines.dev,api.fly.io&scope=user' const DEFAULT_API_TOKEN_PLACEHOLDER = '{{secret:flyApiToken|scope=user}}' const SECRET_NAME_PATTERN = /^flyApiToken(?:-[A-Za-z0-9][A-Za-z0-9_-]{0,47})?$/ const ACCOUNT_LABEL_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_-]{0,47}$/ export type FlyAuthOptions = { /** * Extra Fly account label. `work` reads secret `flyApiToken-work`. * Omit (or pass `default`) for `flyApiToken`. */ account?: string /** Override the API token secret name. Must be `flyApiToken` or `flyApiToken-