From 9ba0092b4f52a29c23ea1d6d9f917974ebeefac9 Mon Sep 17 00:00:00 2001 From: Thomas Hii Date: Sun, 2 Jun 2024 10:37:49 +0800 Subject: [PATCH 1/2] Upgraded mongo --- packages/mongo/CHANGELOG.md | 6 +++ packages/mongo/lib/mongo_service.dart | 8 ++-- packages/mongo/pubspec.yaml | 4 +- packages/mongo/test/generic_test.dart | 60 +++++++++++++-------------- 4 files changed, 41 insertions(+), 37 deletions(-) diff --git a/packages/mongo/CHANGELOG.md b/packages/mongo/CHANGELOG.md index 334449eed..1d24dc2b8 100644 --- a/packages/mongo/CHANGELOG.md +++ b/packages/mongo/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 8.2.0 + +* Require Dart >= 3.3 +* Upgraded `mongo_dart` to 0.10.2 +* Fixed deprecated methods + ## 8.1.1 * Updated repository link diff --git a/packages/mongo/lib/mongo_service.dart b/packages/mongo/lib/mongo_service.dart index 846e2cc27..dc3cd7840 100644 --- a/packages/mongo/lib/mongo_service.dart +++ b/packages/mongo/lib/mongo_service.dart @@ -73,7 +73,7 @@ class MongoService extends Service> { for (var key in doc.keys) { var value = doc[key]; if (value is ObjectId) { - result[key] = value.toHexString(); + result[key] = value.oid; } else if (value is! RequestContext && value is! ResponseContext) { result[key] = value; } @@ -133,7 +133,7 @@ class MongoService extends Service> { if (found == null) { throw AngelHttpException.notFound( - message: 'No record found for ID ${localId.toHexString()}'); + message: 'No record found for ID ${localId.oid}'); } return _jsonify(found, params); @@ -171,7 +171,7 @@ class MongoService extends Service> { update: result, returnNew: true) as FutureOr>); result = _jsonify(modified, params); - result['id'] = _makeId(id).toHexString(); + result['id'] = _makeId(id).oid; return result; } catch (e, st) { //printDebug(e, st, 'MODIFY'); @@ -199,7 +199,7 @@ class MongoService extends Service> { returnNew: true, upsert: true) as FutureOr>); result = _jsonify(updated, params); - result['id'] = _makeId(id).toHexString(); + result['id'] = _makeId(id).oid; return result; } catch (e, st) { //printDebug(e, st, 'UPDATE'); diff --git a/packages/mongo/pubspec.yaml b/packages/mongo/pubspec.yaml index 8d9e7b21a..1910ff452 100644 --- a/packages/mongo/pubspec.yaml +++ b/packages/mongo/pubspec.yaml @@ -1,5 +1,5 @@ name: angel3_mongo -version: 8.1.1 +version: 8.2.0 description: MongoDB-enabled services for the Angel3 framework. Well-tested. homepage: https://angel3-framework.web.app/ repository: https://github.com/dart-backend/angel/tree/master/packages/mongo @@ -9,7 +9,7 @@ dependencies: angel3_framework: ^8.0.0 belatuk_json_serializer: ^7.1.0 belatuk_merge_map: ^5.1.0 - mongo_dart: ^0.9.0 + mongo_dart: ^0.10.2 dev_dependencies: http: ^1.0.0 test: ^1.24.0 diff --git a/packages/mongo/test/generic_test.dart b/packages/mongo/test/generic_test.dart index 7b0005b5a..be8c11fbd 100644 --- a/packages/mongo/test/generic_test.dart +++ b/packages/mongo/test/generic_test.dart @@ -24,11 +24,12 @@ void main() { group('Generic Tests', () { Angel app; late AngelHttp transport; - http.Client? client; + late http.Client client; var db = Db('mongodb://localhost:27017/angel_mongo'); late DbCollection testData; String? url; - HookedService, MongoService>? greetingService; + late HookedService, MongoService> + greetingService; setUp(() async { app = Angel(); @@ -41,7 +42,7 @@ void main() { var service = MongoService(testData); greetingService = HookedService(service); - wireHooked(greetingService!); + wireHooked(greetingService); app.use('/api', greetingService as Service); @@ -54,31 +55,28 @@ void main() { await testData.remove({}); await db.close(); await transport.close(); - client = null; - url = null; - greetingService = null; }); test('query fields mapped to filters', () async { - await greetingService!.create({'foo': 'bar'}); + await greetingService.create({'foo': 'bar'}); expect( - await greetingService!.index({ + await greetingService.index({ 'query': {'foo': 'not bar'} }), isEmpty, ); expect( - await greetingService!.index(), + await greetingService.index(), isNotEmpty, ); }); test('insert items', () async { - var response = await client!.post(Uri.parse('$url/api'), + var response = await client.post(Uri.parse('$url/api'), body: god.serialize(testGreeting), headers: headers); expect(response.statusCode, isIn([200, 201])); - response = await client!.get(Uri.parse('$url/api')); + response = await client.get(Uri.parse('$url/api')); expect(response.statusCode, isIn([200, 201])); var users = god.deserialize(response.body, outputType: [].runtimeType) as List; @@ -86,12 +84,12 @@ void main() { }); test('read item', () async { - var response = await client!.post(Uri.parse('$url/api'), + var response = await client.post(Uri.parse('$url/api'), body: god.serialize(testGreeting), headers: headers); expect(response.statusCode, isIn([200, 201])); var created = god.deserialize(response.body) as Map; - response = await client!.get(Uri.parse("$url/api/${created['id']}")); + response = await client.get(Uri.parse("$url/api/${created['id']}")); expect(response.statusCode, isIn([200, 201])); var read = god.deserialize(response.body) as Map; expect(read['id'], equals(created['id'])); @@ -100,37 +98,37 @@ void main() { }); test('findOne', () async { - var response = await client!.post(Uri.parse('$url/api'), + var response = await client.post(Uri.parse('$url/api'), body: god.serialize(testGreeting), headers: headers); expect(response.statusCode, isIn([200, 201])); var created = god.deserialize(response.body) as Map; var id = ObjectId.fromHexString(created['id'] as String); - var read = await greetingService!.findOne({'query': where.id(id)}); + var read = await greetingService.findOne({'query': where.id(id)}); expect(read['id'], equals(created['id'])); expect(read['to'], equals('world')); //expect(read['createdAt'], isNot(null)); }); test('readMany', () async { - var response = await client!.post(Uri.parse('$url/api'), + var response = await client.post(Uri.parse('$url/api'), body: god.serialize(testGreeting), headers: headers); expect(response.statusCode, isIn([200, 201])); var created = god.deserialize(response.body) as Map; var id = ObjectId.fromHexString(created['id'] as String); - var read = await greetingService!.readMany([id.toHexString()]); + var read = await greetingService.readMany([id.oid]); expect(read, [created]); //expect(read['createdAt'], isNot(null)); }); test('modify item', () async { - var response = await client!.post(Uri.parse('$url/api'), + var response = await client.post(Uri.parse('$url/api'), body: god.serialize(testGreeting), headers: headers); expect(response.statusCode, isIn([200, 201])); var created = god.deserialize(response.body) as Map; - response = await client!.patch(Uri.parse("$url/api/${created['id']}"), + response = await client.patch(Uri.parse("$url/api/${created['id']}"), body: god.serialize({'to': 'Mom'}), headers: headers); var modified = god.deserialize(response.body) as Map; expect(response.statusCode, isIn([200, 201])); @@ -140,12 +138,12 @@ void main() { }); test('update item', () async { - var response = await client!.post(Uri.parse('$url/api'), + var response = await client.post(Uri.parse('$url/api'), body: god.serialize(testGreeting), headers: headers); expect(response.statusCode, isIn([200, 201])); var created = god.deserialize(response.body) as Map; - response = await client!.post(Uri.parse("$url/api/${created['id']}"), + response = await client.post(Uri.parse("$url/api/${created['id']}"), body: god.serialize({'to': 'Updated'}), headers: headers); var modified = god.deserialize(response.body) as Map; expect(response.statusCode, isIn([200, 201])); @@ -155,28 +153,28 @@ void main() { }); test('remove item', () async { - var response = await client!.post(Uri.parse('$url/api'), + var response = await client.post(Uri.parse('$url/api'), body: god.serialize(testGreeting), headers: headers); var created = god.deserialize(response.body) as Map; - var lastCount = (await greetingService!.index()).length; + var lastCount = (await greetingService.index()).length; - await client!.delete(Uri.parse("$url/api/${created['id']}")); - expect((await greetingService!.index()).length, equals(lastCount - 1)); + await client.delete(Uri.parse("$url/api/${created['id']}")); + expect((await greetingService.index()).length, equals(lastCount - 1)); }); test('cannot remove all unless explicitly set', () async { - var response = await client!.delete(Uri.parse('$url/api/null')); + var response = await client.delete(Uri.parse('$url/api/null')); expect(response.statusCode, 403); }); test('\$sort and query parameters', () async { // Search by where.eq - Map world = await greetingService!.create({'to': 'world'}); - await greetingService!.create({'to': 'Mom'}); - await greetingService!.create({'to': 'Updated'}); + Map world = await greetingService.create({'to': 'world'}); + await greetingService.create({'to': 'Mom'}); + await greetingService.create({'to': 'Updated'}); - var response = await client!.get(Uri.parse('$url/api?to=world')); + var response = await client.get(Uri.parse('$url/api?to=world')); print(response.body); var queried = god.deserialize(response.body, outputType: [].runtimeType) as List; @@ -193,7 +191,7 @@ void main() { expect(queried[1]["id"], equals(Mom["id"])); expect(queried[2]["id"], equals(world["id"]));*/ - queried = await greetingService!.index({ + queried = await greetingService.index({ '\$query': { '_id': where.id(ObjectId.fromHexString(world['id'] as String)) } From e802de14f1e88229055ae15f577bed935c3383a3 Mon Sep 17 00:00:00 2001 From: Thomas Hii Date: Mon, 3 Jun 2024 11:28:23 +0800 Subject: [PATCH 2/2] Updated websocket --- packages/auth/CHANGELOG.md | 5 +++++ packages/auth/pubspec.yaml | 2 +- packages/auth_oauth2/CHANGELOG.md | 5 +++++ packages/auth_oauth2/pubspec.yaml | 2 +- packages/auth_twitter/CHANGELOG.md | 6 +++--- packages/auth_twitter/README.md | 1 + packages/auth_twitter/pubspec.yaml | 4 ++-- packages/cache/CHANGELOG.md | 5 +++++ packages/cache/pubspec.yaml | 4 ++-- packages/framework/CHANGELOG.md | 5 +++++ packages/framework/pubspec.yaml | 2 +- packages/mongo/CHANGELOG.md | 3 ++- packages/websocket/CHANGELOG.md | 6 ++++++ packages/websocket/lib/base_websocket_client.dart | 2 +- packages/websocket/lib/server.dart | 4 ++-- packages/websocket/pubspec.yaml | 6 +++--- packages/websocket/test/controller/io_test.dart | 13 ++++++------- 17 files changed, 51 insertions(+), 24 deletions(-) diff --git a/packages/auth/CHANGELOG.md b/packages/auth/CHANGELOG.md index 62682df51..dd01834e6 100644 --- a/packages/auth/CHANGELOG.md +++ b/packages/auth/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 8.2.0 + +* Require Dart >= 3.3 +* Updated `lints` to 4.0.0 + ## 8.1.1 * Updated repository link diff --git a/packages/auth/pubspec.yaml b/packages/auth/pubspec.yaml index 8ef053eac..33532fbf4 100644 --- a/packages/auth/pubspec.yaml +++ b/packages/auth/pubspec.yaml @@ -1,6 +1,6 @@ name: angel3_auth description: A complete authentication plugin for Angel3. Includes support for stateless JWT tokens, Basic Auth, and more. -version: 8.1.1 +version: 8.2.0 homepage: https://angel3-framework.web.app/ repository: https://github.com/dart-backend/angel/tree/master/packages/auth environment: diff --git a/packages/auth_oauth2/CHANGELOG.md b/packages/auth_oauth2/CHANGELOG.md index 829426187..d0bef9d80 100644 --- a/packages/auth_oauth2/CHANGELOG.md +++ b/packages/auth_oauth2/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 8.2.0 + +* Require Dart >= 3.3 +* Updated `lints` to 4.0.0 + ## 8.1.1 * Updated repository link diff --git a/packages/auth_oauth2/pubspec.yaml b/packages/auth_oauth2/pubspec.yaml index a03d3745a..1ff11e2a6 100644 --- a/packages/auth_oauth2/pubspec.yaml +++ b/packages/auth_oauth2/pubspec.yaml @@ -1,5 +1,5 @@ name: angel3_auth_oauth2 -version: 8.1.1 +version: 8.2.0 description: Angel3 library for authenticating users with external identity providers via OAuth2. homepage: https://angel3-framework.web.app/ repository: https://github.com/dart-backend/angel/tree/master/packages/auth_oauth2 diff --git a/packages/auth_twitter/CHANGELOG.md b/packages/auth_twitter/CHANGELOG.md index 310f8e46c..88a509783 100644 --- a/packages/auth_twitter/CHANGELOG.md +++ b/packages/auth_twitter/CHANGELOG.md @@ -2,11 +2,11 @@ ## 8.0.0 -* Require Dart >= 3.0 +* Require Dart >= 3.3 * Updated `oauth1` to `belatuk_oauth1` -* Updated `lints` to 3.0.0 -* Fixed linter warnings +* Updated `lints` to 4.0.0 * Updated repository link +* Fixed linter warnings ## 7.0.0 diff --git a/packages/auth_twitter/README.md b/packages/auth_twitter/README.md index 65f9844f5..23ec5d8d1 100644 --- a/packages/auth_twitter/README.md +++ b/packages/auth_twitter/README.md @@ -5,6 +5,7 @@ [![Gitter](https://img.shields.io/gitter/room/angel_dart/discussion)](https://gitter.im/angel_dart/discussion) [![License](https://img.shields.io/github/license/dart-backend/angel)](https://github.com/dart-backend/angel/tree/master/packages/auth_twitter/LICENSE) +**Not ready for release** Angel3 authentication strategy using Twitter OAuth 1.0a. See the [example](example/example.dart); diff --git a/packages/auth_twitter/pubspec.yaml b/packages/auth_twitter/pubspec.yaml index d2c7096ec..ba8c10b49 100644 --- a/packages/auth_twitter/pubspec.yaml +++ b/packages/auth_twitter/pubspec.yaml @@ -1,11 +1,11 @@ name: "angel3_auth_twitter" description: Angel3 authentication strategy for Twitter login. Auto-signs requests. -version: 8.0.1 +version: 8.0.0 homepage: https://angel3-framework.web.app/ repository: https://github.com/dart-backend/angel/tree/master/packages/auth_twitter publish_to: none environment: - sdk: ">=3.0.0 <4.0.0" + sdk: ">=3.3.0 <4.0.0" dependencies: angel3_auth: ^8.0.0 angel3_framework: ^8.0.0 diff --git a/packages/cache/CHANGELOG.md b/packages/cache/CHANGELOG.md index 1cab92848..30db211a2 100644 --- a/packages/cache/CHANGELOG.md +++ b/packages/cache/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 8.2.0 + +* Require Dart >= 3.3 +* Updated `lints` to 4.0.0 + ## 8.1.1 * Updated repository link diff --git a/packages/cache/pubspec.yaml b/packages/cache/pubspec.yaml index f778c84b4..8b6157398 100644 --- a/packages/cache/pubspec.yaml +++ b/packages/cache/pubspec.yaml @@ -1,10 +1,10 @@ name: angel3_cache -version: 8.1.1 +version: 8.2.0 description: A service that provides HTTP caching to the response data for Angel3 homepage: https://angel3-framework.web.app/ repository: https://github.com/dart-backend/angel/tree/master/packages/cache environment: - sdk: '>=3.3.0 <4.0.0' + sdk: '>=3.4.0 <4.0.0' dependencies: angel3_framework: ^8.0.0 collection: ^1.17.0 diff --git a/packages/framework/CHANGELOG.md b/packages/framework/CHANGELOG.md index eab061af9..614dde5bc 100644 --- a/packages/framework/CHANGELOG.md +++ b/packages/framework/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 8.4.0 + +* Require Dart >= 3.3 +* Updated `lints` to 4.0.0 + ## 8.3.2 * Updated README diff --git a/packages/framework/pubspec.yaml b/packages/framework/pubspec.yaml index 1934ef3f6..5b436e4da 100644 --- a/packages/framework/pubspec.yaml +++ b/packages/framework/pubspec.yaml @@ -1,5 +1,5 @@ name: angel3_framework -version: 8.3.2 +version: 8.4.0 description: A high-powered HTTP server extensible framework with dependency injection, routing and much more. homepage: https://angel3-framework.web.app/ repository: https://github.com/dart-backend/angel/tree/master/packages/framework diff --git a/packages/mongo/CHANGELOG.md b/packages/mongo/CHANGELOG.md index 1d24dc2b8..a544d8f13 100644 --- a/packages/mongo/CHANGELOG.md +++ b/packages/mongo/CHANGELOG.md @@ -3,7 +3,8 @@ ## 8.2.0 * Require Dart >= 3.3 -* Upgraded `mongo_dart` to 0.10.2 +* Updated `mongo_dart` to 0.10.2 +* Updated `lints` to 3.0.0 * Fixed deprecated methods ## 8.1.1 diff --git a/packages/websocket/CHANGELOG.md b/packages/websocket/CHANGELOG.md index 2aa6b7bd1..a60c661a2 100644 --- a/packages/websocket/CHANGELOG.md +++ b/packages/websocket/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 8.2.0 + +* Require Dart >= 3.3 +* Updated `lints` to 4.0.0 +* Updated `web_socket_channel` to 3.0.0 + ## 8.1.1 * Updated repository link diff --git a/packages/websocket/lib/base_websocket_client.dart b/packages/websocket/lib/base_websocket_client.dart index f0edd7f43..9a54c5ffd 100644 --- a/packages/websocket/lib/base_websocket_client.dart +++ b/packages/websocket/lib/base_websocket_client.dart @@ -93,7 +93,7 @@ abstract class BaseWebSocketClient extends BaseAngelClient { Future close() async { on._close(); scheduleMicrotask(() async { - await _socket!.sink.close(status.goingAway); + await _socket!.sink.close(status.normalClosure); await _onData.close(); await _onAllEvents.close(); await _onAuthenticated.close(); diff --git a/packages/websocket/lib/server.dart b/packages/websocket/lib/server.dart index b2d16c162..b66c7a525 100644 --- a/packages/websocket/lib/server.dart +++ b/packages/websocket/lib/server.dart @@ -508,8 +508,8 @@ class AngelWebSocket { if (protocol != null) sink.add('Sec-WebSocket-Protocol: $protocol\r\n'); sink.add('\r\n'); - var ws = WebSocketChannel(ctrl.foreign); - var socket = WebSocketContext(ws, req, res); + //var ws = IOWebSocketChannel.connect(ctrl.foreign); + var socket = WebSocketContext(ctrl.foreign, req, res); scheduleMicrotask(() => handleClient(socket)); return false; } diff --git a/packages/websocket/pubspec.yaml b/packages/websocket/pubspec.yaml index 339135947..50d0c2c15 100644 --- a/packages/websocket/pubspec.yaml +++ b/packages/websocket/pubspec.yaml @@ -1,5 +1,5 @@ name: angel3_websocket -version: 8.1.1 +version: 8.2.0 description: This library provides WebSockets support for Angel3 framework. homepage: https://angel3-framework.web.app/ repository: https://github.com/dart-backend/angel/tree/master/packages/websocket @@ -14,14 +14,14 @@ dependencies: http: ^1.0.0 meta: ^1.8.0 stream_channel: ^2.1.0 - web_socket_channel: '>=2.1.0 <2.4.1' + web_socket_channel: ^3.0.0 collection: ^1.17.0 logging: ^1.1.0 dev_dependencies: angel3_container: ^8.0.0 angel3_model: ^8.0.0 quiver: ^3.2.0 - test: ^1.24.0 + test: ^1.25.0 lints: ^4.0.0 file: ^7.0.0 # dependency_overrides: diff --git a/packages/websocket/test/controller/io_test.dart b/packages/websocket/test/controller/io_test.dart index ea946f18b..139676859 100644 --- a/packages/websocket/test/controller/io_test.dart +++ b/packages/websocket/test/controller/io_test.dart @@ -11,7 +11,7 @@ import 'common.dart'; void main() { srv.Angel app; late srv.AngelHttp http; - ws.WebSockets? client; + late ws.WebSockets client; srv.AngelWebSocket websockets; HttpServer? server; String? url; @@ -34,12 +34,12 @@ void main() { url = 'ws://${server!.address.address}:${server!.port}/ws'; client = ws.WebSockets(url); - await client!.connect(timeout: Duration(seconds: 3)); + await client.connect(timeout: Duration(seconds: 3)); print('Connected'); client - ?..onData.listen((data) { + ..onData.listen((data) { print('Received by client: $data'); }) ..onError.listen((error) { @@ -51,18 +51,17 @@ void main() { }); tearDown(() async { - await client!.close(); + await client.close(); await http.close(); //app = null; - client = null; server = null; url = null; }); group('controller.io', () { test('search', () async { - client!.sendAction(ws.WebSocketAction(eventName: 'search')); - var search = await client!.on['searched'].first; + client.sendAction(ws.WebSocketAction(eventName: 'search')); + var search = await client.on['searched'].first; print('Searched: ${search.data}'); expect(Game.fromJson(search.data as Map), equals(johnVsBob)); });