{"_id":"@coorpacademy/serverless-offline-eventbridge","_rev":"3-e067325eca39957507fdaeeaeafcaa60","name":"@coorpacademy/serverless-offline-eventbridge","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@coorpacademy/serverless-offline-eventbridge","version":"1.0.0","keywords":["eventbridge","event-bridge","serverless","serverless-offline","lambda"],"author":{"name":"Arthur Weber @godu"},"license":"MIT","_id":"@coorpacademy/serverless-offline-eventbridge@1.0.0","maintainers":[{"name":"silou","email":"silouane.galinou.dev@gmail.com"},{"name":"coorpadmin","email":"system@coorpacademy.com"},{"name":"esa-coorp","email":"eric.sampaio@coorpacademy.com"},{"name":"adriean.khisbe","email":"adriean.khisbe@live.fr"},{"name":"adamska27","email":"adams.roy27@gmail.com"},{"name":"djamelsoualmi","email":"djamel.soualmi@coorpacademy.com"},{"name":"emorana","email":"elena.morana@coorpacademy.com"},{"name":"emeline75","email":"emeline.leduc@coorpacademy.com"},{"name":"phuoctran8801","email":"phuoc.tran@go1.com"},{"name":"aung-go1","email":"aung.maw@go1.com"},{"name":"chrisdugne","email":"chris.dugne@uralys.com"}],"homepage":"https://github.com/CoorpAcademy/serverless-plugins/tree/master/packages/serverless-offline-eventbridge#readme","bugs":{"url":"https://github.com/CoorpAcademy/serverless-plugins/issues"},"dist":{"shasum":"badfa5b986174914b1c6dfc5c5b033d9ec1f2caa","tarball":"https://registry.npmjs.org/@coorpacademy/serverless-offline-eventbridge/-/serverless-offline-eventbridge-1.0.0.tgz","fileCount":10,"integrity":"sha512-nyvXDkM1sfliXY91+JH9kcWc4finCMA5nATlv3AGBjjOB3+hhoPr2qveXPk5xAF587RLv3paZqoUwJL7SBejyQ==","signatures":[{"sig":"MEYCIQCVrRFwieL1fifpDhKeH04BxUEGr5LdPXVb4VvbqQfpkgIhAMb4JZTz1fcRqPhwdVqc12LYFzhaRAEUEVfG9EoYUPgC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40501},"main":"src","engines":{"node":">=18"},"gitHead":"1d67ee8f9d894f27e183978091267a97d0307a4c","_npmUser":{"name":"silou","email":"silouane.galinou.dev@gmail.com"},"repository":{"url":"git+ssh://git@github.com/CoorpAcademy/serverless-plugins.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v22.22.3+arm64 (darwin)","description":"Emulate AWS λ and EventBridge locally when developing your Serverless project","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lodash":"^4.17.21","@aws-sdk/client-sqs":"^3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"serverless-offline":"^13"},"peerDependencies":{"serverless-offline":">=11"},"_npmOperationalInternal":{"tmp":"tmp/serverless-offline-eventbridge_1.0.0_1783413018506_0.5924901996049916","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@coorpacademy/serverless-offline-eventbridge","version":"1.0.1","keywords":["eventbridge","event-bridge","serverless","serverless-offline","lambda"],"author":{"name":"Arthur Weber @godu"},"license":"MIT","_id":"@coorpacademy/serverless-offline-eventbridge@1.0.1","maintainers":[{"name":"silou","email":"silouane.galinou.dev@gmail.com"},{"name":"coorpadmin","email":"system@coorpacademy.com"},{"name":"esa-coorp","email":"eric.sampaio@coorpacademy.com"},{"name":"adriean.khisbe","email":"adriean.khisbe@live.fr"},{"name":"adamska27","email":"adams.roy27@gmail.com"},{"name":"djamelsoualmi","email":"djamel.soualmi@coorpacademy.com"},{"name":"emorana","email":"elena.morana@coorpacademy.com"},{"name":"emeline75","email":"emeline.leduc@coorpacademy.com"},{"name":"phuoctran8801","email":"phuoc.tran@go1.com"},{"name":"aung-go1","email":"aung.maw@go1.com"},{"name":"chrisdugne","email":"chris.dugne@uralys.com"}],"homepage":"https://github.com/CoorpAcademy/serverless-plugins/tree/master/packages/serverless-offline-eventbridge#readme","bugs":{"url":"https://github.com/CoorpAcademy/serverless-plugins/issues"},"dist":{"shasum":"9301b95b967ba655bfa0b13c3a16411a7647b914","tarball":"https://registry.npmjs.org/@coorpacademy/serverless-offline-eventbridge/-/serverless-offline-eventbridge-1.0.1.tgz","fileCount":11,"integrity":"sha512-z5wXoDGcs4gyvdD6HP4SZBSuDtvLnHL5tadl6Lhgb4AJdhxLPdvJy3ujIONSifJ8Ubj1q2utAeOl90KZPekoBg==","signatures":[{"sig":"MEYCIQD7e40B6Dqzv8piaS/Y+8HDJk7tQBRLKLweRwpjzXxXgQIhAIYE9CBVyg1Q9DNbDIuLeS5/WizpaGSKkd6xo8NwKgLM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47633},"main":"src","engines":{"node":">=18"},"gitHead":"0b5b60d1bd50e9ef02f104d57f00fea5f07532f7","_npmUser":{"name":"silou","email":"silouane.galinou.dev@gmail.com"},"repository":{"url":"git+ssh://git@github.com/CoorpAcademy/serverless-plugins.git","type":"git"},"_npmVersion":"lerna/9.0.7/node@v22.22.3+arm64 (darwin)","description":"Emulate AWS λ and EventBridge locally when developing your Serverless project","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lodash":"^4.17.21","@aws-sdk/client-sqs":"^3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"serverless-offline":"^13"},"peerDependencies":{"serverless-offline":">=11"},"_npmOperationalInternal":{"tmp":"tmp/serverless-offline-eventbridge_1.0.1_1783413469797_0.527453236676998","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-07-07T08:30:18.288Z","modified":"2026-08-03T13:32:23.183Z","1.0.0":"2026-07-07T08:30:18.635Z","1.0.1":"2026-07-07T08:37:49.948Z"},"bugs":{"url":"https://github.com/CoorpAcademy/serverless-plugins/issues"},"author":{"name":"Arthur Weber @godu"},"license":"MIT","homepage":"https://github.com/CoorpAcademy/serverless-plugins/tree/master/packages/serverless-offline-eventbridge#readme","keywords":["eventbridge","event-bridge","serverless","serverless-offline","lambda"],"repository":{"url":"git+ssh://git@github.com/CoorpAcademy/serverless-plugins.git","type":"git"},"description":"Emulate AWS λ and EventBridge locally when developing your Serverless project","maintainers":[{"email":"silouane.galinou.dev@gmail.com","name":"silou"},{"email":"system@coorpacademy.com","name":"coorpadmin"},{"email":"eric.sampaio@coorpacademy.com","name":"esa-coorp"},{"email":"adriean.khisbe@live.fr","name":"adriean.khisbe"},{"email":"adams.roy27@gmail.com","name":"adamska27"},{"email":"djamel.soualmi@coorpacademy.com","name":"djamelsoualmi"},{"email":"elena.morana@coorpacademy.com","name":"emorana"},{"email":"emeline.leduc@coorpacademy.com","name":"emeline75"},{"email":"phuoc.tran@go1.com","name":"phuoctran8801"},{"email":"aung.maw@go1.com","name":"aung-go1"},{"email":"adams.roy@go1.com","name":"adamska28"},{"email":"chris.dugne@uralys.com","name":"chrisdugne"}],"readme":"# @coorpacademy/serverless-offline-eventbridge\n\nThis Serverless-offline plugin emulates AWS λ and EventBridge on your local machine. It exposes a\nlocal `PutEvents` endpoint, routes every published event through a real EventBridge **EventPattern**\nmatcher, and invokes the matching handlers through `serverless-offline`'s own Lambda runner.\n\n_Features_:\n\n- In-process `PutEvents` endpoint + in-memory event bus — **no extra container required**.\n- Real EventBridge **EventPattern** matching (`source`, `detail-type`, nested `detail`, `resources`,\n  `$or`, and the content filters `prefix`, `suffix`, `anything-but`, `exists`, `equals-ignore-case`,\n  `numeric`, `wildcard`, `cidr`).\n- Honors both function-level `eventBridge:` events **and** raw CloudFormation `AWS::Events::Rule`\n  resources.\n- Retry with backoff, and optional `destinations.onFailure` (DLQ) simulation against a local SQS\n  endpoint.\n\n## Serverless Framework v4\n\nThis plugin supports **both Serverless Framework v3 and v4**. It takes the logger from the plugin\nconstructor's 3rd argument (`{log}`) and falls back to `console` when it is absent, so no\nconfiguration change is required when upgrading.\n\n## Installation\n\nFirst, add `@coorpacademy/serverless-offline-eventbridge` to your project:\n\n```sh\nnpm install @coorpacademy/serverless-offline-eventbridge\n```\n\nThen inside your project's `serverless.yml` file, add the following entry to the plugins section\nbefore `serverless-offline`:\n\n```yml\nplugins:\n  - '@coorpacademy/serverless-offline-eventbridge'\n  - serverless-offline\n```\n\n## How it works?\n\nBy default the plugin starts a tiny in-process HTTP server (Node core `http`, no extra dependency)\nthat accepts AWS `PutEvents` requests (`X-Amz-Target: AWSEvents.PutEvents`,\n`Content-Type: application/x-amz-json-1.1`). Each published entry is turned into the canonical\nEventBridge event envelope, matched against every subscriber's EventPattern, and the matching Lambda\nhandlers are invoked through `serverless-offline`. A target failure never fails the `PutEvents`\nresponse (mirroring AWS), but is retried and, once retries are exhausted, optionally routed to the\nfunction's `destinations.onFailure`.\n\nPoint your AWS SDK EventBridge client at `http://<host>:<port>` (default `http://127.0.0.1:4010`) to\npublish events locally.\n\n## Configure\n\n### Functions\n\nFunction-level `eventBridge` events follow the\n[serverless documentation](https://www.serverless.com/framework/docs/providers/aws/events/event-bridge).\n\n```yml\nfunctions:\n  myHandler:\n    handler: handler.compute\n    events:\n      - eventBridge:\n          eventBus: default\n          pattern:\n            source:\n              - my.app\n            detail-type:\n              - OrderPlaced\n            detail:\n              status:\n                - CONFIRMED\n```\n\n### CloudFormation `AWS::Events::Rule` resources\n\nRules declared directly in `resources` are also honored: the plugin scans for `AWS::Events::Rule`\nresources whose `Targets[].Arn` is `{Fn::GetAtt: [<FunctionLogicalId>, Arn]}`, maps the target back\nto its function, and registers the rule's `EventPattern`.\n\n```yml\nresources:\n  Resources:\n    OrderPlacedRule:\n      Type: AWS::Events::Rule\n      Properties:\n        EventBusName: default\n        EventPattern:\n          source:\n            - my.app\n          detail-type:\n            - OrderPlaced\n        Targets:\n          - Id: myHandler\n            Arn:\n              Fn::GetAtt:\n                - MyHandlerLambdaFunction\n                - Arn\n```\n\n### EventBridge plugin options\n\nConfigure the plugin via a `custom: serverless-offline-eventbridge` object in your `serverless.yml`:\n\n```yml\ncustom:\n  serverless-offline-eventbridge:\n    host: 127.0.0.1            # bind host for the PutEvents endpoint\n    port: 4010                 # PutEvents endpoint port\n    accountId: '000000000000'  # event `account` + event-bus ARN\n    maximumRetryAttempts: 10   # dispatch retry budget\n    retryDelayMs: 500          # delay between retries\n    debug: false               # verbose logging of options + subscriptions\n    mockServer: true           # run the in-process PutEvents endpoint\n    simulateDestinations: true # route exhausted async failures to destinations.onFailure\n    endpoint: http://localhost:9324  # AWS endpoint for the onFailure SQS / opt-in subscribe clients\n    subscribe: false           # opt-in: poll a real `events` bus at `endpoint`\n    pollInterval: 1000         # LocalStack opt-in poll cadence (ms)\n```\n\n| Option | Default | Purpose |\n|--------|---------|---------|\n| `host` | `127.0.0.1` | bind host for the PutEvents endpoint |\n| `port` | `4010` | PutEvents endpoint port |\n| `region` | from `provider.region` | event `region` field + ARN build |\n| `accountId` | `000000000000` | event `account` + event-bus ARN |\n| `maximumRetryAttempts` | `10` | dispatch retry budget |\n| `retryDelayMs` | `500` | delay between retries |\n| `debug` | `false` | verbose logging |\n| `endpoint` | `undefined` | AWS endpoint for the onFailure SQS / opt-in subscribe clients |\n| `subscribe` | `false` | opt-in: poll a real `events` bus at `endpoint` |\n| `mockServer` | `true` | run the in-process PutEvents endpoint |\n| `simulateDestinations` | `true` | route exhausted async failures to `destinations.onFailure` |\n| `pollInterval` | `1000` | LocalStack opt-in poll cadence (ms) |\n\n## Supported EventPattern content filters\n\n`prefix` (including `{prefix: {equals-ignore-case}}`), `suffix`, `anything-but`, `exists`,\n`equals-ignore-case`, `numeric` (multi-clause, e.g. `['>', 0, '<=', 100]`), `wildcard` (`*` glob),\nand `cidr`. An **unknown** filter key is treated as a non-match (it never throws).\n\n## Attribution\n\nThe EventPattern matching algorithm is adapted in spirit from\n[`rubenkaiser/serverless-offline-aws-eventbridge`](https://github.com/rubenkaiser/serverless-offline-aws-eventbridge)\n(MIT), rewritten as pure `lodash/fp` helpers. See [`NOTICE`](./NOTICE).\n","readmeFilename":"README.md"}