(options: {
stateDir: string;
flags: CliFlags;
env?: EnvMap;
io?: AuthIo;
})
| 143 | } |
| 144 | |
| 145 | export async function resolveCloudAccessForConnect(options: { |
| 146 | stateDir: string; |
| 147 | flags: CliFlags; |
| 148 | env?: EnvMap; |
| 149 | io?: AuthIo; |
| 150 | }): Promise<{ |
| 151 | accessToken: string; |
| 152 | cloudBaseUrl: string; |
| 153 | }> { |
| 154 | const env = options.env ?? options.io?.env ?? process.env; |
| 155 | if (hasToken(options.flags.daemonAuthToken)) { |
| 156 | return { |
| 157 | accessToken: options.flags.daemonAuthToken, |
| 158 | cloudBaseUrl: resolveCloudBaseUrl(env), |
| 159 | }; |
| 160 | } |
| 161 | if (hasToken(env.AGENT_DEVICE_DAEMON_AUTH_TOKEN)) { |
| 162 | return { |
| 163 | accessToken: env.AGENT_DEVICE_DAEMON_AUTH_TOKEN, |
| 164 | cloudBaseUrl: resolveCloudBaseUrl(env), |
| 165 | }; |
| 166 | } |
| 167 | const sessionAccess = await resolveCliSessionAccess({ |
| 168 | stateDir: options.stateDir, |
| 169 | flags: options.flags, |
| 170 | env, |
| 171 | io: options.io, |
| 172 | }); |
| 173 | if (sessionAccess) { |
| 174 | return { |
| 175 | accessToken: sessionAccess.accessToken, |
| 176 | cloudBaseUrl: sessionAccess.cloudBaseUrl, |
| 177 | }; |
| 178 | } |
| 179 | if (options.flags.noLogin) { |
| 180 | throw new AppError('UNAUTHORIZED', 'Cloud connection profile authentication is required.', { |
| 181 | hint: 'Run agent-device auth login, unset --no-login, or set AGENT_DEVICE_DAEMON_AUTH_TOKEN.', |
| 182 | }); |
| 183 | } |
| 184 | const login = await loginWithDeviceAuth({ |
| 185 | stateDir: options.stateDir, |
| 186 | flags: options.flags, |
| 187 | env, |
| 188 | io: options.io, |
| 189 | commandLabel: 'agent-device connect', |
| 190 | }); |
| 191 | return { |
| 192 | accessToken: login.accessToken, |
| 193 | cloudBaseUrl: login.session.cloudBaseUrl, |
| 194 | }; |
| 195 | } |
| 196 | |
| 197 | export async function loginWithDeviceAuth(options: { |
| 198 | stateDir: string; |
no test coverage detected