@pact-foundation/pact 7.3.0 → 8.0.2

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 (97) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/CONTRIBUTING.md +22 -9
  3. package/LICENSE +1 -2
  4. package/README.md +253 -157
  5. package/common/logger.js +10 -5
  6. package/common/logger.js.map +1 -1
  7. package/common/metadata.js.map +1 -1
  8. package/common/net.js +3 -2
  9. package/common/net.js.map +1 -1
  10. package/common/net.spec.d.ts +1 -0
  11. package/common/net.spec.js +47 -0
  12. package/common/net.spec.js.map +1 -0
  13. package/common/request.js +1 -2
  14. package/common/request.js.map +1 -1
  15. package/common/request.spec.d.ts +1 -0
  16. package/common/request.spec.js +71 -0
  17. package/common/request.spec.js.map +1 -0
  18. package/common/utils.js +1 -2
  19. package/common/utils.js.map +1 -1
  20. package/dsl/apolloGraphql.d.ts +1 -1
  21. package/dsl/apolloGraphql.js +6 -3
  22. package/dsl/apolloGraphql.js.map +1 -1
  23. package/dsl/apolloGraphql.spec.d.ts +1 -0
  24. package/dsl/apolloGraphql.spec.js +47 -0
  25. package/dsl/apolloGraphql.spec.js.map +1 -0
  26. package/dsl/graphql.js +19 -9
  27. package/dsl/graphql.js.map +1 -1
  28. package/dsl/graphql.spec.d.ts +1 -0
  29. package/dsl/graphql.spec.js +141 -0
  30. package/dsl/graphql.spec.js.map +1 -0
  31. package/dsl/interaction.js +9 -7
  32. package/dsl/interaction.js.map +1 -1
  33. package/dsl/interaction.spec.d.ts +1 -0
  34. package/dsl/interaction.spec.js +172 -0
  35. package/dsl/interaction.spec.js.map +1 -0
  36. package/dsl/matchers.d.ts +25 -25
  37. package/dsl/matchers.js +57 -55
  38. package/dsl/matchers.js.map +1 -1
  39. package/dsl/matchers.spec.d.ts +1 -0
  40. package/dsl/matchers.spec.js +537 -0
  41. package/dsl/matchers.spec.js.map +1 -0
  42. package/dsl/message.d.ts +29 -3
  43. package/dsl/mockService.d.ts +6 -0
  44. package/dsl/mockService.js +10 -4
  45. package/dsl/mockService.js.map +1 -1
  46. package/dsl/mockService.spec.d.ts +1 -0
  47. package/dsl/mockService.spec.js +126 -0
  48. package/dsl/mockService.spec.js.map +1 -0
  49. package/dsl/verifier.d.ts +48 -2
  50. package/dsl/verifier.js +142 -3
  51. package/dsl/verifier.js.map +1 -1
  52. package/dsl/verifier.spec.d.ts +1 -0
  53. package/dsl/verifier.spec.js +299 -0
  54. package/dsl/verifier.spec.js.map +1 -0
  55. package/errors/configurationError.d.ts +2 -0
  56. package/errors/configurationError.js +24 -0
  57. package/errors/configurationError.js.map +1 -0
  58. package/errors/graphQLQueryError.d.ts +2 -0
  59. package/errors/graphQLQueryError.js +24 -0
  60. package/errors/graphQLQueryError.js.map +1 -0
  61. package/errors/matcherError.d.ts +2 -0
  62. package/errors/matcherError.js +24 -0
  63. package/errors/matcherError.js.map +1 -0
  64. package/errors/verificationError.d.ts +2 -0
  65. package/errors/verificationError.js +24 -0
  66. package/errors/verificationError.js.map +1 -0
  67. package/httpPact.d.ts +69 -0
  68. package/httpPact.js +206 -0
  69. package/httpPact.js.map +1 -0
  70. package/httpPact.spec.d.ts +1 -0
  71. package/httpPact.spec.js +337 -0
  72. package/httpPact.spec.js.map +1 -0
  73. package/messageConsumerPact.d.ts +3 -3
  74. package/messageConsumerPact.js +5 -4
  75. package/messageConsumerPact.js.map +1 -1
  76. package/messageConsumerPact.spec.d.ts +1 -0
  77. package/messageConsumerPact.spec.js +161 -0
  78. package/messageConsumerPact.spec.js.map +1 -0
  79. package/messageProviderPact.d.ts +0 -1
  80. package/messageProviderPact.js +11 -11
  81. package/messageProviderPact.js.map +1 -1
  82. package/messageProviderPact.spec.d.ts +1 -0
  83. package/messageProviderPact.spec.js +146 -0
  84. package/messageProviderPact.spec.js.map +1 -0
  85. package/package.json +24 -26
  86. package/pact-web.d.ts +2 -2
  87. package/pact-web.js +20 -10
  88. package/pact-web.js.map +1 -1
  89. package/pact-web.spec.d.ts +1 -0
  90. package/pact-web.spec.js +205 -0
  91. package/pact-web.spec.js.map +1 -0
  92. package/pact.d.ts +28 -65
  93. package/pact.integration.spec.d.ts +0 -0
  94. package/pact.integration.spec.js +292 -0
  95. package/pact.integration.spec.js.map +1 -0
  96. package/pact.js +21 -189
  97. package/pact.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mockService.js","sourceRoot":"","sources":["../../src/dsl/mockService.ts"],"names":[],"mappings":";;AAOA,6CAAwD;AA0BxD;IAKE;;;;;;;OAOG;IACH;IACE,yEAAyE;IACjE,QAAiB,EACjB,QAAiB;IAEzB,QAAQ;IACA,IAAW,EACX,IAAkB,EAClB,GAAW,EACX,iBAAkD;QAHlD,qBAAA,EAAA,WAAW;QACX,qBAAA,EAAA,kBAAkB;QAClB,oBAAA,EAAA,WAAW;QACX,kCAAA,EAAA,+BAAkD;QAPlD,aAAQ,GAAR,QAAQ,CAAS;QACjB,aAAQ,GAAR,QAAQ,CAAS;QAGjB,SAAI,GAAJ,IAAI,CAAO;QACX,SAAI,GAAJ,IAAI,CAAc;QAClB,QAAG,GAAH,GAAG,CAAQ;QACX,sBAAiB,GAAjB,iBAAiB,CAAiC;QAE1D,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,CAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAM,IAAI,SAAI,IAAM,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;YACrD,mBAAmB,EAAE,iBAAiB;YACtC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;SACtD,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,oCAAc,GAArB,UAAsB,WAAwB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAU,CAAC,IAAI,EAAK,IAAI,CAAC,OAAO,kBAAe,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAChH,CAAC;IAED;;;OAGG;IACI,wCAAkB,GAAzB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAU,CAAC,MAAM,EAAK,IAAI,CAAC,OAAO,kBAAe,CAAC,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACI,4BAAM,GAAb;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAU,CAAC,GAAG,EAAK,IAAI,CAAC,OAAO,+BAA4B,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACI,+BAAS,GAAhB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAU,CAAC,IAAI,EAAK,IAAI,CAAC,OAAO,UAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACtG,CAAC;IAEH,kBAAC;AAAD,CAAC,AAlED,IAkEC;AAlEY,kCAAW"}
