github ministackorg/ministack v1.3.25

6 hours ago

What's Changed

[1.3.25] — 2026-05-03

Added

  • AppSync Events API — Event API management under /v2/apis, channel namespaces, API keys via /v1/apis/{apiId}/apikeys, HTTP publish on {apiId}.appsync-api.*, and realtime WebSocket on {apiId}.appsync-realtime-api.* (aws-appsync-event-ws subprotocol). Strict auth via APPSYNC_EVENTS_ENFORCE_AUTH=1. Contributed by @marcin-nowak-scl.
  • CloudFront KeyValueStore — management plane — Create/Describe/List/Update/Delete with ETag concurrency; KeyValueStoreAssociations round-tripped through CloudFront Functions. Contributed by @DaviReisVieira.
  • CloudFront KeyValueStore — data plane — separate cloudfront-keyvaluestore service covering Describe, ListKeys, GetKey, PutKey, DeleteKey, UpdateKeys with ETag concurrency. Requested by @shellscape. Contributed by @DaviReisVieira.
  • EventBridge cron() schedule auto-fire — full AWS-spec parity. Zero-dep parser for the 6-field syntax: *, ?, ranges, steps, lists, named month/weekday tokens, and the L (last day / <n>L last weekday-of-month), LW (last weekday), <n>W (nearest weekday), and <n>#<k> (kth weekday-of-month) operators. DoM/DoW mutual-exclusion enforced at PutRule. Contributed by @hiddengearz.

Fixed

  • AppSync Events ChannelNamespace response now includes channelNamespaceArn — spec member was omitted; Terraform / Java SDK v2 saw null where AWS returns the ARN.
  • CloudFront KVS data-plane DescribeKeyValueStore Created / LastModified — were hardcoded to 0; now parsed from the management-plane timestamp into int epoch seconds.
  • S3 vhost routing excludes cloudfront-kvs.* — moved the bypass from a /key-value-stores/ path check up to the _NON_S3_VHOST_NAMES host-name layer.
  • EventBridge DescribeRule / ListRules now emit CreatedBy and ManagedBy — spec members were silently dropped from _rule_out.
  • EventBridge PutEvents rejects more than 10 entries — AWS spec caps Entries at 10; ministack accepted any size.
  • EventBridge event Time is int epoch seconds, not float — Java/Go SDK v2 timestamp parsers reject high-precision floats; archive replays now also dispatch the int form.
  • EventBridge content-filter [{"exists": false}] matches absent keys — short-circuited to no-match before the exists branch was evaluated, so patterns that should fire on missing fields silently dropped.
  • EventBridge ListRules paginates — added Limit (1-100) and opaque NextToken; previously returned the full list and SDK paginators looped on the first page.
  • EventBridge ListRuleNamesByTarget NextToken is opaque — was a raw integer offset string.
  • EventBridge DescribeEventBus / ListEventBuses omit Policy when no policy set — was emitting "", divergent from AWS shape.
  • EventBridge DescribeEventSource State — was hardcoded ENABLED; AWS enum is PENDING / ACTIVE / DELETED. Now returns ACTIVE.

Don't miss a new ministack release

NewReleases is sending notifications on new releases.