{"_id":"@domdomegg/serverless-offline-aws-eventbridge","_rev":"3-aa4a0d0e008e1a63f65a9b72d57a8f74","name":"@domdomegg/serverless-offline-aws-eventbridge","dist-tags":{"latest":"1.7.1"},"versions":{"1.7.0":{"name":"@domdomegg/serverless-offline-aws-eventbridge","version":"1.7.0","description":"Serverless plugin to run eventbridge offline.","main":"src/index.js","contributors":[{"name":"Ruben Kaiser"},{"name":"Adam Jones","url":"https://github.com/domdomegg"}],"license":"MIT","scripts":{"lint":"eslint .","format":"eslint . --fix","prepublishOnly":"npm run lint"},"devDependencies":{"eslint":"^7.9.0","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.11.0","eslint-plugin-import":"^2.22.0","eslint-plugin-prettier":"^3.1.4","prettier":"^2.1.1"},"dependencies":{"aedes":"^0.46.0","cors":"^2.8.5","express":"^4.17.1","mqtt":"^4.2.6"},"peerDependencies":{"serverless-offline":">5"},"repository":{"type":"git","url":"git+https://github.com/domdomegg/serverless-offline-eventBridge.git"},"keywords":["serverless","serverless-offline","eventbridge"],"bugs":{"url":"https://github.com/domdomegg/serverless-offline-eventBridge/issues"},"homepage":"https://github.com/domdomegg/serverless-offline-eventBridge#readme","gitHead":"2e2e9a1f0962196cece5c8fc423f7b2c4af0e223","_id":"@domdomegg/serverless-offline-aws-eventbridge@1.7.0","_nodeVersion":"14.15.3","_npmVersion":"7.24.2","dist":{"integrity":"sha512-hsqCwZur/c032m7qotZwwYLPVp6lHyL0qOJSp37atPMusnX5Nrbs3HSUm2FZpRmQmsHC7RED2SP1isLlqr80xQ==","shasum":"ecd02b02820942c52a652997cedf80ce165c8a8a","tarball":"https://registry.npmjs.org/@domdomegg/serverless-offline-aws-eventbridge/-/serverless-offline-aws-eventbridge-1.7.0.tgz","fileCount":12,"unpackedSize":31281,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO1fMck2zMBPxyOt+sklGS/EgfEMZpVntUN09Q492EjAIgeowk8gA84j1rMpqHeX4WKkPVjBBKvCH3eTMNPc6n3MU="}]},"_npmUser":{"name":"domdomegg","email":"domdomegg+npmjs.com@gmail.com"},"directories":{},"maintainers":[{"name":"domdomegg","email":"domdomegg+npmjs.com@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/serverless-offline-aws-eventbridge_1.7.0_1635462562348_0.30583989583179116"},"_hasShrinkwrap":false},"1.7.1":{"name":"@domdomegg/serverless-offline-aws-eventbridge","version":"1.7.1","description":"Serverless plugin to run eventbridge offline.","main":"src/index.js","contributors":[{"name":"Ruben Kaiser"},{"name":"Adam Jones","url":"https://github.com/domdomegg"}],"license":"MIT","scripts":{"lint":"eslint .","format":"eslint . --fix","prepublishOnly":"npm run lint"},"devDependencies":{"eslint":"^7.9.0","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.11.0","eslint-plugin-import":"^2.22.0","eslint-plugin-prettier":"^3.1.4","prettier":"^2.1.1"},"dependencies":{"aedes":"^0.46.0","cors":"^2.8.5","express":"^4.17.1","mqtt":"^4.2.6"},"peerDependencies":{"serverless-offline":">5"},"repository":{"type":"git","url":"git+https://github.com/domdomegg/serverless-offline-eventBridge.git"},"keywords":["serverless","serverless-offline","eventbridge"],"bugs":{"url":"https://github.com/domdomegg/serverless-offline-eventBridge/issues"},"homepage":"https://github.com/domdomegg/serverless-offline-eventBridge#readme","gitHead":"6077c023b4b9cfe9424b22ae5c8e15abdddcb536","_id":"@domdomegg/serverless-offline-aws-eventbridge@1.7.1","_nodeVersion":"14.15.3","_npmVersion":"7.24.2","dist":{"integrity":"sha512-vXHt79JRcCwMYY0ypBmMg00gYo5EaGX2G4Y7YHiLnlQxI/USGVuYnAsyoXx8UDawmiuAAMwgikTMY2mxJ5ET/Q==","shasum":"a2b18244e25ca06413bc5e7aa6ba4497961390a6","tarball":"https://registry.npmjs.org/@domdomegg/serverless-offline-aws-eventbridge/-/serverless-offline-aws-eventbridge-1.7.1.tgz","fileCount":12,"unpackedSize":32376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzxCgCRA9TVsSAnZWagAAz5MQAJgG+Wq/fcDBQGCMdiDL\nMbhajOJDB8RrWAtDo/kcZf2jfhmGr7vaZc02aRf2R7CWZmJ9PL11G1CJIP4x\n62P73sXkHjaWxpvS2sFCAC7XuhxNwr9ZuWlGJMThq6N+Bb6Zpd5hGp7C+jpV\nx82oHeSQi2VXmj+tJm+JrS9vXCQf8P2AKyqhsSI6dWHbC6WCsa9KtjzSDQAR\nWBSsAKtYtoHbq85pCUC/Bj/GCcvywESxFYvYkUEy3m45nKBVU9al1W2jQsX/\n5vrq8aPUJUoyOsWaBy9m5+W1h3Av1ml9DD6Vagy5ZUywCrXxNSwdxCouH4L2\n7+0xdN+4q0bnSG6PQaBX6VjGzuJevmFYgoCrJ/0AGHhQgpn9FjAUHEV920VZ\ntMpPt2l+/+xAfEqEFMXksZcg1c+0TsPtXnupO4gofIcYJ0SENDg5D9i2QriQ\nanMZZaOb0gbfhf1OJCNtlzGNW/g/Vc6L/ISqMlYb/6RQRMqoQcOTd6iSTem9\nWI460Xt75FKkFZaC2Ap4CdwY3jju9MrMBPPueSNxTMUQjbuAPGwh23sqXHYW\nFRpCSE2z4vsQj85J44yst1jK2VxWl3Iltkt6Ljpy5NqsheBb4t+settoA/6R\nKsmVvjmapZLtAOjWXPygimcOJwKC/v1+pt6eW7JWlU8PYoRKXfrUeWOD+/dZ\nLpF5\r\n=xOeT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC88dP5wuC9orfW/FnnffVVlkuRQqMg8THWj9BCzRDoVQIhALKd4bl1BhyyZCdMch+8ZdxsnO/KfO4PHdhyghERgYcd"}]},"_npmUser":{"name":"domdomegg","email":"domdomegg+npmjs.com@gmail.com"},"directories":{},"maintainers":[{"name":"domdomegg","email":"domdomegg+npmjs.com@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/serverless-offline-aws-eventbridge_1.7.1_1635463191935_0.5314097932840356"},"_hasShrinkwrap":false}},"time":{"created":"2021-10-28T23:09:22.305Z","1.7.0":"2021-10-28T23:09:22.472Z","modified":"2022-04-05T05:13:49.799Z","1.7.1":"2021-10-28T23:19:52.092Z"},"maintainers":[{"name":"domdomegg","email":"domdomegg+npmjs.com@gmail.com"}],"description":"Serverless plugin to run eventbridge offline.","homepage":"https://github.com/domdomegg/serverless-offline-eventBridge#readme","keywords":["serverless","serverless-offline","eventbridge"],"repository":{"type":"git","url":"git+https://github.com/domdomegg/serverless-offline-eventBridge.git"},"contributors":[{"name":"Ruben Kaiser"},{"name":"Adam Jones","url":"https://github.com/domdomegg"}],"bugs":{"url":"https://github.com/domdomegg/serverless-offline-eventBridge/issues"},"license":"MIT","readme":"# @domdomegg/serverless-offline-aws-eventbridge\n\n> NB: this package is a fork of [serverless-offline-aws-eventbridge](https://www.npmjs.com/package/serverless-offline-aws-eventbridge) to provide rate schedule support.\n\nA serverless offline plugin that enables aws eventBridge events. As of version 1.4.0 this plugin also supports non javascript handlers.\n\n[![serverless](http://public.serverless.com/badges/v3.svg)](http://www.serverless.com)\n[![npm version](https://badge.fury.io/js/serverless-offline-aws-eventbridge.svg)](https://badge.fury.io/js/serverless-offline-aws-eventbridge)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Docs\n- [Installation](#installation)\n- [Configure](#configure)\n- [Usage](#usage)\n- [Versions](#versions)\n- [Thanks](#thanks)\n\n## Installation\n\nInstall the plugin\n```bash\nnpm install @domdomegg/serverless-offline-aws-eventbridge --save\n```\n\nLet serverless know about the plugin, also note the order when combined with serverless webpack and offline\n\nserverless.yml:\n```YAML\nplugins:\n  - serverless-webpack\n  - serverless-offline\n  - @domdomegg/serverless-offline-aws-eventbridge\n```\n\nserverless.js / serverless.ts:\n```js\nplugins: [\n  \"serverless-webpack\",\n  \"serverless-offline\",\n  \"@domdomegg/serverless-offline-aws-eventbridge\",\n]\n```\n\nConfiguring the plugin\n\noptional options shown with defaults\n\nserverless.yml:\n```YAML\ncustom:\n  serverless-offline-aws-eventbridge:\n    port: 4010 # port to run the eventBridge mock server on\n    mockEventBridgeServer: true # Set to false if EventBridge is already mocked by another stack\n    hostname: 127.0.0.1 # IP or hostname of existing EventBridge if mocked by another stack\n    pubSubPort: 4011 # Port to run the MQ server (or just listen if using an EventBridge Mock server from another stack)\n    debug: false # flag to show debug messages\n    account: '' # account id that gets passed to the event\n    maximumRetryAttempts: 10 # maximumRetryAttempts to retry lambda\n    retryDelayMs: 500 # retry delay\n    payloadSizeLimit: \"10mb\" # Controls the maximum payload size being passed to https://www.npmjs.com/package/bytes (Note: this payload size might not be the same size as your AWS Eventbridge receive)\n```\n\nserverless.js / serverless.ts:\n```js\ncustom: {\n  \"serverless-offline-aws-eventbridge\": {\n    port: 4010 // port to run the eventBridge mock server on\n    mockEventBridgeServer: true // Set to false if EventBridge is already mocked by another stack\n    hostname: \"127.0.0.1\" // IP or hostname of existing EventBridge if mocked by another stack\n    pubSubPort: 4011 // Port to run the MQ server (or just listen if using an EventBridge Mock server from another stack)\n    debug: false // flag to show debug messages\n    account: \"\" // account id that gets passed to the event\n    maximumRetryAttempts: 10 // maximumRetryAttempts to retry lambda\n    retryDelayMs: 500 // retry delay\n    payloadSizeLimit: \"10mb\" // Controls the maximum payload size being passed to https://www.npmjs.com/package/bytes (Note: this payload size might not be the same size as your AWS Eventbridge receive)\n  }\n}\n```\n\n## Publishing and subscribing\n\nCheckout the documentation for AWS eventbridge in serverless framework and the AWS SDK for publishing and subscribing to events.\n\nScheduled events are also supported. When fired, the event object that is sent along is an empty object.\n\nA simple example configuration in serverless with a Lambda function that publishes an event and a Lambda that subscribes to the event.\n\n```YAML\nfunctions:\n  publishEvent:\n    handler: events.publish\n    events:\n      - http:\n          path: publish\n          method: get\n\n  consumeEvent:\n    handler: events.consume\n    events:\n      - eventBridge:\n          eventBus: marketing\n          pattern:\n            source:\n              - acme.newsletter.campaign\n\n  scheduledEvent:\n    handler: events.scheduled\n    events:\n      - eventBridge:\n          eventBus: marketing\n          # run every 5 minutes\n          schedule: \"rate(5 minutes)\"\n```\n\n\nThe events handler with two functions (publish and consume)\n\n```javascript\n  import AWS from 'aws-sdk';\n\n  export const publish = async () => {\n    try {\n      const eventBridge = new AWS.EventBridge({\n        endpoint: 'http://127.0.0.1:4010',\n        accessKeyId: \"YOURKEY\",\n        secretAccessKey: \"YOURSECRET\",\n        region: \"eu-west-1\"\n      });\n\n      await eventBridge.putEvents({\n        Entries: [\n          {\n            EventBusName: 'marketing',\n            Source: 'acme.newsletter.campaign',\n            DetailType: 'UserSignUp',\n            Detail: `{ \"E-Mail\": \"some@someemail.some\" }`,\n          },\n        ]\n      }).promise();\n      return { statusCode: 200, body: 'published' };\n    } catch (e) {\n      console.error(e);\n      return { statusCode: 400, body: 'could not publish' };\n    }\n  }\n\n  export const consume = async (event, context) => {\n    console.log(event);\n    /*\n      {\n        EventBusName: 'marketing',\n        Source: 'acme.newsletter.campaign',\n        DetailType: 'UserSignUp',\n        Detail: `{ \"E-Mail\": \"some@someemail.some\" }`,\n      }\n    */\n    return { statusCode: 200, body: JSON.stringify(event) };\n  }\n\n  export const scheduled = async (event, context) => {\n    console.log('scheduled event');\n    return { statusCode: 200, body: 'scheduled event' };\n  }\n```\n## Support of EventBridge patterns\n\nEventBridge natively allows a few content-based filters defined here:\nhttps://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns-content-based-filtering.html\n\nThis plugin supports the most common patterns:\n* `prefix`\n* `anything-but`\n* `exists`\n\n```yaml\nfunctions:\n  consumeEvent:\n    handler: events.consume\n    events:\n      - eventBridge:\n          eventBus: marketing\n          pattern:\n            source:\n              - user\n            detail-type:\n              - { \"anything-but\": \"deleted\" }\n            detail:\n              firstname: [ { \"prefix\": \"John\" } ]\n              age: [ { \"exists\": true } ]\n```\n\nThe `cidr` and `numeric` filters are yet to be implemented.\n\n## Using CloudFormation intrinsic functions\n\nAt some point you might want to use an existing event bus. This plugin needs to somehow resolve intrinsic CloudFormation function calls to event bus names/arns.\n\nAn event bus created by the same template, will be referenced using the `!GetAtt` function:\n\n```YAML\nfunctions:\n\n  consumeEvent:\n    handler: events.consume\n    events:\n      - eventBridge:\n          eventBus: !GetAtt EventBus.Arn\n```\n\nThis plugin will look for an `EventBus` resource of type `AWS::Events::EventBus` when deciding whether a function must be triggered.\n\nOr you might use `!ImportValue` to reference an event bus created by another stack.\n\n```YAML\nfunctions:\n\n  consumeEvent:\n    handler: events.consume\n    events:\n      - eventBridge:\n          eventBus: !ImportValue EventBusNameFromOtherStack\n```\n\nIn this case, you won't define the resource directly in your template. To overcome this limitation, you can define a custom object in `serverless.yml` that indicates the mapping between imported keys and the actual event bus name/arn:\n\n```YAML\ncustom:\n  serverless-offline-aws-eventbridge:\n    port: 4010 # port to run the eventBridge mock server on\n    mockEventBridgeServer: true # Set to false if EventBridge is already mocked by another stack\n    hostname: 127.0.0.1 # IP or hostname of existing EventBridge if mocked by another stack\n    pubSubPort: 4011 # Port to run the MQ server (or just listen if using an EventBridge mock server from another stack)\n    debug: false # flag to show debug messages\n    account: '' # account id that gets passed to the event\n    imported-event-buses:\n      EventBusNameFromOtherStack: event-bus-name-or-arn\n```\n\nIf your existing EventBridge is mocked on a different host/IP (e.g. When stacks are hosted in Docker containers), then you will also need to specify a `hostname`. If using Docker, you should use the name of the container that mocks the EventBridge (assuming both containers are on the same Docker network).\n\n## Examples\n\nTwo stacks are provided as example:\n* `same-stack-publisher-subscriber` runs a mock of Eventbridge. It also has a local (same stack) subscriber\n* `remote-subscriber` is a completely independent microservice listening to the eventBridge mock created by the `same-stack-publisher-subscriber` stack\n\n1) Run the first stack in a terminal\n```bash\ncd examples/same-stack-publisher-subscriber\nnpm i\nserverless offline start\n```\n2) Run the second stack in a different terminal\n```bash\ncd examples/remote-subscriber\nnpm i\nserverless offline start\n```\n\n3) Publish a test message\n\nSimply hit the exposed API gateway endpoint: http://localhost:3016/dev/publish\n\nYou should see the message received on both stacks in the terminal output. You will also notice that the socket connection is resilient to crashes: everything works smoothly as soon as both offline stacks are up and running, regardless of which stack has been restarted last.\n\n\n## Versions\nThis plugin was created using node 12.16.1 and serverless framework core 1.67.0.\n\n## Thanks\nThis plugin was inspired by the serverless-offline-sns plugin. Also thanks to @sndpl, @guavajellyaaron, @rloomans, @JamesKyburz, @plumsirawit and @damien-thiesson for their work and PR's.\n","readmeFilename":"README.md"}