Giter Site home page Giter Site logo

thenativeweb / wolkenkit Goto Github PK

View Code? Open in Web Editor NEW
1.1K 30.0 53.0 31.79 MB

wolkenkit is an open-source CQRS and event-sourcing framework based on Node.js, and it supports JavaScript and TypeScript.

Home Page: https://www.thenativeweb.io/wolkenkit/framework

License: GNU Affero General Public License v3.0

JavaScript 13.26% TypeScript 84.66% Dockerfile 0.05% HTML 0.23% CSS 0.27% EJS 1.52%
wolkenkit cqrs ddd event-sourcing javascript nodejs cqrs-framework

wolkenkit's People

Contributors

banyan avatar clemenssahs avatar damienbenon avatar dependabot-preview[bot] avatar dependabot[bot] avatar goloroden avatar grundhoeferj avatar kusigit avatar mikecann avatar purefun avatar radumaerza avatar yeldirium 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wolkenkit's Issues

Write a Packer script that creates wolkenkit VMs

Feature description

Currently we require the user to setup Docker. There are cases where this does not work without issues, e.g. when you try to do this on Windows and you have VirtualBox installed (you can't run VirtualBox and Hyper-V at the same time, and Hyper-V is required by Docker).

So we came up with the idea of having ready-made VMs for VirtualBox, VMware & co., that include Docker, Node.js and wolkenkit. This way people can fallback to these tools, but do not need to setup their VM manually. To be able to setup these ready-made VMs, we should write a Packer script, so we can automate the process easily.

What to do

  • Write a Packer script that sets up a VM
  • Configure the VM
    • Use Ubuntu 16.04 LTS as base image
    • Setup a wolkenkit user with wolkenkit password
    • Use en-US keyboard layout and timezone as PST
  • Prepare software
    • Setup the latest Docker CE on the VM
    • Install nvm and the latest Node.js LTS
    • Run npm install -g wolkenkit
  • Address various VM solutions
    • Support VMware
    • Support VirtualBox
  • Verify that everything works
    • The user is able to SSH connect to the machine using wolkenkit/wolkenkit
    • The user is able to run Node.js and npm
    • The user is able to run wolkenkit
    • The user is able to use Docker

Provide information on architecture

What is this feature about?

Currently, we handle wolkenkit primarily as a black box. It may be difficult for others to understand what is happening under the hood, and to understand the architecture. We should add more information on this in the documentation.

What needs to be done to implement this feature?

  • Explain structure
  • Add an image
    • Create a sketch
    • Use the final image
  • Add a link to the architecture page from here

What else should we know?

This was suggested by @schmuto, so we should inform him once this has been done. Additionally, we should also inform whotheheck and Sven in Slack.

npm run start doesn't work on Windows after wolkenkit init

As reported by @blumatixgs in #3 npm run start doesn't work after having run wolkenkit init on Windows 10.

@bluematixgs Is the following description correct, and can you please elaborate what fails means in the Actual result section?

Steps to reproduce

  • Setup wolkenkit according to the documentation
  • Run wolkenkit init in an empty directory
  • Run npm run start

Expected result

  • The chat application starts.

Actual result

  • npm run start fails.

Improve error messages when prerequisites are missing

What is this feature about?

I would extend the CLI Information Message by echoing "Docker Client missing - did you install the Docker Application on your Machine?" when he tries the run the "wolkenkit start" command, to tell the user that he is missing something.

I would also additionally create a "Prerequisites" category for https://github.com/thenativeweb/wolkenkit. (if there are more prerequisites required to work with wolkenkit)

What needs to be done to implement this feature?

Mobile browsers throttle client-side JavaScript and web socket connections

What is this bug about?

Seems like mobile browser throttle client side JS which causes Websocket Connections to freeze while being inactive.

What steps are needed to reproduce the bug?

  • Write a simple WS server and client
  • Load the client in a mobile browser and wait
  • Try to send a command after activating the tab again
  • See if the client throws an error due to inactive Websocket connection
  • Repeat the same process but keep sending heartbeats from the server in the background to keep the connection alive

What is the expected result?

  • It should be possible to send commands after being inactive

What is the actual result?

  • The client throws an error that the connection might be

What else should we know?

Questions on Memory/Performance

How does wolkenkit store aggregates? Inmemory/database.
Does it replay all the events from the database everytime the sever starts up or loads it from a snapshot?
Does it cache the events/aggregates on the server then what happens if we run our of memory? Does it load only the hot data?
Does this implement something like Prevalent System Architecture?
How much of a performance boost will this architecture have over a normal MVC/CRUD app without caching at all?
Is there someway we can expose a REST API/ GraphQL api using wolkenkit as the data provider?

Discuss whether to further support MongoDB in the event store

What is this concept about?

So far, we marked MongoDB support as experimental in the wolkenkit-eventstore module. The reason for this is that MongoDB does not support transactions, which are needed to guarantee an all-or-nothing semantics when saving multiple events. Now MongoDB 4.0 introduced transaction support, but only for clusters. We should define whether we further want to support MongoDB 4.0, or if we get rid of it (since relational databases seem to be a better fit for event stores anyway than NoSQL databases).

What issues need to be clarified to complete this concept?

  • Is transaction support planned for MongoDB in single-instance setups for a version > 4.0?
  • Do we want to support MongoDB as an event store?

Add text search capabilities to lists

What is this feature about?

Using the where clause it is currently not possible to run a full-text search on a list, e.g. if you want to find all todos that start with the word Might. The currently available operators are focused on arrays (contains) or simple data types (greaterThan).

MongoDB, which we currently use as the default database for read models, has two possibilities to deal with situations like these:

Maybe it would be enough to add support for these operators to the translate functions inside the broker.

What needs to be done to implement this feature?

  • Have a look at how $text and $regex operators from MongoDB work
  • Define an API how we would like to deal with it in our own query language
  • Check if this functionality is also needed inside the read model
  • Update relevant modules
    • wolkenkit-broker
    • tailwind (if needed)
  • Add tests
  • Add documentation

What else should we know?

You might also want to see this StackOverflow question.

Roadmap site/doc

Would it be possible to publish the wolkenkit roadmap and/or feature release dates?

Contrast wolkenkit to Meteor, Firebase & co.

What is this feature about?

From time to time, people ask how wolkenkit compares to other BaaS platforms. We could add a section to the documentation where we contrast wolkenkit to some of its alternatives, similar to the way HashiCorp compares their tools to others (see the Consul documentation as an example).

What needs to be done to implement this feature?

  • Add a section on comparing wolkenkit to other solutions
    • Meteor
    • Firebase
    • Hoodie
    • Parse

Introduce an HTTP endpoint

What is this task about?

We have a number of problems with the current HTTP/2 endpoint in wolkenkit:

  • First, the certificate for local.wolkenkit.io must be considered compromised.
  • Second, we have problems with Let's Encrypt in wolkenkit hosting, as they only issue 20 certificates per domain per week. Unfortunately, it's actually "per domain", not "per subdomain". We can't use a wildcard certificate, as the HTTP/2 endpoint forces us to passthrough SSL, which in turn would mean to inject the same wildcard certificate into every application, which compromises this certificate as well.

After having discussed this we came to the conclusion that the only viable solution is to introduce an HTTP endpoint, which becomes the new default, and have an additional optional HTTP/2 endpoint. This issue describes the steps needed to implement this.

What needs to be done to complete this task?

  • Update tailwind
    • Provide an HTTP endpoint
    • Remove the HTTP/2 endpoint
    • Adjust tests
    • Adjust documentation
    • Publish a new version
  • Update wolkenkit-broker
    • Introduce the new tailwind version
    • Adjust tests
  • Update wolkenkit-depot
    • Introduce the new tailwind version
    • Remove HTTP/2 endpoint
    • Adjust tests
  • Introduce wolkenkit-proxy
    • Create a custom NGinx image
    • Make port forwarding configurable
    • Add the local.wolkenkit.io certificate
    • Create automated build on Docker Hub
  • Update wolkenkit CLI
    • Adjust starting the wolkenkit-broker
    • Adjust starting the wolkenkit-depot
    • Add starting the wolkenkit-proxy
    • Ensure that custom certificates still work
    • Adjust tests
  • Update wolkenkit-aufwind
    • Use the HTTP ports of broker and depot
    • Support custom certificate handling
      • Create a namespaced secret if a custom certificate is given
      • Configure Ingress appropriately
  • Adjust release script
    • Add proxy

Rate limit the API

What is this feature about?

We might rate limit the API using a module such as express-brute (or something similar, this is just a suggestion, not a specifically chosen module).

What needs to be done to implement this feature?

  • Add rate-limiting to the various endpoints
  • Clarify how to do this for websocket connections
  • Add tests

What else should we know?

This will probably need to be done inside of the tailwind module, maybe somewhere around here.

Cannot start a Wolkenkit application on Windows

I set up Wolkenkit 1.2.0 on Windows 10 Professional as described in the documentation. When I run wolkenkit start there's an error:

$ wolkenkit start
  Starting the application...
  Verifying health on environment default...
โ ™events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: write EPIPE
    at _errnoException (util.js:1024:11)
    at WriteWrap.afterWrite [as oncomplete] (net.js:867:14)

The same error occurs when I'm trying to start a Wolkenkit template or when I'm using the wolkenkit health command. The Hyper-V machine is up and running and responds to pings.

Steps to reproduce

  • Install Wolkenkit on a Windows machine
  • Initialize a new application with wolkenkit init
  • Start the application wolkenkit start

Expected result

  • The application starts.

Actual result

  • The application doesn't start and an error is shown.

List good and bad use cases

What is this feature about?

To help understand the use cases for wolkenkit, we should setup an additional page Not a developer (this may also be interesting for https://www.wolkenkit.io/). There we should list good and bad use cases, and reasons for the management how a company can benefit from using wolkenkit.

What needs to be done to implement this feature?

  • Create a Not a developer page
  • Add and describe use cases
  • Add and describe benefits

What else should we know?

We have made up the following items (they still need to be discussed, and maybe shortened):

Bad use cases

  • Data-driven applications that resemble CRUD (forms over data)
  • CRUD applications, with simple data storage
  • Applications that control life, health & co.
  • Hard real-time applications
  • UI prototypes and frontend development
  • Non-JavaScript developers
  • Sticking to traditional development concepts
  • Single-process applications
  • Embedded development

Good use cases

  • Backend with (complex) business logic
  • Elastic backend for many users
  • Semantic analysis of your past, e.g. for reporting
  • A web API for your business (automated and integrated)
  • Web real-time collaboration tools
  • Collaborative, scalable state management
  • Domain prototyping
  • Take-away backend for JavaScript frontend developers
  • Collecting events without any logic (IoT, log data, โ€ฆ)

Convincing the management

  • JavaScript know-how
  • Domain-driven design as an asset
  • Developed in the open, long-term commitment by the native web, corporate backing
  • tech:lounge workshops

Support private modules in wolkenkit applications

What is this feature about?

When starting a wolkenkit application, we run npm install internally. Right now this runs as anonymous, which means that you can only install publicly available modules. To support private modules, the user would need to login to npm first. We could ask the user to provide an npm token, which we then use internally to run npm install.

What needs to be done to implement this feature?

  • Introduce a way for the user to provide the token
  • Use the token when running npm install
  • Add tests
  • Add documentation

When is the aggregate state updated? May two commands be executed in parallel?

In your Wolkenkit-Brochure you wrote on page 48:

calculate the new number of likes and add this information when publishing the liked event:

// ...
message.events.publish('liked', {
  likes: message.state.likes + 1
});
// ... 

Does the Wolkenkit framework ensure this also works correctly when two users are liking a message "at the same time"?

E.g.

  • users A and B see "0 likes" for message M
  • both users "like" the message M ("at the same time)
  • A's event is created with likes = 0+1
  • B's event is created with likes = 0+1 (as message.state.likes is not yet updated)
  • message.state.likes is updated to 1
  • message.state.likes is updated to 1
  • BUT: in the event store there are 2 likes for the given message, because two users liked it.

I think this boils down to the question when the state is updated, and if two commands may be executed in parallel.

Udo

Discuss how to store data in an encrypted way

What is this concept about?

It might be interesting to have an option to encrypt some data, e.g. when storing passwords. This would have to be done in the event store as well as in the read model. We should think about a way of how to do this.

What issues need to be clarified to complete this concept?

  • How to encrypt individual fields?
  • Where will the keys be stored?

What else should we know?

This issue came up in a discussion with @reneviering, so we should inform him once this has been discussed.

wolkenkit start fails on Ubuntu 16.04

After setting up a new project with wolkenkit init on my Ubuntu 16.04 machine, wolkenkit start fails with the message
โœ— Failed to create container chat-broker. Error response from daemon: invalid IP address in add-host: ""
I'm running docker v17.05.0-ce.

Any help is much appreciated!

Add lifecycle events

What is this feature about?

For some applications it would make sense to run logic on the server when special things happen, e.g. when a client disconnects. Unfortunately, this can't be implemented by sending a command from the client, since the user may just close the browser. Although there is an unbeforeunload event in the browser for things like that, this event does not work reliably. There may be more events like this.

To be able to handle system events and domain events in a similar way, we might introduce a new context for them, such as app, so that you get events similar to app.client.disconnected.

What needs to be done to implement this feature?

  • Define which system events we will have
  • Implement the logic to detect them
  • Raise them
  • Add tests
  • Add documentation

What else should we know?

@colorizedmind was interested in this, so we should inform him once this has been implemented.

Remove deprecated commands from CLI

What is this task about?

There are two commands in the CLI that have been marked as deprecated a while ago. For the next release of the CLI we could finally get rid off them. The affected commands are:

  • update
  • ls-remote

What needs to be done to complete this task?

  • Remove the commands from the codebase
  • Adjust the tests
  • Verify the documentation and adjust it, if needed

Restructure the changelog

What is this task about?

Right now, the changelog contains a list of changes made in a specific version. This list is ordered by criteria such as added, updated, and removed, but this leads to a quite technical result. It would be nice to do this in a more feature-driven way. Apart from that, it would be great if we could link to individual changes in the changelog.

What needs to be done to complete this task?

  • Come up with a concept of how to structure the changelog in the future
  • Change the changelog of latest to the new concept
  • Use headlines instead of bullet points for the individual changes
  • Adjust the release script (since it generates a new changelog for the next latest)

Make wolkenkit run on Raspberry Pi

What is this epic about?

Since Docker runs on Raspberry Pi, it would be great if you could also run wolkenkit on Raspberry Pi. This would allow us to provide an image that you can download that contains Docker and all the required wolkenkit Docker images. This could be a highly interesting thing for tinkering and IoT solutions.

What needs to be done to complete this epic?

  • Verify the compatibility of the various wolkenkit components with Raspberry Pi
    • Find alternatives if needed
  • Figure out how to deal the limited resources of the Raspberry Pi
  • Create an image
    • Define where to offer this as download
  • Add tests
  • Add documentation

React integration?

How could we integrate wolkenkit to a react based app? An example would be nice.

Add a guide on how authentication works

What is this feature about?

Currently, we don't have a single guide to describe how to setup authentication. Using the blog post that we have written for Auth0 as a foundation, it should be pretty simple to setup such a guide. Additionally, this check list on StackOverflow might be helpful.

What needs to be done to implement this feature?

  • Write the guide
  • Add it to the documentation

What else should we know?

@schmuto has indicated interest on this, so we should inform him once this has been done.

Real-world Example

The current example code is for very basic use cases. It would be great if you could include a more real-world example, with more complex entities, etc.

Distinguish between individual anonymous users

What is this concept about?

Right now, we only have a single anonymous identity for all anonymous users. We should introduce an option to be able to distinguish between individual anonymous users, e.g. to allow shopping in an online store without the need to login first.

What issues need to be clarified to complete this concept?

  • Think of individual random IDs for anonymous users
  • Think about using custom tokens created by the client SDK
  • Think about whether this can solve the issue of a user profile

Report errors when verifying a token fails

What is this task about?

Currently, when the broker can not successfully verify a token, it silently fails and returns a 401. The client then tries to re-authenticate itself. If there is something broken with how the client gets the token, this will fail and end in an endless loop. To discover these problems, a log message in the server logs would be very helpful.

Since the broker uses tailwind under its hood, this would probably need to be fixed there. The correct place seems to be the call to the limes middleware. Maybe this also requires some changes to limes, so that you get better errors back.

What needs to be done to complete this task?

  • Figure out how to exactly solve this issue and then update this list

Think about renaming Docker images and containers

What is this concept about?

The Docker images and containers used in wolkenkit are named after metaphors instead of what they actually are responsible for. This way there is always the need to explain what e.g. the core is responsible for (the write model). We came up with the idea to maybe change the names of those images and containers to be more explicit here.

What issues need to be clarified to complete this concept?

  • Which images and containers would be affected?
  • How could they be renamed?
  • What consequences would this have for the various parts of the system?

Add one-time links for downloads

What is this feature about?

Right now, files that have been uploaded to wolkenkit's file storage are either configured to be readable by anyone, only by authenticated users, or only by their owner. While this works well for files that are handled programmatically, it gets difficult to show protected images, since you can't send a token with an <img> tag. Hence it would be great if we could add one-time links for downloads, that can be consumed a single time.

What needs to be done to implement this feature?

  • Define an API for the file storage server
  • Define how to handle sessions
  • Implement one-time links
  • Add tests
  • Add documentation

What else should we know?

There are multiple approaches on how to solve this problem. Creating one-time links is only one option, another one could be to introduce a special function to the client SDK, maybe even a React component or something like this. But handling it in the backend is the only option that works independent of a specific SDK (since you may come from another programming language, or even work without the SDK).

Stateful flows run too often

What is this bug about?

Statefull flow with 2 transitions that listen to the same event.

What steps are needed to reproduce the bug?

  • Create new wolkenkit project with 'wolkenkit-template-chat'
  • Add this flow
'use strict';

const identity = {
    'communication.message.liked': event => event.aggregate.id,
};

const initialState = {
    is: 'pristine',
};

const transitions = {
    pristine: {
        'communication.message.liked'(flow, event) {
            console.log('eventId:', event.id);
        }
    },
    magic: {
        'communication.message.liked'(flow, event) {}
    }
};

const reactions = {
    pristine: {
        magic(flow, event, {app}) {}
    },
    magic: {
        magic(flow, event, {app}){}
    }
};

module.exports = {identity, initialState, transitions, reactions};

What is the expected result?

console.log should be called once with the event.id

What is the actual result?

console.log get called 2 times for every liked event

What else should we know?

When you remove the magic transistion console.log is colled once for every liked event.
getClassifiedFlows creates two instances of the same statefull flow, where both react to the same event.

When trying to execute "wolkenkit init" I get the error "Template not found"

Following the Tutorial in documentation initializing-the-application I get the error "Template not found" when executing "wolkenkit init".

Console:

wolkenkitdev@wolkenkitdev ~/jsdoc $ cd chat/
wolkenkitdev@wolkenkitdev ~/jsdoc/chat $ ls -l
total 0
wolkenkitdev@wolkenkitdev ~/jsdoc/chat $ wolkenkit init
โœ— Failed to initialize a new application.
  Template not found.

This is running with a linux mint installation within a VirtualBox VM on Windows Host. Network is configured as NAT. browsing the web (and installation) worked without setting proxy configuration (so I did not touch them).

Cannot run demo application on Ubuntu 18.04

What is this bug about?

I am setting up wolkenkit and going through the tutorial.
I cannot start the demo application.

What steps are needed to reproduce the bug?

Don't know if it's reproducible but I'm going through the tutorial:

  • Fresh node and docker setup (also did the Docker post-install steps)
  • Fresh wolkenkit installation
  • wolkenkit init
  • wolkenkit start

The application stops at Building Docker images....
I got docker images but no containers.

What is the expected result?

The demo application starts without issues.

What is the actual result?

This is the output if I run wolkenkit start --verbose

  Starting the application...
  Verifying health on environment default...
  Application host local.wolkenkit.io resolves to 127.0.0.1.
  Docker server resolves to 127.0.0.1 and ::1.
  Verifying application status...
  Verifying that ports are available...
  Setting up network...
  Building Docker images...
โœ— Failed to start the application.
  unable to prepare context: path "/tmp/p1RZVL" not found

  ExecutableFailed: unable to prepare context: path "/tmp/p1RZVL" not found

    at new CustomError (/home/cwalther/.nvm/versions/node/v10.12.0/lib/node_modules/wolkenkit/node_modules/defekt/dist/defekt.js:44:116)
    at /home/cwalther/.nvm/versions/node/v10.12.0/lib/node_modules/wolkenkit/dist/shell/exec.js:29:18
    at ChildProcess.exithandler (child_process.js:296:5)
    at ChildProcess.emit (events.js:182:13)
    at maybeClose (internal/child_process.js:962:16)
    at Socket.stream.socket.on (internal/child_process.js:381:11)
    at Socket.emit (events.js:182:13)
    at Pipe._handle.close (net.js:606:12)

What else should we know?

I am using:

  • Ubuntu 18.04.1
  • Node 10.12
  • Docker 18.06.1-ce

Docker for Windows using Hyper-V

I'm using Docker for windows like the Docker inc. suggested url

Is it possible to add an installation guide like the "Installing using Docker Machine" but for "Installling using Docker with Hyper-V"?

Wolkenkit restart not working when wolken kit is stopped

When I try to execute the restart command and wolkenkit app is not running I get an error message that my app is not running and it is not starting. From similar commands of other CLIs I would expect it to start anyway.

wolkenkitdev@wolkenkitdev ~/jsdoc/chat $ wolkenkit restart
โœ— chat is not running.

Validate parameters of public functions

What is this feature about?

In the past we had an issue due to a function call that was done in a wrong way. Instead of

app.events.observe({
  where: { name: 'mounted' }
})โ€ฆ

we had:

app.events.observe({
  name: 'mounted'
})โ€ฆ

Essentially, the where keyword was missing. Maybe we should improve error checking of any public functions that are user-facing, so that things like that result in a meaningful error message.

What needs to be done to implement this feature?

  • Create a list of all functions that should be guarded
  • Use validate-value for validation
  • Provide good error messages
    • Think about providing a link to the according pages in the documentation as part of the error messages
  • Add tests

Make APIs self-documenting

What is this feature about?

At https://docs.wolkenkit.io/ we have the documentation for wolkenkit itself, but the APIs of the wolkenkit applications do not yet have any documentation. We could use the landing page of the broker to provide some automatically generated documentation based on the metadata of the model. This could help us to get closer to a self-documenting API.

What needs to be done to implement this feature?

  • Define a way to document commands, events, โ€ฆ
  • Enhance the /v1/configuration.json route to contain these information
  • Make the API shell consume these information and display them as a page

Questions about Commands/Events

Hi there!

I first heard about Wolkenkit on a podcast and again on Hacker News a few days ago, so I decided to read the brochure. (I've previously enjoyed Martin Kleppmann's talks around Event Sourcing / CQRS.)

I'm a little confused by a few details in the brochure at this point:

When the 'like message' command is defined, it is used to increment the number of likes and publishes that new like count in the event. Wouldn't it be cleaner if the command did only validation and the event did the actual state update (including calculating the new like count)?

I think I'm not 100% sure where to draw the boundary between command and event and why.

And about the authorization code: Why do both commands and events need to have authentication rules defined? I would have expected that only an authorized command can publish a matching event.

Very cool framework!
Rainer

Application is running, but not reachable after reboot on Windows 10

As reported by @blumatixgs in #3 there is an issue with running wolkenkit applications after a machine reboot on Windows 10.

@blumatixgs Could you please have a look at this issue, and elaborate on what exactly not reachable means? What exactly happens when you try to reach the application?

Steps to reproduce

  • Run a wolkenkit application on Windows 10
  • Verify that it works and that it is reachable
  • Reboot the machine

Expected result

The wolkenkit application is running and reachable.

Actual result

The wolkenkit application is running, but not reachable.

TypeScript

Hi guys, is there any TypeScript types created for this lib?

Thanks in advance.

[FEATURE REQUEST]: Move environment variables into .env

According to the docs, environment variables are stored in the package.json file. I believe that it might be better to move these into a separate .env file. In 12-factor philosophy, that will be helpful in keeping the environment variables out of the code (and repo) and belong to the environment.

CLI Error Message Improvement

I would extend the CLI Information Message by telling the user "Docker Client missing - did you install the Docker Application on your Machine?" when he tries the run the command "wolkenkit start", to tell him that he is missing something.

I would also additionally create a "Prerequisites" category for https://github.com/thenativeweb/wolkenkit. (if there are more prerequisites required to work with wolkenkit)

Improve impersonation

What is this feature about?

Currently, from within a flow or from within the client you can use the asUser property when sending a command, to impersonate, i.e. to send the command under a different user. Technically, we only change the sub claim, we don't issue a real token. This works if you only want to override the user's identity, but sometimes you also need to provide additional claims. So it would be better to issue a real token, with a new sub claim as well as custom claims.

What needs to be done to implement this feature?

  • Change the asUser functions to optionally handle custom claims
    • wolkenkit-flows
    • wolkenkit-client
    • Check whether there are more places that are affected
  • Think about signing these tokens using an internal certificate
  • Rethink the can-impersonate claim
    • Decide whether it is still required
    • Namespace it so that it works with Auth0 again
  • Update documentation

What else should we know?

This feature request was made by @schmuto. So we should notify him once this has been done.

New command function does not exist?

I've added a new command to the chat template app called 'comment'.

It's supposed to add comments to chat messages. I've setup all the command, event and model things to reflect this.

However the UI complains in the console that my comment function does not exist.
Here it is, i've added it to the commands object:

  comment (message, command, mark) {
    message.events.publish('commented', {
      comments: message.state.comments.push(command.data.comment)
    });

    mark.asDone();
  }

The Error (if that helps):

index.js:28 Uncaught TypeError: chat.communication.message(...).comment is not a function
    at HTMLUListElement.view.messages.addEventListener.event

Support JWKS

What is this feature about?

Currently the developer of a wolkenkit application has to download the certificate for the identity provider manually, and store it somewhere. This could be automated using JWKS.

What needs to be done to implement this feature?

  • Support JWKS configuration in package.json
  • Implement JWKS support
  • Add tests
  • Add documentation

What else should we know?

This was suggested by @AlexZeitler, so we should inform him once this has been implemented.

Introduce export and import commands for backup and restore

What is this epic about?

Right now there is no option in the wolkenkit CLI to backup and restore an application's data, such as the events from the event store and the files from depot. To allow backing up and restoring, and maybe also migrating data from one system to another, we should introduce two new commands to the CLI, export and import:

$ wolkenkit export --env default --to <directory> --from-event-store true
$ wolkenkit import --env default from <directory>

What needs to be done to complete this epic?

  • Implement the export command
    • Handle flags
      • Use default as the default environment
      • Use true as the default value for from-event-store
    • Handle the target directory
      • Fail if it exists, but it isn't empty
      • Create it if it doesn't exist yet
    • Fetch all data from the event store
    • Transform the events to JSON
    • Store the JSON events as files in <directory>/event-store
      • Store the events in batches of 65.536 events per file
      • Name the files events-0000000000000001.json (and so on)
  • Implement the import command
    • Handle flags
      • Use default as the default environment
    • Handle the source directory
      • Fail if it doesn't exist
      • Fail if it exists, but does not contain the correct file structure
      • Fail if the target event store isn't empty
    • Read all events using streams
    • Write them to the event store
  • Add tests
  • Add documentation

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.