@pact-foundation/pact 10.2.2 → 10.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/package.json +5 -4
  3. package/scripts/ci/build-and-test.ps1 +64 -0
  4. package/scripts/ci/build-and-test.sh +29 -0
  5. package/scripts/ci/lib/create_npmrc_file.sh +16 -0
  6. package/scripts/ci/lib/get-version.sh +8 -0
  7. package/scripts/ci/lib/prepare-release.sh +19 -0
  8. package/scripts/ci/lib/publish-9x.sh +18 -0
  9. package/scripts/ci/lib/publish.sh +17 -0
  10. package/scripts/ci/lib/robust-bash.sh +36 -0
  11. package/scripts/ci/release-9x.sh +43 -0
  12. package/scripts/ci/release.sh +44 -0
  13. package/scripts/deploy.ps1 +12 -0
  14. package/scripts/install-plugins.sh +49 -0
  15. package/scripts/run-audit-fix-on-examples.sh +13 -0
  16. package/scripts/trigger-9x-release.sh +24 -0
  17. package/scripts/trigger-release.sh +24 -0
  18. package/src/asynchronousMessagePact.d.ts +88 -0
  19. package/src/asynchronousMessagePact.js +222 -0
  20. package/src/asynchronousMessagePact.js.map +1 -0
  21. package/src/{v4/http/index.spec.d.ts → asynchronousMessagePact.spec.d.ts} +0 -0
  22. package/src/asynchronousMessagePact.spec.js +117 -0
  23. package/src/asynchronousMessagePact.spec.js.map +1 -0
  24. package/src/common/net.js +8 -2
  25. package/src/common/net.js.map +1 -1
  26. package/src/dsl/verifier/proxy/parseBody.d.ts +1 -0
  27. package/src/dsl/verifier/proxy/tracer.js +3 -0
  28. package/src/dsl/verifier/proxy/tracer.js.map +1 -1
  29. package/src/dsl/verifier/verifier.js +3 -2
  30. package/src/dsl/verifier/verifier.js.map +1 -1
  31. package/src/httpPact/tracing.js +3 -0
  32. package/src/httpPact/tracing.js.map +1 -1
  33. package/src/index.d.ts +1 -0
  34. package/src/index.js +1 -0
  35. package/src/index.js.map +1 -1
  36. package/src/messageProviderPact.js +3 -1
  37. package/src/messageProviderPact.js.map +1 -1
  38. package/src/v4/index.js +3 -3
  39. package/src/v4/index.js.map +1 -1
  40. package/src/v4/http/index.spec.js +0 -111
  41. package/src/v4/http/index.spec.js.map +0 -1
  42. package/src/v4/message/index.spec.d.ts +0 -1
  43. package/src/v4/message/index.spec.js +0 -214
  44. package/src/v4/message/index.spec.js.map +0 -1
