### Is there an existing issue for this?

- [X] I have searched the existing issues

### Feature description

SNS allows for the publishing of messages to an SMS destination with a phone number. Those messages are logged and stored in the `SnsStore`, but there is no way to retrieve them for verification. The request here is to expose a new endpoint which returns SMS messages from the store, similar to the one made available to retrieve email messages sent via SES.

### 🧑‍💻 Implementation

The `SNSServicePlatformEndpointMessagesApiResource` class makes endpoints available for accessing platform endpoint messages sent via SNS. A similar resource class could be implemented to provide new endpoints for accessing SMS messages.

Given that interaction platform endpoint messages is exposed at the path `/_aws/sns/platform-endpoint-messages`, SMS message interaction would presumably be exposed at `/_aws/sns/sms-messages`. A `GET` endpoint could accept an optional `phoneNumber` query parameter to filter messages based on the destination phone number.

```python
class SNSServiceSMSMessagesApiResource:
  @route(sns_constants.SMS_MSGS_ENDPOINT, methods=["GET"])
    def on_get(self, request: Request):
      account_id = #...
      region = #...
      filter_phone_number = request.args.get("phoneNumber")
      # get store; conditionally filter messages based on filter_phone_number
```

### Anything else?

_No response_
"""
        This method evaluate the filter policy recursively, while still being able to validate the `exists` condition.
        Example:
        nested_filter_policy = {
            "object": {
                "key": [{"prefix": "auto-"}],
                "nested_key": [{"exists": False}],
            },
            "test": [{"exists": False}],
        }
        payload = {
            "object": {
                "key": "auto-test",
            }
        }
        This function then iterates on top level keys of the filter policy: ("object", "test")
        The value of "object" is a dict, we need to evaluate this level of the filter policy.
        We pass the nested property values (the dict) as well as the values of the payload's field to the recursive
        function, to evaluate the conditions on the same level of depth.
        We now have these parameters to the function:
        filter_policy = {