diff --git a/.github/workflows/celest_cloud_auth.yaml b/.github/workflows/celest_cloud_auth.yaml
new file mode 100644
index 00000000..f253680c
--- /dev/null
+++ b/.github/workflows/celest_cloud_auth.yaml
@@ -0,0 +1,51 @@
+name: celest_cloud_auth
+on:
+ pull_request:
+ paths:
+ - ".github/workflows/celest_cloud_auth.yaml"
+ - "services/celest_cloud_auth/**"
+
+# Prevent duplicate runs due to Graphite
+# https://graphite.dev/docs/troubleshooting#why-are-my-actions-running-twice
+concurrency:
+ group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}-${{ github.ref == 'refs/heads/main' && github.sha || ''}}
+ cancel-in-progress: true
+
+jobs:
+ analyze_and_format:
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # 4.1.7
+ - name: Setup Flutter
+ uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # 2.16.0
+ with:
+ cache: true
+ - name: Setup Melos
+ run: dart pub global activate melos
+ - name: Get Packages
+ run: melos bootstrap
+ - name: Analyze
+ working-directory: services/celest_cloud_auth
+ run: dart analyze
+ - name: Format
+ working-directory: services/celest_cloud_auth
+ run: dart format --set-exit-if-changed .
+ test:
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # 4.1.7
+ - name: Setup Flutter
+ uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 # 2.16.0
+ with:
+ cache: true
+ - name: Setup Melos
+ run: dart pub global activate melos
+ - name: Get Packages
+ run: melos bootstrap
+ - name: Test
+ working-directory: services/celest_cloud_auth
+ run: dart test
diff --git a/README.md b/README.md
index 6bb2374f..e00acc44 100644
--- a/README.md
+++ b/README.md
@@ -134,11 +134,17 @@ You have now set up your Celest project and integrated it into your Flutter app.
| Package | Description | Pub | Checks |
| -------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [celest](packages/celest/) | The main package for defining Celest backends. | | [![Celest](https://github.com/celest-dev/celest/actions/workflows/celest.yaml/badge.svg)](https://github.com/celest-dev/celest/actions/workflows/celest.yaml) |
-| [celest_ast](packages/celest_ast/) | A structured representation of Celest projects. | | [![Celest AST](https://github.com/celest-dev/celest/actions/workflows/celest_ast.yaml/badge.svg)](https://github.com/celest-dev/celest/actions/workflows/celest_ast.yaml) |
+| [celest_ast](packages/celest_ast/) | A structured representation of Celest projects. | | [![Celest AST](https://github.com/celest-dev/celest/actions/workflows/celest_ast.yaml/badge.svg)](https://github.com/celest-dev/celest/actions/workflows/celest_ast.yaml) |
| [celest_auth](packages/celest_auth/) | The authentication and authorization runtimes for Celest. | | [![Celest Auth](https://github.com/celest-dev/celest/actions/workflows/celest_auth.yaml/badge.svg)](https://github.com/celest-dev/celest/actions/workflows/celest_auth.yaml) |
| [celest_cloud](packages/celest_cloud/) | API contracts and Dart clients for the Celest Cloud platform. | | [![Celest Cloud](https://github.com/celest-dev/celest/actions/workflows/celest_cloud.yaml/badge.svg)](https://github.com/celest-dev/celest/actions/workflows/celest_cloud.yaml) |
| [celest_core](packages/celest_core/) | Core types and utilities shared between Celest packages. | | [![Celest Core](https://github.com/celest-dev/celest/actions/workflows/celest_core.yaml/badge.svg)](https://github.com/celest-dev/celest/actions/workflows/celest_core.yaml) |
+## Services
+
+| Service | Description | Pub | Checks |
+| ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [celest_cloud_auth](packages/celest_cloud_auth/) | A Dart-native authentication and authorization solution built on [Cedar](https://github.com/celest-dev/cedar-dart) and Celest Data. | | [![Celest Cloud Auth](https://github.com/celest-dev/celest/actions/workflows/celest_cloud_auth.yaml/badge.svg)](https://github.com/celest-dev/celest/actions/workflows/celest_cloud_auth.yaml) |
+
## License
This repo is licensed under the [BSD-2-Clause-Patent](https://spdx.org/licenses/BSD-2-Clause-Patent.html) license. See [LICENSE.md](LICENSE.md) for the full text.
diff --git a/assets/analyzer-plugin.gif b/assets/analyzer-plugin.gif
new file mode 100644
index 00000000..02d0b831
Binary files /dev/null and b/assets/analyzer-plugin.gif differ
diff --git a/examples/gemini/celest/client/pubspec.yaml b/examples/gemini/celest/client/pubspec.yaml
index 6548f180..49ac9894 100644
--- a/examples/gemini/celest/client/pubspec.yaml
+++ b/examples/gemini/celest/client/pubspec.yaml
@@ -6,10 +6,10 @@ environment:
sdk: ^3.4.0
dependencies:
- celest: ^1.0.0-0
+ celest: ^1.0.0
celest_backend:
path: ..
- celest_core: ^1.0.0-0
+ celest_core: ^1.0.0
http: ^1.0.0
meta: ^1.12.0
native_storage: ^0.2.2
diff --git a/examples/gemini/celest/config/.gitkeep b/examples/gemini/celest/config/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/examples/gemini/celest/functions b/examples/gemini/celest/functions
deleted file mode 120000
index 6e1f1720..00000000
--- a/examples/gemini/celest/functions
+++ /dev/null
@@ -1 +0,0 @@
-/Users/dillonnys/celest/cloud/celest/examples/gemini/celest/lib/src/functions
\ No newline at end of file
diff --git a/examples/gemini/celest/project.dart b/examples/gemini/celest/project.dart
deleted file mode 120000
index a0bad29d..00000000
--- a/examples/gemini/celest/project.dart
+++ /dev/null
@@ -1 +0,0 @@
-/Users/dillonnys/celest/cloud/celest/examples/gemini/celest/lib/src/project.dart
\ No newline at end of file
diff --git a/examples/gemini/celest/pubspec.yaml b/examples/gemini/celest/pubspec.yaml
index f5553c00..0a71d916 100644
--- a/examples/gemini/celest/pubspec.yaml
+++ b/examples/gemini/celest/pubspec.yaml
@@ -6,9 +6,9 @@ environment:
sdk: ^3.4.0
dependencies:
- celest: ^1.0.0-0
+ celest: ^1.0.0
celest_ast: ^0.1.0
- celest_core: ^1.0.0-0
+ celest_core: ^1.0.0
google_generative_ai: ^0.2.0
http: '>=0.13.0 <2.0.0'
meta: ^1.12.0
diff --git a/examples/openai/celest/client/pubspec.yaml b/examples/openai/celest/client/pubspec.yaml
index 76164d3f..f835719c 100644
--- a/examples/openai/celest/client/pubspec.yaml
+++ b/examples/openai/celest/client/pubspec.yaml
@@ -6,10 +6,10 @@ environment:
sdk: ^3.4.0
dependencies:
- celest: ^1.0.0-0
+ celest: ^1.0.0
celest_backend:
path: ..
- celest_core: ^1.0.0-0
+ celest_core: ^1.0.0
http: ^1.0.0
meta: ^1.12.0
native_storage: ^0.2.2
diff --git a/examples/openai/celest/config/.gitkeep b/examples/openai/celest/config/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/examples/openai/celest/functions b/examples/openai/celest/functions
deleted file mode 120000
index 4bee9983..00000000
--- a/examples/openai/celest/functions
+++ /dev/null
@@ -1 +0,0 @@
-/Users/dillonnys/celest/cloud/celest/examples/openai/celest/lib/src/functions
\ No newline at end of file
diff --git a/examples/openai/celest/project.dart b/examples/openai/celest/project.dart
deleted file mode 120000
index 85dce2c5..00000000
--- a/examples/openai/celest/project.dart
+++ /dev/null
@@ -1 +0,0 @@
-/Users/dillonnys/celest/cloud/celest/examples/openai/celest/lib/src/project.dart
\ No newline at end of file
diff --git a/examples/openai/celest/pubspec.yaml b/examples/openai/celest/pubspec.yaml
index cdf101d0..3c8dfba7 100644
--- a/examples/openai/celest/pubspec.yaml
+++ b/examples/openai/celest/pubspec.yaml
@@ -6,9 +6,9 @@ environment:
sdk: ^3.4.0
dependencies:
- celest: ^1.0.0-0
+ celest: ^1.0.0
celest_ast: ^0.1.0
- celest_core: ^1.0.0-0
+ celest_core: ^1.0.0
chat_gpt_sdk: ^2.2.8
http: '>=0.13.0 <2.0.0'
meta: ^1.12.0
diff --git a/examples/tasks/celest/client/lib/src/functions.dart b/examples/tasks/celest/client/lib/src/functions.dart
index b6bc1184..bd715c1b 100644
--- a/examples/tasks/celest/client/lib/src/functions.dart
+++ b/examples/tasks/celest/client/lib/src/functions.dart
@@ -16,7 +16,6 @@ import 'package:celest_core/celest_core.dart' as _$celest;
import 'package:celest_core/src/exception/cloud_exception.dart' as _$celest;
import 'package:celest_core/src/exception/serialization_exception.dart'
as _$celest;
-import 'package:drift/src/remote/communication.dart' as _$drift_communication;
import 'package:drift/src/runtime/cancellation_zone.dart'
as _$drift_cancellation_zone;
import 'package:drift/src/runtime/exceptions.dart' as _$drift_exceptions;
@@ -27,8 +26,6 @@ import 'package:google_cloud/src/bad_request_exception.dart'
import 'package:hrana/src/exception.dart' as _$hrana_exception;
import 'package:http/src/exception.dart' as _$http_exception;
import 'package:shelf/src/hijack_exception.dart' as _$shelf_hijack_exception;
-import 'package:sqlite3/src/exception.dart' as _$sqlite3_exception;
-import 'package:sqlite3/src/vfs.dart' as _$sqlite3_vfs;
import 'package:tasks_client/tasks_client.dart';
class CelestFunctions {
@@ -406,12 +403,6 @@ class CelestFunctionsTasks {
errorValue),
stackTrace,
);
- case 'sqlite3.SqliteException':
- Error.throwWithStackTrace(
- _$celest.Serializers.instance
- .deserialize<_$sqlite3_exception.SqliteException>(errorValue),
- stackTrace,
- );
case 'drift.CancellationException':
Error.throwWithStackTrace(
_$celest.Serializers.instance
@@ -419,19 +410,6 @@ class CelestFunctionsTasks {
errorValue),
stackTrace,
);
- case 'drift.ConnectionClosedException':
- Error.throwWithStackTrace(
- _$celest.Serializers.instance
- .deserialize<_$drift_communication.ConnectionClosedException>(
- errorValue),
- stackTrace,
- );
- case 'sqlite3.VfsException':
- Error.throwWithStackTrace(
- _$celest.Serializers.instance
- .deserialize<_$sqlite3_vfs.VfsException>(errorValue),
- stackTrace,
- );
case 'hrana.ConnectionClosed':
Error.throwWithStackTrace(
_$celest.Serializers.instance
diff --git a/examples/tasks/celest/client/lib/src/serializers.dart b/examples/tasks/celest/client/lib/src/serializers.dart
index 77939ae4..9b1557ee 100644
--- a/examples/tasks/celest/client/lib/src/serializers.dart
+++ b/examples/tasks/celest/client/lib/src/serializers.dart
@@ -13,7 +13,6 @@ import 'package:celest_core/src/exception/cloud_exception.dart' as _$celest;
import 'package:celest_core/src/exception/serialization_exception.dart'
as _$celest;
import 'package:celest_core/src/serialization/json_value.dart' as _$celest;
-import 'package:drift/src/remote/communication.dart' as _$drift_communication;
import 'package:drift/src/runtime/cancellation_zone.dart'
as _$drift_cancellation_zone;
import 'package:drift/src/runtime/exceptions.dart' as _$drift_exceptions;
@@ -24,8 +23,6 @@ import 'package:google_cloud/src/bad_request_exception.dart'
import 'package:hrana/src/exception.dart' as _$hrana_exception;
import 'package:http/src/exception.dart' as _$http_exception;
import 'package:shelf/src/hijack_exception.dart' as _$shelf_hijack_exception;
-import 'package:sqlite3/src/exception.dart' as _$sqlite3_exception;
-import 'package:sqlite3/src/vfs.dart' as _$sqlite3_vfs;
void initSerializers({_$celest.Serializers? serializers}) {
return runZoned(
@@ -899,14 +896,6 @@ void initSerializers({_$celest.Serializers? serializers}) {
),
const _$celest.TypeToken<_$celest.JsonValue?>('JsonValue'),
);
- _$celest.Serializers.instance.put(_$celest.Serializer.define<
- _$drift_communication.ConnectionClosedException,
- Map?>(
- serialize: ($value) => const {},
- deserialize: ($serialized) {
- return _$drift_communication.ConnectionClosedException();
- },
- ));
_$celest.Serializers.instance.put(_$celest.Serializer.define<
_$drift_cancellation_zone.CancellationException,
Map?>(
@@ -1031,41 +1020,6 @@ void initSerializers({_$celest.Serializers? serializers}) {
return _$shelf_hijack_exception.HijackException();
},
));
- _$celest.Serializers.instance.put(_$celest.Serializer.define<
- _$sqlite3_exception.SqliteException, Map>(
- serialize: ($value) => {
- r'message': $value.message,
- if ($value.explanation case final explanation?)
- r'explanation': explanation,
- r'extendedResultCode': $value.extendedResultCode,
- r'resultCode': $value.resultCode,
- if ($value.operation case final operation?) r'operation': operation,
- if ($value.causingStatement case final causingStatement?)
- r'causingStatement': causingStatement,
- if ($value.parametersToStatement case final parametersToStatement?)
- r'parametersToStatement': parametersToStatement,
- },
- deserialize: ($serialized) {
- return _$sqlite3_exception.SqliteException(
- ($serialized[r'extendedResultCode'] as num).toInt(),
- ($serialized[r'message'] as String),
- ($serialized[r'explanation'] as String?),
- ($serialized[r'causingStatement'] as String?),
- ($serialized[r'parametersToStatement'] as Iterable