Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: expose a mode and version agnostic event receiver #120

Merged
merged 2 commits into from
May 6, 2020

Conversation

lance
Copy link
Member

@lance lance commented May 4, 2020

Event receivers in the wild may not always know what version or mode an
incoming event is. Instead of requiring developers to inspect the headers
themselves, the SDK should provide an HTTP receiver that is capable of
figuring out what the version and mode (structured/binary) of an incoming
event is and handle it appropriately.

In determining the best way to expose this, I chose to modify the API a
little bit. Now, instead of const CloudEvent = require('cloudevents-sdk');
users need to destructure it.

const { HTTPReceiver, CloudEvent } = require('cloudevents-sdk');

This change should not be backported to 1.x.

Fixes: #93

Signed-off-by: Lance Ball lball@redhat.com

Event receivers in the wild may not always know what version or mode an
incoming event is. Instead of requiring developers to inspect the headers
themselves, the SDK should provide an HTTP receiver that is capable of
figuring out what the version and mode (structured/binary) of an incoming
event is and handle it appropriately.

In determining the best way to expose this, I chose to modify the API a
little bit. Now, instead of `const CloudEvent = require('cloudevents-sdk');`
users need to destructure it.

```js
const { HTTPReceiver, CloudEvent } = require('cloudevents-sdk');
```

This change should not be backported to 1.x.

Fixes: cloudevents#93

Signed-off-by: Lance Ball <lball@redhat.com>
lib/bindings/http/http_receiver.js Outdated Show resolved Hide resolved
lib/bindings/http/http_receiver.js Outdated Show resolved Hide resolved
lib/bindings/http/http_receiver.js Outdated Show resolved Hide resolved
test/bindings/http/promiscuous_receiver_test.js Outdated Show resolved Hide resolved
test/bindings/http/promiscuous_receiver_test.js Outdated Show resolved Hide resolved
lance added a commit to lance/faas-js-runtime that referenced this pull request May 5, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
lance added a commit to lance/faas-js-runtime that referenced this pull request May 5, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
lance added a commit to lance/faas-js-runtime that referenced this pull request May 5, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
Signed-off-by: Lance Ball <lball@redhat.com>
@lance
Copy link
Member Author

lance commented May 5, 2020

@danbev thanks for the review - the PR has been updated.

@lance lance merged commit 54f242b into cloudevents:master May 6, 2020
@lance lance mentioned this pull request May 7, 2020
lance added a commit to nodeshift/faas-js-runtime that referenced this pull request May 7, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Eliminate up-front spec version awareness in the receiver
4 participants