Giter VIP home page Giter VIP logo

ezy's Introduction



Release Downloads Codacy Badge

Discord

Fully-featured desktop gRPC/gRPC-Web client.


🚧 This project is in beta phase and can get breaking changes at any time until it goes to v1.

Features

βœ… Tabs
βœ… Shortcuts
βœ… Environments
βœ… Persisted collections

gRPC gRPC-Web
Unary Calls βœ… βœ…
Server Streaming βœ… βœ…
Client Streaming βœ… ❌ read
Bi-directional Streaming βœ… ❌ read
Stream cancelation βœ… βœ…
Metadata βœ… βœ… Browser Headers
TLS (Server-side/Mutual) with CA/Self-Signed certificates βœ… βœ…

Getting started

Install the latest version for your OS from release page.

Today you can update only by manually downloading new app version and reinstalling it. I'm working on automatic updates.

Shortcuts

Use ⌘+K (macOS) or Ctrl+K(Windows/Linux). Just try it.

Working with 64-bit integers

If you want to send 64-bit integers (int64, uint64, sint64, fixed64, sfixed64) just wrap values in quotes.

{
  "int64": "9223372036854775807",
  "uint64": "18446744073709551615",
  "sint64": "-9223372036854775807",
  "fixed64": "18446744073709551615",
  "sfixed64": "-9223372036854775807"
}

Build from source

  $ npm ci
  $ npm run make

Roadmap

Actual roadmap available here.

Sponsorship

If you are interested in sponsorship of this project - shoot me an email. I have great ideas on how we can improve gRPC (and not only!) development experience. I'll be glad to talk about it.

License

Mozilla Public License Version 2.0

ezy's People

Contributors

notmedia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

ezy's Issues

Allow importing multiple proto files in one collection

Is your feature request related to a problem? Please describe.

My project has multiple .proto files in microservices, and I want to test them in one collection, instead of creating several collections with only one .proto file in it.

Describe the solution you'd like

It would be great if ezy supports having more than one proto files in one collection (a little similar to BloomRPC). I think there can be more input fields in the "Create Collection" page, and I can specify all of my proto files there.

Describe alternatives you've considered

Besides allowing multiple proto input, I think it would also be nice if I can specify a directory containing all the needed proto files, and ezy automatically finds and imports the files under that directory.

Btw, thanks for creating such an awesome project.

[BUG] Text cursor is moved to the end in address textbox

Describe the bug
In address textbox, text cursor is moved to the end when I change the letters in the middle.

To Reproduce

  1. Open a proto
  2. Type address
  3. Change address letters in the middle

Expected behavior
text cursor is not moved

Screenshots
bug

Environment

  • OS: macOS ventura 13.2
  • ezy Version [1.0.0-beta.16]

Streams support

UI

  • - Stream view
    • Client
    • Server
    • Bidirectional

Stream types:

  • - Client steaming
  • - Server streaming
  • - Bidirectional streaming

[BUG] Extremely lag when typing a request

Describe the bug
When I type in the request input box, it lags a few seconds before the content actually goes into the request, and the app consumes a lot of CPU. You can see in the GIF below.

To Reproduce
Steps to reproduce the behavior:

  1. Open a proto
  2. Type something

(If any additional information needed, please point out)

Expected behavior
Input content should appear on the screen immediately

Screenshots
image
bandicam 2022-12-12 20-25-40-835

Envitonment

  • OS: Windows 11 22H2
  • ezy Version: 1.0.0-beta.13.2

Authorization

Is your feature request related to a problem? Please describe.
When I work with service that requires authorization, I need to add metadata (authorization token) in each request.

Describe the solution you'd like
Save metadata in environment settings or (better) to put authorization option in environment settings

Shortcuts v2

Features

  • Select environment from shortcuts search
  • Invoke request ⌘+Enter/Ctrl+Enter

Bug Fixes

  • Toggle shortcuts when input/code-editor focused => fork kbar or write own
  • Prevent application close on ⌘+W/Ctrl+W

UI/UX feedback

Screenshot 2022-11-28 at 14 04 07

Screenshot 2022-11-28 at 14 00 08

Screenshot 2022-11-28 at 14 10 43

Screenshot 2022-11-28 at 14 05 52

Screenshot 2022-11-28 at 14 16 53

Screenshot 2022-11-28 at 14 18 40

Happy to answer questions. Will add more stuff if I have some.
Бпасибо!

