@kensio/yulin 0.43.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/sdk/router/resolve-sim-sdk-command-router.d.ts.map +1 -1
- package/dist/sdk/router/resolve-sim-sdk-command-router.js +3 -0
- package/dist/sdk/router/resolve-sim-sdk-command-router.js.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts +11 -0
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.js +19 -0
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.js.map +1 -1
- package/dist/service/aws/factory/sim-aws-service-factory.d.ts +3 -0
- package/dist/service/aws/factory/sim-aws-service-factory.d.ts.map +1 -1
- package/dist/service/aws/factory/sim-aws-service-factory.js +4 -0
- package/dist/service/aws/factory/sim-aws-service-factory.js.map +1 -1
- package/dist/service/aws/sim-aws-account-region-scope.d.ts +5 -0
- package/dist/service/aws/sim-aws-account-region-scope.d.ts.map +1 -1
- package/dist/service/aws/sim-aws-account-region-scope.js +6 -0
- package/dist/service/aws/sim-aws-account-region-scope.js.map +1 -1
- package/dist/service/aws/sim-aws.d.ts +3 -0
- package/dist/service/aws/sim-aws.d.ts.map +1 -1
- package/dist/service/aws/sim-aws.js +4 -0
- package/dist/service/aws/sim-aws.js.map +1 -1
- package/dist/service/cloudformation/resource/cfn/lambda/sim-lambda-cfn-value-adapter.d.ts.map +1 -1
- package/dist/service/cloudformation/resource/cfn/lambda/sim-lambda-cfn-value-adapter.js +8 -0
- package/dist/service/cloudformation/resource/cfn/lambda/sim-lambda-cfn-value-adapter.js.map +1 -1
- package/dist/service/cloudformation/resource/cfn/lambda/sim-lambda-event-source-mapping-cfn.d.ts +28 -0
- package/dist/service/cloudformation/resource/cfn/lambda/sim-lambda-event-source-mapping-cfn.d.ts.map +1 -0
- package/dist/service/cloudformation/resource/cfn/lambda/sim-lambda-event-source-mapping-cfn.js +33 -0
- package/dist/service/cloudformation/resource/cfn/lambda/sim-lambda-event-source-mapping-cfn.js.map +1 -0
- package/dist/service/cloudformation/resource/cfn/sim-cfn-resource-value-adapter.d.ts.map +1 -1
- package/dist/service/cloudformation/resource/cfn/sim-cfn-resource-value-adapter.js +2 -0
- package/dist/service/cloudformation/resource/cfn/sim-cfn-resource-value-adapter.js.map +1 -1
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-cfn-value-adapter.d.ts +6 -0
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-cfn-value-adapter.d.ts.map +1 -0
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-cfn-value-adapter.js +13 -0
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-cfn-value-adapter.js.map +1 -0
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-queue-cfn.d.ts +28 -0
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-queue-cfn.d.ts.map +1 -0
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-queue-cfn.js +40 -0
- package/dist/service/cloudformation/resource/cfn/sqs/sim-sqs-queue-cfn.js.map +1 -0
- package/dist/service/cloudformation/resource/resolve/service/sim-cfn-service-resolver.d.ts.map +1 -1
- package/dist/service/cloudformation/resource/resolve/service/sim-cfn-service-resolver.js +3 -0
- package/dist/service/cloudformation/resource/resolve/service/sim-cfn-service-resolver.js.map +1 -1
- package/dist/service/cloudformation/resource/sim-cfn-resource.d.ts +3 -0
- package/dist/service/cloudformation/resource/sim-cfn-resource.d.ts.map +1 -1
- package/dist/service/cloudformation/resource/sim-cfn-resource.js +4 -1
- package/dist/service/cloudformation/resource/sim-cfn-resource.js.map +1 -1
- package/dist/service/cloudformation/stack/resource-map/sim-cfn-stack-resource-map.d.ts.map +1 -1
- package/dist/service/cloudformation/stack/resource-map/sim-cfn-stack-resource-map.js +1 -0
- package/dist/service/cloudformation/stack/resource-map/sim-cfn-stack-resource-map.js.map +1 -1
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-creator.d.ts +26 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-creator.d.ts.map +1 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-creator.js +33 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-creator.js.map +1 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.d.ts +28 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.d.ts.map +1 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.js +38 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.js.map +1 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.d.ts +17 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.d.ts.map +1 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.js +71 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.js.map +1 -0
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-property-parser.d.ts +4 -0
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-property-parser.d.ts.map +1 -1
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-property-parser.js +12 -0
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-property-parser.js.map +1 -1
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-target-function.d.ts +5 -6
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-target-function.d.ts.map +1 -1
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-target-function.js +7 -13
- package/dist/service/lambda/cfn/function/sim-cfn-lambda-target-function.js.map +1 -1
- package/dist/service/lambda/cfn/sim-cfn-lambda-resource-factory.d.ts +1 -0
- package/dist/service/lambda/cfn/sim-cfn-lambda-resource-factory.d.ts.map +1 -1
- package/dist/service/lambda/cfn/sim-cfn-lambda-resource-factory.js +8 -0
- package/dist/service/lambda/cfn/sim-cfn-lambda-resource-factory.js.map +1 -1
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.d.ts +25 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.d.ts.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.js +55 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.js.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.d.ts +6 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.d.ts.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.js +64 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.js.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-values.d.ts +17 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-values.d.ts.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-values.js +47 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-values.js.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.d.ts +53 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.d.ts.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.js +77 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.js.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping-access.d.ts +41 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping-access.d.ts.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping-access.js +51 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping-access.js.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping.command.d.ts +91 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping.command.d.ts.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping.command.js +8 -0
- package/dist/service/lambda/command/event-source-mapping/event-source-mapping.command.js.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/sim-lambda-event-source-mapping-commands.d.ts +60 -0
- package/dist/service/lambda/command/event-source-mapping/sim-lambda-event-source-mapping-commands.d.ts.map +1 -0
- package/dist/service/lambda/command/event-source-mapping/sim-lambda-event-source-mapping-commands.js +89 -0
- package/dist/service/lambda/command/event-source-mapping/sim-lambda-event-source-mapping-commands.js.map +1 -0
- package/dist/service/lambda/command/sim-lambda-command.types.d.ts +1 -0
- package/dist/service/lambda/command/sim-lambda-command.types.d.ts.map +1 -1
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-delivery.d.ts +27 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-delivery.d.ts.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-delivery.js +32 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-delivery.js.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poll-schedule.d.ts +40 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poll-schedule.d.ts.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poll-schedule.js +55 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poll-schedule.js.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poller.d.ts +85 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poller.d.ts.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poller.js +136 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-event-source-poller.js.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-batch-response.d.ts +49 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-batch-response.d.ts.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-batch-response.js +97 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-batch-response.js.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-event.d.ts +56 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-event.d.ts.map +1 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-event.js +55 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-sqs-event.js.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queue-service.d.ts +49 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queue-service.d.ts.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queue-service.js +2 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queue-service.js.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queues.d.ts +118 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queues.d.ts.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queues.js +49 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-event-source-queues.js.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.d.ts +32 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.d.ts.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.js +52 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.js.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queue-attributes.d.ts +29 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queue-attributes.d.ts.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queue-attributes.js +49 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queue-attributes.js.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queues.d.ts +57 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queues.d.ts.map +1 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queues.js +89 -0
- package/dist/service/lambda/event-source/queue/sim-sqs-event-source-queues.js.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping-store.d.ts +46 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping-store.d.ts.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping-store.js +57 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping-store.js.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.d.ts +101 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.d.ts.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.js +93 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.js.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-pollers.d.ts +37 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-pollers.d.ts.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-pollers.js +44 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-pollers.js.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-role-permissions.d.ts +23 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-role-permissions.d.ts.map +1 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-role-permissions.js +46 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-role-permissions.js.map +1 -0
- package/dist/service/lambda/function/sim-lambda-function-name.d.ts +10 -0
- package/dist/service/lambda/function/sim-lambda-function-name.d.ts.map +1 -0
- package/dist/service/lambda/function/sim-lambda-function-name.js +18 -0
- package/dist/service/lambda/function/sim-lambda-function-name.js.map +1 -0
- package/dist/service/lambda/function/url/sim-lambda-function-lookup.d.ts +4 -0
- package/dist/service/lambda/function/url/sim-lambda-function-lookup.d.ts.map +1 -1
- package/dist/service/lambda/function/url/sim-lambda-function-lookup.js +6 -0
- package/dist/service/lambda/function/url/sim-lambda-function-lookup.js.map +1 -1
- package/dist/service/lambda/index.d.ts +1 -0
- package/dist/service/lambda/index.d.ts.map +1 -1
- package/dist/service/lambda/sdk/sim-lambda-sdk-command-router.d.ts.map +1 -1
- package/dist/service/lambda/sdk/sim-lambda-sdk-command-router.js +16 -0
- package/dist/service/lambda/sdk/sim-lambda-sdk-command-router.js.map +1 -1
- package/dist/service/lambda/sim-lambda-commands.d.ts +51 -0
- package/dist/service/lambda/sim-lambda-commands.d.ts.map +1 -0
- package/dist/service/lambda/sim-lambda-commands.js +84 -0
- package/dist/service/lambda/sim-lambda-commands.js.map +1 -0
- package/dist/service/lambda/sim-lambda.d.ts +35 -39
- package/dist/service/lambda/sim-lambda.d.ts.map +1 -1
- package/dist/service/lambda/sim-lambda.js +47 -65
- package/dist/service/lambda/sim-lambda.js.map +1 -1
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-creator.d.ts +25 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-creator.d.ts.map +1 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-creator.js +33 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-creator.js.map +1 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-name.d.ts +45 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-name.d.ts.map +1 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-name.js +67 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-name.js.map +1 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-properties.d.ts +44 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-properties.d.ts.map +1 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-properties.js +72 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-properties.js.map +1 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-property-rules.d.ts +47 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-property-rules.d.ts.map +1 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-property-rules.js +122 -0
- package/dist/service/sqs/cfn/queue/sim-cfn-sqs-queue-property-rules.js.map +1 -0
- package/dist/service/sqs/cfn/sim-sqs-cfn-resource-factory.d.ts +24 -0
- package/dist/service/sqs/cfn/sim-sqs-cfn-resource-factory.d.ts.map +1 -0
- package/dist/service/sqs/cfn/sim-sqs-cfn-resource-factory.js +29 -0
- package/dist/service/sqs/cfn/sim-sqs-cfn-resource-factory.js.map +1 -0
- package/dist/service/sqs/command/authorize/sim-sqs-authorizer.d.ts +41 -0
- package/dist/service/sqs/command/authorize/sim-sqs-authorizer.d.ts.map +1 -0
- package/dist/service/sqs/command/authorize/sim-sqs-authorizer.js +51 -0
- package/dist/service/sqs/command/authorize/sim-sqs-authorizer.js.map +1 -0
- package/dist/service/sqs/command/message/consume.command.d.ts +61 -0
- package/dist/service/sqs/command/message/consume.command.d.ts.map +1 -0
- package/dist/service/sqs/command/message/consume.command.js +2 -0
- package/dist/service/sqs/command/message/consume.command.js.map +1 -0
- package/dist/service/sqs/command/message/receive.command.d.ts +40 -0
- package/dist/service/sqs/command/message/receive.command.d.ts.map +1 -0
- package/dist/service/sqs/command/message/receive.command.js +2 -0
- package/dist/service/sqs/command/message/receive.command.js.map +1 -0
- package/dist/service/sqs/command/message/send.command.d.ts +80 -0
- package/dist/service/sqs/command/message/send.command.d.ts.map +1 -0
- package/dist/service/sqs/command/message/send.command.js +2 -0
- package/dist/service/sqs/command/message/send.command.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-batch-entries.d.ts +39 -0
- package/dist/service/sqs/command/message/sim-sqs-batch-entries.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-batch-entries.js +67 -0
- package/dist/service/sqs/command/message/sim-sqs-batch-entries.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-change-message-visibility.d.ts +31 -0
- package/dist/service/sqs/command/message/sim-sqs-change-message-visibility.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-change-message-visibility.js +51 -0
- package/dist/service/sqs/command/message/sim-sqs-change-message-visibility.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-delete-message-commands.d.ts +38 -0
- package/dist/service/sqs/command/message/sim-sqs-delete-message-commands.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-delete-message-commands.js +58 -0
- package/dist/service/sqs/command/message/sim-sqs-delete-message-commands.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-message-handles.d.ts +28 -0
- package/dist/service/sqs/command/message/sim-sqs-message-handles.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-message-handles.js +36 -0
- package/dist/service/sqs/command/message/sim-sqs-message-handles.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-limits.d.ts +27 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-limits.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-limits.js +70 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-limits.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-message.d.ts +32 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-message.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-message.js +33 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-message.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-request.d.ts +33 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-request.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-request.js +55 -0
- package/dist/service/sqs/command/message/sim-sqs-receive-request.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-received-message-view.d.ts +25 -0
- package/dist/service/sqs/command/message/sim-sqs-received-message-view.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-received-message-view.js +38 -0
- package/dist/service/sqs/command/message/sim-sqs-received-message-view.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-send-message-commands.d.ts +32 -0
- package/dist/service/sqs/command/message/sim-sqs-send-message-commands.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-send-message-commands.js +56 -0
- package/dist/service/sqs/command/message/sim-sqs-send-message-commands.js.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-sent-message.d.ts +18 -0
- package/dist/service/sqs/command/message/sim-sqs-sent-message.d.ts.map +1 -0
- package/dist/service/sqs/command/message/sim-sqs-sent-message.js +37 -0
- package/dist/service/sqs/command/message/sim-sqs-sent-message.js.map +1 -0
- package/dist/service/sqs/command/queue/queue.command.d.ts +114 -0
- package/dist/service/sqs/command/queue/queue.command.d.ts.map +1 -0
- package/dist/service/sqs/command/queue/queue.command.js +2 -0
- package/dist/service/sqs/command/queue/queue.command.js.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-create-queue.d.ts +51 -0
- package/dist/service/sqs/command/queue/sim-sqs-create-queue.d.ts.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-create-queue.js +70 -0
- package/dist/service/sqs/command/queue/sim-sqs-create-queue.js.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-access.d.ts +63 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-access.d.ts.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-access.js +98 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-access.js.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-attribute-commands.d.ts +45 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-attribute-commands.d.ts.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-attribute-commands.js +74 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-attribute-commands.js.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-commands.d.ts +47 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-commands.d.ts.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-commands.js +55 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-commands.js.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-page.d.ts +27 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-page.d.ts.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-page.js +54 -0
- package/dist/service/sqs/command/queue/sim-sqs-queue-page.js.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-unsimulated-queue-input.d.ts +18 -0
- package/dist/service/sqs/command/queue/sim-sqs-unsimulated-queue-input.d.ts.map +1 -0
- package/dist/service/sqs/command/queue/sim-sqs-unsimulated-queue-input.js +27 -0
- package/dist/service/sqs/command/queue/sim-sqs-unsimulated-queue-input.js.map +1 -0
- package/dist/service/sqs/command/sim-sqs-command.types.d.ts +8 -0
- package/dist/service/sqs/command/sim-sqs-command.types.d.ts.map +1 -0
- package/dist/service/sqs/command/sim-sqs-command.types.js +2 -0
- package/dist/service/sqs/command/sim-sqs-command.types.js.map +1 -0
- package/dist/service/sqs/error/sim-sqs.error.d.ts +162 -0
- package/dist/service/sqs/error/sim-sqs.error.d.ts.map +1 -0
- package/dist/service/sqs/error/sim-sqs.error.js +191 -0
- package/dist/service/sqs/error/sim-sqs.error.js.map +1 -0
- package/dist/service/sqs/index.d.ts +14 -0
- package/dist/service/sqs/index.d.ts.map +1 -0
- package/dist/service/sqs/index.js +13 -0
- package/dist/service/sqs/index.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-payload.d.ts +56 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-payload.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-payload.js +42 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-payload.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-rules.d.ts +23 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-rules.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-rules.js +68 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-rules.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-value.d.ts +17 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-value.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-value.js +2 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute-value.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute.d.ts +29 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute.js +56 -0
- package/dist/service/sqs/message/sim-sqs-message-attribute.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attributes.d.ts +44 -0
- package/dist/service/sqs/message/sim-sqs-message-attributes.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-attributes.js +93 -0
- package/dist/service/sqs/message/sim-sqs-message-attributes.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-body.d.ts +18 -0
- package/dist/service/sqs/message/sim-sqs-message-body.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-body.js +66 -0
- package/dist/service/sqs/message/sim-sqs-message-body.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-store.d.ts +74 -0
- package/dist/service/sqs/message/sim-sqs-message-store.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-store.js +99 -0
- package/dist/service/sqs/message/sim-sqs-message-store.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-system-attributes.d.ts +28 -0
- package/dist/service/sqs/message/sim-sqs-message-system-attributes.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-system-attributes.js +75 -0
- package/dist/service/sqs/message/sim-sqs-message-system-attributes.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-visibility.d.ts +56 -0
- package/dist/service/sqs/message/sim-sqs-message-visibility.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-visibility.js +79 -0
- package/dist/service/sqs/message/sim-sqs-message-visibility.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-writer.d.ts +41 -0
- package/dist/service/sqs/message/sim-sqs-message-writer.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message-writer.js +56 -0
- package/dist/service/sqs/message/sim-sqs-message-writer.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message.d.ts +96 -0
- package/dist/service/sqs/message/sim-sqs-message.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-message.js +136 -0
- package/dist/service/sqs/message/sim-sqs-message.js.map +1 -0
- package/dist/service/sqs/message/sim-sqs-receipt-handle.d.ts +10 -0
- package/dist/service/sqs/message/sim-sqs-receipt-handle.d.ts.map +1 -0
- package/dist/service/sqs/message/sim-sqs-receipt-handle.js +14 -0
- package/dist/service/sqs/message/sim-sqs-receipt-handle.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-dead-letter-targets.d.ts +51 -0
- package/dist/service/sqs/queue/sim-sqs-dead-letter-targets.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-dead-letter-targets.js +62 -0
- package/dist/service/sqs/queue/sim-sqs-dead-letter-targets.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-deleted-queue-names.d.ts +20 -0
- package/dist/service/sqs/queue/sim-sqs-deleted-queue-names.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-deleted-queue-names.js +42 -0
- package/dist/service/sqs/queue/sim-sqs-deleted-queue-names.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-activity.d.ts +65 -0
- package/dist/service/sqs/queue/sim-sqs-queue-activity.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-activity.js +57 -0
- package/dist/service/sqs/queue/sim-sqs-queue-activity.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-arn.d.ts +41 -0
- package/dist/service/sqs/queue/sim-sqs-queue-arn.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-arn.js +47 -0
- package/dist/service/sqs/queue/sim-sqs-queue-arn.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-names.d.ts +27 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-names.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-names.js +83 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-names.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-numbers.d.ts +34 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-numbers.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-numbers.js +93 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-numbers.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-specs.d.ts +20 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-specs.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-specs.js +37 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attribute-specs.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attributes.d.ts +60 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attributes.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attributes.js +96 -0
- package/dist/service/sqs/queue/sim-sqs-queue-attributes.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-name.d.ts +21 -0
- package/dist/service/sqs/queue/sim-sqs-queue-name.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-name.js +47 -0
- package/dist/service/sqs/queue/sim-sqs-queue-name.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-report.d.ts +22 -0
- package/dist/service/sqs/queue/sim-sqs-queue-report.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-report.js +29 -0
- package/dist/service/sqs/queue/sim-sqs-queue-report.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-store.d.ts +60 -0
- package/dist/service/sqs/queue/sim-sqs-queue-store.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-store.js +87 -0
- package/dist/service/sqs/queue/sim-sqs-queue-store.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-url.d.ts +24 -0
- package/dist/service/sqs/queue/sim-sqs-queue-url.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue-url.js +36 -0
- package/dist/service/sqs/queue/sim-sqs-queue-url.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue.d.ts +130 -0
- package/dist/service/sqs/queue/sim-sqs-queue.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-queue.js +188 -0
- package/dist/service/sqs/queue/sim-sqs-queue.js.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-redrive-policy.d.ts +30 -0
- package/dist/service/sqs/queue/sim-sqs-redrive-policy.d.ts.map +1 -0
- package/dist/service/sqs/queue/sim-sqs-redrive-policy.js +118 -0
- package/dist/service/sqs/queue/sim-sqs-redrive-policy.js.map +1 -0
- package/dist/service/sqs/sdk/sim-sqs-sdk-command-router.d.ts +18 -0
- package/dist/service/sqs/sdk/sim-sqs-sdk-command-router.d.ts.map +1 -0
- package/dist/service/sqs/sdk/sim-sqs-sdk-command-router.js +76 -0
- package/dist/service/sqs/sdk/sim-sqs-sdk-command-router.js.map +1 -0
- package/dist/service/sqs/sim-sqs.d.ts +119 -0
- package/dist/service/sqs/sim-sqs.d.ts.map +1 -0
- package/dist/service/sqs/sim-sqs.js +213 -0
- package/dist/service/sqs/sim-sqs.js.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { SimSqsMessageAttribute } from "./sim-sqs-message-attribute.js";
|
|
3
|
+
const everyAttributeSelectors = new Set(["All", ".*"]);
|
|
4
|
+
const prefixSelectorSuffix = ".*";
|
|
5
|
+
/**
|
|
6
|
+
* The message attributes of one message.
|
|
7
|
+
*
|
|
8
|
+
* Attributes are digested and reported as a set rather than one at a time,
|
|
9
|
+
* because both are properties of the set: the digest covers the attributes in
|
|
10
|
+
* name order, and a receive request selects a subset of them.
|
|
11
|
+
*/
|
|
12
|
+
export class SimSqsMessageAttributes {
|
|
13
|
+
attributes;
|
|
14
|
+
constructor(attributes) {
|
|
15
|
+
this.attributes = attributes;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Read the message attributes of a request, refusing any real SQS would
|
|
19
|
+
* refuse.
|
|
20
|
+
*/
|
|
21
|
+
static of(input) {
|
|
22
|
+
const attributes = Object.entries(input ?? {})
|
|
23
|
+
.filter((entry) => entry[1] !== undefined)
|
|
24
|
+
.map(([name, value]) => SimSqsMessageAttribute.of(name, value));
|
|
25
|
+
return new this(attributes);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Whether there are no attributes here, in which case SQS reports neither the
|
|
29
|
+
* attributes nor their digest.
|
|
30
|
+
*/
|
|
31
|
+
get isEmpty() {
|
|
32
|
+
return this.attributes.length === 0;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The MD5 digest of these attributes, as SQS reports it.
|
|
36
|
+
*
|
|
37
|
+
* The names are ordered by their code units rather than by a locale, because
|
|
38
|
+
* the order decides the digest. A locale-aware comparison sorts mixed-case
|
|
39
|
+
* names differently from AWS, and differently on different machines.
|
|
40
|
+
*/
|
|
41
|
+
digest() {
|
|
42
|
+
const digested = Buffer.concat(this.attributes
|
|
43
|
+
.toSorted(byName)
|
|
44
|
+
.map((attribute) => attribute.digestBytes()));
|
|
45
|
+
return createHash("md5").update(digested).digest("hex");
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* These attributes as SQS reports them in a response.
|
|
49
|
+
*/
|
|
50
|
+
reported() {
|
|
51
|
+
return Object.fromEntries(this.attributes.map((attribute) => [
|
|
52
|
+
attribute.name,
|
|
53
|
+
attribute.reported(),
|
|
54
|
+
]));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The attributes a receive request asked for.
|
|
58
|
+
*
|
|
59
|
+
* Real SQS returns no message attributes unless they are named, so a consumer
|
|
60
|
+
* that forgot to ask for them gets none here too. `All` and `.*` select every
|
|
61
|
+
* attribute, a bare name selects that one, and a name ending in `.*` selects
|
|
62
|
+
* every attribute with that prefix.
|
|
63
|
+
*/
|
|
64
|
+
selected(names) {
|
|
65
|
+
if (names === undefined || names.length === 0) {
|
|
66
|
+
return new SimSqsMessageAttributes([]);
|
|
67
|
+
}
|
|
68
|
+
if (names.some((name) => everyAttributeSelectors.has(name))) {
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
return new SimSqsMessageAttributes(this.attributes.filter((attribute) => names.some((name) => selects(name, attribute.name))));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Order two attributes by name, comparing code units rather than by locale.
|
|
76
|
+
*/
|
|
77
|
+
function byName(one, other) {
|
|
78
|
+
// Attribute names within one message are unique, so there is no equal case.
|
|
79
|
+
if (one.name < other.name) {
|
|
80
|
+
return -1;
|
|
81
|
+
}
|
|
82
|
+
return 1;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Whether one requested attribute name selects an attribute.
|
|
86
|
+
*/
|
|
87
|
+
function selects(requested, attributeName) {
|
|
88
|
+
if (requested.endsWith(prefixSelectorSuffix)) {
|
|
89
|
+
return attributeName.startsWith(requested.slice(0, -prefixSelectorSuffix.length));
|
|
90
|
+
}
|
|
91
|
+
return requested === attributeName;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=sim-sqs-message-attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-attributes.js","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-attributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One message body, with the digest a sender checks it by.
|
|
3
|
+
*
|
|
4
|
+
* The digest is a real MD5 of the body, as real SQS reports, because that is the
|
|
5
|
+
* whole point of it: a sender comparing `MD5OfMessageBody` against its own
|
|
6
|
+
* digest either finds the body it sent or finds a bug, and a made-up value would
|
|
7
|
+
* tell it nothing.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SimSqsMessageBody {
|
|
10
|
+
readonly value: string;
|
|
11
|
+
readonly digest: string;
|
|
12
|
+
private constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Read a message body, refusing one real SQS would refuse.
|
|
15
|
+
*/
|
|
16
|
+
static of(value: string, maximumBytes: number): SimSqsMessageBody;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=sim-sqs-message-body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-body.d.ts","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-body.ts"],"names":[],"mappings":"AAkCA;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,eAGN;IAED;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,iBAAiB,CAgChE;CACF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { assertDefined } from "../../../util/type-guard/defined.js";
|
|
3
|
+
import { SimSqsInvalidMessageContents, SimSqsInvalidParameterValue, } from "../error/sim-sqs.error.js";
|
|
4
|
+
const allowedControlCharacters = new Set([0x9, 0xa, 0xd]);
|
|
5
|
+
const space = 0x20;
|
|
6
|
+
const beforeSurrogates = 0xd7_ff;
|
|
7
|
+
const afterSurrogates = 0xe0_00;
|
|
8
|
+
const lastAllowedBmp = 0xff_fd;
|
|
9
|
+
const firstSupplementary = 0x1_00_00;
|
|
10
|
+
const lastSupplementary = 0x10_ff_ff;
|
|
11
|
+
/**
|
|
12
|
+
* Whether a code point is one real SQS allows in a message body.
|
|
13
|
+
*
|
|
14
|
+
* The allowed set is tab, newline, carriage return, and the Unicode ranges
|
|
15
|
+
* either side of the surrogate block. Anything else, a control character or a
|
|
16
|
+
* lone surrogate, is refused rather than sent.
|
|
17
|
+
*/
|
|
18
|
+
function isAllowedInBody(codePoint) {
|
|
19
|
+
if (allowedControlCharacters.has(codePoint)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return ((codePoint >= space && codePoint <= beforeSurrogates) ||
|
|
23
|
+
(codePoint >= afterSurrogates && codePoint <= lastAllowedBmp) ||
|
|
24
|
+
(codePoint >= firstSupplementary && codePoint <= lastSupplementary));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* One message body, with the digest a sender checks it by.
|
|
28
|
+
*
|
|
29
|
+
* The digest is a real MD5 of the body, as real SQS reports, because that is the
|
|
30
|
+
* whole point of it: a sender comparing `MD5OfMessageBody` against its own
|
|
31
|
+
* digest either finds the body it sent or finds a bug, and a made-up value would
|
|
32
|
+
* tell it nothing.
|
|
33
|
+
*/
|
|
34
|
+
export class SimSqsMessageBody {
|
|
35
|
+
value;
|
|
36
|
+
digest;
|
|
37
|
+
constructor(value) {
|
|
38
|
+
this.value = value;
|
|
39
|
+
this.digest = createHash("md5").update(value, "utf8").digest("hex");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Read a message body, refusing one real SQS would refuse.
|
|
43
|
+
*/
|
|
44
|
+
static of(value, maximumBytes) {
|
|
45
|
+
if (value === "") {
|
|
46
|
+
throw new SimSqsInvalidParameterValue("The request must contain the parameter MessageBody");
|
|
47
|
+
}
|
|
48
|
+
const byteLength = Buffer.byteLength(value, "utf8");
|
|
49
|
+
if (byteLength > maximumBytes) {
|
|
50
|
+
throw new SimSqsInvalidParameterValue(`One or more parameters are invalid. Reason: Message must be shorter ` +
|
|
51
|
+
`than ${String(maximumBytes)} bytes, and this one is ` +
|
|
52
|
+
`${String(byteLength)} bytes.`);
|
|
53
|
+
}
|
|
54
|
+
// Iterating a string yields whole code points, so a surrogate pair is one
|
|
55
|
+
// character here rather than two unpaired halves.
|
|
56
|
+
for (const character of value) {
|
|
57
|
+
const codePoint = character.codePointAt(0);
|
|
58
|
+
assertDefined(codePoint, "Every character has a first code point");
|
|
59
|
+
if (!isAllowedInBody(codePoint)) {
|
|
60
|
+
throw new SimSqsInvalidMessageContents("The message contains characters outside the allowed set");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return new this(value);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=sim-sqs-message-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-body.js","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,gBAAgB,GAAG,OAAO,CAAC;AACjC,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAErC;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,SAAiB;IACxC,IAAI,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,CAAC,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,gBAAgB,CAAC;QACrD,CAAC,SAAS,IAAI,eAAe,IAAI,SAAS,IAAI,cAAc,CAAC;QAC7D,CAAC,SAAS,IAAI,kBAAkB,IAAI,SAAS,IAAI,iBAAiB,CAAC,CACpE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACZ,KAAK,CAAS;IACd,MAAM,CAAS;IAE/B,YAAoB,KAAa;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,KAAa,EAAE,YAAoB;QAC3C,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,2BAA2B,CACnC,oDAAoD,CACrD,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,2BAA2B,CACnC,sEAAsE;gBACpE,QAAQ,MAAM,CAAC,YAAY,CAAC,0BAA0B;gBACtD,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CACjC,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,kDAAkD;QAClD,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAE3C,aAAa,CAAC,SAAS,EAAE,wCAAwC,CAAC,CAAC;YAEnE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,4BAA4B,CACpC,yDAAyD,CAC1D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { SimSqsMessage } from "./sim-sqs-message.js";
|
|
2
|
+
/**
|
|
3
|
+
* How many messages a queue holds in each of the states SQS counts separately.
|
|
4
|
+
*/
|
|
5
|
+
export interface SimSqsMessageCounts {
|
|
6
|
+
readonly visible: number;
|
|
7
|
+
readonly inFlight: number;
|
|
8
|
+
readonly delayed: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The messages of one simulated queue, and the receipt handles it has issued.
|
|
12
|
+
*
|
|
13
|
+
* Handles are kept here rather than on the messages because a handle outlives
|
|
14
|
+
* the message it names: a consumer deleting an already deleted message is
|
|
15
|
+
* accepted by real SQS, and a handle the queue never issued is not. Only a store
|
|
16
|
+
* of what has been issued can tell those two apart.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SimSqsMessageStore {
|
|
19
|
+
private messages;
|
|
20
|
+
private readonly handles;
|
|
21
|
+
/**
|
|
22
|
+
* Take a newly sent message.
|
|
23
|
+
*/
|
|
24
|
+
add(message: SimSqsMessage): void;
|
|
25
|
+
/**
|
|
26
|
+
* Forget the messages whose retention period has run out.
|
|
27
|
+
*
|
|
28
|
+
* Real SQS drops a message once it has been on the queue longer than the
|
|
29
|
+
* retention period, so advancing simulated time past it loses the message here
|
|
30
|
+
* too rather than keeping it forever.
|
|
31
|
+
*/
|
|
32
|
+
dropExpired(instant: Date, retentionSeconds: number): void;
|
|
33
|
+
/**
|
|
34
|
+
* The messages that can be received at an instant, oldest first.
|
|
35
|
+
*/
|
|
36
|
+
receivable(instant: Date, limit: number): readonly SimSqsMessage[];
|
|
37
|
+
/**
|
|
38
|
+
* When the earliest message that cannot be received yet becomes receivable,
|
|
39
|
+
* or nothing when every message here is receivable already.
|
|
40
|
+
*/
|
|
41
|
+
nextAvailability(instant: Date): Date | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* The messages that have used up their receives and are receivable again.
|
|
44
|
+
*
|
|
45
|
+
* These are the ones a redrive policy moves to the dead-letter queue. Being
|
|
46
|
+
* visible again is the trigger: a message is only out of attempts once the
|
|
47
|
+
* visibility timeout of its last receive has lapsed, and until then the
|
|
48
|
+
* consumer holding it may still delete it.
|
|
49
|
+
*/
|
|
50
|
+
exhausted(instant: Date, maxReceiveCount: number): readonly SimSqsMessage[];
|
|
51
|
+
/**
|
|
52
|
+
* Record that a message was handed out under a receipt handle.
|
|
53
|
+
*/
|
|
54
|
+
recordHandle(receiptHandle: string, message: SimSqsMessage): void;
|
|
55
|
+
/**
|
|
56
|
+
* The message a receipt handle names, or undefined for a handle this queue
|
|
57
|
+
* never issued.
|
|
58
|
+
*/
|
|
59
|
+
forHandle(receiptHandle: string): SimSqsMessage | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Forget a deleted message.
|
|
62
|
+
*/
|
|
63
|
+
remove(message: SimSqsMessage): void;
|
|
64
|
+
/**
|
|
65
|
+
* Forget every message, as PurgeQueue does.
|
|
66
|
+
*/
|
|
67
|
+
purge(): void;
|
|
68
|
+
/**
|
|
69
|
+
* How many messages are in each state at an instant.
|
|
70
|
+
*/
|
|
71
|
+
countsAt(instant: Date): SimSqsMessageCounts;
|
|
72
|
+
private countWhere;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=sim-sqs-message-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-store.d.ts","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAE5D;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAEhC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAIzD;IAED;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,CAIjE;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAUhD;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,CAK1E;IAED;;OAEG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAEhE;IAED;;;OAGG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE1D;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAEnC;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAEZ;IAED;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,mBAAmB,CAM3C;IAED,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The messages of one simulated queue, and the receipt handles it has issued.
|
|
3
|
+
*
|
|
4
|
+
* Handles are kept here rather than on the messages because a handle outlives
|
|
5
|
+
* the message it names: a consumer deleting an already deleted message is
|
|
6
|
+
* accepted by real SQS, and a handle the queue never issued is not. Only a store
|
|
7
|
+
* of what has been issued can tell those two apart.
|
|
8
|
+
*/
|
|
9
|
+
export class SimSqsMessageStore {
|
|
10
|
+
messages = [];
|
|
11
|
+
handles = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Take a newly sent message.
|
|
14
|
+
*/
|
|
15
|
+
add(message) {
|
|
16
|
+
this.messages = [...this.messages, message];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Forget the messages whose retention period has run out.
|
|
20
|
+
*
|
|
21
|
+
* Real SQS drops a message once it has been on the queue longer than the
|
|
22
|
+
* retention period, so advancing simulated time past it loses the message here
|
|
23
|
+
* too rather than keeping it forever.
|
|
24
|
+
*/
|
|
25
|
+
dropExpired(instant, retentionSeconds) {
|
|
26
|
+
this.messages = this.messages.filter((message) => !message.hasExpiredBy(instant, retentionSeconds));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The messages that can be received at an instant, oldest first.
|
|
30
|
+
*/
|
|
31
|
+
receivable(instant, limit) {
|
|
32
|
+
return this.messages
|
|
33
|
+
.filter((message) => message.isVisibleAt(instant))
|
|
34
|
+
.slice(0, limit);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* When the earliest message that cannot be received yet becomes receivable,
|
|
38
|
+
* or nothing when every message here is receivable already.
|
|
39
|
+
*/
|
|
40
|
+
nextAvailability(instant) {
|
|
41
|
+
const pending = this.messages
|
|
42
|
+
.filter((message) => !message.isVisibleAt(instant))
|
|
43
|
+
.map((message) => message.availableFrom.getTime());
|
|
44
|
+
if (pending.length === 0) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return new Date(Math.min(...pending));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The messages that have used up their receives and are receivable again.
|
|
51
|
+
*
|
|
52
|
+
* These are the ones a redrive policy moves to the dead-letter queue. Being
|
|
53
|
+
* visible again is the trigger: a message is only out of attempts once the
|
|
54
|
+
* visibility timeout of its last receive has lapsed, and until then the
|
|
55
|
+
* consumer holding it may still delete it.
|
|
56
|
+
*/
|
|
57
|
+
exhausted(instant, maxReceiveCount) {
|
|
58
|
+
return this.messages.filter((message) => message.isVisibleAt(instant) && message.receiveCount >= maxReceiveCount);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Record that a message was handed out under a receipt handle.
|
|
62
|
+
*/
|
|
63
|
+
recordHandle(receiptHandle, message) {
|
|
64
|
+
this.handles.set(receiptHandle, message);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The message a receipt handle names, or undefined for a handle this queue
|
|
68
|
+
* never issued.
|
|
69
|
+
*/
|
|
70
|
+
forHandle(receiptHandle) {
|
|
71
|
+
return this.handles.get(receiptHandle);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Forget a deleted message.
|
|
75
|
+
*/
|
|
76
|
+
remove(message) {
|
|
77
|
+
this.messages = this.messages.filter((held) => held !== message);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Forget every message, as PurgeQueue does.
|
|
81
|
+
*/
|
|
82
|
+
purge() {
|
|
83
|
+
this.messages = [];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* How many messages are in each state at an instant.
|
|
87
|
+
*/
|
|
88
|
+
countsAt(instant) {
|
|
89
|
+
return {
|
|
90
|
+
visible: this.countWhere((message) => message.isVisibleAt(instant)),
|
|
91
|
+
inFlight: this.countWhere((message) => message.isInFlightAt(instant)),
|
|
92
|
+
delayed: this.countWhere((message) => message.isDelayedAt(instant)),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
countWhere(matches) {
|
|
96
|
+
return this.messages.filter((message) => matches(message)).length;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=sim-sqs-message-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-store.js","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-store.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IACrB,QAAQ,GAA6B,EAAE,CAAC;IAC/B,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE5D;;OAEG;IACH,GAAG,CAAC,OAAsB;QACxB,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,OAAa,EAAE,gBAAwB;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAC9D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAa,EAAE,KAAa;QACrC,OAAO,IAAI,CAAC,QAAQ;aACjB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;aACjD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAa;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;aAC1B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;aAClD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,OAAa,EAAE,eAAuB;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CACzB,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,IAAI,eAAe,CAC1E,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,aAAqB,EAAE,OAAsB;QACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,aAAqB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAsB;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAa;QACpB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACrE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACpE,CAAC;IACJ,CAAC;IAEO,UAAU,CAAC,OAA4C;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The message system attributes one receive request asked for.
|
|
3
|
+
*
|
|
4
|
+
* Real SQS returns none of them unless they are named, so a consumer relying on
|
|
5
|
+
* `ApproximateReceiveCount` has to ask for it. Reporting them unasked would let
|
|
6
|
+
* a test read a value that would be missing on AWS.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SimSqsRequestedSystemAttributes {
|
|
9
|
+
private readonly names;
|
|
10
|
+
private constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Read the attribute names a receive request asked for, refusing a name real
|
|
13
|
+
* SQS has no such attribute for.
|
|
14
|
+
*
|
|
15
|
+
* `MessageSystemAttributeNames` and the deprecated `AttributeNames` mean the
|
|
16
|
+
* same thing, so both are gathered here.
|
|
17
|
+
*/
|
|
18
|
+
static of(...requested: readonly (readonly string[] | undefined)[]): SimSqsRequestedSystemAttributes;
|
|
19
|
+
/**
|
|
20
|
+
* Pick the requested attributes out of the ones a message has.
|
|
21
|
+
*
|
|
22
|
+
* Undefined means the response carries no `Attributes` at all, which is what
|
|
23
|
+
* real SQS sends when nothing was asked for.
|
|
24
|
+
*/
|
|
25
|
+
from(available: ReadonlyMap<string, string>): Record<string, string> | undefined;
|
|
26
|
+
private selects;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=sim-sqs-message-system-attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-system-attributes.d.ts","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-system-attributes.ts"],"names":[],"mappings":"AAyBA;;;;;;GAMG;AACH,qBAAa,+BAA+B;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAE1C,OAAO,eAEN;IAED;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CACP,GAAG,SAAS,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,GACvD,+BAA+B,CAajC;IAED;;;;;OAKG;IACH,IAAI,CACF,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAepC;IAED,OAAO,CAAC,OAAO;CAGhB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { SimSqsInvalidAttributeName } from "../error/sim-sqs.error.js";
|
|
2
|
+
const everySelector = "All";
|
|
3
|
+
/**
|
|
4
|
+
* The message system attribute names real SQS accepts on a receive request.
|
|
5
|
+
*
|
|
6
|
+
* The FIFO ones and the tracing one are here because asking for them is valid:
|
|
7
|
+
* real SQS leaves an attribute out when the message has no value for it, so a
|
|
8
|
+
* request naming `MessageGroupId` on a standard queue gets silence rather than a
|
|
9
|
+
* failure. A name that is not an SQS attribute at all is refused.
|
|
10
|
+
*/
|
|
11
|
+
const knownNames = new Set([
|
|
12
|
+
"ApproximateFirstReceiveTimestamp",
|
|
13
|
+
"ApproximateReceiveCount",
|
|
14
|
+
"AWSTraceHeader",
|
|
15
|
+
"DeadLetterQueueSourceArn",
|
|
16
|
+
"MessageDeduplicationId",
|
|
17
|
+
"MessageGroupId",
|
|
18
|
+
"SenderId",
|
|
19
|
+
"SentTimestamp",
|
|
20
|
+
"SequenceNumber",
|
|
21
|
+
"SqsManagedSseEnabled",
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* The message system attributes one receive request asked for.
|
|
25
|
+
*
|
|
26
|
+
* Real SQS returns none of them unless they are named, so a consumer relying on
|
|
27
|
+
* `ApproximateReceiveCount` has to ask for it. Reporting them unasked would let
|
|
28
|
+
* a test read a value that would be missing on AWS.
|
|
29
|
+
*/
|
|
30
|
+
export class SimSqsRequestedSystemAttributes {
|
|
31
|
+
names;
|
|
32
|
+
constructor(names) {
|
|
33
|
+
this.names = names;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read the attribute names a receive request asked for, refusing a name real
|
|
37
|
+
* SQS has no such attribute for.
|
|
38
|
+
*
|
|
39
|
+
* `MessageSystemAttributeNames` and the deprecated `AttributeNames` mean the
|
|
40
|
+
* same thing, so both are gathered here.
|
|
41
|
+
*/
|
|
42
|
+
static of(...requested) {
|
|
43
|
+
const names = requested.flatMap((group) => group ?? []);
|
|
44
|
+
for (const name of names) {
|
|
45
|
+
if (name !== everySelector && !knownNames.has(name)) {
|
|
46
|
+
throw new SimSqsInvalidAttributeName(`Unknown Attribute ${name}: it is not an SQS message system ` +
|
|
47
|
+
`attribute name`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return new this(names);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Pick the requested attributes out of the ones a message has.
|
|
54
|
+
*
|
|
55
|
+
* Undefined means the response carries no `Attributes` at all, which is what
|
|
56
|
+
* real SQS sends when nothing was asked for.
|
|
57
|
+
*/
|
|
58
|
+
from(available) {
|
|
59
|
+
if (this.names.length === 0) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const selected = available
|
|
63
|
+
.entries()
|
|
64
|
+
.filter(([name]) => this.selects(name))
|
|
65
|
+
.toArray();
|
|
66
|
+
if (selected.length === 0) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
return Object.fromEntries(selected);
|
|
70
|
+
}
|
|
71
|
+
selects(name) {
|
|
72
|
+
return this.names.includes(everySelector) || this.names.includes(name);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=sim-sqs-message-system-attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-system-attributes.js","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-system-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS;IACjC,kCAAkC;IAClC,yBAAyB;IACzB,gBAAgB;IAChB,0BAA0B;IAC1B,wBAAwB;IACxB,gBAAgB;IAChB,UAAU;IACV,eAAe;IACf,gBAAgB;IAChB,sBAAsB;CACvB,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,OAAO,+BAA+B;IACzB,KAAK,CAAoB;IAE1C,YAAoB,KAAwB;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CACP,GAAG,SAAqD;QAExD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAExD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,KAAK,aAAa,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,0BAA0B,CAClC,qBAAqB,IAAI,oCAAoC;oBAC3D,gBAAgB,CACnB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,IAAI,CACF,SAAsC;QAEtC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS;aACvB,OAAO,EAAE;aACT,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACtC,OAAO,EAAE,CAAC;QAEb,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,OAAO,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether one message can be received, and when it next can be.
|
|
3
|
+
*
|
|
4
|
+
* This is held as the instant the message becomes receivable rather than as a
|
|
5
|
+
* timer. That is what makes a visibility timeout something a test can advance the
|
|
6
|
+
* simulation clock past: nothing has to fire for a message to come back, it
|
|
7
|
+
* simply becomes visible again once simulated time reaches the instant it was
|
|
8
|
+
* hidden until.
|
|
9
|
+
*
|
|
10
|
+
* A delay works the same way. A message sent with a delay is invisible from the
|
|
11
|
+
* moment it arrives, and the only difference from an in-flight message is that it
|
|
12
|
+
* has never been received.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SimSqsMessageVisibility {
|
|
15
|
+
private visibleFrom;
|
|
16
|
+
private receives;
|
|
17
|
+
private firstReceivedAt;
|
|
18
|
+
constructor(visibleFrom: Date);
|
|
19
|
+
/**
|
|
20
|
+
* How many times the message has been handed out and not deleted.
|
|
21
|
+
*/
|
|
22
|
+
get receiveCount(): number;
|
|
23
|
+
/**
|
|
24
|
+
* The instant from which the message can be received.
|
|
25
|
+
*/
|
|
26
|
+
get availableFrom(): Date;
|
|
27
|
+
/**
|
|
28
|
+
* When the message was first handed out.
|
|
29
|
+
*
|
|
30
|
+
* Only a message being handed out reports its attributes, and handing one out
|
|
31
|
+
* is what sets the first receive, so there is always one to report by then.
|
|
32
|
+
*/
|
|
33
|
+
get firstReceived(): Date;
|
|
34
|
+
/**
|
|
35
|
+
* Whether the message can be received at an instant.
|
|
36
|
+
*/
|
|
37
|
+
isVisibleAt(instant: Date): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the message is still waiting out the delay it was sent with.
|
|
40
|
+
*/
|
|
41
|
+
isDelayedAt(instant: Date): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Whether the message is hidden by a visibility timeout, which SQS counts as
|
|
44
|
+
* in flight.
|
|
45
|
+
*/
|
|
46
|
+
isInFlightAt(instant: Date): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Record a receive, and hide the message for its visibility timeout.
|
|
49
|
+
*/
|
|
50
|
+
receiveAt(instant: Date, visibilityTimeoutSeconds: number): void;
|
|
51
|
+
/**
|
|
52
|
+
* Hide the message for a visibility timeout starting at an instant.
|
|
53
|
+
*/
|
|
54
|
+
hideFor(instant: Date, visibilityTimeoutSeconds: number): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=sim-sqs-message-visibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-visibility.d.ts","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-visibility.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,eAAe,CAAmB;IAE1C,YAAY,WAAW,EAAE,IAAI,EAE5B;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,IAAI,CAExB;IAED;;;;;OAKG;IACH,IAAI,aAAa,IAAI,IAAI,CAOxB;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAElC;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAElC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAEnC;IAED;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAI/D;IAED;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAI7D;CACF"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { assertDefined } from "../../../util/type-guard/defined.js";
|
|
2
|
+
const millisecondsPerSecond = 1000;
|
|
3
|
+
/**
|
|
4
|
+
* Whether one message can be received, and when it next can be.
|
|
5
|
+
*
|
|
6
|
+
* This is held as the instant the message becomes receivable rather than as a
|
|
7
|
+
* timer. That is what makes a visibility timeout something a test can advance the
|
|
8
|
+
* simulation clock past: nothing has to fire for a message to come back, it
|
|
9
|
+
* simply becomes visible again once simulated time reaches the instant it was
|
|
10
|
+
* hidden until.
|
|
11
|
+
*
|
|
12
|
+
* A delay works the same way. A message sent with a delay is invisible from the
|
|
13
|
+
* moment it arrives, and the only difference from an in-flight message is that it
|
|
14
|
+
* has never been received.
|
|
15
|
+
*/
|
|
16
|
+
export class SimSqsMessageVisibility {
|
|
17
|
+
visibleFrom;
|
|
18
|
+
receives = 0;
|
|
19
|
+
firstReceivedAt;
|
|
20
|
+
constructor(visibleFrom) {
|
|
21
|
+
this.visibleFrom = visibleFrom;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* How many times the message has been handed out and not deleted.
|
|
25
|
+
*/
|
|
26
|
+
get receiveCount() {
|
|
27
|
+
return this.receives;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The instant from which the message can be received.
|
|
31
|
+
*/
|
|
32
|
+
get availableFrom() {
|
|
33
|
+
return this.visibleFrom;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* When the message was first handed out.
|
|
37
|
+
*
|
|
38
|
+
* Only a message being handed out reports its attributes, and handing one out
|
|
39
|
+
* is what sets the first receive, so there is always one to report by then.
|
|
40
|
+
*/
|
|
41
|
+
get firstReceived() {
|
|
42
|
+
assertDefined(this.firstReceivedAt, "A message reports its first receive once it has been received");
|
|
43
|
+
return this.firstReceivedAt;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Whether the message can be received at an instant.
|
|
47
|
+
*/
|
|
48
|
+
isVisibleAt(instant) {
|
|
49
|
+
return this.visibleFrom.getTime() <= instant.getTime();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Whether the message is still waiting out the delay it was sent with.
|
|
53
|
+
*/
|
|
54
|
+
isDelayedAt(instant) {
|
|
55
|
+
return this.receives === 0 && !this.isVisibleAt(instant);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether the message is hidden by a visibility timeout, which SQS counts as
|
|
59
|
+
* in flight.
|
|
60
|
+
*/
|
|
61
|
+
isInFlightAt(instant) {
|
|
62
|
+
return this.receives > 0 && !this.isVisibleAt(instant);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Record a receive, and hide the message for its visibility timeout.
|
|
66
|
+
*/
|
|
67
|
+
receiveAt(instant, visibilityTimeoutSeconds) {
|
|
68
|
+
this.receives += 1;
|
|
69
|
+
this.firstReceivedAt ??= instant;
|
|
70
|
+
this.hideFor(instant, visibilityTimeoutSeconds);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Hide the message for a visibility timeout starting at an instant.
|
|
74
|
+
*/
|
|
75
|
+
hideFor(instant, visibilityTimeoutSeconds) {
|
|
76
|
+
this.visibleFrom = new Date(instant.getTime() + visibilityTimeoutSeconds * millisecondsPerSecond);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=sim-sqs-message-visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-sqs-message-visibility.js","sourceRoot":"","sources":["../../../../src/service/sqs/message/sim-sqs-message-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,uBAAuB;IAC1B,WAAW,CAAO;IAClB,QAAQ,GAAG,CAAC,CAAC;IACb,eAAe,CAAmB;IAE1C,YAAY,WAAiB;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,IAAI,aAAa;QACf,aAAa,CACX,IAAI,CAAC,eAAe,EACpB,+DAA+D,CAChE,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAa;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAa;QACvB,OAAO,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAa;QACxB,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAa,EAAE,wBAAgC;QACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAa,EAAE,wBAAgC;QACrD,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CACzB,OAAO,CAAC,OAAO,EAAE,GAAG,wBAAwB,GAAG,qBAAqB,CACrE,CAAC;IACJ,CAAC;CACF"}
|