Skip to content

Commit 9f50d2b

Browse files
authored
fix(cli): Auth issues (#257)
- Ensure we call `_auth.init` only after initialization - Ensure auth APIs are linked in the resolved AST
1 parent 7455bf5 commit 9f50d2b

File tree

5 files changed

+35
-20
lines changed

5 files changed

+35
-20
lines changed

apps/cli/fixtures/fixtures_test.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import 'package:celest_cli/src/database/project/project_database.dart';
2020
import 'package:celest_cli/src/env/config_value_solver.dart';
2121
import 'package:celest_cli/src/init/project_migrator.dart';
2222
import 'package:celest_cli/src/project/celest_project.dart';
23-
import 'package:celest_cli/src/project/project_resolver.dart';
23+
import 'package:celest_cli/src/project/project_linker.dart';
2424
import 'package:celest_cli/src/pub/pub_action.dart';
2525
import 'package:celest_cli/src/sdk/dart_sdk.dart';
2626
import 'package:celest_cli/src/sdk/sdk_finder.dart';
@@ -245,7 +245,7 @@ class TestRunner {
245245
project: project!,
246246
environmentId: 'local',
247247
).solveAll();
248-
final projectResolver = ProjectResolver(
248+
final projectResolver = ProjectLinker(
249249
configValues: configValues,
250250
environmentId: 'local',
251251
);
@@ -295,7 +295,7 @@ class TestRunner {
295295
project: project!,
296296
environmentId: 'local',
297297
).solveAll();
298-
final projectResolver = ProjectResolver(
298+
final projectResolver = ProjectLinker(
299299
configValues: configValues,
300300
environmentId: 'local',
301301
);
@@ -331,7 +331,7 @@ class TestRunner {
331331
project: project!,
332332
environmentId: 'local',
333333
).solveAll();
334-
final projectResolver = ProjectResolver(
334+
final projectResolver = ProjectLinker(
335335
configValues: configValues,
336336
environmentId: 'local',
337337
);
@@ -409,7 +409,7 @@ class TestRunner {
409409
project: project!,
410410
environmentId: 'local',
411411
).solveAll();
412-
final projectResolver = ProjectResolver(
412+
final projectResolver = ProjectLinker(
413413
configValues: configValues,
414414
environmentId: 'local',
415415
);

apps/cli/lib/src/codegen/client/client_generator.dart

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -399,15 +399,12 @@ final class ClientGenerator {
399399
)
400400
..addExpression(
401401
refer('scheduleMicrotask', 'dart:async').call([
402-
if (hasExternalAuth)
403-
Method(
404-
(m) => m
405-
..body = refer('_auth').property('init').call([], {
406-
'externalAuth': refer('externalAuth'),
407-
}).code,
408-
).closure
409-
else
410-
refer('_auth').property('init'),
402+
Method(
403+
(m) => m
404+
..body = refer('_auth').property('init').call([], {
405+
if (hasExternalAuth) 'externalAuth': refer('externalAuth'),
406+
}).code,
407+
).closure
411408
]),
412409
);
413410
}

apps/cli/lib/src/frontend/celest_frontend.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import 'package:celest_cli/src/env/config_value_solver.dart';
1919
import 'package:celest_cli/src/exceptions.dart';
2020
import 'package:celest_cli/src/frontend/child_process.dart';
2121
import 'package:celest_cli/src/project/celest_project.dart';
22-
import 'package:celest_cli/src/project/project_resolver.dart';
22+
import 'package:celest_cli/src/project/project_linker.dart';
2323
import 'package:celest_cli/src/utils/json.dart';
2424
import 'package:logging/logging.dart';
2525
import 'package:mason_logger/mason_logger.dart' show Progress;
@@ -367,9 +367,10 @@ final class CelestFrontend {
367367

368368
// Wait for the next changeset or for the child process to exit, if
369369
// there is one.
370-
final exitCode = await Future.any([
370+
final exitCode = await Future.any<int?>([
371371
_nextChangeSet().then((_) => null),
372-
Future.value(childProcess?.exitCode),
372+
if (childProcess case final childProcess?)
373+
Future.value(childProcess.exitCode),
373374
]);
374375
if (exitCode != null) {
375376
return exitCode;
@@ -507,7 +508,7 @@ final class CelestFrontend {
507508
environmentId: environmentId,
508509
).solveAll();
509510
logger.fine('Resolving project...');
510-
final projectResolver = ProjectResolver(
511+
final projectResolver = ProjectLinker(
511512
configValues: configValues,
512513
environmentId: environmentId,
513514
);

apps/cli/lib/src/project/project_resolver.dart renamed to apps/cli/lib/src/project/project_linker.dart

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import 'package:cedar/cedar.dart';
33
import 'package:celest_ast/celest_ast.dart';
44
import 'package:celest_cli/src/utils/error.dart';
55
import 'package:celest_cli/src/utils/run.dart';
6+
import 'package:celest_cloud_auth/celest_cloud_auth.dart'
7+
show AuthenticationService;
68

79
extension on CloudFunction {
810
EntityUid get uid => EntityUid.of('Celest::Function', '$apiName/$name');
@@ -65,8 +67,8 @@ extension on ApiAuth {
6567
}
6668
}
6769

68-
final class ProjectResolver extends AstVisitorWithArg<Node?, AstNode> {
69-
ProjectResolver({
70+
final class ProjectLinker extends AstVisitorWithArg<Node?, AstNode> {
71+
ProjectLinker({
7072
required Map<String, String> configValues,
7173
required String environmentId,
7274
this.driftSchemas = const {},
@@ -218,6 +220,20 @@ final class ProjectResolver extends AstVisitorWithArg<Node?, AstNode> {
218220

219221
@override
220222
ResolvedAuth visitAuth(Auth auth, Project context) {
223+
assert(
224+
auth.providers.isNotEmpty || auth.externalProviders.isNotEmpty,
225+
'Must have at least one auth provider',
226+
);
227+
228+
// Ensure auth routes are exposed in the route map.
229+
//
230+
// External auth providers do not require custom routes exposed on the
231+
// Celest backend.
232+
if (auth.providers.isNotEmpty) {
233+
final authService = AuthenticationService.api;
234+
_resolvedProject.apis[authService.apiId] = authService;
235+
}
236+
221237
return ResolvedAuth.build((b) {
222238
for (final authProvider in auth.providers) {
223239
b.providers.add(visitAuthProvider(authProvider, auth));

apps/cli/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ dependencies:
2020
celest: ^1.0.0
2121
celest_ast: ^0.1.4
2222
celest_auth: ^1.0.0
23+
celest_cloud_auth: ^0.1.0
2324
celest_core: ^1.0.0
2425
chunked_stream: ^1.4.2
2526
cli_script: ^1.0.0

0 commit comments

Comments
 (0)