Storage refactoring

  • Splash screen on load
  • Migrations applied before main window show
  • Show errors if something goes wrong on app launch
  • Migrate to @getezy/grpc-client
  • Rebuild Collections
  • Move entities to new database
    • Collections
    • Environments
    • Settings
    • Tabs
    • TLS presets
  • Setup Vite bundler for MikroORM (forge had problems with it, trying to move on own build/packager system and migrate to Vite + SWC)
    • Setup Vite
    • Setup new tsconfigs
    • Setup new eslint config
    • Delete unused packages
    • Setup assets for build (icons, entitlement.plist)
    • Setup electron-build for new bundle
    • Setup publish releases
    • Make understandable release names
    • Upload build artifacts for PRs
    • Update docs for Build and Development

[BUG] Properties with default values are not shown in Response pane.

Describe the bug
Due to the deprecation of BloomRPC, we are searching for an alternative solution. When comparing the Response shown in BloomRPC vs the response shown in ezy we discovered that properties that have default values (for their respective data type) are not shown in ezy.

To Reproduce
Steps to reproduce the behavior:

  1. Invoke a gRPC call where the response contains properties with default values.

Expected behavior
Default values should be shown in the ezy Response pane.

Screenshots
image

The BloomRPC response is shown at the top, ezy response below. Properties with default values are highlighted in yellow.

Environment

  • OS: Windows 10 Enterprise 21H2
  • ezy Version [1.0.0-beta.15]

Additional context
N/A

Informative tabs

Created after #28. Implement more informative tabs to visually identify from what collection this tab is.

TLS support

  • Server-side TLS
  • Mutual TLS

UI

  • Setup TLS for request tab
  • TLS presets

Response timings

  • Unary call
  • Client streaming
  • Server streaming
  • Bidirectional streaming

[BUG] Dark theme not applied to toasts

Describe the bug
Dark theme not applied to toasts

To Reproduce
Steps to reproduce the behavior:

  1. Trigger a toast

Screenshots
image

Environment:

  • OS: Windows 11
  • Version: 22H2
  • Ezy: 1.0.0-beta.13.2

Additional information
The "Bug" issue template doesn't require ezy's version, which I think should be added to help debugging.

Message fields only accepted in camelCase

Hello,

according to Protobuf3 specification (JSON mapping), JSON parsers should accept message field names in camel case (e.g. someAttributeName) as well as the original field name (e.g. some_attribute_name as per protobuf style guide). Currently, ezy seems only to accept camel case.

Kind regards,
Manuel

use form instead of json for building requests

As protobufs are strongly typed it makes sense to auto-generate a form for all the input fields a request may need. Otherwise user has to manually construct a json which is a little big against the strong typing principle of grpc.

v1-beta.1

Common

  • Persist configuration/data

Collections

  • CRUD Collection
  • Import protobuf with import paths
  • List collections, services and methods
  • Activate tab for selected method
  • Sync collection (updating services, methods, close tabs for removed items)
  • Sync collections on app startup

Environments

  • CRUD Environments

Logs

  • Error logs view

gRPC

  • Unary request with metadata

Editor

  • Tab for each request with persistance
  • Request (RAW)
  • Response (RAW)
  • Metadata (RAW)

Components

  • Select
    • Remove button
    • Borders
  • TreeView

[BUG] missing appdmg dependency

Describe the bug

The npm run make command fails with a missing dependency.

To Reproduce

$ npm run make

> [email protected] make
> electron-forge make

βœ” Checking your system
β ‹ Loading configuration
βœ” Loading configuration
βœ” Resolving make targets
  β€Ί Making for the following targets: dmg
βœ” Running package command
  βœ” Preparing to package application
  βœ” Running packaging hooks
    βœ” Running generateAssets hook
    βœ” Running prePackage hook
      βœ” [plugin-webpack] Preparing native dependencies
      βœ” [plugin-webpack] Building webpack bundles
  βœ” Packaging application
    βœ” Packaging for x64 on darwin [4s]
  βœ” Running postPackage hook
βœ” Running preMake hook
❯ Making distributables
  βœ– Making a dmg distributable for darwin/x64
    β€Ί Cannot find module 'appdmg'
      Require stack:
      - /Users/sieben/workspace/upstream/ezy/node_modules/electron-installer-dmg/src/index.js
      - /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/maker-dmg/dist/MakerDMG.js
      - /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/require-search.js
      - /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/plugin-interface.js
      - /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/forge-config.js
      - /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/index.js
      - /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/api/index.js
      - /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/cli/dist/electron-forge-make.js