@@ -1,111 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- /* tslint:disable:no-unused-expression no-empty */
43
- var chai_1 = __importDefault(require("chai"));
44
- var axios_1 = __importDefault(require("axios"));
45
- var chai_as_promised_1 = __importDefault(require("chai-as-promised"));
46
- var sinon_chai_1 = __importDefault(require("sinon-chai"));
47
- var v3_1 = require("../../v3");
48
- var index_1 = require("../index");
49
- chai_1.default.use(sinon_chai_1.default);
50
- chai_1.default.use(chai_as_promised_1.default);
51
- var expect = chai_1.default.expect;
52
- describe.skip('PactV4', function () {
53
- var pact = new index_1.PactV4({
54
- consumer: 'myconsumer',
55
- provider: 'myprovider',
56
- spec: v3_1.SpecificationVersion.SPECIFICATION_VERSION_V4,
57
- logLevel: 'debug',
58
- });
59
- describe('HTTP test', function () {
60
- it('returns a valid MATT message over HTTP', function () { return __awaiter(void 0, void 0, void 0, function () {
61
- var mattRequest, mattResponse;
62
- return __generator(this, function (_a) {
63
- switch (_a.label) {
64
- case 0:
65
- mattRequest = "{\"request\": {\"body\": \"hello\"}}";
66
- mattResponse = "{\"response\":{\"body\":\"world\"}}";
67
- return [4 /*yield*/, pact
68
- .addInteraction()
69
- .given('the Matt protocol exists')
70
- .uponReceiving('an HTTP request to /matt')
71
- .usingPlugin({
72
- plugin: 'matt',
73
- version: '0.0.2',
74
- })
75
- .withRequest('POST', '/matt', function (builder) {
76
- builder.pluginContents('application/matt', mattRequest);
77
- })
78
- .willRespondWith(200, function (builder) {
79
- builder.pluginContents('application/matt', mattResponse);
80
- })
81
- .executeTest(function (mockserver) {
82
- return axios_1.default
83
- .request({
84
- baseURL: mockserver.url,
85
- headers: {
86
- 'content-type': 'application/matt',
87
- Accept: 'application/matt',
88
- },
89
- data: generateMattMessage('hello'),
90
- method: 'POST',
91
- url: '/matt',
92
- })
93
- .then(function (res) {
94
- expect(parseMattMessage(res.data)).to.eq('world');
95
- });
96
- })];
97
- case 1:
98
- _a.sent();
99
- return [2 /*return*/];
100
- }
101
- });
102
- }); });
103
- });
104
- });
105
- var parseMattMessage = function (raw) {
106
- return raw.replace(/(MATT)+/g, '').trim();
107
- };
108
- var generateMattMessage = function (raw) {
109
- return "MATT".concat(raw, "MATT");
110
- };
111
- //# sourceMappingURL=index.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../../../src/v4/http/index.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,8CAAwB;AACxB,gDAA0B;AAC1B,sEAA8C;AAC9C,0DAAmC;AACnC,+BAAgD;AAChD,kCAAkC;AAElC,cAAI,CAAC,GAAG,CAAC,oBAAS,CAAC,CAAC;AACpB,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AAEjB,IAAA,MAAM,GAAK,cAAI,OAAT,CAAU;AAExB,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;IACtB,IAAM,IAAI,GAAG,IAAI,cAAM,CAAC;QACtB,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,YAAY;QACtB,IAAI,EAAE,yBAAoB,CAAC,wBAAwB;QACnD,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE;QACpB,EAAE,CAAC,wCAAwC,EAAE;;;;;wBACrC,WAAW,GAAG,sCAAgC,CAAC;wBAC/C,YAAY,GAAG,qCAA+B,CAAC;wBAErD,qBAAM,IAAI;iCACP,cAAc,EAAE;iCAChB,KAAK,CAAC,0BAA0B,CAAC;iCACjC,aAAa,CAAC,0BAA0B,CAAC;iCACzC,WAAW,CAAC;gCACX,MAAM,EAAE,MAAM;gCACd,OAAO,EAAE,OAAO;6BACjB,CAAC;iCACD,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,UAAC,OAAO;gCACpC,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;4BAC1D,CAAC,CAAC;iCACD,eAAe,CAAC,GAAG,EAAE,UAAC,OAAO;gCAC5B,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;4BAC3D,CAAC,CAAC;iCACD,WAAW,CAAC,UAAC,UAAU;gCACtB,OAAO,eAAK;qCACT,OAAO,CAAC;oCACP,OAAO,EAAE,UAAU,CAAC,GAAG;oCACvB,OAAO,EAAE;wCACP,cAAc,EAAE,kBAAkB;wCAClC,MAAM,EAAE,kBAAkB;qCAC3B;oCACD,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;oCAClC,MAAM,EAAE,MAAM;oCACd,GAAG,EAAE,OAAO;iCACb,CAAC;qCACD,IAAI,CAAC,UAAC,GAAG;oCACR,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gCACpD,CAAC,CAAC,CAAC;4BACP,CAAC,CAAC,EAAA;;wBA7BJ,SA6BI,CAAC;;;;aACN,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAM,gBAAgB,GAAG,UAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC,CAAC;AACF,IAAM,mBAAmB,GAAG,UAAC,GAAW;IACtC,OAAO,cAAO,GAAG,SAAM,CAAC;AAC1B,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,214 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- /* tslint:disable:no-unused-expression no-empty */
43
- var chai_1 = __importDefault(require("chai"));
44
- var chai_as_promised_1 = __importDefault(require("chai-as-promised"));
45
- var sinon_chai_1 = __importDefault(require("sinon-chai"));
46
- var v3_1 = require("../../v3");
47
- var index_1 = require("../index");
48
- var net = require("net");
49
- var verifier_1 = require("../../dsl/verifier");
50
- var path = require("path");
51
- var messageProviderPact_1 = require("../../messageProviderPact");
52
- var express = require("express");
53
- chai_1.default.use(sinon_chai_1.default);
54
- chai_1.default.use(chai_as_promised_1.default);
55
- var expect = chai_1.default.expect;
56
- describe.skip('PactV4', function () {
57
- var HOST = 'localhost';
58
- var pact = new index_1.PactV4({
59
- consumer: 'myconsumer',
60
- provider: 'myprovider',
61
- spec: v3_1.SpecificationVersion.SPECIFICATION_VERSION_V4,
62
- logLevel: 'trace',
63
- });
64
- describe('TCP Messages', function () {
65
- describe('with MATT protocol', function () { return __awaiter(void 0, void 0, void 0, function () {
66
- return __generator(this, function (_a) {
67
- it('generates a pact with success', function () {
68
- var mattMessage = "{\"request\": {\"body\": \"hellotcp\"}, \"response\":{\"body\":\"tcpworld\"}}";
69
- return pact
70
- .addSynchronousInteraction('a MATT message')
71
- .usingPlugin({
72
- plugin: 'matt',
73
- version: '0.0.2',
74
- })
75
- .withPluginContents(mattMessage, 'application/matt')
76
- .startTransport('matt', HOST)
77
- .executeTest(function (tc) { return __awaiter(void 0, void 0, void 0, function () {
78
- var message;
79
- return __generator(this, function (_a) {
80
- switch (_a.label) {
81
- case 0: return [4 /*yield*/, sendMattMessageTCP('hello', HOST, tc.port)];
82
- case 1:
83
- message = _a.sent();
84
- expect(message).to.eq('tcpworld');
85
- return [2 /*return*/];
86
- }
87
- });
88
- }); });
89
- });
90
- return [2 /*return*/];
91
- });
92
- }); });
93
- });
94
- describe('Verification', function () {
95
- describe('with MATT protocol', function () {
96
- var HTTP_PORT = 8888;
97
- var TCP_PORT = 8887;
98
- beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
99
- return __generator(this, function (_a) {
100
- switch (_a.label) {
101
- case 0: return [4 /*yield*/, startHTTPServer(HOST, HTTP_PORT)];
102
- case 1:
103
- _a.sent();
104
- return [4 /*yield*/, startTCPServer(HOST, TCP_PORT)];
105
- case 2:
106
- _a.sent();
107
- return [2 /*return*/];
108
- }
109
- });
110
- }); });
111
- it('validates a matt message', function () { return __awaiter(void 0, void 0, void 0, function () {
112
- var v;
113
- return __generator(this, function (_a) {
114
- v = new verifier_1.Verifier({
115
- providerBaseUrl: "http://".concat(HOST, ":").concat(HTTP_PORT),
116
- transports: [
117
- {
118
- port: TCP_PORT,
119
- protocol: 'matt',
120
- scheme: 'tcp',
121
- },
122
- ],
123
- pactUrls: [
124
- path.join(__dirname, '../../..', 'pacts', 'myconsumer-myprovider.json'),
125
- ],
126
- stateHandlers: {
127
- 'a dog named rover': function () {
128
- // Add the dog to the database
129
- dogs[27] = {
130
- id: 27,
131
- name: 'fido',
132
- type: 'bulldog',
133
- };
134
- return Promise.resolve();
135
- },
136
- },
137
- messageProviders: {
138
- 'a request for a dog': (0, messageProviderPact_1.providerWithMetadata)(function () {
139
- return createDog(27);
140
- }, {
141
- queue: 'animals',
142
- }),
143
- },
144
- });
145
- return [2 /*return*/, v.verifyProvider()];
146
- });
147
- }); });
148
- });
149
- });
150
- });
151
- var parseMattMessage = function (raw) {
152
- return raw.replace(/(MATT)+/g, '').trim();
153
- };
154
- var generateMattMessage = function (raw) {
155
- return "MATT".concat(raw, "MATT");
156
- };
157
- var sendMattMessageTCP = function (message, host, port) {
158
- var socket = net.connect({
159
- port: port,
160
- host: host,
161
- });
162
- var res = socket.write(generateMattMessage(message) + '\n');
163
- if (!res) {
164
- throw Error('unable to connect to host');
165
- }
166
- return new Promise(function (resolve) {
167
- socket.on('data', function (data) {
168
- resolve(parseMattMessage(data.toString()));
169
- });
170
- });
171
- };
172
- // Server Implementation
173
- var startTCPServer = function (host, port) {
174
- var server = net.createServer();
175
- server.on('connection', function (sock) {
176
- sock.on('data', function (data) {
177
- var msg = parseMattMessage(data.toString());
178
- if (msg === 'hellotcp') {
179
- sock.write(generateMattMessage('tcpworld'));
180
- }
181
- else {
182
- sock.write(generateMattMessage('message not understood'));
183
- }
184
- sock.write('\n');
185
- });
186
- });
187
- return new Promise(function (resolve) {
188
- server.listen(port, host);
189
- server.on('listening', function () {
190
- resolve(null);
191
- });
192
- });
193
- };
194
- var startHTTPServer = function (host, port) {
195
- var server = express();
196
- server.post('/matt', function (_, res) {
197
- res.setHeader('content-type', 'application/matt');
198
- res.send(generateMattMessage('world'));
199
- });
200
- var s;
201
- return new Promise(function (resolve) {
202
- s = server.listen(port, host, function () {
203
- resolve();
204
- });
205
- }).then(function () { return s; });
206
- };
207
- var dogs = {};
208
- // API integration client
209
- var createDog = function (id) {
210
- return new Promise(function (resolve) {
211
- resolve(dogs[id]);
212
- });
213
- };
214
- //# sourceMappingURL=index.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../../../src/v4/message/index.spec.ts"],"names":[],"mappings":"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"}