github floci-io/floci 1.5.18

4 hours ago

πŸŽ‰ Highlights

This release adds two brand-new services β€” CloudFront and AWS Config β€” completes Neptune with a real Gremlin Docker backend, and lights up real SNS HTTP/HTTPS endpoint delivery. SQS, Lambda, and API Gateway v2 all see substantial conformance work, including FIFO dedup scoping, a proper Lambda port-allocator pool, and ALB-routed HTTP APIs. Welcome to the 9 first-time contributors β€” the largest cohort yet.

☁️ New: CloudFront

Floci now emulates AWS CloudFront β€” distributions, origins, behaviors, and the management API. Edge-caching workflows and IaC that provisions CDN infrastructure can now be exercised locally.

πŸ“‹ New: AWS Config

The AWS Config service is now supported, enabling local testing of configuration recording, compliance rules, and resource tracking workflows.

πŸ•ΈοΈ Neptune is now real

The Neptune service introduced in 1.5.17 graduates from control-plane scaffolding to a working graph engine: a Gremlin Docker backend, full control plane, and SDK plumbing. Graph workloads run end-to-end.

πŸ“‘ SNS HTTP/HTTPS endpoint delivery

http:// and https:// subscriptions are now delivered for real β€” subscription confirmation handshakes, message POSTs, and signature headers all work. This closes a long-standing gap for webhook-style fan-out testing.

🚦 Lambda port allocator: checkout/release pool

The Lambda runtime port allocator is now a proper checkout/release pool rather than a counter, with an actionable error message when the concurrency pool is exhausted. Expect fewer mystery "address already in use" failures under concurrent invocations.

✨ New Features

  • feat(cloudfront): implement CloudFront service emulation by @hectorvent in #969
  • feat(config): add AWS Config service emulation by @Croway in #934
  • feat(neptune): Neptune control plane, Gremlin Docker backend, and SDK integration by @initeshjain in #958
  • feat(sns): implement HTTP/HTTPS endpoint delivery (#841) by @xTryHard in #865
  • feat(sqs): implement StartMessageMoveTask / List / Cancel with async drain + rate limiting by @slang25 in #910
  • feat(sqs): persist and return AWSTraceHeader system attribute by @slang25 in #909
  • feat(kms): implement GenerateMac and VerifyMac by @nblomquist in #927
  • feat(elasticache): Memcached CreateCacheCluster / DescribeCacheClusters by @lucascosta95 in #930
  • feat(ecs): register ECS service containers as ELBv2 targets by @marvikomo in #929
  • feat(apigateway): handle requests to custom domains by @sdsanders in #922
  • feat(apigatewayv2): forward HTTP API requests through ALB listener by @marvikomo in #941

πŸ› Bug Fixes

SQS / SNS

  • fix(sqs): scope FIFO dedup per MessageGroupId when DeduplicationScope=messageGroup by @slang25 in #908
  • fix(sqs): skip JSON null tag/attribute values instead of storing literal "null" by @slang25 in #905
  • fix(sqs): reject SendMessageBatch when combined payload exceeds MaximumMessageSize by @slang25 in #907
  • fix(sns): emit canonical error codes for Publish size violations by @slang25 in #906
  • fix(sns): preserve per-entry MessageAttributes in PublishBatch by @ram-sarf in #891

S3

  • fix(s3): honor response-* query parameters on GetObject and HeadObject by @ahmd-soliman in #923
  • fix(s3): ListObjects v1 marker pagination by @mmangino in #939
  • fix(s3): omit body-description headers and user metadata from PutObject response by @darrelldraney in #948
  • fix(s3): return ObjectLockConfigurationNotFoundError for non-lock buckets by @hectorvent in #971

Lambda

  • fix(lambda): await HttpServer.close in RuntimeApiServer.stop() by @steve-hb in #926
  • fix(lambda): make PortAllocator a checkout/release pool by @steve-hb in #936
  • fix(lambda): log actionable hint when concurrency pool is exhausted by @steve-hb in #935

API Gateway / API Gateway v2

  • fix(apigateway): accept any Content-Type on PutRestApi / ImportRestApi by @ahmd-soliman in #925
  • fix(apigatewayv2): include connectionType and enableSimpleResponses on Integration/Authorizer responses by @yoshiyukiohta in #931
  • fix(apigatewayv2): include corsConfiguration on Api management responses by @yoshiyukiohta in #933
  • fix(apigatewayv2): raise Vert.x WebSocket frame size limit to 256 KB by @dixitrathod16 in #938

DynamoDB / Secrets Manager / Cognito / EC2 / RDS / CBOR

  • fix: DynamoDB DeleteTable status, PartiQL scan, plus Secrets Manager RestoreSecret by @Croway in #915
  • fix(cognito): correct USER_SRP_AUTH PASSWORD_VERIFIER signature by @ricardomedina98 in #912
  • fix(ec2): add missing instance response fields to fix Terraform nil pointer dereference (#871) by @hectorvent in #883
  • fix(rds): persist metadata across storage-backed restarts by @albert-einshutoin in #945
  • fix(cbor): lowercase smithy-protocol response header casing by @hectorvent in #968
  • fix: crash when request Content-Type header is empty string by @mmangino in #940

πŸ“š Documentation

πŸ‘‹ New Contributors

A warm welcome to everyone making their first contribution to Floci:

Full Changelog: 1.5.17...1.5.18

Don't miss a new floci release

NewReleases is sending notifications on new releases.