Commit Graph

153 Commits

Author SHA1 Message Date
Daniel Bevenius b99e6ea228
lib: correct name of CONTENT_ENCODING constant (#168)
Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-05-18 09:44:58 -04:00
Lance Ball d836b06ffe
lib: expose constants as a top-level export (#161)
This commit pulls the constants up from the lib/bindings/http/constants.js
and exports them in the top level index.js. There are some elements of the API
where we expect users to provide constant values, and this makes it easier for
them to be sure the values they provide are what is expected.

I've also added two new constants: `BINARY` and `STRUCTURED`.

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-18 08:30:28 -04:00
Daniel Bevenius cf36a1578a
lib: remove version variable from getVersion (#163)
This commit removes the version variable from getVersion and updates the
code to use return statements to be consistent with other functions in
this file, like getMode and accept.

Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-05-15 14:23:56 -04:00
Helio Frota 70de8af9ed
lib: Changed Array instantiation and object creation (#159)
Signed-off-by: Helio Frota <00hf11@gmail.com>
2020-05-14 16:18:34 -04:00
Lance Ball 250a0a144c
feat!: expose a version agnostic event emitter (#141)
* feat!: expose a version agnostic event emitter

This is a breaking change.

This commit exposes an HTTP based event emitter that simplifes the API.
To use it, simply import the SDK and start emitting. The default spec
version is 1.0, but you can use 0.3 by supplying that to the constructor.

By default, CloudEvents are emitted in binary mode, but this can be changed
by providing the "structured" parameter to the `send()` function.

This commit also eliminates the version specific emitters and receivers
from the `v1` and `v03` exports, and eliminates the explicit usage of
versioned emitters from `lib/bindings/http`.

Finally, the CE headers can be retrieved from the emitter for a given
event by passing the event to the `headers()` function.

Fixes: https://github.com/cloudevents/sdk-javascript/issues/124
Fixes: https://github.com/cloudevents/sdk-javascript/issues/149

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-14 11:37:02 -04:00
Helio Frota 76659697aa
lib: removes unused array in receiver_binary_1.js (#158)
Signed-off-by: Helio Frota <00hf11@gmail.com>
2020-05-13 18:19:43 -04:00
Lance Ball 09b0c76826
feat: add ValidationError type extending TypeError (#151)
This change adds a `ValidationError` type that extends `TypeError`. Any time a `CloudEvent` cannot be received and created with the given input, this error will be thrown. Tests have all
been updated to check for the error type.

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-13 13:27:18 -04:00
Daniel Bevenius b5a6673ace
lib: destruct contants in http/unmarshaller.js (#152)
Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-05-13 11:22:05 -04:00
Daniel Bevenius 8b67d36463
lib: make setterByAttribute a Map (#154)
This commit changes the setterByAttribute to be a map and tries to
reduce some code duplication and improve readability.

Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-05-13 11:20:45 -04:00
Lance Ball b283583c0c
docs: add JSDocs for top level API objects (#140)
This commit add JSDoc documentation to the CloudEvent and HTTPReceiver
objects exposed by the API when using the top level imports, specifically
`CloudEvent` and `HTTPReceiver`.

This adds a `generate-docs` npm script to generate site and API documentation
for GitHub pages in `./docs`.

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-12 17:27:11 -04:00
Daniel Bevenius 847fff8db2
lib: remove mode variable from getMode (#142)
Currently, the mode variable in getMode is set to 'unknown' but this
will never get returned as the else clause will throw a TypeError if the
detected mode (from the passed-in headers) is not structured or binary.

This commit suggests simplifying the getMode function and removes the
mode variable.

Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-05-12 14:50:07 -04:00
Daniel Bevenius 94974a7efa
lib: add .js suffix to receiver_binary_0_3 (#143)
This commit adds the '.js' suffix to the require of receiver_binary_0_3
to be consistent with the other requires statments in this file.

Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-05-12 14:49:22 -04:00
Daniel Bevenius b7b491202a
lib: remove unnecessary else statements (#146)
This commit removes two unnecessary else clauses in unmarshaller.js, and
also extracts the throwing of TypeError of invalid content types into a
separate function to avoid some code duplication.

Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-05-12 14:48:12 -04:00
Lance Ball ef7550d60d
fix: throw "no cloud event detected" if one can't be read (#139)
This commit changes the event mode detection in `HTTPReceiver` so that it will
throw a TypeError if the event mode can't be detected per the spec.

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-11 09:42:16 -04:00
Lance Ball 72a87dfb2d
fix: ensure binary events can handle no content-type header (#134)
* fix: ensure binary events can handle no content-type header

The fix provided in https://github.com/cloudevents/sdk-javascript/pull/118
only included tests for `receiver.check()`, and the change in that
case was to add the `application/json` content type to the cleansed
headers if to type was specified.

However, `receiver.parse()` did not receive the benefit of this change. It
calls `this.check()` but then sanitizes the original headers again, and the
missing content-type was not re-inserted into the newly sanitized headers.

This commit, modifies the code so that `receiver.check()` does not insert
the content-type, but does allow the validation check to pass if no
content-type header exists. When `receiver.parse()` is called, and the
headers are sanitized again - and this time used to look up parser implementation,
the default `application/json` content-is applied if no content-type header
exists.

I've also removed a redundant call to `receiver.check()` in receiver_binary_1.js
and simplified the usage of `Constants` in the test.

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

* chore: clean up header sniffing

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-08 23:37:10 -04:00
Lance Ball 63ae1ad527
feat(unmarshaller)!: remove asynchronous 0.3 unmarshaller API (#126)
This commit removes the unnecessary use of Promises in the 0.3 unmarshaller.
There was actually no asynchronous activity happening in that function, so
there was no need to deal with Promises, and as a result testing was made
much more difficult.

Fixes: https://github.com/cloudevents/sdk-javascript/pull/95

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-06 20:05:10 -04:00
Lance Ball 54f242b79e
feat: expose a mode and version agnostic event receiver (#120)
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: https://github.com/cloudevents/sdk-javascript/issues/93

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-06 13:25:16 -04:00
Lance Ball d9e9ae6bdc
fix: make application/json the default content type in binary mode (#118)
The Knative Kafka event source does not include a `Content-Type` header when
sending binary events. The CE HTTP binding specification doesn't address how
a receiver should handle this situation.

This commit makes `application/json` the default.

Fixes: https://github.com/cloudevents/sdk-javascript/issues/117
Ref: https://github.com/cloudevents/spec/issues/614

Signed-off-by: Lance Ball <lball@redhat.com>
2020-05-05 18:02:39 -04:00
Grant Timmerman 79ec3ef126
chore: es6 unmarshaller (#108)
* chore: es6 unmarshaller
Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>
2020-05-05 13:02:43 -07:00
Grant Timmerman 05ecbdea4f
feat: use CloudEvents not cloudevents everywhere (#101)
Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>
2020-04-30 16:14:13 -07:00
Helio Frota fbcbcec4e8 fix: protects the consts from being changed in other parts of the code.
Signed-off-by: Helio Frota <00hf11@gmail.com>
2020-04-30 12:19:24 -03:00
Lance Ball 5110ad4c67 src,fix: drop support for v0.2 and clean up contenttype
This commit removes support for the v0.2 specification. It also removes the
`contenttype` attribute from the `CloudEvent` object. While the HTTP protocol
binding specifies that in binary mode, the `datacontenttype` attribute should
map to the HTTP Content-Type header, that doesn't mean that the `CloudEvent`
object should have a `contenttype` property.

Fixes: https://github.com/cloudevents/sdk-javascript/issues/61
Fixes: https://github.com/cloudevents/sdk-javascript/issues/66

Signed-off-by: Lance Ball <lball@redhat.com>
2020-04-28 17:37:49 -03:00
Lance Ball 3f238a0124
src: add eslint configuration and npm script
Automatically fixed > 2000 issues. The remaining 200+ issues need
to be fixed by hand. Additionally, all strings are double quotes
which is not typically standard and I wonder about fixing that too.

Signed-off-by: Lance Ball <lball@redhat.com>
2020-04-22 10:15:05 -04:00
Lance Ball aa2cef6e3c
deps: update old and remove unused dependencies
This commit updates all of the dependencies in package.json to
their most recent versions. It also removes dependencies that were
specified in package.json but not used - or only used in a
`require()` statement.

These changes have some ripple effects. Istanbul has not been
supported for some time, so it has been replaced with nyc.
The code coverage reporting tool from codacy has been updated
as well. This could not be tested without having the API token.

Finally, the CI job has been modified to run tests on Node.js
versions 10x and 12x. All older versions of Node.js are no longer
maintained.

Signed-off-by: Lance Ball <lball@redhat.com>
2020-04-20 14:53:53 -04:00
Daniel Bevenius df85189a64 Use const instead of var where applicable
Signed-off-by: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-04-20 09:54:25 +02:00
Lance Ball 71a32d4e89
squash: fix linting error
Signed-off-by: Lance Ball <lball@redhat.com>
2020-04-13 10:10:26 -04:00
Lance Ball 3a063d7245
fix: support mTLS in 1.0 Binary and Structured emitters
This commit modifies both of the 1.0 emitters so that they may
accept typed objects as a part of the configuration. When using
mTLS in Node, you need to provide an `Agent` to the underlying
HTTP handler. In this case, Axios will pass this object along to
Node.js when it is provided.

Fixes: https://github.com/cloudevents/sdk-javascript/issues/48

Signed-off-by: Lance Ball <lball@redhat.com>
2020-04-08 16:13:57 -04:00
Fabio José 6a197941f8 Support for binary format
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 15:55:29 -03:00
Fabio José 4648305a77 http strutured: handle for data_base64
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 14:08:49 -03:00
Fabio José bf4967d30c supporting the data_base64
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 13:50:22 -03:00
Fabio José cf701e423c Remove HTTPUnmarshaller
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 10:13:04 -03:00
Fabio José 68aaf48ba7 HTTP Unmarshaller for spec 1.0
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 10:06:47 -03:00
Fabio José 8c7de33ca8 Constants for binary receiver spec 1.0
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 09:45:05 -03:00
Fabio José 645001af0f Http receiver binary for spec 1.0
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 09:44:39 -03:00
Fabio José af7f7fe2ab Filter to process just the availble attributes
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-04 09:12:42 -03:00
Fabio José 456eb919b0 Constants for spec 1.0
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-02 07:04:54 -03:00
Fabio José ef6f47c6f5 Structured http receiver for spec 1.0
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-11-02 07:04:30 -03:00
Fabio José 7d47b96273 Headers for binary mode spec v1.0
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-10-29 21:15:08 -03:00
Fabio José ef3549e214 Emitter v1: for binary mode
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-10-29 21:14:17 -03:00
Fabio José b51876a020 Fixing the subject unmarshall: Closes #32
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-22 17:21:00 -03:00
Fabio José 3cdd7b9280 parsersByEnconding and checkDecorator
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-06 11:20:23 -03:00
Fabio José 701c7ec77b parsersByEnconding to be compliance with datacontentenconding
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-06 11:19:35 -03:00
Fabio José fad43ecb4e New: check() decorator, parsersByEncoding to work with datacontentencoding
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-06 11:18:45 -03:00
Fabio José 25217fb69a Add constant for base64 string
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-06 11:14:25 -03:00
Fabio José 5ea47c1f4a generic HTTPUnmarshaller and spec 0.3 HTTPUnmarshaller
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-05 09:23:57 -03:00
Fabio José 9066741b8e Using the generic HTTPUnmarshaller
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-05 09:22:42 -03:00
Fabio José e2c1ab7465 New parameters for the generic receiber
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-04 13:28:18 -03:00
Fabio José 7a4473b11a Remove the 0.2 references
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-04 13:27:25 -03:00
Fabio José b42f6f3bc8 Constants for version number and default header specversion
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-04 13:26:56 -03:00
Fabio José 805c8971a1 HTTP Binary receiver for spec 0.3
Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-08-04 13:23:25 -03:00