src/views/docs/api/contracts/imposter.ejs
<pre id='imposter-specification'><code>{
<span id='imposter-port'><%- indent(2) %>"port": 4545,</span>
<span id='imposter-protocol'><%- indent(2) %>"protocol": "https",</span>
<span id='imposter-name'><%- indent(2) %>"name": "imposter contract service",</span>
<span id='imposter-recordRequests'><%- indent(2) %>"recordRequests": "true",</span>
<span id='imposter-numberOfRequests' class='response'><%- indent(2) %>"numberOfRequests": "1",</span>
<span id='imposter-key'><%- indent(2) %>"key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCrvse04YkxtVGagyvGJCsvv7LTfLK5uR/ZIJKDYCnuF+BqBzM4\nlko8O39vx+Lz9FfF11Xl+CN1aY37YurLYOle3dC/qslSbQDe2TJN7lcVHVssePvc\nO5IExpvNFV5LYtmyCMKJHxpnIprv/trUso5obqzzXhFVPV9SQbFH/snInwIDAQAB\nAoGARywlqLD6YO4qJiULw+4DM6N2oSwBCPRN3XYhIW59kdy1NFtNf7rQgsuJUTJ9\nu+lbYnKNd2LwltyqaS4h7Sx5KRhpFNmMpyVsBf5J2q3fbfmrsXt+emY7XhVTc1NV\nizUWYyxCoTTeMWvN/6NYpPV0lSxq7jMTFVZrWQUMqJclxpECQQDTlGwALtAX1Y8u\nGKsEHPkoq9bhHA5N9WAboQ4LQCZVC8eBf/XH//2iosYTXRNgII2JLmHmmxJHo5iN\nJPFMbnoHAkEAz81osJf+yHm7PBBJP4zEWZCV25c+iJiPDpj5UoUXEbq47qVfy1mV\nDqy2zoDynAWitU7PeHyZ8ozfyribPoR2qQJAVmvMhXKZmvKnLivzRpXTC9LMzVwZ\nV6x/Wim5w8yrG5fZIMM0kEG2xwR3pZch/+SsCzl/0aLLn6lp+VT6nr6NZwJBAMxs\nHrvymoLvNeDtiJFK0nHliXafP7YyljDfDg4+vSYE0R57c1RhSQBJqgBV29TeumSw\nJes6cFuqeBE+MAJ9XxkCQDdUdhnA8HHQRNetqK7lygUep7EcHHCB6u/0FypoLw7o\nEUVo5KSEFq93UeMr3B7DDPIz3LOrFXlm7clCh1HFZhQ=\n-----END RSA PRIVATE KEY-----",</span>
<span id='imposter-cert'><%- indent(2) %>"cert": "-----BEGIN CERTIFICATE-----\nMIIB6TCCAVICCQCZgxbBD0CG4zANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJV\nUzETMBEGA1UECBMKU29tZS1TdGF0ZTEVMBMGA1UEChMMVGhvdWdodFdvcmtzMB4X\nDTEzMTIyOTE2NDAzN1oXDTE0MDEyODE2NDAzN1owOTELMAkGA1UEBhMCVVMxEzAR\nBgNVBAgTClNvbWUtU3RhdGUxFTATBgNVBAoTDFRob3VnaHRXb3JrczCBnzANBgkq\nhkiG9w0BAQEFAAOBjQAwgYkCgYEAq77HtOGJMbVRmoMrxiQrL7+y03yyubkf2SCS\ng2Ap7hfgagczOJZKPDt/b8fi8/RXxddV5fgjdWmN+2Lqy2DpXt3Qv6rJUm0A3tky\nTe5XFR1bLHj73DuSBMabzRVeS2LZsgjCiR8aZyKa7/7a1LKOaG6s814RVT1fUkGx\nR/7JyJ8CAwEAATANBgkqhkiG9w0BAQUFAAOBgQCPhixeKxIy+ftrfPikwjYo1uxp\ngQ18FdVN1pbI//IIx1o8kJuX8yZzO95PsCOU0GbIRCkFMhBlqHiD9H0/W/GvWzjf\n7WFW15lL61y/kH1J0wqEgoaMrUDjHZvKVr0HrN+vSxHlNQcSNFJ2KdvZ5a9dhpGf\nXOdprCdUUXzSoJWCCg==\n-----END CERTIFICATE-----",</span>
<span id='imposter-mutualAuth'><%- indent(2) %>"mutualAuth": false,</span>
<span id='imposter-defaultResponse'><%- indent(2) %>"defaultResponse": {
"statusCode": 400,
"body": "Bad Request",
"headers": {}
},</span>
<span id='imposter-stubs'><%- indent(2) %>"stubs": [</span>
{
<span id='imposter-stubs-responses'><%- indent(6) %>"responses": [</span>
{
<span id='imposter-stubs-responses-is'><%- indent(10) %>"is": {
"statusCode": 201,
"headers": {
"Location": "http://example.com/resource"
},
"body": "The time is ${TIME}",
"_mode": "text"
},</span>
<span id='imposter-stubs-responses-repeat'><%- indent(10) %>"repeat": 3,</span>
<span id='imposter-stubs-behaviors'><%- indent(10) %>"behaviors": [</span>
<span id='imposter-stubs-behaviors-wait'><%- indent(12) %>{ "wait": 500 },</span>
<span id='imposter-stubs-behaviors-decorate'><%- indent(12) %>{ "decorate": "config => { config.response.body = config.response.body.replace('${TIME}', 'now'); }" },</span>
<span id='imposter-stubs-behaviors-shellTransform'><%- indent(12) %>{ "shellTransform": "transformResponse" },</span>
<span id='imposter-stubs-behaviors-copy'><%- indent(12) %>{
"copy": {
"from": "body",
"into": "${NAME}",
"using": {
"method": "xpath",
"selector": "//test:name",
"ns": { "test": "http://example.com/test" }
}
}
},</span>
<span id='imposter-stubs-behaviors-lookup'><%- indent(12) %>{
"lookup": {
"key": {
"from": { "headers": "If-Modified-Since" },
"using": {
"method": "regex",
"selector": "(\\w+), (\\d+) (\\w+) (\\d+)",
"options": { "ignoreCase": true, "multiline": true }
},
"index": 2
},
"fromDataSource": {
"csv": {
"path": "values.csv",
"keyColumn": "month",
"delimiter": ","
}
},
"into": "${row}"
}
}</span>
]
},
{
<span id='imposter-stubs-responses-proxy'><%- indent(10) %>"proxy": {</span>
<span id='imposter-stubs-responses-proxy-to'><%- indent(12) %>"to": "https://www.somesite.com:3000",</span>
<span id='imposter-stubs-responses-proxy-mode'><%- indent(12) %>"mode": "proxyAlways",</span>
<span id='imposter-stubs-responses-proxy-key'><%- indent(12) %>"key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCrvse04YkxtVGagyvGJCsvv7LTfLK5uR/ZIJKDYCnuF+BqBzM4\nlko8O39vx+Lz9FfF11Xl+CN1aY37YurLYOle3dC/qslSbQDe2TJN7lcVHVssePvc\nO5IExpvNFV5LYtmyCMKJHxpnIprv/trUso5obqzzXhFVPV9SQbFH/snInwIDAQAB\nAoGARywlqLD6YO4qJiULw+4DM6N2oSwBCPRN3XYhIW59kdy1NFtNf7rQgsuJUTJ9\nu+lbYnKNd2LwltyqaS4h7Sx5KRhpFNmMpyVsBf5J2q3fbfmrsXt+emY7XhVTc1NV\nizUWYyxCoTTeMWvN/6NYpPV0lSxq7jMTFVZrWQUMqJclxpECQQDTlGwALtAX1Y8u\nGKsEHPkoq9bhHA5N9WAboQ4LQCZVC8eBf/XH//2iosYTXRNgII2JLmHmmxJHo5iN\nJPFMbnoHAkEAz81osJf+yHm7PBBJP4zEWZCV25c+iJiPDpj5UoUXEbq47qVfy1mV\nDqy2zoDynAWitU7PeHyZ8ozfyribPoR2qQJAVmvMhXKZmvKnLivzRpXTC9LMzVwZ\nV6x/Wim5w8yrG5fZIMM0kEG2xwR3pZch/+SsCzl/0aLLn6lp+VT6nr6NZwJBAMxs\nHrvymoLvNeDtiJFK0nHliXafP7YyljDfDg4+vSYE0R57c1RhSQBJqgBV29TeumSw\nJes6cFuqeBE+MAJ9XxkCQDdUdhnA8HHQRNetqK7lygUep7EcHHCB6u/0FypoLw7o\nEUVo5KSEFq93UeMr3B7DDPIz3LOrFXlm7clCh1HFZhQ=\n-----END RSA PRIVATE KEY-----",</span>
<span id='imposter-stubs-responses-proxy-cert'><%- indent(12) %>"cert": "-----BEGIN CERTIFICATE-----\nMIIB6TCCAVICCQCZgxbBD0CG4zANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJV\nUzETMBEGA1UECBMKU29tZS1TdGF0ZTEVMBMGA1UEChMMVGhvdWdodFdvcmtzMB4X\nDTEzMTIyOTE2NDAzN1oXDTE0MDEyODE2NDAzN1owOTELMAkGA1UEBhMCVVMxEzAR\nBgNVBAgTClNvbWUtU3RhdGUxFTATBgNVBAoTDFRob3VnaHRXb3JrczCBnzANBgkq\nhkiG9w0BAQEFAAOBjQAwgYkCgYEAq77HtOGJMbVRmoMrxiQrL7+y03yyubkf2SCS\ng2Ap7hfgagczOJZKPDt/b8fi8/RXxddV5fgjdWmN+2Lqy2DpXt3Qv6rJUm0A3tky\nTe5XFR1bLHj73DuSBMabzRVeS2LZsgjCiR8aZyKa7/7a1LKOaG6s814RVT1fUkGx\nR/7JyJ8CAwEAATANBgkqhkiG9w0BAQUFAAOBgQCPhixeKxIy+ftrfPikwjYo1uxp\ngQ18FdVN1pbI//IIx1o8kJuX8yZzO95PsCOU0GbIRCkFMhBlqHiD9H0/W/GvWzjf\n7WFW15lL61y/kH1J0wqEgoaMrUDjHZvKVr0HrN+vSxHlNQcSNFJ2KdvZ5a9dhpGf\nXOdprCdUUXzSoJWCCg==\n-----END CERTIFICATE-----",</span>
<span id='imposter-stubs-responses-proxy-ciphers'><%- indent(12) %>"ciphers": "RC4-MD5",</span>
<span id='imposter-stubs-responses-proxy-secureProtocol'><%- indent(12) %>"secureProtocol": "TLSv1_1_method",</span>
<span id='imposter-stubs-responses-proxy-passphrase'><%- indent(12) %>"passphrase": "LetMeIn!",</span>
<span id='imposter-stubs-responses-proxy-addWaitBehavior'><%- indent(12) %>"addWaitBehavior": "true",</span>
<span id='imposter-stubs-responses-proxy-addDecorateBehavior'><%- indent(12) %>"addDecorateBehavior": "(request, response) => { response.body = response.body.replace('${TIME}', 'now'); }",</span>
<span id='imposter-stubs-responses-proxy-predicateGenerators'><%- indent(12) %>"predicateGenerators": [
{
"matches": {
"path": true
},
"caseSensitive": true,
"except": "^The^",
"jsonpath": {
"selector": "$..book"
},
"xpath": {
"selector": "//book/@title",
"ns": {
"isbn": "http://schemas.isbn.org/ns/1999/basic.dtd"
}
},
"inject": "function (config) { return []; }",
"ignore": { "query": "startDate" }
}
],</span>
<span id='imposter-stubs-responses-proxy-injectHeaders'><%- indent(12) %>"injectHeaders": {
"X-Custom-Header": "Served by mountebank"
}</span>
}
},
{
<span id='imposter-stubs-responses-inject'><%- indent(10) %>"inject": "function (config) { config.callback({ body: 'It worked!' }); }"</span>
}
],
<span id='imposter-stubs-predicates'><%- indent(6) %>"predicates": [</span>
{
<span id='imposter-stubs-predicates-0-equals'><%- indent(10) %>"equals": {
"body": "value"
},</span>
<span id='imposter-stubs-predicates-0-caseSensitive'><%- indent(10) %>"caseSensitive": true,</span>
<span id='imposter-stubs-predicates-0-except'><%- indent(10) %>"except": "^The ",</span>
<span id='imposter-stubs-predicates-0-jsonpath'><%- indent(10) %>"jsonpath": {
"selector": "$..book"
},</span>
<span id='imposter-stubs-predicates-0-xpath'><%- indent(10) %>"xpath": {
"selector": "//book/@title",
"ns": {
"isbn": "http://schemas.isbn.org/ns/1999/basic.dtd"
}</span>
}
},
{
<span id='imposter-stubs-predicates-1-inject'><%- indent(10) %>"inject": "function (config) { return config.request.body.length < 100; }"</span>
}
],
<span id='imposter-stubs-matches' class='response'><%- indent(6) %>"matches": [
{
"timestamp": "2014-01-09T02:30:31.043Z",
"request": {
"requestFrom": "::ffff:127.0.0.1:60523",
"method": "POST",
"path": "/imposters",
"query": {},
"headers": {
"accept": "text/plain",
"host": "localhost:4545",
"content-type": "application/xml",
"connection": "keep-alive",
"transfer-encoding": "chunked"
},
"body": "<books><book title='The value' /></books>"
},
"response": {
"statusCode": 201,
"headers": {
"Location": "http://example.com/resource"
},
"body": "The time is now",
"_mode": "text"
}
}
]
}
],</span>
<span id='imposter-endOfRequestResolver'><%- indent(2) %>"endOfRequestResolver": {
"inject": "function (config) { return config.request.length >= 100; }"</span>
},
<span id='imposter-requests' class='response'><%- indent(2) %>"requests": [
{
"timestamp": "2014-01-09T02:30:31.043Z",
"requestFrom": "::ffff:127.0.0.1:60523",
"method": "POST",
"path": "/imposters",
"query": {},
"headers": {
"accept": "text/plain",
"host": "localhost:4545",
"content-type": "text/plain",
"connection": "keep-alive",
"transfer-encoding": "chunked"
},
"body": "Just checking"
}
],</span>
<span id='imposter-_links' class='response'><%- indent(2) %>"_links": {
"self": {
"href": "http://localhost:2525/imposters/4545"</span>
}
}
}
</code></pre>