sparky 1.2.0 copy "sparky: ^1.2.0" to clipboard
sparky: ^1.2.0 copied to clipboard

Sparky é pacote que ajuda na construção de apis rest de forma simples com suporte a websocket a autenticação jwt.

example/sparky_example.dart

// @author viniciusddrft

import 'dart:io';
import 'dart:math';
import 'package:sparky/sparky.dart';

void main() {
  /// In this sample code, I will demonstrate the ways to create routes using custom classes
  /// that either inherit from Route or use the RouteHttp and RouteWebSocket classes directly.
  /// The example also illustrates a JWT login and the pipeline systems before and after
  /// the main route.

  final authJwt = AuthJwt(secretKey: 'senha');

  final login =
      RouteHttp.post('/login', middleware: (HttpRequest request) async {
    final data = await request.getBodyParams();

    final token = authJwt.generateToken(
        {'username': data['user'] ?? '', 'password': data['pass'] ?? ''});

    return Response.ok(body: '{"token":"$token"}');
  });

  final todo =
      RouteHttp.get('/todo/list', middleware: (HttpRequest request) async {
    return Response.ok(body: '[0,1,2,3,4,5,6,7,8,9]');
  });

  final random =
      RouteHttp.get('/random', middleware: (HttpRequest request) async {
    final value = Random().nextInt(100);
    return Response.ok(body: '{value:$value}');
  });

  final web = RouteWebSocket(
    '/websocket',
    middlewareWebSocket: (WebSocket socket) async {
      socket.add('Hello Word');
      socket.listen(
        (event) {
          print(event);
        },
        onDone: () {
          socket.close();
        },
      );
    },
  );

  Sparky.server(
      routes: [
        login,
        todo,
        web,
        random,
        RouteTest(),
        RouteSocket(),
      ],
      pipelineBefore: Pipeline()
        ..add(((request) async {
          login.onUpdate();

          if (request.uri.path == login.name) return null;

          final data = await request.getBodyParams();

          if (data['auth'] != null && authJwt.verifyToken(data['auth']!)) {
            return null;
          }

          return Response.forbidden(body: 'envie o header');
        }))
        ..add((request) async {
          if (request.uri.path == random.name) {
            random.onUpdate();
          }
          return null;
        }),
      pipelineAfter: Pipeline()
        ..add((request) async {
          print('pipeline after 1 done');
          return null;
        })
        ..add((request) async {
          print('pipeline after 2 done');
          return null;
        }));
}

///  creating routes in other ways with classes

final class RouteTest extends Route {
  RouteTest()
      : super('/test', middleware: (request) async {
          return Response.ok(body: 'test');
        }, acceptedMethods: [
          AcceptedMethods.get,
          AcceptedMethods.post,
        ]);
}

final class RouteSocket extends Route {
  RouteSocket()
      : super('/socket', middlewareWebSocket: (WebSocket webSocket) async {
          webSocket.listen((event) {
            print(event);
          }, onDone: () {
            webSocket.close();
          });
        });
}
13
likes
145
points
23
downloads

Publisher

unverified uploader

Weekly Downloads

Sparky é pacote que ajuda na construção de apis rest de forma simples com suporte a websocket a autenticação jwt.

Repository (GitHub)
View/report issues

Topics

#sparky #server #api #backend

Documentation

API reference

License

unknown (license)

Dependencies

crypto

More

Packages that depend on sparky