Skip to content

Commit 9ae32c7

Browse files
authored
lib: change Receiver#accept() to be static Receiver.accept (#271)
Note that I did not add a third `Protocol` parameter to `Receiver.accept` since that would not currently be used. It's non-breaking to add a third parameter in the future once additional protocols are supported. Fixes: #266 Fixes: #261 BREAKING CHANGE Signed-off-by: Lance Ball <lball@redhat.com>
1 parent 565f867 commit 9ae32c7

File tree

3 files changed

+28
-52
lines changed

3 files changed

+28
-52
lines changed

src/transport/receiver.ts

+15-37
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { BinaryHTTPReceiver as BinaryReceiver } from "./http/binary_receiver";
44
import { StructuredHTTPReceiver as StructuredReceiver } from "./http/structured_receiver";
55
import { CloudEventV03 } from "../event/v03";
66
import { CloudEventV1 } from "../event/v1";
7-
import { Protocol } from "./protocols";
87
import CONSTANTS from "../constants";
98

109
/**
@@ -15,42 +14,21 @@ export enum Mode {
1514
STRUCTURED = "structured",
1615
}
1716

17+
const receivers = {
18+
v1: {
19+
structured: new StructuredReceiver(Version.V1),
20+
binary: new BinaryReceiver(Version.V1),
21+
},
22+
v03: {
23+
structured: new StructuredReceiver(Version.V03),
24+
binary: new BinaryReceiver(Version.V03),
25+
},
26+
};
27+
1828
/**
1929
* A class to receive a CloudEvent from an HTTP POST request.
2030
*/
2131
export class Receiver {
22-
protocol: Protocol;
23-
receivers: {
24-
v1: {
25-
structured: StructuredReceiver;
26-
binary: BinaryReceiver;
27-
[key: string]: unknown;
28-
};
29-
v03: {
30-
structured: StructuredReceiver;
31-
binary: BinaryReceiver;
32-
[key: string]: unknown;
33-
};
34-
};
35-
36-
/**
37-
* Create an instance of an HTTPReceiver to accept incoming CloudEvents.
38-
* @param {Protocol} protocol the transport protocol - currently only Protocol.HTTP is supported
39-
*/
40-
constructor(protocol: Protocol = Protocol.HTTP) {
41-
// currently unused, but reserved for future protocol implementations
42-
this.protocol = protocol;
43-
this.receivers = {
44-
v1: {
45-
structured: new StructuredReceiver(Version.V1),
46-
binary: new BinaryReceiver(Version.V1),
47-
},
48-
v03: {
49-
structured: new StructuredReceiver(Version.V03),
50-
binary: new BinaryReceiver(Version.V03),
51-
},
52-
};
53-
}
5432
/**
5533
* Acceptor for an incoming HTTP CloudEvent POST. Can process
5634
* binary and structured incoming CloudEvents.
@@ -59,7 +37,7 @@ export class Receiver {
5937
* @param {Object|JSON} body The body of the HTTP request
6038
* @return {CloudEvent} A new {CloudEvent} instance
6139
*/
62-
accept(
40+
static accept(
6341
headers: Headers,
6442
body: string | Record<string, unknown> | CloudEventV1 | CloudEventV03 | undefined | null,
6543
): CloudEvent {
@@ -68,12 +46,12 @@ export class Receiver {
6846
const version = getVersion(mode, cleanHeaders, body);
6947
switch (version) {
7048
case Version.V1:
71-
return this.receivers.v1[mode].parse(body, headers);
49+
return receivers.v1[mode].parse(body, headers);
7250
case Version.V03:
73-
return this.receivers.v03[mode].parse(body, headers);
51+
return receivers.v03[mode].parse(body, headers);
7452
default:
7553
console.error(`Unknown spec version ${version}. Default to ${Version.V1}`);
76-
return this.receivers.v1[mode].parse(body, headers);
54+
return receivers.v1[mode].parse(body, headers);
7755
}
7856
}
7957
}

test/conformance/steps.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { Receiver } from "../../src";
88
const { HTTPParser } = require("http-parser-js");
99

1010
const parser = new HTTPParser(HTTPParser.REQUEST);
11-
const receiver = new Receiver();
1211

1312
Given("HTTP Protocol Binding is supported", function (this: World) {
1413
return true;
@@ -28,7 +27,7 @@ Given("an HTTP request", function (request: string) {
2827
});
2928

3029
When("parsed as HTTP request", function () {
31-
this.cloudevent = receiver.accept(this.headers, this.body);
30+
this.cloudevent = Receiver.accept(this.headers, this.body);
3231
return true;
3332
});
3433

test/integration/http_receiver_test.ts

+12-13
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { expect } from "chai";
33
import { CloudEvent, Receiver, ValidationError } from "../../src";
44
import { CloudEventV1 } from "../../src/event/v1";
55

6-
const receiver = new Receiver();
76
const id = "1234";
87
const type = "org.cncf.cloudevents.test";
98
const source = "urn:event:from:myapi/resourse/123";
@@ -22,7 +21,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
2221
specversion,
2322
};
2423

25-
expect(receiver.accept.bind(receiver, {}, payload)).to.throw(ValidationError, "no cloud event detected");
24+
expect(Receiver.accept.bind(Receiver, {}, payload)).to.throw(ValidationError, "no cloud event detected");
2625
});
2726

2827
it("Converts the JSON body of a binary event to an Object", () => {
@@ -34,7 +33,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
3433
"ce-source": source,
3534
};
3635

37-
const event: CloudEvent = receiver.accept(binaryHeaders, data);
36+
const event: CloudEvent = Receiver.accept(binaryHeaders, data);
3837
expect(typeof event.data).to.equal("object");
3938
expect((event.data as Record<string, string>).lunch).to.equal("sushi");
4039
});
@@ -47,7 +46,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
4746
"ce-type": type,
4847
"ce-source": source,
4948
};
50-
const event = receiver.accept(binaryHeaders, undefined);
49+
const event = Receiver.accept(binaryHeaders, undefined);
5150
expect(event.data).to.be.undefined;
5251
});
5352

