{"_id":"@captor/swift-mock","_rev":"4-89bccf174cc3e6be03adbaf83d00d99d","name":"@captor/swift-mock","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@captor/swift-mock","private":false,"publishConfig":{"access":"public"},"version":"0.1.0","description":"SWIFT mock that emulates SWIFT network, parse and generate SWIFT ISO 15022 messages.","scripts":{"test":"mocha \"tests/**/*.test.js\"","lint":"eslint ."},"dependencies":{"pegjs":"^0.10.0","chokidar":"^3","lodash":"^4","moment":"^2"},"devDependencies":{"eslint":"^5.16.0","eslint-config-airbnb-base":"^13.1.0","eslint-plugin-import":"^2.17.3","mocha":"^5.0.5"},"main":"./lib/swift.js","repository":{"type":"git","url":"git://github.com/captorab/swift-mock.git"},"keywords":["swift","swift mock","iso15022","15022"],"author":{"name":"Andrey Pshenkin","email":"andrey.pshenkin@gmail.com"},"license":"MIT","_id":"@captor/swift-mock@0.1.0","gitHead":"382bb957c9ed8cb4de0e4ff94829ae6af5eb2750","bugs":{"url":"https://github.com/captorab/swift-mock/issues"},"homepage":"https://github.com/captorab/swift-mock#readme","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-UUB8Gevd5v0k9vZX3Csi31bNMQ84QagnXGQ9RQNVzXNWd2NwGh/dilWpLQakskH6HrBtOWdonq1xK1yqEjM14A==","shasum":"d543b0689bc41ca64f670922632c231fc56d91e8","tarball":"https://registry.npmjs.org/@captor/swift-mock/-/swift-mock-0.1.0.tgz","fileCount":14,"unpackedSize":134640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGNHsk+h613pEgZ20N8Y9uEdEC8YVQNfrw7e6GtapCcWAiEA74QNdkt3MoqHXp6mQ904ab76aho3RKDXahrBSqJ2/QY="}]},"_npmUser":{"name":"captor","email":"tech@captor.se"},"directories":{},"maintainers":[{"name":"captor","email":"tech@captor.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/swift-mock_0.1.0_1715847100441_0.5100043180547471"},"_hasShrinkwrap":false},"0.1.1":{"name":"@captor/swift-mock","private":false,"publishConfig":{"access":"public"},"version":"0.1.1","description":"SWIFT mock that emulates SWIFT network, parse and generate SWIFT ISO 15022 messages.","scripts":{"test":"mocha \"tests/**/*.test.js\"","lint":"eslint ."},"dependencies":{"pegjs":"^0.10.0","chokidar":"^3"},"devDependencies":{"eslint":"^5.16.0","eslint-config-airbnb-base":"^13.1.0","eslint-plugin-import":"^2.17.3","mocha":"^5.0.5"},"main":"./lib/swift.js","repository":{"type":"git","url":"git://github.com/captorab/swift-mock.git"},"keywords":["swift","swift mock","iso15022","15022"],"author":{"name":"Andrey Pshenkin","email":"andrey.pshenkin@gmail.com"},"license":"MIT","_id":"@captor/swift-mock@0.1.1","gitHead":"e1dac535cb831dd056c5a4d31c3d77426c7630e7","bugs":{"url":"https://github.com/captorab/swift-mock/issues"},"homepage":"https://github.com/captorab/swift-mock#readme","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-Gva8g8rOIrEpQ9EO1DglXWfFZg1ZBVn1rpsavi5buyW3hJx87OBZtuN4OIrHmF2oq3SJT0OYMzvrnlpFjROtLQ==","shasum":"ef7c7575af8c6b797799cc8ac54bdadc196b535e","tarball":"https://registry.npmjs.org/@captor/swift-mock/-/swift-mock-0.1.1.tgz","fileCount":15,"unpackedSize":225126,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxx5TXaAA6CMvb0hKx0c1FAzx7KaVF08HuexwLb7PljAiEAkpqOEe0ZSeyC90Qr4JE4eJS2fGTQ3aTpD1ewGtb0dyU="}]},"_npmUser":{"name":"captor","email":"tech@captor.se"},"directories":{},"maintainers":[{"name":"captor","email":"tech@captor.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/swift-mock_0.1.1_1715847608042_0.18054078727735123"},"_hasShrinkwrap":false},"0.1.2":{"name":"@captor/swift-mock","private":false,"publishConfig":{"access":"public"},"version":"0.1.2","description":"SWIFT mock that emulates SWIFT network, parse and generate SWIFT ISO 15022 messages.","scripts":{"test":"mocha \"tests/**/*.test.js\"","lint":"eslint ."},"dependencies":{"pegjs":"^0.10.0","chokidar":"^3"},"devDependencies":{"eslint":"^5.16.0","eslint-config-airbnb-base":"^13.1.0","eslint-plugin-import":"^2.17.3","mocha":"^5.0.5"},"main":"./lib/swift.js","repository":{"type":"git","url":"git://github.com/captorab/swift-mock.git"},"keywords":["swift","swift mock","iso15022","15022"],"author":{"name":"Andrey Pshenkin","email":"andrey.pshenkin@gmail.com"},"license":"MIT","_id":"@captor/swift-mock@0.1.2","gitHead":"923834206e4b7f4630573d2e85d06cb864943430","bugs":{"url":"https://github.com/captorab/swift-mock/issues"},"homepage":"https://github.com/captorab/swift-mock#readme","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-rGVauW+M/wQMBxmk+O/yAFVrvLXccNCm1eFQFp9F60wAWYHP7269qYv+AtJ9Y8W25rNp3hlazEbOzFkiB3hfDg==","shasum":"7ebaa4fecfe6dbeeabd5b07a98af8a9024d41d04","tarball":"https://registry.npmjs.org/@captor/swift-mock/-/swift-mock-0.1.2.tgz","fileCount":14,"unpackedSize":75130,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDSL6hLoXfmQCRUYDg2Acp5uWz3ePl9IHLpatpUK2lrCAiBRIGDq4/Ge0u4gAIfgc+47dyJmSbJxZsWj6YsFFa8yrA=="}]},"_npmUser":{"name":"captor","email":"tech@captor.se"},"directories":{},"maintainers":[{"name":"captor","email":"tech@captor.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/swift-mock_0.1.2_1715848054081_0.16253297676886302"},"_hasShrinkwrap":false},"0.1.3":{"name":"@captor/swift-mock","private":false,"publishConfig":{"access":"public"},"version":"0.1.3","description":"SWIFT mock that emulates SWIFT network, parse and generate SWIFT ISO 15022 messages.","scripts":{"test":"mocha \"tests/**/*.test.js\"","lint":"eslint ."},"dependencies":{"pegjs":"^0.10.0","chokidar":"^3"},"devDependencies":{"eslint":"^5.16.0","eslint-config-airbnb-base":"^13.1.0","eslint-plugin-import":"^2.17.3","mocha":"^5.0.5"},"main":"./lib/swift.js","repository":{"type":"git","url":"git://github.com/captorab/swift-mock.git"},"keywords":["swift","swift mock","iso15022","15022"],"author":{"name":"Andrey Pshenkin","email":"andrey.pshenkin@gmail.com"},"license":"MIT","_id":"@captor/swift-mock@0.1.3","gitHead":"3d9f91f8fd838ddd84d3e9f1066fc20ffab602f9","bugs":{"url":"https://github.com/captorab/swift-mock/issues"},"homepage":"https://github.com/captorab/swift-mock#readme","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-JFmNek30ZtCcAy6mplxi3dfm0oL0TbkuudhxulaTZGalFCDALcyV/FMdRQ+pFs5oWkibUn8yIMz55dagJnFHyQ==","shasum":"ef15b046fcd979c3a984eaf03267d8d8f27a6e6e","tarball":"https://registry.npmjs.org/@captor/swift-mock/-/swift-mock-0.1.3.tgz","fileCount":13,"unpackedSize":61140,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGUpz6iyUWq5RimPxUrBtUz7tJWPbMkYUV/z/Sp9QYvpAiB9lqRcPg1Cw+XuqvEOKixV0hJgvyhacajedtivWrwmuQ=="}]},"_npmUser":{"name":"captor","email":"tech@captor.se"},"directories":{},"maintainers":[{"name":"captor","email":"tech@captor.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/swift-mock_0.1.3_1715848876353_0.5447074984799456"},"_hasShrinkwrap":false},"0.1.4":{"name":"@captor/swift-mock","private":false,"publishConfig":{"access":"public"},"version":"0.1.4","description":"SWIFT mock that emulates SWIFT network, parse and generate SWIFT ISO 15022 messages.","scripts":{"test":"mocha \"tests/**/*.test.js\"","lint":"eslint ."},"dependencies":{"pegjs":"^0.10.0","chokidar":"^3"},"devDependencies":{"eslint":"^5.16.0","eslint-config-airbnb-base":"^13.1.0","eslint-plugin-import":"^2.17.3","mocha":"^5.0.5"},"main":"./lib/swift.js","repository":{"type":"git","url":"git://github.com/captorab/swift-mock.git"},"keywords":["swift","swift mock","iso15022","15022"],"author":{"name":"Andrey Pshenkin","email":"andrey.pshenkin@gmail.com"},"license":"MIT","_id":"@captor/swift-mock@0.1.4","gitHead":"e7ab6335bb416e51303daed9f32caa9357165adc","bugs":{"url":"https://github.com/captorab/swift-mock/issues"},"homepage":"https://github.com/captorab/swift-mock#readme","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-njlQA8BS7F/bqIh4+wWwVvxn2lVYB/jcOw4UXKt+tdI0xWzeIxLgGrmhb3xxJmB5VU74oD/Zew4mtt9qzuPsgA==","shasum":"8073ab22c62d2e45f82291255859f816b93a67ed","tarball":"https://registry.npmjs.org/@captor/swift-mock/-/swift-mock-0.1.4.tgz","fileCount":13,"unpackedSize":61154,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMBMyPerulfDoux95dn4fk0ACXR3Va2lK2zSJk2haGWwIhAJBuxx3koiNNyUNaHRCp8cnxH8CN2fXnF4gKqRVVW5pi"}]},"_npmUser":{"name":"captor","email":"tech@captor.se"},"directories":{},"maintainers":[{"name":"captor","email":"tech@captor.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/swift-mock_0.1.4_1716801852760_0.8979022004757811"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-16T08:11:40.330Z","0.1.0":"2024-05-16T08:11:40.566Z","modified":"2024-05-27T09:24:13.191Z","0.1.1":"2024-05-16T08:20:08.264Z","0.1.2":"2024-05-16T08:27:34.248Z","0.1.3":"2024-05-16T08:41:16.573Z","0.1.4":"2024-05-27T09:24:12.907Z"},"maintainers":[{"name":"captor","email":"tech@captor.se"}],"description":"SWIFT mock that emulates SWIFT network, parse and generate SWIFT ISO 15022 messages.","homepage":"https://github.com/captorab/swift-mock#readme","keywords":["swift","swift mock","iso15022","15022"],"repository":{"type":"git","url":"git://github.com/captorab/swift-mock.git"},"author":{"name":"Andrey Pshenkin","email":"andrey.pshenkin@gmail.com"},"bugs":{"url":"https://github.com/captorab/swift-mock/issues"},"license":"MIT","readme":"This is a fork of https://github.com/APshenkin/swift-mock with a few patches. Use at own risk.\n\n# SWIFT Mock\n\nJavaScript SWIFT mock that can emulate SWIFT network, parse and generate SWIFT [ISO 15022](http://www.iso15022.org/) messages. Swift parser was taked from [swift-parser](https://github.com/pstodulka/swift-parser), but it was refactored (moving to ES6 syntax, update API). Mock and message generator were created from scratch.\n\n## Features\n\n-   parse FIN MT message defined by the [ISO 15022](http://www.iso15022.org/) standard\n-   generate FIN MT messages\n-   emulate SWIFT network\n\n## Limitations\n\n-   cannot parse field `77E` - message _MT n98 Proprietary Message_\n\n## Installation\n\n```Shell\n$ npm install --save @captor/swift-mock\n```\n\n## Usage\n\n```JavaScript\nconst Swift = require('@captor/swift-mock');\n\nconst swift = new Swift();\n\n\nswift.on((msg) => {\n    return msg.block1.receivingLtId === 'RMSFGB2LAXXX' && msg.block2.msgType === '502'\n}, (msg) => {\n    return [\n        { block: 1, data: { ...msg.block1, sequenceNumber: 666666 } },\n        { block: 2, data: { ...msg.block2 } },\n        { block: 4, data: msg.extraBlocks.block4 },\n        { block: 5, data: { ...msg.block5 } }]\n})\n\nswift.on((msg) => {\n    return msg.block1.receivingLtId === 'RMSFGB2LAXXX' && msg.block2.msgType === '509'\n}, (msg) => {\n    return [\n        { block: 1, data: { ...msg.block1, sequenceNumber: 300200 } },\n        { block: 2, data: { ...msg.block2 } },\n        { block: 4, data: msg.extraBlocks.block4 },\n        { block: 5, data: { ...msg.block5 } },\n        { block: 'S', data: { ...msg.blockS } }]\n})\n\n\nswift.run();\n\n```\n\n## API\n\n### new SwiftParser([options])\n\nInitializes a new instance of `SWIFT Mock` using given metadata. If `metadata` is omitted, the default metadata is used.\n\n#### options Parameters\n\n-   `in` - folder, from where mock will take messages (default: `./in`)\n-   `out` - folder, where mock will store answers for messages (default: `./out`)\n-   `logLevel` - logging level (default: 0)\n-   `fieldPatterns` - path to block 4 field patterns\n-   `saveIncomingMessages` - save parsed incoming messages in memory (default: `false`)\n-   `delete` - delete incoming messages after reading (default: `false`)\n-   `elastic` - format log messages in Elastic format or not (default: `false`)\n-   `persistent` - indicates whether the process should continue to run as long as files are being watched. (default: `true`)\n\n### swift.parse(swift)\n\nParses the `swift` message. The line breaks of `swift` must be in Unix format (`\\n`).\n\n```\nconst Swift = require('./parser/swift');\nconst swift = new Swift();\nconst fs = require('fs');\n\nconst file = fs.readFileSync('./files/SWIFT_509.fin', { encoding: 'UTF-8' });\n\nconst ast = swift.parse(file)\n```\n\n### swift.generate(data)\n\nGenerate swift message. data should be array of blocks. Blocks order will be the same as in array.\n\n```\nconst Swift = require('./parser/swift');\nconst swift = new Swift();\n\nconst message = swift.generate([\n  {\n    block: 1, data: {\n      \"applicationId\": \"F\",\n      \"serviceId\": \"21\",\n      \"receivingLtId\": \"RMSFGB2LAXXX\",\n      \"sessionNumber\": \"0094\",\n      \"sequenceNumber\": \"049783\"\n    }\n  },\n  {\n    block: 2, data: {\n      \"direction\": \"O\",\n      \"msgType\": \"509\",\n      \"inputTime\": \"1606\",\n      \"inputDate\": \"170725\",\n      \"bic\": \"SOPPLULXAXXX\",\n      \"sessionNumber\": \"5416\",\n      \"sequenceNumber\": \"290317\",\n      \"outputDate\": \"170725\",\n      \"outputTime\": \"1506\",\n      \"prio\": \"N\"\n    }\n  },\n  {\n    block: 3, data: {\n      \"108\": \"MF00000000000022\"\n    }\n  },\n  {\n    block: 4, data: [\n      {\n        \"type\": \"16\",\n        \"option\": \"R\",\n        \"fieldValue\": \"GENL\",\n        \"content\": \":16R:GENL\"\n      },\n      {\n        \"type\": \"20\",\n        \"option\": \"C\",\n        \"fieldValue\": \":SEME//MF00000000000022\",\n        \"content\": \":20C::SEME//MF00000000000022\"\n      },\n      {\n        \"type\": \"16\",\n        \"option\": \"S\",\n        \"fieldValue\": \"SETDET\",\n        \"content\": \":16S:SETDET\"\n      }\n    ]\n  },\n  {\n    block: 5, data: {\n      \"MAC\": \"00000000\",\n      \"CHK\": \"11E37804E6A0\"\n    }\n  },\n  {\n    block: 'S', data: {\n      \"SAC\": undefined,\n      \"COP\": \"P\"\n    }\n  }\n]);\n\n```\n\nBelow are rules how to build blocks.\n\n#### Block 1\n\nData should be a object with required fields or string\n\n```\nlet block = {\n  block: 1, data: {\n    \"applicationId\": \"F\",\n    \"serviceId\": \"21\",\n    \"receivingLtId\": \"RMSFGB2LAXXX\",\n    \"sessionNumber\": \"0094\",\n    \"sequenceNumber\": \"049783\"\n  }\n}\n\nor\n\nlet block = 'F21RMSFGB2LAXXX0094002855'\n```\n\n#### Block 2\n\nData should be a object with required fields or string\n\n```\nlet block = {\n  block: 2, data: {\n    \"direction\": \"O\",\n    \"msgType\": \"509\",\n    \"inputTime\": \"1606\",\n    \"inputDate\": \"170725\",\n    \"bic\": \"SOPPLULXAXXX\",\n    \"sessionNumber\": \"5416\",\n    \"sequenceNumber\": \"290317\",\n    \"outputDate\": \"170725\",\n    \"outputTime\": \"1506\",\n    \"prio\": \"N\"\n  }\n}\n\nor\n\nlet block = 'I502SOPPLULXXXXXN'\n```\n\n#### Block 3\n\nData should be an object with depth === 1\n\n```\nlet block = {\n  block: 3, data: {\n    \"108\": \"MF00000000000022\"\n  }\n}\n```\n\n#### Block 4\n\nData should be an object with depth === 1 or should be an array of fields in valid format.\nThere is two strategy to take values:\n\n-   content\n-   combine\n\ncontent:\n\n```\nlet block = {\n  block: 4, data: {\n    \"177\": \"1707251406\",\n    \"451\": \"0\"\n  }\n}\n\nor\n\n//content strategy\nlet block = {\n  block: 4, data: [\n    {\n      \"content\": \":16R:GENL\"\n    },\n    {\n      \"content\": \":20C::SEME//MF00000000000022\"\n    },\n    {\n      \"content\": \":16S:SETDET\"\n    }\n  ]\n}\n\nor\n\n//combine stategy\nlet block = {\n  block: 4, strategy: 'combine', data: [\n    {\n      \"type\": \"16\",\n      \"option\": \"R\",\n      \"fieldValue\": \"GENL\"\n    },\n    {\n      \"type\": \"20\",\n      \"option\": \"C\",\n      \"fieldValue\": \":SEME//MF00000000000022\"\n    },\n    {\n      \"type\": \"16\",\n      \"option\": \"S\",\n      \"fieldValue\": \"SETDET\"\n    }\n  ]\n}\n```\n\n#### Block 5\n\nData should be an object with depth === 1\n\n```\nlet block = {\n  block: 5, data: {\n    \"MAC\": \"00000000\",\n    \"CHK\": \"577F2F5104EA\"\n  }\n}\n```\n\n#### Block S\n\nData should be an object with depth === 1\n\n```\nlet block = {\n  block: 'S', data: {\n    \"SAC\": undefined,\n    \"COP\": \"P\"\n  }\n}\n```\n\nValues that are `undefined` will displays like this `{SAC:}`\n\n### swift.on(predicate, callback)\n\nCreate a listener that will check incoming messages by predicate function and do callback.\nFor `swift.on` only first passed predicate will be applied\n\n-   predicate - function\n-   callback - function\n\n```\nswift.on((msg) => {\n    return msg.block1.receivingLtId === 'RMSFGB2LAXXX' && msg.block2.msgType === '509'\n}, (msg) => {\n    return [\n        { block: 1, data: { ...msg.block1, sequenceNumber: 300200 } },\n        { block: 2, data: { ...msg.block2 } },\n        { block: 4, data: msg.extraBlocks.block4 },\n        { block: 5, data: { ...msg.block5 } },\n        { block: 'S', data: { ...msg.blockS } }]\n})\n```\n\n###swift.onEvery(predicate, callback)\nCreate a listener that will check incoming messages by predicate function and do callback.\nFor `swift.onEvery` every passed predicate will be applied\n\n-   predicate - function\n-   callback - function\n\n```\nswift.on((msg) => {\n    return msg.block1.receivingLtId === 'RMSFGB2LAXXX' && msg.block2.msgType === '509'\n}, (msg) => {\n    return [\n        { block: 1, data: { ...msg.block1, sequenceNumber: 300200 } },\n        { block: 2, data: { ...msg.block2 } },\n        { block: 4, data: msg.extraBlocks.block4 },\n        { block: 5, data: { ...msg.block5 } },\n        { block: 'S', data: { ...msg.blockS } }]\n})\n```\n\n### swift.send(message, outPath)\n\nPlace swift message to outPath folder. Message could be a string or array of blocks.\n\n-   message - string or array of blocks\n-   filenamePrefix - outgoing filename prefix (default: '');\n-   outPath - output folder path (default: `this.outputFolder`);\n\n```\nswift.send([\n  {\n    block: 1, data: {\n      \"applicationId\": \"F\",\n      \"serviceId\": \"21\",\n      \"receivingLtId\": \"RMSFGB2LAXXX\",\n      \"sessionNumber\": \"0094\",\n      \"sequenceNumber\": \"049783\"\n    }\n  },\n  {\n    block: 2, data: {\n      \"direction\": \"O\",\n      \"msgType\": \"509\",\n      \"inputTime\": \"1606\",\n      \"inputDate\": \"170725\",\n      \"bic\": \"SOPPLULXAXXX\",\n      \"sessionNumber\": \"5416\",\n      \"sequenceNumber\": \"290317\",\n      \"outputDate\": \"170725\",\n      \"outputTime\": \"1506\",\n      \"prio\": \"N\"\n    }\n  }])\n```\n\n### swift.run()\n\nStart swift listener\n\n### swift.close()\n\nStop swift listener\n\n### swift.cleanMessages()\n\nClean saved incoming messages\n\n### swift.getMessages()\n\nGet incoming messages\n\n### swift.cleanListeners()\n\nClean listeners\n\n## Current State\n\nswift-mock is in its early days. Any feedback, issues, and pull requests are welcome.\n\n## License\n\nMIT © [Apshenkin](https://github.com/APshenkin)\n","readmeFilename":"README.md"}