Skip to content

Kody is live

Watch the launch video — what Kody is, and why it exists.

← Public packages

@kentcdodds/onepassword

Resolve 1Password Connect item fields for secret-aware fetch with website host allowlisting.

connect/deploy-fly.d.ts

86 lines · 2.2 KB · TypeScript
export type DeployFlyInput = {
	appName?: string
	organizationId?: string
	region?: string
	machineName?: string
	apiImage?: string
	syncImage?: string
	memoryMb?: number
	replaceExisting?: boolean
	settleMs?: number
}

export type DeployFlyResult = {
	ok: true
	appName: string
	url: string
	region: string
	heartbeatUrl: string
	vaultsUrl: string
	app: { created: boolean; app: { id?: string; name: string } }
	ips: {
		allocated: Array<{ type: string; address?: string }>
		existingCount: number
	}
	volume?: {
		created: boolean
		id: string
		name: string
		region: string
		mountPath: string
	}
	secrets: {
		id?: string
		version?: number
		reason?: string
		createdAt?: string
		keysSet: string[]
		sourceSecret?: string
	} | null
	machine: {
		created: {
			id?: string
			state?: string
			containers: Array<{ name?: string; image?: string }>
		}
		deleted: Array<unknown>
	}
	machines: Array<{
		id: string
		name?: string
		state?: string
		region?: string
		updated_at?: string
		containers?: Array<{ name?: string; image?: string }>
	}>
	bind: {
		provider: '1password'
		door_secret_name: 'ONEPASSWORD_CONNECT_TOKEN'
		config: { connectHost: string }
	}
	notes: string[]
	nextStepsIfBlocked: {
		opSessionPrefill: string
		flyTokenHostsPrefill: string
		requiredHosts: string[]
	}
}

/**
 * Deploy 1Password Connect Server to Fly.io using Kody secrets.
 *
 * Requires user secrets `flyApiToken` and `ONEPASSWORD_CONNECT_OP_SESSION`
 * (Base64 of 1password-credentials.json — not raw JSON). Mounts credentials via
 * Machines `config.files.raw_value`, sets container `OP_SESSION` to the file path,
 * attaches persistent volume `opdata` at `/opdata` (`XDG_DATA_HOME`). Does not return secret values.
 *
 * @param params.appName - Fly app name (defaults to kody-onepassword-connect).
 * @param params.region - Fly region (defaults to ams).
 * @returns Deployment status with appName, url, region, machine info, and bind args.
 *
 * @example
 * import deploy from 'kody:@kentcdodds/onepassword/connect/deploy-fly'
 * const result = await deploy({ settleMs: 12000 })
 * // => { ok: true, appName: 'kody-onepassword-connect', url: 'https://kody-onepassword-connect.fly.dev', ... }
 */
export default function deployFly(params?: DeployFlyInput): Promise<DeployFlyResult>