@@ -59,7 +58,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
5958
"ce-type": type,
6059
"ce-source": source,
6160
};
62-
const event = receiver.accept(binaryHeaders, null);
61+
const event = Receiver.accept(binaryHeaders, null);
6362
expect(event.data).to.be.undefined;
6463
});
6564

@@ -72,7 +71,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
7271
specversion,
7372
};
7473

75-
const event = receiver.accept(structuredHeaders, payload);
74+
const event = Receiver.accept(structuredHeaders, payload);
7675
expect(typeof event.data).to.equal("object");
7776
expect((event.data as Record<string, string>).lunch).to.equal("sushi");
7877
});
@@ -86,7 +85,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
8685
"ce-source": source,
8786
};
8887

89-
const event: CloudEvent = receiver.accept(binaryHeaders, data);
88+
const event: CloudEvent = Receiver.accept(binaryHeaders, data);
9089
expect(event.validate()).to.be.true;
9190
expect((event.data as Record<string, string>).lunch).to.equal("sushi");
9291
});
@@ -101,7 +100,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
101100
specversion,
102101
};
103102

104-
const event: CloudEvent = receiver.accept(structuredHeaders, payload);
103+
const event: CloudEvent = Receiver.accept(structuredHeaders, payload);
105104
expect(event.validate()).to.be.true;
106105
expect((event.data as Record<string, string>).lunch).to.equal("sushi");
107106
});
@@ -119,7 +118,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
119118
specversion,
120119
};
121120

122-
const event = receiver.accept(structuredHeaders, payload);
121+
const event = Receiver.accept(structuredHeaders, payload);
123122
validateEvent(event, specversion);
124123
});
125124

@@ -132,7 +131,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
132131
"ce-source": source,
133132
};
134133

135-
const event = receiver.accept(binaryHeaders, data);
134+
const event = Receiver.accept(binaryHeaders, data);
136135
validateEvent(event, specversion);
137136
});
138137
});
@@ -149,7 +148,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
149148
specversion,
150149
};
151150

152-
const event = receiver.accept(structuredHeaders, payload);
151+
const event = Receiver.accept(structuredHeaders, payload);
153152
validateEvent(event, specversion);
154153
});
155154

@@ -162,7 +161,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
162161
"ce-source": source,
163162
};
164163

165-
const event = receiver.accept(binaryHeaders, data);
164+
const event = Receiver.accept(binaryHeaders, data);
166165
validateEvent(event, specversion);
167166
});
168167
});
@@ -192,7 +191,7 @@ describe("HTTP Transport Binding Receiver for CloudEvents", () => {
192191
"x-forwarded-proto": "http",
193192
"x-request-id": "d3649c1b-a968-40bf-a9da-3e853abc0c8b",
194193
};
195-
const event = receiver.accept(headers, data);
194+
const event = Receiver.accept(headers, data);
196195
expect(event instanceof CloudEvent).to.equal(true);
197196
expect(event.id).to.equal(id);
198197
expect(event.type).to.equal(type);

0 commit comments

Comments
 (0)