β—Ό Running postMake hook

An unhandled rejection has occurred inside Forge:
Error: Cannot find module 'appdmg'
Require stack:
- /Users/sieben/workspace/upstream/ezy/node_modules/electron-installer-dmg/src/index.js
- /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/maker-dmg/dist/MakerDMG.js
- /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/require-search.js
- /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/plugin-interface.js
- /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/forge-config.js
- /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/util/index.js
- /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/api/index.js
- /Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/cli/dist/electron-forge-make.js
at Module._resolveFilename (node:internal/modules/cjs/loader:1039:15)
    at Module._load (node:internal/modules/cjs/loader:885:27)
    at Module.require (node:internal/modules/cjs/loader:1105:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at build (/Users/sieben/workspace/upstream/ezy/node_modules/electron-installer-dmg/src/index.js:9:18)
    at module.exports (/Users/sieben/workspace/upstream/ezy/node_modules/electron-installer-dmg/src/index.js:122:10)
    at async MakerDMG.make (/Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/maker-dmg/dist/MakerDMG.js:31:22)
    at async Task.task (/Users/sieben/workspace/upstream/ezy/node_modules/@electron-forge/core/dist/api/make.js:197:55)
    at async Task.run (/Users/sieben/workspace/upstream/ezy/node_modules/listr2/dist/index.cjs:978:11)
    at async /Users/sieben/workspace/upstream/ezy/node_modules/listr2/node_modules/p-map/index.js:57:22

Expected behavior

I expect ezy to build.

Environment

  • OS: macOS 13.1
  • ezy master branch

Additional context
Add any other context about the problem here.

Request: Create an easy way to convert JSON fields to Buffer values

First of all, thank you for your continued maintenance on this project. While Postman now offers gRPC functionality, I would prefer using something like ezy for a few reasons:

  1. Open source is πŸ’―
  2. I don't like the corporate feel that Postman gives now. It used to be simple to use, but now it's a full-fledged desktop application. I just want a simple tool.
  3. Postman forces you to sign up/sign in before using the gRPC feature.

So yeah, thanks, I appreciate this project a lot.

Is your feature request related to a problem? Please describe.
Our application uses a complex system of Metadata fields for setting the request context.
Creating that object and converting it to a Buffer value elsewhere and then copy-pasting it into the field whenever I need to change contexts is frustrating and error-prone.

Describe the solution you'd like
Ideally, I could simply provide a basic JSON structure a Proto Message name and have it converted to a Buffer value.
For example, maybe a small button on the top of the Request/Metadata entries that opens a popup where I can enter the required data, and when I click "submit" it would enter the Buffer value at my cursor location. It would be even nicer if I could easily edit that structure again without having to delete and re-enter the information.

Describe alternatives you've considered
I would also be okay with a simple tool in the application somewhere that will do this conversion for me. I could copy its output and put it where I need it.

Additional context
I'm actually not 100% sure if this is possible, so please correct me if I'm off-track.

There are two sub-features that would make this suggestion delightful:

  1. Ability to edit a previously-converted structure (maybe it could be a visual placeholder in the input field that I could interact with and modify, or it could appear as only JSON, letting me edit it freely without having to re-convert every time [because I already told it what message it is])
  2. Ability to use this feature recursively, i.e. putting these "friendly" Buffer values within Buffer value structures.

[BUG] Could not create collection if proto file contains google.protobuf.EnumValueOptions

Describe the bug
Creating collection with proto file contains extend google.protobuf.EnumValueOptions throw error object must be a valid nested object

Minimal example file:

syntax = "proto3";

import "google/protobuf/descriptor.proto";

extend google.protobuf.EnumValueOptions {
  optional string name = 54321;
}

To Reproduce
Steps to reproduce the behavior:
Try create collection with minimal example file

Expected behavior
Successful created collection

Environment

  • OS: windows 10
  • ezy Version 1.0.0-beta.16

Additional context

Provide automatic message generation template

It will be very troublesome if the message template cannot be automatically generated after importing proto

Similar to postman, add a Generate Message Example below

Open the file to generate the message template by default

ζˆͺ屏2023-02-24 22 50 47

ζˆͺ屏2023-02-24 22 51 01

Thank you for letting us use the very useful GrpcGUI

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.