1
+ {"version":3,"file":"mockService.js","sourceRoot":"","sources":["../../src/dsl/mockService.ts"],"names":[],"mappings":";;AAAA;;;;;GAKG;AACH,6CAAuD;AA0BvD;IAKE;;;;;;;OAOG;IACH;IACE,yEAAyE;IACjE,QAAiB,EACjB,QAAiB;IACzB,QAAQ;IACA,IAAW,EACX,IAAkB,EAClB,GAAW,EACX,iBAAkD;QAHlD,qBAAA,EAAA,WAAW;QACX,qBAAA,EAAA,kBAAkB;QAClB,oBAAA,EAAA,WAAW;QACX,kCAAA,EAAA,+BAAkD;QANlD,aAAQ,GAAR,QAAQ,CAAS;QACjB,aAAQ,GAAR,QAAQ,CAAS;QAEjB,SAAI,GAAJ,IAAI,CAAO;QACX,SAAI,GAAJ,IAAI,CAAc;QAClB,QAAG,GAAH,GAAG,CAAQ;QACX,sBAAiB,GAAjB,iBAAiB,CAAiC;QAE1D,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,CAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAM,IAAI,CAAC,IAAI,SAAI,IAAI,CAAC,IAAM,CAAA;QAC3E,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;YAC7D,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAA;IACH,CAAC;IAED;;;;OAIG;IACI,oCAAc,GAArB,UAAsB,WAAwB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,oBAAU,CAAC,IAAI,EACZ,IAAI,CAAC,OAAO,kBAAe,EAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CACnC,CAAA;IACH,CAAC;IAED;;;OAGG;IACI,wCAAkB,GAAzB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAU,CAAC,MAAM,EAAK,IAAI,CAAC,OAAO,kBAAe,CAAC,CAAA;IAC7E,CAAC;IAED;;;OAGG;IACI,4BAAM,GAAb;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,oBAAU,CAAC,GAAG,EACX,IAAI,CAAC,OAAO,+BAA4B,CAC5C,CAAA;IACH,CAAC;IAED;;;OAGG;IACI,+BAAS,GAAhB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,oBAAU,CAAC,IAAI,EACZ,IAAI,CAAC,OAAO,UAAO,EACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CACjC,CAAA;IACH,CAAC;IACH,kBAAC;AAAD,CAAC,AA3ED,IA2EC;AA3EY,kCAAW"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* tslint:disable:no-unused-expression */
4
+ var chai = require("chai");
5
+ var chaiAsPromised = require("chai-as-promised");
6
+ var nock = require("nock");
7
+ var request_1 = require("../common/request");
8
+ var interaction_1 = require("./interaction");
9
+ var mockService_1 = require("./mockService");
10
+ chai.use(chaiAsPromised);
11
+ var expect = chai.expect;
12
+ describe("MockService", function () {
13
+ after(function () {
14
+ nock.restore();
15
+ });
16
+ describe("#constructor", function () {
17
+ it("creates a MockService when all mandatory parameters are provided", function () {
18
+ var mock = new mockService_1.MockService("consumer", "provider", 1234);
19
+ expect(mock.baseUrl).to.eql("http://127.0.0.1:1234");
20
+ });
21
+ it("creates a MockService when all mandatory parameters are provided", function () {
22
+ var mock = new mockService_1.MockService("consumer", "provider", 4443, "127.0.0.2", true);
23
+ expect(mock.baseUrl).to.eql("https://127.0.0.2:4443");
24
+ });
25
+ it("creates a MockService when port is not provided", function () {
26
+ var mock = new mockService_1.MockService("consumer", "provider");
27
+ expect(mock).to.not.be.undefined;
28
+ expect(mock.baseUrl).to.eql("http://127.0.0.1:1234");
29
+ });
30
+ it("does not create a MockService when consumer is not provided", function () {
31
+ expect(function () {
32
+ new mockService_1.MockService("", "provider");
33
+ }).not.to.throw(Error);
34
+ });
35
+ it("does not create a MockService when provider is not provided", function () {
36
+ expect(function () {
37
+ new mockService_1.MockService("consumer", "");
38
+ }).not.to.throw(Error);
39
+ });
40
+ });
41
+ describe("#addInteraction", function () {
42
+ var mock = new mockService_1.MockService("consumer", "provider", 1234);
43
+ var interaction = new interaction_1.Interaction();
44
+ interaction
45
+ .uponReceiving("duh")
46
+ .withRequest({ method: request_1.HTTPMethod.GET, path: "/search" })
47
+ .willRespondWith({ status: 200 });
48
+ it("when Interaction added successfully", function () {
49
+ nock(mock.baseUrl)
50
+ .post(/interactions$/)
51
+ .reply(200);
52
+ return expect(mock.addInteraction(interaction)).to.eventually;
53
+ });
54
+ it("when Interaction fails to be added", function () {
55
+ nock(mock.baseUrl)
56
+ .post(/interactions$/)
57
+ .reply(500);
58
+ return expect(mock.addInteraction(interaction)).to.eventually.be.rejected;
59
+ });
60
+ });
61
+ describe("#removeInteractions", function () {
62
+ var mock = new mockService_1.MockService("consumer", "provider", 1234);
63
+ it("when interactions are removed successfully", function () {
64
+ nock(mock.baseUrl)
65
+ .delete(/interactions$/)
66
+ .reply(200);
67
+ return expect(mock.removeInteractions()).to.eventually.be.fulfilled;
68
+ });
69
+ it("when interactions fail to be removed", function () {
70
+ nock(mock.baseUrl)
71
+ .delete(/interactions$/)
72
+ .reply(500);
73
+ return expect(mock.removeInteractions()).to.eventually.be.rejected;
74
+ });
75
+ });
76
+ describe("#verify", function () {
77
+ var mock = new mockService_1.MockService("consumer", "provider", 1234);
78
+ it("when verification is successful", function () {
79
+ nock(mock.baseUrl)
80
+ .get(/interactions\/verification$/)
81
+ .reply(200);
82
+ return expect(mock.verify()).to.eventually.be.fulfilled;
83
+ });
84
+ it("when verification fails", function () {
85
+ nock(mock.baseUrl)
86
+ .get(/interactions\/verification$/)
87
+ .reply(500);
88
+ return expect(mock.verify()).to.eventually.be.rejected;
89
+ });
90
+ });
91
+ describe("#writePact", function () {
92
+ describe("when consumer and provider details provided", function () {
93
+ var mock = new mockService_1.MockService("aconsumer", "aprovider", 1234);
94
+ describe("and writing is successful", function () {
95
+ it("writes the consumer and provider details into the pact", function () {
96
+ nock(mock.baseUrl)
97
+ .post(/pact$/, {
98
+ consumer: { name: "aconsumer" },
99
+ pactfile_write_mode: "overwrite",
100
+ provider: { name: "aprovider" },
101
+ })
102
+ .reply(200);
103
+ return expect(mock.writePact()).to.eventually.be.fulfilled;
104
+ });
105
+ });
106
+ describe("and writing fails", function () {
107
+ it("returns a rejected promise", function () {
108
+ nock(mock.baseUrl)
109
+ .post(/pact$/, {})
110
+ .reply(500);
111
+ return expect(mock.writePact()).to.eventually.be.rejected;
112
+ });
113
+ });
114
+ });
115
+ describe("when consumer and provider details are not provided", function () {
116
+ var mock = new mockService_1.MockService(undefined, undefined, 1234);
117
+ it("does not write the consumer and provider details into the pact", function () {
118
+ nock(mock.baseUrl)
119
+ .post(/pact$/)
120
+ .reply(200);
121
+ return expect(mock.writePact()).to.eventually.be.fulfilled;
122
+ });
123
+ });
124
+ });
125
+ });
126
+ //# sourceMappingURL=mockService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockService.spec.js","sourceRoot":"","sources":["../../src/dsl/mockService.spec.ts"],"names":[],"mappings":"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"}
package/dsl/verifier.d.ts CHANGED
@@ -1,4 +1,50 @@
1
- import { VerifierOptions } from "@pact-foundation/pact-node";
1
+ import * as express from "express";
2
+ import { LogLevel } from "./options";
3
+ export interface ProviderState {
4
+ states?: [string];
5
+ }
6
+ export interface StateHandler {
7
+ [name: string]: () => Promise<any>;
8
+ }
9
+ export interface VerifierOptions {
10
+ logLevel?: LogLevel;
11
+ requestFilter?: express.RequestHandler;
12
+ stateHandlers?: StateHandler;
13
+ providerBaseUrl: string;
14
+ provider?: string;
15
+ pactUrls?: string[];
16
+ pactBrokerBaseUrl?: string;
17
+ providerStatesSetupUrl?: string;
18
+ pactBrokerUsername?: string;
19
+ pactBrokerPassword?: string;
20
+ consumerVersionTag?: string;
21
+ customProviderHeaders?: string[];
22
+ publishVerificationResult?: boolean;
23
+ providerVersion?: string;
24
+ pactBrokerUrl?: string;
25
+ tags?: string[];
26
+ timeout?: number;
27
+ monkeypatch?: string;
28
+ format?: "json" | "RspecJunitFormatter";
29
+ out?: string;
30
+ }
2
31
  export declare class Verifier {
3
- verifyProvider(opts: VerifierOptions): Promise<any>;
32
+ private address;
33
+ private stateSetupPath;
34
+ private config;
35
+ private deprecatedFields;
36
+ constructor(config?: VerifierOptions);
37
+ /**
38
+ * Verify a HTTP Provider
39
+ *
40
+ * @param config
41
+ */
42
+ verifyProvider(config?: VerifierOptions): Promise<any>;
43
+ private runProviderVerification;
44
+ private waitForServerReady;
45
+ private startProxy;
46
+ private createProxy;
47
+ private createProxyStateHandler;
48
+ private setupStates;
49
+ private setConfig;
4
50
  }
package/dsl/verifier.js CHANGED
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  /**
4
15
  * Provider Verifier service
@@ -6,11 +17,139 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
17
  */
7
18
  var pact_node_1 = require("@pact-foundation/pact-node");
8
19
  var utils_1 = require("../common/utils");
20
+ var pact_node_2 = require("@pact-foundation/pact-node");
21
+ var lodash_1 = require("lodash");
22
+ var express = require("express");
23
+ var http = require("http");
24
+ var logger_1 = require("../common/logger");
25
+ var configurationError_1 = require("../errors/configurationError");
26
+ var HttpProxy = require("http-proxy");
27
+ var bodyParser = require("body-parser");
9
28
  var Verifier = /** @class */ (function () {
10
- function Verifier() {
29
+ function Verifier(config) {
30
+ this.address = "http://localhost";
31
+ this.stateSetupPath = "/_pactSetup";
32
+ this.deprecatedFields = ["providerStatesSetupUrl"];
33
+ if (config) {
34
+ this.setConfig(config);
35
+ }
11
36
  }
12
- Verifier.prototype.verifyProvider = function (opts) {
13
- return utils_1.qToPromise(pact_node_1.default.verifyPacts(opts));
37
+ /**
38
+ * Verify a HTTP Provider
39
+ *
40
+ * @param config
41
+ */
42
+ Verifier.prototype.verifyProvider = function (config) {
43
+ logger_1.default.info("Verifying provider");
44
+ // Backwards compatibility
45
+ if (config) {
46
+ logger_1.default.warn("Passing options to verifyProvider() wil be deprecated in future versions, please provide to Verifier constructor instead");
47
+ this.setConfig(config);
48
+ }
49
+ if (lodash_1.isEmpty(this.config)) {
50
+ return Promise.reject(new configurationError_1.default("No configuration provided to verifier"));
51
+ }
52
+ // Start the verification CLI proxy server
53
+ var app = this.createProxy();
54
+ var server = this.startProxy(app);
55
+ // Run the verification once the proxy server is available
56
+ return this.waitForServerReady(server)
57
+ .then(this.runProviderVerification())
58
+ .then(function (result) {
59
+ server.close();
60
+ return result;
61
+ })
62
+ .catch(function (e) {
63
+ server.close();
64
+ throw e;
65
+ });
66
+ };
67
+ // Run the Verification CLI process
68
+ Verifier.prototype.runProviderVerification = function () {
69
+ var _this = this;
70
+ return function (server) {
71
+ var opts = __assign({}, lodash_1.omit(_this.config, "handlers"), { providerBaseUrl: _this.address + ":" + server.address().port }, {
72
+ providerStatesSetupUrl: _this.address + ":" + server.address().port + _this.stateSetupPath,
73
+ });
74
+ return utils_1.qToPromise(pact_node_1.default.verifyPacts(opts));
75
+ };
76
+ };
77
+ // Listens for the server start event
78
+ // Converts event Emitter to a Promise
79
+ Verifier.prototype.waitForServerReady = function (server) {
80
+ return new Promise(function (resolve, reject) {
81
+ server.on("listening", function () { return resolve(server); });
82
+ server.on("error", function () {
83
+ return reject(new Error("Unable to start verification proxy server"));
84
+ });
85
+ });
86
+ };
87
+ // Get the Proxy we'll pass to the CLI for verification
88
+ Verifier.prototype.startProxy = function (app) {
89
+ return http.createServer(app).listen();
90
+ };
91
+ // Get the Express app that will run on the HTTP Proxy
92
+ Verifier.prototype.createProxy = function () {
93
+ var _this = this;
94
+ var app = express();
95
+ var proxy = new HttpProxy();
96
+ app.use(this.stateSetupPath, bodyParser.json());
97
+ app.use(this.stateSetupPath, bodyParser.urlencoded({ extended: true }));
98
+ // Allow for request filtering
99
+ if (this.config.requestFilter !== undefined) {
100
+ app.use(this.config.requestFilter);
101
+ }
102
+ // Setup provider state handler
103
+ app.post(this.stateSetupPath, this.createProxyStateHandler());
104
+ // Proxy server will respond to Verifier process
105
+ app.all("/*", function (req, res) {
106
+ logger_1.default.debug("Proxing", req.path);
107
+ proxy.web(req, res, {
108
+ target: _this.config.providerBaseUrl,
109
+ });
110
+ });
111
+ return app;
112
+ };
113
+ Verifier.prototype.createProxyStateHandler = function () {
114
+ var _this = this;
115
+ return function (req, res) {
116
+ var message = req.body;
117
+ return _this.setupStates(message)
118
+ .then(function () { return res.sendStatus(200); })
119
+ .catch(function (e) { return res.status(500).send(e); });
120
+ };
121
+ };
122
+ // Lookup the handler based on the description, or get the default handler
123
+ Verifier.prototype.setupStates = function (descriptor) {
124
+ var _this = this;
125
+ var promises = new Array();
126
+ if (descriptor.states) {
127
+ descriptor.states.forEach(function (state) {
128
+ var handler = _this.config.stateHandlers
129
+ ? _this.config.stateHandlers[state]
130
+ : null;
131
+ if (handler) {
132
+ promises.push(handler());
133
+ }
134
+ else {
135
+ logger_1.default.warn("No state handler found for \"" + state + "\", ignorning");
136
+ }
137
+ });
138
+ }
139
+ return Promise.all(promises);
140
+ };
141
+ Verifier.prototype.setConfig = function (config) {
142
+ var _this = this;
143
+ this.config = config;
144
+ this.deprecatedFields.forEach(function (f) {
145
+ if (_this.config[f]) {
146
+ logger_1.default.warn(f + " is deprecated, and will be removed in future versions");
147
+ }
148
+ });
149
+ if (this.config.logLevel && !lodash_1.isEmpty(this.config.logLevel)) {
150
+ pact_node_2.default.logLevel(this.config.logLevel);
151
+ logger_1.default.level(this.config.logLevel);
152
+ }
14
153
  };
15
154
  return Verifier;
16
155
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/dsl/verifier.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,wDAA8C;AAC9C,yCAA6C;AAG7C;IAAA;IAIA,CAAC;IAHQ,iCAAc,GAArB,UAAsB,IAAqB;QACzC,OAAO,kBAAU,CAAM,mBAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IACH,eAAC;AAAD,CAAC,AAJD,IAIC;AAJY,4BAAQ"}
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/dsl/verifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};