{"_id":"@affixapi/integrator","_rev":"8-bc260874ee9c98edb27f73ac18cee0cc","name":"@affixapi/integrator","dist-tags":{"latest":"1.0.12"},"versions":{"1.0.4":{"name":"@affixapi/integrator","version":"1.0.4","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.4","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"1a5ddd01bbd2c15955b1d9e2dc1aeae24c259999","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.4.tgz","fileCount":24,"integrity":"sha512-NUXc+7+PLxqMq3g6s8Vyl7Ejz9C8abyEDJiGmGL3iacwDAhJyYvrTzc9j/t/ez8l4bGHEggX9yLc9W5X/UCygQ==","signatures":[{"sig":"MEUCIQCkfCxxlpg2OepIHb2OmZNLd6ye/OHUNx8cro+1BsxXAAIgQyCWAyCN8mAU55GFpvzPXZ3yFeVfbsuHdXx3YRzPIPo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63906},"main":"app.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"0309a33e2227bf795d72fa01c89e301b081cf64a","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"app.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.5.2","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.13.1","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.1","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.6.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.76","extensionless":"1.9.7","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.10.5","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.0","ts-jest":"29.1.2","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.2.5","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.12.12","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.9.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.9.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.4_1716306412645_0.5289354331221316","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@affixapi/integrator","version":"1.0.5","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.5","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"d5c7a796d25df6e67da860d9103c7b62cb352074","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.5.tgz","fileCount":26,"integrity":"sha512-0zFz4lga8vT8vEXvVAIw4fW9sLUyeF4Fzsjk75k8DLPvCwGKUiHQFH5B4q4HdgxMhFK3HrsL76BQpejnOxoSDQ==","signatures":[{"sig":"MEUCIGdvgOl/iok17Wx3MIVKFx2FfqK75zL1e0mStnqtg+NGAiEA6QkJgcGcT+CLi7QjDjl6DvFwN54nlG4FdViwajqHjXA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66869},"main":"index.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"266cd3909a43cefae602b31ec342112fe732a042","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"index.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.5.2","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.13.1","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.1","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.6.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.76","extensionless":"1.9.7","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.10.5","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.0","ts-jest":"29.1.2","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.2.5","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.12.12","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.9.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.9.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.5_1716319818883_0.7282397116099275","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"@affixapi/integrator","version":"1.0.6","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.6","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"c834220c36f5bb5cd1a15d644fd3b175293973aa","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.6.tgz","fileCount":26,"integrity":"sha512-7SLvDozTDD83ZolwndboFSEsc4VR5SGjXQvkkpDS4Hfz4yHP7xOO53cSbuYpnYp8UvYuoQYhN2XqCTx1C6E3Bg==","signatures":[{"sig":"MEUCIG2c2xy4m/BMenCswRKowk97rkhXeYFaqRrcgqYTpoh4AiEA2l5zzQqM2g996gTNiON7nMdrRA8DqbXNPkqy8/s1fPE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67243},"main":"index.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"57d70b35a1c9e5b1146f7f8f3876abd7e725431f","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"index.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.5.2","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.13.1","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.1","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.6.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.76","extensionless":"1.9.7","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.10.5","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.0","ts-jest":"29.1.2","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.2.5","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.12.12","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.9.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.9.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.6_1716339973244_0.9749510452971071","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"@affixapi/integrator","version":"1.0.7","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.7","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"352df63f7de363e506e193ddfc8fb595f811ca9a","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.7.tgz","fileCount":30,"integrity":"sha512-kPt3wToXhGmlZMYyWxwMZvzqa1oTLif+2NU3Z65OLfnOuHMXO0zN7a9R9puyEXDsYX3CMT6U8e/ji9cJsiK9Gw==","signatures":[{"sig":"MEUCIQD+uNkH0ocLxYeLR50dzMz4nOfWIRF18Shcq+VWlHpuNgIgPB42vTgmK1qbcLOzMwjkMidDisbk95lx1YEpjXT/vG0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86935},"main":"index.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"30c279607d391d2d7ba84f17aaf2db2d84e35a35","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"index.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.5.2","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.13.1","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.2","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.6.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.78","extensionless":"1.9.7","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.10.5","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.0","ts-jest":"29.1.2","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.2.5","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.12.12","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.9.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.9.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.7_1716386711106_0.0864552996816399","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"@affixapi/integrator","version":"1.0.8","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.8","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"168c6234d7bf029911b624f126c524d139dae137","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.8.tgz","fileCount":30,"integrity":"sha512-xyhEiDYWe7az1qgW0wIJkFxV7EjF5vglmqvuEsNv0jcZm72XKODvbIpvjSNagus0KR79EokhEeq7tzmzZK6ihg==","signatures":[{"sig":"MEYCIQCV8tScnP5wZdt0GkCA2hRIcDDaZFYnb/zEpF2eWJyRkgIhAP7MT6cCSBJF6Gdp2elBloKnfLrRHQie1rLYZq5dCj/c","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86935},"main":"index.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"0a5c6071d87ffe69f16f199bc3d98c84a61f32ff","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"index.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.5.2","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.13.1","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.2","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.6.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.78","extensionless":"1.9.7","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.10.5","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.0","ts-jest":"29.1.2","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.2.5","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.12.12","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.9.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.9.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.8_1716471039525_0.7619851469738534","host":"s3://npm-registry-packages"}},"1.0.9":{"name":"@affixapi/integrator","version":"1.0.9","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.9","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"cd9f88796bd96d32ab0ca3353caacb616dde48ca","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.9.tgz","fileCount":30,"integrity":"sha512-cT61zac4aqZ0pIN082BxoS9b+RWLkW4idBsGafrJvZd3pGlPPXE+kgs6RSRqLN3SvqIGfBiFFxXMUc62POwlNA==","signatures":[{"sig":"MEYCIQD+WjB2WR2/4RLbOvR/oU7OPSqaLDLBh1jNnEcL3T6inAIhANpeyv39mhYqDMxX8Q/oa559tQ3Bz+G28E2iziQp/x6y","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86891},"main":"index.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"2d4a594139b8f5795cb74d3c232891da10694fdc","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"index.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.5.2","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.13.1","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.2","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.6.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.78","extensionless":"1.9.7","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.10.5","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.0","ts-jest":"29.1.2","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.2.5","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.12.12","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.9.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.9.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.9_1716471592605_0.6776906167404726","host":"s3://npm-registry-packages"}},"1.0.10":{"name":"@affixapi/integrator","version":"1.0.10","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.10","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"c9521f209409802024ad5b3413cca7e1b8fa47a4","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.10.tgz","fileCount":30,"integrity":"sha512-XeTGbvXXRmfvN9KFpk4S+dG/Z74NLW02zMxnvwjxoLsOPEB1QQOLWrgPC+n3fXdGU3QK8TA2+gwnmQddxAq0hg==","signatures":[{"sig":"MEUCIQD09e9r42oj4Ozt61ckFjsYQYfpUQPdOPum3fyTRAkDGAIgHqxXWN2Zt+k7A1ikvrUm00cFCIINmHoIaXu9l7mZE5A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99579},"main":"index.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"a2a03d36b347319eb3bead88659c6e220d0675c7","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"index.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.5.2","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.13.1","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.2","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.6.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.78","extensionless":"1.9.7","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.10.5","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.0","ts-jest":"29.1.2","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.2.5","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.12.12","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.9.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.9.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.10_1716555380375_0.8290567301965845","host":"s3://npm-registry-packages"}},"1.0.11":{"name":"@affixapi/integrator","version":"1.0.11","keywords":["affixapi"],"author":{"name":"skilbjo"},"license":"ISC","_id":"@affixapi/integrator@1.0.11","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"homepage":"https://github.com/affixapi/integrator#readme","bugs":{"url":"https://github.com/affixapi/integrator/issues"},"dist":{"shasum":"18cff8e9bf5c7e0f08102b12d1ce2c9bacc25e15","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.11.tgz","fileCount":30,"integrity":"sha512-YSIKQ6J2cVuaqq7l80IFZf+fotSJD1wF2mpT3dJxouGnCRbY6ilJrX0TToEkYhOztFP6/mBm92NOZApjqWMjrA==","signatures":[{"sig":"MEUCIQCMZBjMnFWQYjEh0kxJ8oUZnGHEVpjplkDvH9DDZX4nOgIgDIa0i52YknMnojYUnwCytuhUvZCZ8o/N9i1r5ZWhk38=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99842},"main":"index.js","type":"module","$schema":"https://json.schemastore.org/package","engines":{"node":">=16.0.0"},"gitHead":"aafb1a6f35b647d6b7831c9377062e70595d9225","scripts":{"dev":"nodemon - exec 'tsx' src/app.ts","exec":"tsx","lint":"npm run eslint","repl":"tsx test/repl.ts","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","start":"node --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","eslint":"eslint .","prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","depcheck":"depcheck","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"typings":"index.d.ts","_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"commitlint":{"extends":["@commitlint/config-angular"]},"repository":{"url":"git+https://github.com/affixapi/integrator.git","type":"git"},"_npmVersion":"10.7.0","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","directories":{},"_nodeVersion":"20.14.0","dependencies":{"joi":"17.13.1","cors":"2.8.5","jose":"5.3.0","pino":"9.1.0","axios":"1.7.2","slonik":"29.2.0","express":"4.19.2","pg-promise":"11.8.0","@affixapi/api":"npm:@affixapi/api-with-joi@1.1.85","extensionless":"1.9.9","@slonik/migrator":"0.12.0","express-async-handler":"1.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.11.2","jest":"29.7.0","faker":"5.5.3","husky":"9.0.11","umzug":"3.8.0","eslint":"8.57.0","pg-mem":"2.8.1","nodemon":"3.1.2","ts-jest":"29.1.4","ts-node":"10.9.2","depcheck":"1.4.7","prettier":"3.3.0","ts-patch":"3.1.2","supertest":"7.0.0","typescript":"5.4.5","@types/cors":"2.8.17","@types/jest":"29.5.12","@types/node":"20.14.0","@types/faker":"5.5.9","@types/express":"4.17.21","tsconfig-paths":"4.2.0","@commitlint/cli":"19.3.0","@tsconfig/node20":"^20.1.4","@types/supertest":"6.0.2","eslint-plugin-jest":"28.5.0","eslint-plugin-node":"11.1.0","eslint-plugin-import":"2.29.1","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.1.3","eslint-plugin-security":"3.0.0","eslint-config-typescript":"3.0.0","@typescript-eslint/parser":"7.11.0","@commitlint/config-angular":"19.2.2","typescript-transform-paths":"3.4.7","eslint-plugin-sort-keys-fix":"1.1.2","@typescript-eslint/eslint-plugin":"7.11.0","eslint-import-resolver-typescript":"3.6.1","eslint-plugin-typescript-sort-keys":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/integrator_1.0.11_1717684764318_0.4953078263187505","host":"s3://npm-registry-packages"}},"1.0.12":{"$schema":"https://json.schemastore.org/package","name":"@affixapi/integrator","version":"1.0.12","main":"index.js","typings":"index.d.ts","type":"module","author":{"name":"skilbjo"},"bugs":{"url":"https://github.com/affixapi/integrator/issues"},"repository":{"type":"git","url":"git+https://github.com/affixapi/integrator.git"},"keywords":["affixapi"],"license":"ISC","scripts":{"prepare":"if [ -z \"$GITHUB_ACTIONS\" ] && [ -z \"$CODEBUILD_BUILD_ARN\" ]; then npx husky install; fi","repl":"tsx test/repl.ts","exec":"tsx","depcheck":"depcheck","eslint":"eslint .","start":"node --env-file .env --no-warnings --experimental-modules --loader=extensionless/register dist/app.js","dev":"node --import tsx --env-file .env --watch src/app.ts","docker:dev":"npm run build && ./dev-resources/publish-image && ./dev-resources/run-container","lint":"npm run eslint","test":"node --no-warnings --experimental-vm-modules node_modules/.bin/jest --runInBand","build":"tspc -p tsconfig.build.json","postbuild":"jq 'del(.files)' package.json >dist/package.json && cp README.md dist/README.md && cp -r resources dist/resources","npm-prepare-dist":"jq 'del(.publishConfig, .files) | . + { publishConfig: { registry: \"https://registry.npmjs.org/\" } }' package.json >dist/package.json"},"dependencies":{"@affixapi/api":"npm:@affixapi/api-with-joi@1.1.101","@slonik/migrator":"0.12.0","axios":"1.7.7","cors":"2.8.5","express":"4.21.1","express-async-handler":"1.2.0","extensionless":"1.9.9","joi":"17.13.3","jose":"5.9.6","pg-promise":"11.10.1","pino":"9.5.0","slonik":"29.2.0"},"devDependencies":{"@commitlint/cli":"19.3.0","@commitlint/config-angular":"19.2.2","@tsconfig/node20":"^20.1.4","@types/cors":"2.8.17","@types/express":"4.17.21","@types/faker":"5.5.9","@types/jest":"29.5.14","@types/node":"22.8.7","@types/supertest":"6.0.2","@typescript-eslint/eslint-plugin":"7.17.0","@typescript-eslint/parser":"7.18.0","depcheck":"1.4.7","eslint":"8.57.1","eslint-config-prettier":"9.1.0","eslint-config-typescript":"3.0.0","eslint-import-resolver-typescript":"3.6.3","eslint-plugin-import":"2.31.0","eslint-plugin-jest":"28.8.3","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"5.2.1","eslint-plugin-security":"3.0.1","eslint-plugin-sort-keys-fix":"1.1.2","eslint-plugin-typescript-sort-keys":"3.3.0","faker":"5.5.3","husky":"9.1.6","jest":"29.7.0","pg-mem":"3.0.3","prettier":"3.3.3","supertest":"7.0.0","ts-jest":"29.2.5","ts-node":"10.9.2","ts-patch":"3.2.1","tsconfig-paths":"4.2.0","tsx":"4.19.2","typescript":"5.5.4","typescript-transform-paths":"3.5.1","umzug":"3.8.2"},"commitlint":{"extends":["@commitlint/config-angular"]},"engines":{"node":">=16.0.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_id":"@affixapi/integrator@1.0.12","gitHead":"1eac8e7bc37f2def2c2303e2f2ccb7266e4ece9c","description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","homepage":"https://github.com/affixapi/integrator#readme","_nodeVersion":"22.11.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-pRU1gTaRPXOHSDMWYdWZxcvPnqEaK1GKqiueumoIAJDhOPGU6MgSKDoSqA3PzSQl2VMlxbp0ZgZupghzGzIkgA==","shasum":"e80e765befdffdaf6252624e500ee608feaa0728","tarball":"https://registry.npmjs.org/@affixapi/integrator/-/integrator-1.0.12.tgz","fileCount":30,"unpackedSize":97651,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENZd39ZZ2yUvcDFp0Y3xZ3EYTdI19APi6mXpsMFihbmAiBXpA3ofvWEO0ejGERjMnRXXu2nLCCgSH+D0A9JTPF1bg=="}]},"_npmUser":{"name":"skilbjo","email":"john.skilbeck@gmail.com"},"directories":{},"maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/integrator_1.0.12_1732344157345_0.043548639909294806"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-21T15:46:52.483Z","modified":"2024-11-23T06:42:37.782Z","1.0.4":"2024-05-21T15:46:52.807Z","1.0.5":"2024-05-21T19:30:19.039Z","1.0.6":"2024-05-22T01:06:13.432Z","1.0.7":"2024-05-22T14:05:11.289Z","1.0.8":"2024-05-23T13:30:39.690Z","1.0.9":"2024-05-23T13:39:52.761Z","1.0.10":"2024-05-24T12:56:20.562Z","1.0.11":"2024-06-06T14:39:24.475Z","1.0.12":"2024-11-23T06:42:37.533Z"},"bugs":{"url":"https://github.com/affixapi/integrator/issues"},"author":{"name":"skilbjo"},"license":"ISC","homepage":"https://github.com/affixapi/integrator#readme","keywords":["affixapi"],"repository":{"type":"git","url":"git+https://github.com/affixapi/integrator.git"},"description":"[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml) [![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)]","maintainers":[{"name":"skilbjo","email":"john.skilbeck@gmail.com"}],"readme":"# integrator\n\n[![release](https://github.com/affixapi/integrator/actions/workflows/release.yml/badge.svg)](https://github.com/affixapi/integrator/actions/workflows/release.yml)\n[![codecov](https://codecov.io/github/affixapi/integrator/graph/badge.svg?token=wokk2l6k5i)](https://codecov.io/github/affixapi/integrator)\n\n## Intro\n\nDeploy a self-contained service that integrates with the Affix API within your\ninfrastructure.\n\nAffix API follows the OAuth 2.1 specification, which makes integrating as\nstandardised as possible; this does require you coding to our API.\n\nWe also offer a no-code solution where we can drop the extracts over SFTP or\nAWS S3.\n\nSomewhere inbetween is this service, which you can deploy to your cloud and\ndoes most of the integration for you.\n\n\n[![Integrating Affix API: A Quick and Easy Demo 👍](https://cdn.loom.com/sessions/thumbnails/f8d674ad58a444c7ba953ea85dd0c2e5-with-play.gif)](https://www.loom.com/share/f8d674ad58a444c7ba953ea85dd0c2e5 \"Integrating Affix API: A Quick and Easy Demo 👍\")\n\n[![Integrating Affix API: A Quick and Easy Demo 👍](https://cdn.loom.com/sessions/thumbnails/8dedf54a643543a8941fa480fc27fbb2-with-play.gif)](https://www.loom.com/share/8dedf54a643543a8941fa480fc27fbb2 \"Integrating Affix API: A Quick and Easy Demo 👍\")\n\n\n## Quickstart (local)\n\n```\ngit clone git@github.com:affixapi/integrator.git && cd integrator\n\ndocker login ghcr.io --username YOUR_GITHUB_USERNAME\n\ndocker compose up\n```\n\nThe service is now running @ localhost:8080\n\n## Quickstart (prod + connect your own DB)\n\n```\ndocker pull ghcr.io/affixapi/integrator:latest\n\ndocker run --rm -it \\\n  --env-file .env \\\n  -e DB_CXN_STR=postgres://postgres:affixapi@postgres:5432/affixapi \\\n  -p 8080:8080 \\\n  integrator:latest \\\n  --name integrator \\\n  npm start\n```\n\nThe service is now running @ localhost:8080\n\n### environment variables\n\nCreate the `.env` file and edit appropriately.\n\n```\ncp .env.EXAMPLE .env\n```\n\ndo note, depending if you are running the app locally or within docker, you\nwill need to change the `DB_CXN_STR`\n\n```bash\nDB_CXN_STR=postgres://postgres:affixapi@localhost:5432/postgres # locally\n\nDB_CXN_STR=postgres://postgres:affixapi@postgres:5432/postgres # in docker\n```\n\n```\nexport CLIENT_ID='' # your client_id for the respective environment provided for you in your onboarding document\nexport CLIENT_SECRET='' # your client_id for the respective environment provided for you in your onboarding document\nexport REDIRECT_URI='http://localhost:8080/callback' # for testing you can leave as is. for development/production environments put your real redirect url for the respective environment\nexport NODE_ENV=dev # dev or prod\nexport HOST=0.0.0.0 # interface the node server listens on. either `0.0.0.0` (for server running in docker or accepting non-local traffic) or `localhost` (for local testing)\nexport PORT=8080\n\nexport DB_CXN_STR='postgres://your-username:your-password@your-postgres-host:5432/affixapi' # if not using the postgres docker container\nexport POSTGRES_PASSWORD='your-postgres-password' # if launched via docker-compose only\n```\n\n### dev\n\n```bash\nnpm install\ndev-resources/run-db # or configure your own DB with the DB_CXN_STR env var\nnpm run dev\n```\n\n### dev/prod (with docker)\n\n```bash\ndocker pull ghcr.io/affixapi/integrator:latest\n# make sure to set the DB_CXN_STR env var the `.env` file\ndocker compose up\n```\n\n### prod (without docker)\n\n```bash\ngit clone git@github.com:affixapi/integrator.git && cd integrator\nnpm ci --production\n\n# make sure to set the DB_CXN_STR env var\n\nnpm start\n```\n\n## Production\n\nYou will need to deploy this within your production environment.\n\nTwo options:\n\n- use a load balancer for SSL termination, and forward request to a box hosting\n  the service\n\nIn AWS speak, set up an Application Load Balancer (ALB), forward port 80 to\nport 443, and forward port 443 to either an EC2 box hosting the service, or one\nof the many AWS services (AWS Fargate, etc) that can host a docker container\n\n- create an SSH certificate\n\n## Next steps\n\n- Create a persistent database connection; either to your existing main\n  database or a microservice data. Ensure that only respective teammates can\n  access, as Affix tokens will be stored inside this DB.\n- Use a Key Management Service (such as AWS KMS) to store the Affix API keys in\n  the DB as ciphertext. This ensures that even in the unlikely event of data\n  exfiltration, the keys are not usable by non-internal team members.\n- Use a database connection pool\n\n## References / Sources\n- <https://dev.to/tienbku/express-typescript-example-37l9>\n- <https://www.bezkoder.com/express-typescript-example/>\n- <https://dev.to/wizdomtek/typescript-express-building-robust-apis-with-nodejs-1fln>\n","readmeFilename":"README.md"}