From 61f6bc848b1b459e50c527eb6c014bf1b590c4d8 Mon Sep 17 00:00:00 2001 From: "tom.droza2" Date: Fri, 26 Jul 2024 14:59:08 +0100 Subject: [PATCH 01/19] CCM-5995: Change MessageStatus callback url to be generic CCM-5995: Fixed callback URI docs CCM-5995: Update wording of retryCount in API responses CM-5995: "supplier status" -> "channel status" CCM-5995: Update Enum documentation for consistency CCM-5995: Add descriptions to enums in API docs CCM-5995: Removed channel type description (inherit from enum instead) --- .../callbacks/channel-subscription-openapi-spec.json | 3 +-- specification/callbacks/channel_status.yaml | 2 +- specification/communications-manager.yaml | 4 ++-- specification/schemas/components/MessageStatus.yaml | 9 +-------- specification/schemas/components/SupplierStatus.yaml | 7 +++++-- specification/schemas/enums/ChannelStatus.yaml | 3 ++- specification/schemas/enums/ChannelType.yaml | 3 ++- specification/schemas/enums/ErrorAccessDenied.yaml | 2 +- specification/schemas/enums/ErrorBadGateway.yaml | 2 +- .../enums/ErrorCreateMessageInternalServerError.yaml | 2 +- specification/schemas/enums/ErrorForbidden.yaml | 2 +- .../schemas/enums/ErrorInternalServerError.yaml | 2 +- specification/schemas/enums/ErrorInvalidNHSNumber.yaml | 2 +- specification/schemas/enums/ErrorInvalidValue.yaml | 4 ++-- specification/schemas/enums/ErrorMethodNotAllowed.yaml | 2 +- specification/schemas/enums/ErrorNoSuchRoutingPlan.yaml | 2 +- specification/schemas/enums/ErrorNotAcceptable.yaml | 2 +- specification/schemas/enums/ErrorNotFound.yaml | 2 +- specification/schemas/enums/ErrorQuota.yaml | 2 +- specification/schemas/enums/ErrorRetryTooEarly.yaml | 2 +- specification/schemas/enums/ErrorServiceUnavailable.yaml | 2 +- specification/schemas/enums/ErrorTimeout.yaml | 2 +- specification/schemas/enums/ErrorUnsupportedMedia.yaml | 2 +- specification/schemas/enums/MessageStatusEnum.yaml | 1 + specification/schemas/enums/MetadataLabels.yaml | 2 +- specification/schemas/enums/MetadataSources.yaml | 2 +- specification/schemas/enums/RoutingPlanType.yaml | 2 +- specification/schemas/enums/SupplierStatusEnum.yaml | 1 + specification/schemas/enums/TypeMessage.yaml | 2 +- specification/schemas/enums/TypeMessageBatch.yaml | 2 +- specification/schemas/enums/TypeNhsAppAccounts.yaml | 2 +- specification/schemas/responses/MessageResponse.yaml | 3 +-- 32 files changed, 40 insertions(+), 42 deletions(-) diff --git a/specification/callbacks/channel-subscription-openapi-spec.json b/specification/callbacks/channel-subscription-openapi-spec.json index d4cf36c1d..1e0224c22 100644 --- a/specification/callbacks/channel-subscription-openapi-spec.json +++ b/specification/callbacks/channel-subscription-openapi-spec.json @@ -123,8 +123,7 @@ "format": "date-time" }, "retryCount": { - "type": "number", - "description": "Contains the amount of times that we have attempted to send this channel." + "$ref": "../snippets/RetryCount.yaml" } }, "required": [ diff --git a/specification/callbacks/channel_status.yaml b/specification/callbacks/channel_status.yaml index 5d8658e08..cb5636045 100644 --- a/specification/callbacks/channel_status.yaml +++ b/specification/callbacks/channel_status.yaml @@ -2,7 +2,7 @@ summary: Channel Status description: |- - NHS Notify can send a supplier status callback when: + NHS Notify can send a channel status callback when: * the channel status has changed - This refers to the internal statuses used by NHS Notify, which are consistent across all channels * the supplier status has changed - This is the raw status value specified by the underlying channel supplier. The possible values are listed [here](#overview--supplier-statuses) diff --git a/specification/communications-manager.yaml b/specification/communications-manager.yaml index 891f480e0..c476ecab6 100644 --- a/specification/communications-manager.yaml +++ b/specification/communications-manager.yaml @@ -48,11 +48,11 @@ paths: description: The ordinal number of the page of results to be retrieved. If omitted, the first page of results will be returned. Use the links section in the response body to determine whether any further pages of results exist. get: $ref: endpoints/get_nhsapp_account_details.yaml - /callbacks/message-status: + /: post: $ref: callbacks/message_status.yaml tags: ['Callbacks'] - /: + /: post: $ref: callbacks/channel_status.yaml tags: ['Callbacks'] diff --git a/specification/schemas/components/MessageStatus.yaml b/specification/schemas/components/MessageStatus.yaml index 3f1004308..86927578f 100644 --- a/specification/schemas/components/MessageStatus.yaml +++ b/specification/schemas/components/MessageStatus.yaml @@ -15,14 +15,7 @@ properties: - 1642109b-69eb-447f-8f97-ab70a74f5db4 messageStatus: type: string - title: ChannelStatus - enum: - - pending_enrichment - - enriched - - sending - - delivered - - failed - example: delivered + $ref: ../enums/MessageStatus.yaml messageStatusDescription: type: string example: "" diff --git a/specification/schemas/components/SupplierStatus.yaml b/specification/schemas/components/SupplierStatus.yaml index 398282882..6a3a84844 100644 --- a/specification/schemas/components/SupplierStatus.yaml +++ b/specification/schemas/components/SupplierStatus.yaml @@ -21,14 +21,17 @@ properties: - nhsapp example: nhsapp channelStatus: - description: The current status of this channel at the time this response was generated. $ref: ../enums/ChannelStatus.yaml channelStatusDescription: type: string description: If there is extra information associated with the status of this channel, it is provided here. example: "" supplierStatus: +<<<<<<< HEAD $ref: ../enums/SupplierStatusEnum.yaml +======= + $ref: ../enums/SupplierStatus.yaml +>>>>>>> b5567fa (CCM-5995: Add descriptions to enums in API docs) timestamp: type: string description: Date-time for when the supplier status change was processed. @@ -36,7 +39,7 @@ properties: example: '2023-11-17T14:27:51.413Z' retryCount: type: number - description: Contains the amount of times that we have attempted to send this channel. + description: Contains the amount of times that we have attempted to send this message to this channel. example: 1 required: - messageId diff --git a/specification/schemas/enums/ChannelStatus.yaml b/specification/schemas/enums/ChannelStatus.yaml index 80fdd7572..0a6410431 100644 --- a/specification/schemas/enums/ChannelStatus.yaml +++ b/specification/schemas/enums/ChannelStatus.yaml @@ -1,5 +1,6 @@ +title: Enum_ChannelStatus +description: The current status of this channel at the time this response was generated. type: string -title: ChannelStatus enum: - created - sending diff --git a/specification/schemas/enums/ChannelType.yaml b/specification/schemas/enums/ChannelType.yaml index a5afb47d1..bb1337d77 100644 --- a/specification/schemas/enums/ChannelType.yaml +++ b/specification/schemas/enums/ChannelType.yaml @@ -1,5 +1,6 @@ +title: Enum_ChannelType +description: The communication type of this channel. type: string -title: ChannelType enum: - nhsapp - email diff --git a/specification/schemas/enums/ErrorAccessDenied.yaml b/specification/schemas/enums/ErrorAccessDenied.yaml index 3f0d1f046..43ba3d2f6 100644 --- a/specification/schemas/enums/ErrorAccessDenied.yaml +++ b/specification/schemas/enums/ErrorAccessDenied.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_AccessDenied type: string enum: - CM_DENIED example: CM_DENIED -title: Enum_Error_AccessDenied diff --git a/specification/schemas/enums/ErrorBadGateway.yaml b/specification/schemas/enums/ErrorBadGateway.yaml index ee8277adc..c67e55bf9 100644 --- a/specification/schemas/enums/ErrorBadGateway.yaml +++ b/specification/schemas/enums/ErrorBadGateway.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_BadGateway type: string enum: - CM_BAD_GATEWAY example: CM_BAD_GATEWAY -title: Enum_Error_BadGateway diff --git a/specification/schemas/enums/ErrorCreateMessageInternalServerError.yaml b/specification/schemas/enums/ErrorCreateMessageInternalServerError.yaml index e441c4191..cf9885ae5 100644 --- a/specification/schemas/enums/ErrorCreateMessageInternalServerError.yaml +++ b/specification/schemas/enums/ErrorCreateMessageInternalServerError.yaml @@ -1,7 +1,7 @@ +title: Enum_Error_CreateMessageInternalServerError type: string enum: - CM_ROUTING_PLAN_DUPLICATE_TEMPLATES - CM_MISSING_ROUTING_PLAN_TEMPLATE - CM_INTERNAL_SERVER_ERROR example: CM_MISSING_ROUTING_PLAN_TEMPLATE -title: Enum_Error_CreateMessageInternalServerError diff --git a/specification/schemas/enums/ErrorForbidden.yaml b/specification/schemas/enums/ErrorForbidden.yaml index 53cc7db2e..f9bf7c486 100644 --- a/specification/schemas/enums/ErrorForbidden.yaml +++ b/specification/schemas/enums/ErrorForbidden.yaml @@ -1,6 +1,6 @@ +title: Enum_Error_Forbidden type: string enum: - CM_FORBIDDEN - CM_SERVICE_BAN example: CM_FORBIDDEN -title: Enum_Error_Forbidden diff --git a/specification/schemas/enums/ErrorInternalServerError.yaml b/specification/schemas/enums/ErrorInternalServerError.yaml index 6143f148a..e172f7419 100644 --- a/specification/schemas/enums/ErrorInternalServerError.yaml +++ b/specification/schemas/enums/ErrorInternalServerError.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_InternalServerError type: string enum: - CM_INTERNAL_SERVER_ERROR example: CM_INTERNAL_SERVER_ERROR -title: Enum_Error_InternalServerError diff --git a/specification/schemas/enums/ErrorInvalidNHSNumber.yaml b/specification/schemas/enums/ErrorInvalidNHSNumber.yaml index cbee77433..49a1b6687 100644 --- a/specification/schemas/enums/ErrorInvalidNHSNumber.yaml +++ b/specification/schemas/enums/ErrorInvalidNHSNumber.yaml @@ -1,3 +1,4 @@ +title: Enum_Error_InvalidNHSNumber type: string enum: - CM_MISSING_VALUE @@ -9,4 +10,3 @@ enum: - CM_ODS_CODE_REQUIRED - CM_CANNOT_SET_ODS_CODE example: CM_INVALID_NHS_NUMBER -title: Enum_Error_InvalidNHSNumber diff --git a/specification/schemas/enums/ErrorInvalidValue.yaml b/specification/schemas/enums/ErrorInvalidValue.yaml index 737689b25..5fbb1579c 100644 --- a/specification/schemas/enums/ErrorInvalidValue.yaml +++ b/specification/schemas/enums/ErrorInvalidValue.yaml @@ -1,3 +1,4 @@ +title: Enum_Error_InvalidValue type: string enum: - CM_MISSING_VALUE @@ -8,5 +9,4 @@ enum: - CM_TOO_FEW_ITEMS - CM_ODS_CODE_REQUIRED - CM_CANNOT_SET_ODS_CODE -example: CM_INVALID_VALUE -title: Enum_Error_InvalidValue +example: CM_INVALID_VALUE \ No newline at end of file diff --git a/specification/schemas/enums/ErrorMethodNotAllowed.yaml b/specification/schemas/enums/ErrorMethodNotAllowed.yaml index 1b0653f92..9344fa5d5 100644 --- a/specification/schemas/enums/ErrorMethodNotAllowed.yaml +++ b/specification/schemas/enums/ErrorMethodNotAllowed.yaml @@ -1,5 +1,5 @@ -type: string title: Enum_Error_Method_Not_Allowed +type: string enum: - CM_NOT_ALLOWED example: CM_NOT_ALLOWED diff --git a/specification/schemas/enums/ErrorNoSuchRoutingPlan.yaml b/specification/schemas/enums/ErrorNoSuchRoutingPlan.yaml index 2730eac26..8041e4e67 100644 --- a/specification/schemas/enums/ErrorNoSuchRoutingPlan.yaml +++ b/specification/schemas/enums/ErrorNoSuchRoutingPlan.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_NoSuchRoutingPlan type: string enum: - CM_NO_SUCH_ROUTING_PLAN example: CM_NO_SUCH_ROUTING_PLAN -title: Enum_Error_NoSuchRoutingPlan diff --git a/specification/schemas/enums/ErrorNotAcceptable.yaml b/specification/schemas/enums/ErrorNotAcceptable.yaml index 5326dd8dd..8292cf355 100644 --- a/specification/schemas/enums/ErrorNotAcceptable.yaml +++ b/specification/schemas/enums/ErrorNotAcceptable.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_NotAcceptable type: string enum: - CM_NOT_ACCEPTABLE -title: Enum_Error_NotAcceptable example: CM_NOT_ACCEPTABLE diff --git a/specification/schemas/enums/ErrorNotFound.yaml b/specification/schemas/enums/ErrorNotFound.yaml index e4b66a29b..71cdb4a15 100644 --- a/specification/schemas/enums/ErrorNotFound.yaml +++ b/specification/schemas/enums/ErrorNotFound.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_NotFound type: string enum: - CM_NOT_FOUND example: CM_NOT_FOUND -title: Enum_Error_NotFound diff --git a/specification/schemas/enums/ErrorQuota.yaml b/specification/schemas/enums/ErrorQuota.yaml index f75853269..cb7850c51 100644 --- a/specification/schemas/enums/ErrorQuota.yaml +++ b/specification/schemas/enums/ErrorQuota.yaml @@ -1,5 +1,5 @@ -type: string title: Enum_Error_Quota +type: string enum: - CM_QUOTA example: CM_QUOTA diff --git a/specification/schemas/enums/ErrorRetryTooEarly.yaml b/specification/schemas/enums/ErrorRetryTooEarly.yaml index 6624fee64..dd1036ed3 100644 --- a/specification/schemas/enums/ErrorRetryTooEarly.yaml +++ b/specification/schemas/enums/ErrorRetryTooEarly.yaml @@ -1,5 +1,5 @@ -type: string title: Enum_Error_Retry_Too_Early +type: string enum: - CM_RETRY_TOO_EARLY example: CM_RETRY_TOO_EARLY diff --git a/specification/schemas/enums/ErrorServiceUnavailable.yaml b/specification/schemas/enums/ErrorServiceUnavailable.yaml index 8ff0d640e..3da57a852 100644 --- a/specification/schemas/enums/ErrorServiceUnavailable.yaml +++ b/specification/schemas/enums/ErrorServiceUnavailable.yaml @@ -1,5 +1,5 @@ -type: string title: Enum_Error_ServiceUnavailable +type: string enum: - CM_SERVICE_UNAVAILABLE example: CM_SERVICE_UNAVAILABLE diff --git a/specification/schemas/enums/ErrorTimeout.yaml b/specification/schemas/enums/ErrorTimeout.yaml index c32008cd1..0eb554e9c 100644 --- a/specification/schemas/enums/ErrorTimeout.yaml +++ b/specification/schemas/enums/ErrorTimeout.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_Timeout type: string enum: - CM_TIMEOUT -title: Enum_Error_Timeout example: CM_TIMEOUT diff --git a/specification/schemas/enums/ErrorUnsupportedMedia.yaml b/specification/schemas/enums/ErrorUnsupportedMedia.yaml index aaca94d47..96c9059e2 100644 --- a/specification/schemas/enums/ErrorUnsupportedMedia.yaml +++ b/specification/schemas/enums/ErrorUnsupportedMedia.yaml @@ -1,5 +1,5 @@ +title: Enum_Error_UnsupportedMedia type: string enum: - CM_UNSUPPORTED_MEDIA -title: Enum_Error_UnsupportedMedia example: CM_UNSUPPORTED_MEDIA diff --git a/specification/schemas/enums/MessageStatusEnum.yaml b/specification/schemas/enums/MessageStatusEnum.yaml index 175404dc6..5d2d8e3be 100644 --- a/specification/schemas/enums/MessageStatusEnum.yaml +++ b/specification/schemas/enums/MessageStatusEnum.yaml @@ -1,4 +1,5 @@ title: Enum_MessageStatus +description: An overall aggregate status taken from all of the communication channels that we have attempted to deliver the message using. type: string enum: - created diff --git a/specification/schemas/enums/MetadataLabels.yaml b/specification/schemas/enums/MetadataLabels.yaml index f55d2a710..586348361 100644 --- a/specification/schemas/enums/MetadataLabels.yaml +++ b/specification/schemas/enums/MetadataLabels.yaml @@ -1,5 +1,5 @@ +title: Enum_MetadataLabels type: string -title: MetadataLabels enum: - nhsapp - email diff --git a/specification/schemas/enums/MetadataSources.yaml b/specification/schemas/enums/MetadataSources.yaml index 0adf409c4..2b005fc8d 100644 --- a/specification/schemas/enums/MetadataSources.yaml +++ b/specification/schemas/enums/MetadataSources.yaml @@ -1,5 +1,5 @@ +title: Enum_MetadataSources type: string enum: - pds -title: MetadataSources example: pds diff --git a/specification/schemas/enums/RoutingPlanType.yaml b/specification/schemas/enums/RoutingPlanType.yaml index 35bb769e1..0502cb552 100644 --- a/specification/schemas/enums/RoutingPlanType.yaml +++ b/specification/schemas/enums/RoutingPlanType.yaml @@ -1,5 +1,5 @@ +title: Enum_RoutingPlanType type: string -title: RoutingPlanType enum: - original - override diff --git a/specification/schemas/enums/SupplierStatusEnum.yaml b/specification/schemas/enums/SupplierStatusEnum.yaml index 0e91dfb06..2c2ec4429 100644 --- a/specification/schemas/enums/SupplierStatusEnum.yaml +++ b/specification/schemas/enums/SupplierStatusEnum.yaml @@ -1,4 +1,5 @@ title: Enum_SupplierStatus +description: The current status of this message within the channel at the time this response was generated. type: string enum: - delivered diff --git a/specification/schemas/enums/TypeMessage.yaml b/specification/schemas/enums/TypeMessage.yaml index df3e612cc..6b5ee1ab2 100644 --- a/specification/schemas/enums/TypeMessage.yaml +++ b/specification/schemas/enums/TypeMessage.yaml @@ -1,5 +1,5 @@ +title: Type_Message type: string enum: - Message -title: Type_Message example: Message diff --git a/specification/schemas/enums/TypeMessageBatch.yaml b/specification/schemas/enums/TypeMessageBatch.yaml index 98bfab070..0d4a0a8f9 100644 --- a/specification/schemas/enums/TypeMessageBatch.yaml +++ b/specification/schemas/enums/TypeMessageBatch.yaml @@ -1,5 +1,5 @@ +title: Type_MessageBatch type: string enum: - MessageBatch -title: Type_MessageBatch example: MessageBatch diff --git a/specification/schemas/enums/TypeNhsAppAccounts.yaml b/specification/schemas/enums/TypeNhsAppAccounts.yaml index b08d244b5..ce2e2a78e 100644 --- a/specification/schemas/enums/TypeNhsAppAccounts.yaml +++ b/specification/schemas/enums/TypeNhsAppAccounts.yaml @@ -1,5 +1,5 @@ +title: Type_NhsAppAccounts type: string enum: - NhsAppAccounts -title: Type_NhsAppAccounts example: NhsAppAccounts diff --git a/specification/schemas/responses/MessageResponse.yaml b/specification/schemas/responses/MessageResponse.yaml index 3372bedc7..3d21295f9 100644 --- a/specification/schemas/responses/MessageResponse.yaml +++ b/specification/schemas/responses/MessageResponse.yaml @@ -40,10 +40,9 @@ properties: additionalProperties: false properties: type: - description: This is the type of channel to be used. $ref: ../enums/ChannelType.yaml retryCount: - description: Contains the amount of times that we have attempted to send this channel. + description: Contains the amount of times that we have attempted to send this message to this channel. type: integer example: 1 channelStatus: From f79425a3e3891db9cb5f0a42bdcde1c389a95982 Mon Sep 17 00:00:00 2001 From: "tom.droza2" Date: Fri, 26 Jul 2024 19:17:57 +0100 Subject: [PATCH 02/19] CCM-5951: Change message id in API docs to fix "Try" functionality CCM-5561: Specify charset encoding in API docs --- specification/documentation/APIDescription.md | 6 +++++- specification/schemas/types/KSUID.yaml | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/specification/documentation/APIDescription.md b/specification/documentation/APIDescription.md index cee913bfa..7547094e5 100644 --- a/specification/documentation/APIDescription.md +++ b/specification/documentation/APIDescription.md @@ -52,15 +52,19 @@ The `Accept` header can contain the following values: * `application/json` * `application/vnd.api+json` +The `Accept` header may optionally include a `charset` attribute. If included, it **must** be set to `charset=utf-8` Any other `charset` value will result in a `415` error response. If ommited then `utf-8` is assumed. + Where no `Accept` header is present, this will default to `application/vnd.api+json` -### Request Content Types +### Request content types This API will accept request payloads of the following types: * `application/vnd.api+json` - see [JSON:API specification](https://jsonapi.org/format/#introduction) * `application/json` +The `Content-Type` header may optionally include a `charset` attribute. If included, it **must** be set to `charset=utf-8` Any other `charset` value will result in a `406` error response. If ommited then `utf-8` is assumed. + If you attempt to send a payload without the `Content-Type` header set to either of these values then the API will respond with a `415 Unsupported Media Type` response. ## Network access diff --git a/specification/schemas/types/KSUID.yaml b/specification/schemas/types/KSUID.yaml index 75ab86024..16e0b7d76 100644 --- a/specification/schemas/types/KSUID.yaml +++ b/specification/schemas/types/KSUID.yaml @@ -3,4 +3,4 @@ title: Type_KSUID pattern: '^[a-zA-Z0-9]{27}$' minLength: 27 maxLength: 27 -example: 0ujsszwN8NRY24YaXiTIE2VWDTS +example: 2WL3qFTEFM0qMY8xjRbt1LIKCzM From 1a371f264dda588ea99f0353874c4cde05deeeed Mon Sep 17 00:00:00 2001 From: "tom.droza2" Date: Mon, 29 Jul 2024 13:33:29 +0100 Subject: [PATCH 03/19] CCM-5937: Update API docs to reflect Correlation ID funcionality --- specification/snippets/CorrelationParameter.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/snippets/CorrelationParameter.yaml b/specification/snippets/CorrelationParameter.yaml index 4bdfd2b94..cfa243c61 100644 --- a/specification/snippets/CorrelationParameter.yaml +++ b/specification/snippets/CorrelationParameter.yaml @@ -1,7 +1,7 @@ name: X-Correlation-ID in: header description: |- - An optional ID which you can use to track transactions across multiple systems. It can take any value, but we recommend avoiding `.` characters. + An optional ID which you can use to track transactions across multiple systems. It can take any value, but we recommend avoiding `.` characters. If not provided in the request, NHS Notify will default to a system generated ID in its place. Mirrored back in a response header. schema: type: string From a63df69e5f217fc6ad029528f63fccb8828d18fe Mon Sep 17 00:00:00 2001 From: "tom.droza2" Date: Tue, 30 Jul 2024 09:29:03 +0100 Subject: [PATCH 04/19] CCM-5995: Address review comments --- specification/documentation/APIDescription.md | 2 +- specification/schemas/components/MessageStatus.yaml | 2 +- specification/schemas/components/SupplierStatus.yaml | 9 +-------- .../enums/{TypeMessage.yaml => EnumMessage.yaml} | 2 +- .../{TypeMessageBatch.yaml => EnumMessageBatch.yaml} | 2 +- specification/schemas/requests/CreateMessage.yaml | 2 +- .../schemas/requests/CreateMessageBatch.yaml | 2 +- specification/schemas/responses/MessageBatch.yaml | 2 +- specification/schemas/responses/MessageCreated.yaml | 2 +- specification/schemas/responses/MessageResponse.yaml | 12 +++++++----- specification/schemas/types/KSUID.yaml | 1 + specification/snippets/CorrelationParameter.yaml | 2 +- specification/snippets/RetryCount.yaml | 3 +++ 13 files changed, 21 insertions(+), 22 deletions(-) rename specification/schemas/enums/{TypeMessage.yaml => EnumMessage.yaml} (70%) rename specification/schemas/enums/{TypeMessageBatch.yaml => EnumMessageBatch.yaml} (69%) create mode 100644 specification/snippets/RetryCount.yaml diff --git a/specification/documentation/APIDescription.md b/specification/documentation/APIDescription.md index 7547094e5..a9859d0b4 100644 --- a/specification/documentation/APIDescription.md +++ b/specification/documentation/APIDescription.md @@ -191,7 +191,7 @@ The message status shows an overall aggregate status taken from all of the commu The channels can have the following supplier statuses: -### NHS APP +### NHS App * `delivered` - the message has been successfully delivered to the user * `read` - a user has read the message diff --git a/specification/schemas/components/MessageStatus.yaml b/specification/schemas/components/MessageStatus.yaml index 86927578f..d9843a4dc 100644 --- a/specification/schemas/components/MessageStatus.yaml +++ b/specification/schemas/components/MessageStatus.yaml @@ -15,7 +15,7 @@ properties: - 1642109b-69eb-447f-8f97-ab70a74f5db4 messageStatus: type: string - $ref: ../enums/MessageStatus.yaml + $ref: ../enums/EnumMessageStatus.yaml messageStatusDescription: type: string example: "" diff --git a/specification/schemas/components/SupplierStatus.yaml b/specification/schemas/components/SupplierStatus.yaml index 6a3a84844..888c6d8f7 100644 --- a/specification/schemas/components/SupplierStatus.yaml +++ b/specification/schemas/components/SupplierStatus.yaml @@ -7,7 +7,6 @@ properties: type: object properties: messageId: - description: Identifier for the message $ref: ../types/KSUID.yaml messageReference: type: string @@ -27,20 +26,14 @@ properties: description: If there is extra information associated with the status of this channel, it is provided here. example: "" supplierStatus: -<<<<<<< HEAD $ref: ../enums/SupplierStatusEnum.yaml -======= - $ref: ../enums/SupplierStatus.yaml ->>>>>>> b5567fa (CCM-5995: Add descriptions to enums in API docs) timestamp: type: string description: Date-time for when the supplier status change was processed. format: date-time example: '2023-11-17T14:27:51.413Z' retryCount: - type: number - description: Contains the amount of times that we have attempted to send this message to this channel. - example: 1 + $ref: ../../snippets/RetryCount.yaml required: - messageId - messageReference diff --git a/specification/schemas/enums/TypeMessage.yaml b/specification/schemas/enums/EnumMessage.yaml similarity index 70% rename from specification/schemas/enums/TypeMessage.yaml rename to specification/schemas/enums/EnumMessage.yaml index 6b5ee1ab2..43c39b90e 100644 --- a/specification/schemas/enums/TypeMessage.yaml +++ b/specification/schemas/enums/EnumMessage.yaml @@ -1,4 +1,4 @@ -title: Type_Message +title: Enum_Message type: string enum: - Message diff --git a/specification/schemas/enums/TypeMessageBatch.yaml b/specification/schemas/enums/EnumMessageBatch.yaml similarity index 69% rename from specification/schemas/enums/TypeMessageBatch.yaml rename to specification/schemas/enums/EnumMessageBatch.yaml index 0d4a0a8f9..7afa56a5b 100644 --- a/specification/schemas/enums/TypeMessageBatch.yaml +++ b/specification/schemas/enums/EnumMessageBatch.yaml @@ -1,4 +1,4 @@ -title: Type_MessageBatch +title: Enum_MessageBatch type: string enum: - MessageBatch diff --git a/specification/schemas/requests/CreateMessage.yaml b/specification/schemas/requests/CreateMessage.yaml index 76ae6515e..3c724bc95 100644 --- a/specification/schemas/requests/CreateMessage.yaml +++ b/specification/schemas/requests/CreateMessage.yaml @@ -5,7 +5,7 @@ properties: type: object properties: type: - $ref: ../enums/TypeMessage.yaml + $ref: ../enums/EnumMessage.yaml attributes: type: object required: diff --git a/specification/schemas/requests/CreateMessageBatch.yaml b/specification/schemas/requests/CreateMessageBatch.yaml index d85f0c1eb..112bb1b50 100644 --- a/specification/schemas/requests/CreateMessageBatch.yaml +++ b/specification/schemas/requests/CreateMessageBatch.yaml @@ -5,7 +5,7 @@ properties: type: object properties: type: - $ref: ../enums/TypeMessageBatch.yaml + $ref: ../enums/EnumMessageBatch.yaml attributes: description: MessageBatch attributes type: object diff --git a/specification/schemas/responses/MessageBatch.yaml b/specification/schemas/responses/MessageBatch.yaml index 506cdb64b..c01fffbfc 100644 --- a/specification/schemas/responses/MessageBatch.yaml +++ b/specification/schemas/responses/MessageBatch.yaml @@ -7,7 +7,7 @@ properties: additionalProperties: false properties: type: - $ref: ../enums/TypeMessageBatch.yaml + $ref: ../enums/EnumMessageBatch.yaml id: $ref: ../types/KSUID.yaml description: Identifier for this MessageBatch. You should store this identifier for later lookups. diff --git a/specification/schemas/responses/MessageCreated.yaml b/specification/schemas/responses/MessageCreated.yaml index 0ea853600..096274a73 100644 --- a/specification/schemas/responses/MessageCreated.yaml +++ b/specification/schemas/responses/MessageCreated.yaml @@ -7,7 +7,7 @@ properties: additionalProperties: false properties: type: - $ref: ../enums/TypeMessage.yaml + $ref: ../enums/EnumMessage.yaml id: $ref: ../types/KSUID.yaml description: Identifier for this Message. You should store this identifier for later lookups. diff --git a/specification/schemas/responses/MessageResponse.yaml b/specification/schemas/responses/MessageResponse.yaml index 3d21295f9..3b32ba830 100644 --- a/specification/schemas/responses/MessageResponse.yaml +++ b/specification/schemas/responses/MessageResponse.yaml @@ -7,7 +7,7 @@ properties: additionalProperties: false properties: type: - $ref: ../enums/TypeMessage.yaml + $ref: ../enums/EnumMessage.yaml id: $ref: ../types/KSUID.yaml description: Identifier for this Message. @@ -23,7 +23,11 @@ properties: The current status of this message at the time this response was generated. For more information please check our documentation on message & channel statuses above. +<<<<<<< HEAD $ref: ../enums/MessageStatusEnum.yaml +======= + $ref: ../enums/EnumMessageStatus.yaml +>>>>>>> 2bd5e73 (CCM-5995: Address review comments) messageStatusDescription: type: string description: If there is extra information associated with the status of this message, it is provided here. @@ -42,9 +46,7 @@ properties: type: $ref: ../enums/ChannelType.yaml retryCount: - description: Contains the amount of times that we have attempted to send this message to this channel. - type: integer - example: 1 + $ref: ../../snippets/RetryCount.yaml channelStatus: description: |- The current status of this channel at the time this response was generated. @@ -175,7 +177,7 @@ properties: additionalProperties: false properties: type: - $ref: ../enums/TypeMessageBatch.yaml + $ref: ../enums/EnumMessageBatch.yaml id: description: This is the unique identifier of the batch that contains this message. $ref: ../types/KSUID.yaml diff --git a/specification/schemas/types/KSUID.yaml b/specification/schemas/types/KSUID.yaml index 16e0b7d76..4735b8aea 100644 --- a/specification/schemas/types/KSUID.yaml +++ b/specification/schemas/types/KSUID.yaml @@ -1,5 +1,6 @@ type: string title: Type_KSUID +description: Identifier for the message. pattern: '^[a-zA-Z0-9]{27}$' minLength: 27 maxLength: 27 diff --git a/specification/snippets/CorrelationParameter.yaml b/specification/snippets/CorrelationParameter.yaml index cfa243c61..2eaae09ad 100644 --- a/specification/snippets/CorrelationParameter.yaml +++ b/specification/snippets/CorrelationParameter.yaml @@ -2,7 +2,7 @@ name: X-Correlation-ID in: header description: |- An optional ID which you can use to track transactions across multiple systems. It can take any value, but we recommend avoiding `.` characters. If not provided in the request, NHS Notify will default to a system generated ID in its place. - Mirrored back in a response header. + Will be returned in a response header. schema: type: string example: 11C46F5F-CDEF-4865-94B2-0EE0EDCC26DA \ No newline at end of file diff --git a/specification/snippets/RetryCount.yaml b/specification/snippets/RetryCount.yaml new file mode 100644 index 000000000..01ea316d1 --- /dev/null +++ b/specification/snippets/RetryCount.yaml @@ -0,0 +1,3 @@ +type: integer +description: Contains the number of times that we have attempted to send this message to this channel. +example: 1 \ No newline at end of file From 32cff0cf4a9f2e07ea34e689c0ed4cd57121dfe0 Mon Sep 17 00:00:00 2001 From: "tom.droza2" Date: Tue, 30 Jul 2024 13:56:17 +0100 Subject: [PATCH 05/19] CCM-5132: Added disclaimer to API docs about additive changes --- specification/documentation/APIDescription.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specification/documentation/APIDescription.md b/specification/documentation/APIDescription.md index a9859d0b4..563be4462 100644 --- a/specification/documentation/APIDescription.md +++ b/specification/documentation/APIDescription.md @@ -19,6 +19,8 @@ The NHS Notify service is intended for services involved in direct care. This AP This API is [in production, beta](https://digital.nhs.uk/developer/guides-and-documentation/reference-guide#statuses). We are onboarding partners to use it. +We may make additive non-breaking changes to the API without notice, for example the addition of fields to the response, or new optional fields to the request. + You can comment, upvote and view progress on [our roadmap](https://nhs-digital-api-management.featureupvote.com/?order=top&filter=allexceptdone&tag=nhs-notify-api). If you have any other queries, [contact us](https://digital.nhs.uk/developer/help-and-support). From 3132973702ea8344e4e4a468ab276b25d8386de0 Mon Sep 17 00:00:00 2001 From: "tom.droza2" Date: Wed, 31 Jul 2024 12:42:37 +0100 Subject: [PATCH 06/19] CCM-5995: Add zap exclusions for dummy callback URIs CCM-5995: Reworded Accept header to address review feedback --- scripts/publish_zap_compatible.py | 4 ++-- specification/documentation/APIDescription.md | 2 +- specification/schemas/components/MessageStatus.yaml | 2 +- specification/schemas/responses/MessageResponse.yaml | 4 ---- specification/snippets/CorrelationParameter.yaml | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/scripts/publish_zap_compatible.py b/scripts/publish_zap_compatible.py index dc0a31db2..a5ea34ad3 100644 --- a/scripts/publish_zap_compatible.py +++ b/scripts/publish_zap_compatible.py @@ -35,8 +35,8 @@ def scan_and_remove(obj, mappings): ( ("format", "date"), ("personalisation", None), - ("/callbacks/message-status", None), - ("/", None), + ("/", None), + ("/", None), ) ), f diff --git a/specification/documentation/APIDescription.md b/specification/documentation/APIDescription.md index 563be4462..1182af51e 100644 --- a/specification/documentation/APIDescription.md +++ b/specification/documentation/APIDescription.md @@ -46,7 +46,7 @@ This API can generate responses in the following formats: Both of these formats have the same structure - the API responds with a standard JSON document. -You can control which `Content-Type` is returned by using the `Accept` header. +You can use the `Accept` header to control which `Content-Type` is returned in the response. The `Accept` header can contain the following values: diff --git a/specification/schemas/components/MessageStatus.yaml b/specification/schemas/components/MessageStatus.yaml index d9843a4dc..3979b2736 100644 --- a/specification/schemas/components/MessageStatus.yaml +++ b/specification/schemas/components/MessageStatus.yaml @@ -15,7 +15,7 @@ properties: - 1642109b-69eb-447f-8f97-ab70a74f5db4 messageStatus: type: string - $ref: ../enums/EnumMessageStatus.yaml + $ref: ../enums/MessageStatusEnum.yaml messageStatusDescription: type: string example: "" diff --git a/specification/schemas/responses/MessageResponse.yaml b/specification/schemas/responses/MessageResponse.yaml index 3b32ba830..0017cc2d0 100644 --- a/specification/schemas/responses/MessageResponse.yaml +++ b/specification/schemas/responses/MessageResponse.yaml @@ -23,11 +23,7 @@ properties: The current status of this message at the time this response was generated. For more information please check our documentation on message & channel statuses above. -<<<<<<< HEAD $ref: ../enums/MessageStatusEnum.yaml -======= - $ref: ../enums/EnumMessageStatus.yaml ->>>>>>> 2bd5e73 (CCM-5995: Address review comments) messageStatusDescription: type: string description: If there is extra information associated with the status of this message, it is provided here. diff --git a/specification/snippets/CorrelationParameter.yaml b/specification/snippets/CorrelationParameter.yaml index 2eaae09ad..a607d6e39 100644 --- a/specification/snippets/CorrelationParameter.yaml +++ b/specification/snippets/CorrelationParameter.yaml @@ -2,7 +2,7 @@ name: X-Correlation-ID in: header description: |- An optional ID which you can use to track transactions across multiple systems. It can take any value, but we recommend avoiding `.` characters. If not provided in the request, NHS Notify will default to a system generated ID in its place. - Will be returned in a response header. + The ID will be returned in a response header. schema: type: string example: 11C46F5F-CDEF-4865-94B2-0EE0EDCC26DA \ No newline at end of file From 6ede43e8e852fe6678563cff8f882e5267d2eaec Mon Sep 17 00:00:00 2001 From: David Fuery BJSS Date: Tue, 6 Aug 2024 09:58:18 +0100 Subject: [PATCH 07/19] CCM-6000: update wording --- specification/callbacks/message_status.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/specification/callbacks/message_status.yaml b/specification/callbacks/message_status.yaml index 8c5257935..e59134e44 100644 --- a/specification/callbacks/message_status.yaml +++ b/specification/callbacks/message_status.yaml @@ -5,14 +5,13 @@ description: |- NHS Notify will send a callback when the message status is updated to any of the following: * `delivered` - the message has been delivered (via any channel) - * `sending` - the message could not be delivered to a given channel (but may be deliverable by an alternative channel) * `failed` - the message could not be delivered by any channel Callbacks can be received for additional state transitions subject to the needs of the user. These additional state transitions can be requested during onboarding. These statuses are: * `pending_enrichment` - the message is currently pending enrichment * `enriched` - we have queried PDS for this patient's details and now know how to contact this individual - * `sending` - the message is in the process of being sent + * `sending` - the message is in the process of being sent, can occur multiple times for a single message if multiple channels are to be attempted operationId: post-v1-message-callbacks parameters: - name: x-hmac-sha256-signature From 1ee6ba6857e1ef6239ea84c8a2c0e6d83350a2c7 Mon Sep 17 00:00:00 2001 From: David Fuery BJSS Date: Tue, 6 Aug 2024 10:22:51 +0100 Subject: [PATCH 08/19] CCM-6000: update wording --- specification/callbacks/message_status.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/callbacks/message_status.yaml b/specification/callbacks/message_status.yaml index e59134e44..7506373e4 100644 --- a/specification/callbacks/message_status.yaml +++ b/specification/callbacks/message_status.yaml @@ -11,7 +11,7 @@ description: |- * `pending_enrichment` - the message is currently pending enrichment * `enriched` - we have queried PDS for this patient's details and now know how to contact this individual - * `sending` - the message is in the process of being sent, can occur multiple times for a single message if multiple channels are to be attempted + * `sending` - the message is in the process of being sent - this can occur multiple times for a single message if multiple channels are to be attempted operationId: post-v1-message-callbacks parameters: - name: x-hmac-sha256-signature From 200d8dc200332e8cb3881ae02a20f5676e551841 Mon Sep 17 00:00:00 2001 From: simonlabarere <156111959+simonlabarere@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:44:08 +0100 Subject: [PATCH 09/19] CCM-5994: Fix UAT E2E tests (#691) * CCM-5994: Fix NHS App E2E test failing on UAT * CCM-5994: Fix NHS App E2E test failing on UAT * CCM-5994: Fix NHS App E2E test failing on UAT --- poetry.lock | 316 +++++++++++++++++++++++--------------------- pyproject.toml | 4 +- tests/lib/helper.py | 55 ++++---- 3 files changed, 197 insertions(+), 178 deletions(-) diff --git a/poetry.lock b/poetry.lock index 20e6a8ce1..3a2d25d0c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.0 and should not be changed by hand. [[package]] name = "alabaster" @@ -44,33 +44,33 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "black" -version = "24.4.2" +version = "24.8.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, - {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, - {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, - {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, - {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, - {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, - {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, - {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, - {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, - {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, - {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, - {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, - {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, - {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, - {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, - {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, - {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, - {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, - {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, - {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, - {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, - {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, + {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, + {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, + {file = "black-24.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42"}, + {file = "black-24.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a"}, + {file = "black-24.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1"}, + {file = "black-24.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af"}, + {file = "black-24.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4"}, + {file = "black-24.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af"}, + {file = "black-24.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368"}, + {file = "black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed"}, + {file = "black-24.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018"}, + {file = "black-24.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2"}, + {file = "black-24.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd"}, + {file = "black-24.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2"}, + {file = "black-24.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e"}, + {file = "black-24.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920"}, + {file = "black-24.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c"}, + {file = "black-24.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e"}, + {file = "black-24.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47"}, + {file = "black-24.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb"}, + {file = "black-24.8.0-py3-none-any.whl", hash = "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed"}, + {file = "black-24.8.0.tar.gz", hash = "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f"}, ] [package.dependencies] @@ -300,63 +300,83 @@ files = [ [[package]] name = "coverage" -version = "7.5.4" +version = "7.6.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cfb5a4f556bb51aba274588200a46e4dd6b505fb1a5f8c5ae408222eb416f99"}, - {file = "coverage-7.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2174e7c23e0a454ffe12267a10732c273243b4f2d50d07544a91198f05c48f47"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2214ee920787d85db1b6a0bd9da5f8503ccc8fcd5814d90796c2f2493a2f4d2e"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1137f46adb28e3813dec8c01fefadcb8c614f33576f672962e323b5128d9a68d"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b385d49609f8e9efc885790a5a0e89f2e3ae042cdf12958b6034cc442de428d3"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4a474f799456e0eb46d78ab07303286a84a3140e9700b9e154cfebc8f527016"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5cd64adedf3be66f8ccee418473c2916492d53cbafbfcff851cbec5a8454b136"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e564c2cf45d2f44a9da56f4e3a26b2236504a496eb4cb0ca7221cd4cc7a9aca9"}, - {file = "coverage-7.5.4-cp310-cp310-win32.whl", hash = "sha256:7076b4b3a5f6d2b5d7f1185fde25b1e54eb66e647a1dfef0e2c2bfaf9b4c88c8"}, - {file = "coverage-7.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:018a12985185038a5b2bcafab04ab833a9a0f2c59995b3cec07e10074c78635f"}, - {file = "coverage-7.5.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db14f552ac38f10758ad14dd7b983dbab424e731588d300c7db25b6f89e335b5"}, - {file = "coverage-7.5.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3257fdd8e574805f27bb5342b77bc65578e98cbc004a92232106344053f319ba"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a6612c99081d8d6134005b1354191e103ec9705d7ba2754e848211ac8cacc6b"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d45d3cbd94159c468b9b8c5a556e3f6b81a8d1af2a92b77320e887c3e7a5d080"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed550e7442f278af76d9d65af48069f1fb84c9f745ae249c1a183c1e9d1b025c"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a892be37ca35eb5019ec85402c3371b0f7cda5ab5056023a7f13da0961e60da"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8192794d120167e2a64721d88dbd688584675e86e15d0569599257566dec9bf0"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:820bc841faa502e727a48311948e0461132a9c8baa42f6b2b84a29ced24cc078"}, - {file = "coverage-7.5.4-cp311-cp311-win32.whl", hash = "sha256:6aae5cce399a0f065da65c7bb1e8abd5c7a3043da9dceb429ebe1b289bc07806"}, - {file = "coverage-7.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:d2e344d6adc8ef81c5a233d3a57b3c7d5181f40e79e05e1c143da143ccb6377d"}, - {file = "coverage-7.5.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:54317c2b806354cbb2dc7ac27e2b93f97096912cc16b18289c5d4e44fc663233"}, - {file = "coverage-7.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:042183de01f8b6d531e10c197f7f0315a61e8d805ab29c5f7b51a01d62782747"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bb74ed465d5fb204b2ec41d79bcd28afccf817de721e8a807d5141c3426638"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3d45ff86efb129c599a3b287ae2e44c1e281ae0f9a9bad0edc202179bcc3a2e"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5013ed890dc917cef2c9f765c4c6a8ae9df983cd60dbb635df8ed9f4ebc9f555"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1014fbf665fef86cdfd6cb5b7371496ce35e4d2a00cda501cf9f5b9e6fced69f"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3684bc2ff328f935981847082ba4fdc950d58906a40eafa93510d1b54c08a66c"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:581ea96f92bf71a5ec0974001f900db495488434a6928a2ca7f01eee20c23805"}, - {file = "coverage-7.5.4-cp312-cp312-win32.whl", hash = "sha256:73ca8fbc5bc622e54627314c1a6f1dfdd8db69788f3443e752c215f29fa87a0b"}, - {file = "coverage-7.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:cef4649ec906ea7ea5e9e796e68b987f83fa9a718514fe147f538cfeda76d7a7"}, - {file = "coverage-7.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdd31315fc20868c194130de9ee6bfd99755cc9565edff98ecc12585b90be882"}, - {file = "coverage-7.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:02ff6e898197cc1e9fa375581382b72498eb2e6d5fc0b53f03e496cfee3fac6d"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d05c16cf4b4c2fc880cb12ba4c9b526e9e5d5bb1d81313d4d732a5b9fe2b9d53"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5986ee7ea0795a4095ac4d113cbb3448601efca7f158ec7f7087a6c705304e4"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df54843b88901fdc2f598ac06737f03d71168fd1175728054c8f5a2739ac3e4"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ab73b35e8d109bffbda9a3e91c64e29fe26e03e49addf5b43d85fc426dde11f9"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:aea072a941b033813f5e4814541fc265a5c12ed9720daef11ca516aeacd3bd7f"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:16852febd96acd953b0d55fc842ce2dac1710f26729b31c80b940b9afcd9896f"}, - {file = "coverage-7.5.4-cp38-cp38-win32.whl", hash = "sha256:8f894208794b164e6bd4bba61fc98bf6b06be4d390cf2daacfa6eca0a6d2bb4f"}, - {file = "coverage-7.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:e2afe743289273209c992075a5a4913e8d007d569a406ffed0bd080ea02b0633"}, - {file = "coverage-7.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b95c3a8cb0463ba9f77383d0fa8c9194cf91f64445a63fc26fb2327e1e1eb088"}, - {file = "coverage-7.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d7564cc09dd91b5a6001754a5b3c6ecc4aba6323baf33a12bd751036c998be4"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44da56a2589b684813f86d07597fdf8a9c6ce77f58976727329272f5a01f99f7"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e16f3d6b491c48c5ae726308e6ab1e18ee830b4cdd6913f2d7f77354b33f91c8"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbc5958cb471e5a5af41b0ddaea96a37e74ed289535e8deca404811f6cb0bc3d"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a04e990a2a41740b02d6182b498ee9796cf60eefe40cf859b016650147908029"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ddbd2f9713a79e8e7242d7c51f1929611e991d855f414ca9996c20e44a895f7c"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b1ccf5e728ccf83acd313c89f07c22d70d6c375a9c6f339233dcf792094bcbf7"}, - {file = "coverage-7.5.4-cp39-cp39-win32.whl", hash = "sha256:56b4eafa21c6c175b3ede004ca12c653a88b6f922494b023aeb1e836df953ace"}, - {file = "coverage-7.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:65e528e2e921ba8fd67d9055e6b9f9e34b21ebd6768ae1c1723f4ea6ace1234d"}, - {file = "coverage-7.5.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:79b356f3dd5b26f3ad23b35c75dbdaf1f9e2450b6bcefc6d0825ea0aa3f86ca5"}, - {file = "coverage-7.5.4.tar.gz", hash = "sha256:a44963520b069e12789d0faea4e9fdb1e410cdc4aab89d94f7f55cbb7fef0353"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, + {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, + {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, + {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, + {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, + {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, + {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, + {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, + {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, + {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, + {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, + {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, + {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, + {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, + {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, + {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, + {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, ] [package.extras] @@ -364,43 +384,38 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.8" +version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, + {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, + {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, + {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, + {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, + {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, + {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, + {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, ] [package.dependencies] @@ -413,7 +428,7 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] @@ -461,13 +476,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -624,13 +639,13 @@ test = ["objgraph", "psutil"] [[package]] name = "identify" -version = "2.5.36" +version = "2.6.0" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, + {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, + {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, ] [package.extras] @@ -660,13 +675,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.0.0" +version = "8.2.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, - {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, + {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, + {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, ] [package.dependencies] @@ -690,13 +705,13 @@ files = [ [[package]] name = "install-playwright" -version = "0.0.1" +version = "0.1.0" description = "Execute `playwright install` from Python" optional = false -python-versions = ">=3.8,<4" +python-versions = "<4,>=3.8" files = [ - {file = "install_playwright-0.0.1-py3-none-any.whl", hash = "sha256:f764e4ce6490679bcd4cf08bd292737cf989cce35eb74079c0a7468c5bca9d0f"}, - {file = "install_playwright-0.0.1.tar.gz", hash = "sha256:1122cd4ac63788e73f3ab02d8366e056cae6fff171db85b64e5925f8d6fa4b29"}, + {file = "install_playwright-0.1.0-py3-none-any.whl", hash = "sha256:37850e49bdae09b72c0922b64bb623f4c44fd9ea09ba9ad5e113735399d8f8d2"}, + {file = "install_playwright-0.1.0.tar.gz", hash = "sha256:bd9eb0ee05cfb2734b21d3a42ae3cf253840d858c3a7d867f015b54000f955c8"}, ] [package.dependencies] @@ -983,20 +998,21 @@ files = [ [[package]] name = "pip-licenses" -version = "4.4.0" +version = "4.5.1" description = "Dump the software license list of Python packages installed with pip." optional = false python-versions = "~=3.8" files = [ - {file = "pip-licenses-4.4.0.tar.gz", hash = "sha256:996817118375445243a34faafe23c06f6b2d250247c4046571b5a6722d45be69"}, - {file = "pip_licenses-4.4.0-py3-none-any.whl", hash = "sha256:dbad2ac5a25f574cabe2716f2f031a0c5fa359bed9b3ef615301f4e546893b46"}, + {file = "pip-licenses-4.5.1.tar.gz", hash = "sha256:fad5f56fbaa56b8e414434e36c32394a9412ff10ddf2cef92b51951bdf193869"}, + {file = "pip_licenses-4.5.1-py3-none-any.whl", hash = "sha256:7c982bc6837f47d32d4016b43d9174c0ce723b450710a2111a3ebbb910f152b7"}, ] [package.dependencies] prettytable = ">=2.3.0" +tomli = ">=2" [package.extras] -test = ["docutils", "mypy", "pytest-cov", "pytest-pycodestyle", "pytest-runner"] +test = ["docutils", "mypy", "pytest-cov", "pytest-pycodestyle", "pytest-runner", "tomli-w"] [[package]] name = "platformdirs" @@ -1016,18 +1032,18 @@ type = ["mypy (>=1.8)"] [[package]] name = "playwright" -version = "1.44.0" +version = "1.45.1" description = "A high-level API to automate web browsers" optional = false python-versions = ">=3.8" files = [ - {file = "playwright-1.44.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:c2317a80896796fdeb03d60f06cc229e775ff2e19b80c64b1bb9b29c8a59d992"}, - {file = "playwright-1.44.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:54d44fb634d870839301c2326e1e12a178a1be0de76d0caaec230ab075c2e077"}, - {file = "playwright-1.44.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:64b67194e73b47ae72acf25f1a9cfacfef38ca2b52e4bb8b0abd385c5deeaadf"}, - {file = "playwright-1.44.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:29161b1fae71f7c402df5b15f0bd3deaeecd8b3d1ecd9ff01271700c66210e7b"}, - {file = "playwright-1.44.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8c8a3bfea17576d3f94a2363eee195cbda8dbba86975588c7eaac7792b25eee"}, - {file = "playwright-1.44.0-py3-none-win32.whl", hash = "sha256:235e37832deaa9af8a629d09955396259ab757533cc1922f9b0308b4ee0d9cdf"}, - {file = "playwright-1.44.0-py3-none-win_amd64.whl", hash = "sha256:5b8a4a1d4d50f4ff99b47965576322a8c4e34631854b862a25c1feb824be22a8"}, + {file = "playwright-1.45.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:360607e37c00cdf97c74317f010e106ac4671aeaec6a192431dd71a30941da9d"}, + {file = "playwright-1.45.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:20adc2abf164c5e8969f9066011b152e12c210549edec78cd05bd0e9cf4135b7"}, + {file = "playwright-1.45.1-py3-none-macosx_11_0_universal2.whl", hash = "sha256:5f047cdc6accf4c7084dfc7587a2a5ef790cddc44cbb111e471293c5a91119db"}, + {file = "playwright-1.45.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:f06f6659abe0abf263e5f6661d379fbf85c112745dd31d82332ceae914f58df7"}, + {file = "playwright-1.45.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87dc3b3d17e12c68830c29b7fdf5e93315221bbb4c6090e83e967e154e2c1828"}, + {file = "playwright-1.45.1-py3-none-win32.whl", hash = "sha256:2b8f517886ef1e2151982f6e7be84be3ef7d8135bdcf8ee705b4e4e99566e866"}, + {file = "playwright-1.45.1-py3-none-win_amd64.whl", hash = "sha256:0d236cf427784e77de352ba1b7d700693c5fe455b8e5f627f6d84ad5b84b5bf5"}, ] [package.dependencies] @@ -1090,13 +1106,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prettytable" -version = "3.10.0" +version = "3.10.2" description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" optional = false python-versions = ">=3.8" files = [ - {file = "prettytable-3.10.0-py3-none-any.whl", hash = "sha256:6536efaf0757fdaa7d22e78b3aac3b69ea1b7200538c2c6995d649365bddab92"}, - {file = "prettytable-3.10.0.tar.gz", hash = "sha256:9665594d137fb08a1117518c25551e0ede1687197cf353a4fdc78d27e1073568"}, + {file = "prettytable-3.10.2-py3-none-any.whl", hash = "sha256:1cbfdeb4bcc73976a778a0fb33cb6d752e75396f16574dcb3e2d6332fd93c76a"}, + {file = "prettytable-3.10.2.tar.gz", hash = "sha256:29ec6c34260191d42cd4928c28d56adec360ac2b1208a26c7e4f14b90cc8bc84"}, ] [package.dependencies] @@ -1271,19 +1287,19 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" -version = "2.8.0" +version = "2.9.0" description = "JSON Web Token implementation in Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, - {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, + {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, + {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, ] [package.extras] crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] @@ -1302,13 +1318,13 @@ test = ["coverage", "mypy", "ruff", "wheel"] [[package]] name = "pytest" -version = "8.2.2" +version = "8.3.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, - {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, ] [package.dependencies] @@ -1316,7 +1332,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.5,<2.0" +pluggy = ">=1.5,<2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] @@ -1806,4 +1822,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "d11d48d7253d6c375f93adaa5e2d917cb1bfdd30909e105d34d32eb1384673a3" +content-hash = "2d70b95e64d08c42afed1fd9c63de0cb43e91bc2280e208bb9c6831e584f348c" diff --git a/pyproject.toml b/pyproject.toml index 4459b7740..d2f14d895 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,8 +25,8 @@ sphinx = "7.1.2" sphinx-markdown-builder = "^0.6.6" notifications-python-client = "^9.0.0" polling = "^0.3.2" -playwright = "^1.42.0" -install-playwright = "^0.0.1" +playwright = "^1.45.0" +install_playwright = "^0.1.0" [tool.poetry.dev-dependencies] flake8 = "^5.0.4" diff --git a/tests/lib/helper.py b/tests/lib/helper.py index 6fedbf3ab..12da96b9f 100644 --- a/tests/lib/helper.py +++ b/tests/lib/helper.py @@ -64,39 +64,42 @@ def nhs_app_login_and_view_message(personalisation): password = os.environ.get("UAT_NHS_APP_PASSWORD") otp = os.environ.get("UAT_NHS_APP_OTP") - playwright = sync_playwright().start() - install(playwright.chromium) - browser = playwright.chromium.launch() - page = browser.new_page() + with sync_playwright() as playwright: + install(playwright.chromium) + browser = playwright.chromium.launch() + page = browser.new_page() - page.goto("https://www-onboardingaos.nhsapp.service.nhs.uk/login") + page.goto("https://www-onboardingaos.nhsapp.service.nhs.uk/login") - expect(page.get_by_role("heading", name="Access your NHS services")).to_be_visible() - page.get_by_role("button", name="Continue").click() + expect(page.get_by_role("heading", name="Access your NHS services")).to_be_visible() + page.get_by_role("button", name="Continue").click() - expect(page.get_by_role("heading", name="Enter your email address")).to_be_visible() - page.get_by_label("Email address", exact=True).fill(email) - page.get_by_role("button", name="Continue").click() + expect(page.get_by_role("heading", name="Enter your email address")).to_be_visible() + page.get_by_label("Email address", exact=True).fill(email) + page.get_by_role("button", name="Continue").click() - expect(page.get_by_role("heading", name="Enter your password")).to_be_visible() - page.get_by_label("Password", exact=True).fill(password) - page.get_by_role("button", name="Continue").click() + expect(page.get_by_role("heading", name="Enter your password")).to_be_visible() + page.get_by_label("Password", exact=True).fill(password) + page.get_by_role("button", name="Continue").click() - expect(page.get_by_role("heading", name="Enter the security code")).to_be_visible() - page.get_by_label("Security code", exact=True).fill(otp) - page.get_by_role("button", name="Continue").click() + expect(page.get_by_role("heading", name="Enter the security code")).to_be_visible() + page.get_by_label("Security code", exact=True).fill(otp) + page.get_by_role("button", name="Continue").click() - page.wait_for_url('**/patient/') + page.wait_for_url('**/patient/') - expect(page.get_by_text('NHS number: 973 061')).to_be_visible() - page.get_by_role("link", name="View your messages").click() + expect(page.get_by_text('NHS number: 973 061')).to_be_visible() + page.get_by_role("link", name="View your messages").click() - expect(page.get_by_role("heading", name="Messages")).to_be_visible() - page.get_by_role("link", name="Your NHS healthcare services").click() + expect(page.get_by_role("heading", name="Messages")).to_be_visible() + page.get_by_role("link", name="Your NHS healthcare services").click() - expect(page.get_by_role("heading", name="Your messages")).to_be_visible() - page.get_by_label("Unread message from NHS").click() + expect(page.get_by_role("heading", name="Your messages")).to_be_visible() - page.wait_for_url("**/patient/messages/app-messaging/app-message?messageId=**") - expect(page.get_by_role("heading", name="Message from: NHS ENGLAND -")).to_be_visible() - expect(page.get_by_text(f"APIM end to end test: {personalisation}")).to_be_visible() + # There might several unread messages, we need to select the right one + page.locator(f'text="APIM end to end test: {personalisation} "').locator("..") \ + .locator("..").get_by_label("Unread message from NHS").click() + + page.wait_for_url("**/patient/messages/app-messaging/app-message?messageId=**") + expect(page.get_by_role("heading", name="Message from: NHS ENGLAND -")).to_be_visible() + expect(page.get_by_text(f"APIM end to end test: {personalisation}")).to_be_visible() From bc72c417aefd626f77784c7d9783a8838457b8f2 Mon Sep 17 00:00:00 2001 From: David Fuery BJSS Date: Tue, 6 Aug 2024 11:42:47 +0100 Subject: [PATCH 10/19] CCM-6000: update wording --- specification/callbacks/message_status.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/callbacks/message_status.yaml b/specification/callbacks/message_status.yaml index 7506373e4..cd6d734b0 100644 --- a/specification/callbacks/message_status.yaml +++ b/specification/callbacks/message_status.yaml @@ -10,7 +10,7 @@ description: |- Callbacks can be received for additional state transitions subject to the needs of the user. These additional state transitions can be requested during onboarding. These statuses are: * `pending_enrichment` - the message is currently pending enrichment - * `enriched` - we have queried PDS for this patient's details and now know how to contact this individual + * `enriched` - NHS Notify has queried PDS for this patient's details and now know how to contact this individual * `sending` - the message is in the process of being sent - this can occur multiple times for a single message if multiple channels are to be attempted operationId: post-v1-message-callbacks parameters: From 87acb4fd64b5d285d03d085f3b99e4a483180210 Mon Sep 17 00:00:00 2001 From: David Fuery BJSS Date: Wed, 7 Aug 2024 13:04:08 +0100 Subject: [PATCH 11/19] CCM-5952: correct communications-manager links to nhs-notify --- README.md | 4 ++-- azure/project.yml | 2 +- ...municationsManager.Integration.postman_collection.json | 8 ++++---- .../CommunicationsManager.Sandbox.postman_collection.json | 2 +- proxies/shared/resources/jsc/helpers/validationErrors.js | 2 +- pyproject.toml | 2 +- specification/schemas/types/LinksError.yaml | 4 ++-- specification/schemas/types/LinksErrorNHSNumber.yaml | 4 ++-- tests/lib/constants/constants.py | 2 +- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index a1126bc3a..eb6b76ac9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![Build](https://github.com/NHSDigital/communications-manager-api/workflows/Build/badge.svg?branch=release) -This is the RESTful API for the [*Communications Manager Service*](https://digital.nhs.uk/developer/api-catalogue/communications-manager). +This is the RESTful API for the [*Communications Manager Service*](https://digital.nhs.uk/developer/api-catalogue/nhs-notify). It includes: @@ -16,7 +16,7 @@ It includes: * `postman/` - Postman collections. * `docs/` - [Documentation for the project](docs/index.md) -Consumers of the API will find developer documentation on the [Communications Manager API entry](https://digital.nhs.uk/developer/api-catalogue/communications-manager). +Consumers of the API will find developer documentation on the [Communications Manager API entry](https://digital.nhs.uk/developer/api-catalogue/nhs-notify). This repo does not include the Communications Manager back-end that is not currently open source. diff --git a/azure/project.yml b/azure/project.yml index 66332bdfe..3532dea7a 100644 --- a/azure/project.yml +++ b/azure/project.yml @@ -9,4 +9,4 @@ variables: - name: hosted_target_connection_path_suffix value: '{requestpath}' - name: error_about_link - value: 'https://digital.nhs.uk/developer/api-catalogue/communications-manager' + value: 'https://digital.nhs.uk/developer/api-catalogue/nhs-notify' diff --git a/postman/CommunicationsManager.Integration.postman_collection.json b/postman/CommunicationsManager.Integration.postman_collection.json index 8e3c60ca9..ae333a508 100644 --- a/postman/CommunicationsManager.Integration.postman_collection.json +++ b/postman/CommunicationsManager.Integration.postman_collection.json @@ -133,7 +133,7 @@ "info" : { "_postman_id" : "fbe32763-302e-4a0b-b6e9-3a20f1bde923", "createdAt" : null, - "description" : "This collection enables you to make requests against our integration test environment.\n\nThis environment requires you to be authenticated and authorised to make these requests, plus you must have completed (or be in the progress of) onboarding onto the Communications Manager Service.\n\nFor more information on the Communications Manager API please refer to [the documentation](https://digital.nhs.uk/developer/api-catalogue/communications-manager).\n\n## Authentication\n\nThis collection will carry out the [signed JWT authentication flow](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/application-restricted-restful-apis-signed-jwt-authentication) for you automatically.\n\nYou must provide your API key and private key within the environment variables.\n\nIf you have not yet created an API client with an API key and private key, then please [refer to the documentation](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/application-restricted-restful-apis-signed-jwt-authentication). Instructions are given here on how to create an application and how to generate a key pair for generating bearer tokens.\n\nMake sure to create your API application in the `Integration Testing` environment, and to request access to the `Communications Manager (Integration Testing)` API. Your API application will be granted access to this API automatically.\n\nOnce you have your API key and your private key, put these into the `api_key` and `private_key` variables within the `Integration` environment.\n\nRequests will now have a bearer token attached to them automatically, authenticating your requests.\n\nIf you have not yet started the onboarding process with the Communications Manager service then your requests, although authenticated, will return a `403 - Forbidden` response.\n\n**Ensure that your API key and private key are kept secret at all times!**\n\n**If you publish/share your API key or private key you must revoke them via the** [NHS onboarding portal](https://onboarding.prod.api.platform.nhs.uk/) **immediately.**\n\nLeaking these credentials will allow other people to generate tokens to call the API on your behalf.", + "description" : "This collection enables you to make requests against our integration test environment.\n\nThis environment requires you to be authenticated and authorised to make these requests, plus you must have completed (or be in the progress of) onboarding onto the Communications Manager Service.\n\nFor more information on the Communications Manager API please refer to [the documentation](https://digital.nhs.uk/developer/api-catalogue/nhs-notify).\n\n## Authentication\n\nThis collection will carry out the [signed JWT authentication flow](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/application-restricted-restful-apis-signed-jwt-authentication) for you automatically.\n\nYou must provide your API key and private key within the environment variables.\n\nIf you have not yet created an API client with an API key and private key, then please [refer to the documentation](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/application-restricted-restful-apis-signed-jwt-authentication). Instructions are given here on how to create an application and how to generate a key pair for generating bearer tokens.\n\nMake sure to create your API application in the `Integration Testing` environment, and to request access to the `Communications Manager (Integration Testing)` API. Your API application will be granted access to this API automatically.\n\nOnce you have your API key and your private key, put these into the `api_key` and `private_key` variables within the `Integration` environment.\n\nRequests will now have a bearer token attached to them automatically, authenticating your requests.\n\nIf you have not yet started the onboarding process with the Communications Manager service then your requests, although authenticated, will return a `403 - Forbidden` response.\n\n**Ensure that your API key and private key are kept secret at all times!**\n\n**If you publish/share your API key or private key you must revoke them via the** [NHS onboarding portal](https://onboarding.prod.api.platform.nhs.uk/) **immediately.**\n\nLeaking these credentials will allow other people to generate tokens to call the API on your behalf.", "lastUpdatedBy" : null, "name" : "Communications Manager - Integration", "schema" : "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", @@ -142,7 +142,7 @@ }, "item" : [ { - "description" : "These example calls show how to use the send messages endpoint. This endpoint allows you to create a `MessageBatch`.\n\nFor more information on this endpoint [refer to the documentation](https://digital.nhs.uk/developer/api-catalogue/communications-manager#post-/v1/message-batches).", + "description" : "These example calls show how to use the send messages endpoint. This endpoint allows you to create a `MessageBatch`.\n\nFor more information on this endpoint [refer to the documentation](https://digital.nhs.uk/developer/api-catalogue/nhs-notify#post-/v1/message-batches).", "id" : "f5ca3438-8247-4f80-a0f2-29dfb6ee85d3", "item" : [ { @@ -197,7 +197,7 @@ }, "raw" : "{\r\n \"data\": {\r\n \"type\": \"MessageBatch\",\r\n \"attributes\": {\r\n \"routingPlanId\": \"{{routing_plan_id}}\",\r\n \"messageBatchReference\": \"{{message_batch_reference}}\",\r\n \"messages\": [\r\n {\r\n \"messageReference\": \"703b8008-545d-4a04-bb90-1f2946ce1575\",\r\n \"recipient\": {\r\n \"nhsNumber\": \"9990548609\",\r\n \"dateOfBirth\": \"1932-01-06\"\r\n },\r\n \"originator\": {\r\n \"odsCode\": \"X26\"\r\n },\r\n \"personalisation\": {\r\n \"custom\" : \"value\"\r\n }\r\n }\r\n ]\r\n }\r\n }\r\n}" }, - "description" : "Sends a request to create a message batch.\n\nIt is possible to toggle the mime type used for sending and receiving data by changing the `mime_type` environment variable. Valid values for this can be found in [the documentation](https://digital.nhs.uk/developer/api-catalogue/communications-manager#post-/v1/message-batches).\n\nA random `X-Correlation-Id` header and `messageBatchReference` body value will be generated for each request in the pre-request script.", + "description" : "Sends a request to create a message batch.\n\nIt is possible to toggle the mime type used for sending and receiving data by changing the `mime_type` environment variable. Valid values for this can be found in [the documentation](https://digital.nhs.uk/developer/api-catalogue/nhs-notify#post-/v1/message-batches).\n\nA random `X-Correlation-Id` header and `messageBatchReference` body value will be generated for each request in the pre-request script.", "header" : [ { "key" : "Content-Type", @@ -287,7 +287,7 @@ }, "raw" : "{\r\n \"data\": {\r\n \"type\": \"Message\",\r\n \"attributes\": {\r\n \"routingPlanId\": \"{{routing_plan_id}}\",\r\n \"messageReference\": \"{{message_reference}}\",\r\n \"recipient\": {\r\n \"nhsNumber\": \"9990548609\",\r\n \"dateOfBirth\": \"1932-01-06\"\r\n },\r\n \"originator\": {\r\n \"odsCode\": \"X26\"\r\n },\r\n \"personalisation\": {\r\n \"custom\": \"value\"\r\n }\r\n }\r\n }\r\n}" }, - "description" : "Sends a request to send a single message.\n\nIt is possible to toggle the mime type used for sending and receiving data by changing the `mime_type` environment variable. Valid values for this can be found in [the documentation](https://digital.nhs.uk/developer/api-catalogue/communications-manager#post-/v1/message-batches).\n\nA random `X-Correlation-Id` header and `messageReference` body value will be generated for each request in the pre-request script.", + "description" : "Sends a request to send a single message.\n\nIt is possible to toggle the mime type used for sending and receiving data by changing the `mime_type` environment variable. Valid values for this can be found in [the documentation](https://digital.nhs.uk/developer/api-catalogue/nhs-notify#post-/v1/message-batches).\n\nA random `X-Correlation-Id` header and `messageReference` body value will be generated for each request in the pre-request script.", "header" : [ { "key" : "Content-Type", diff --git a/postman/CommunicationsManager.Sandbox.postman_collection.json b/postman/CommunicationsManager.Sandbox.postman_collection.json index 156680d86..5c73ec2d7 100644 --- a/postman/CommunicationsManager.Sandbox.postman_collection.json +++ b/postman/CommunicationsManager.Sandbox.postman_collection.json @@ -34,7 +34,7 @@ "info" : { "_postman_id" : "ec078d1e-d4d7-4460-92b9-7d79d51f967a", "createdAt" : "2023-07-25T06:43:37.000Z", - "description" : "This collection allows you to run a number of pre-generated requests to simulate responses from our sandbox environment.\n\nThis environment requires no authentication and no upfront setup for you to use.\n\nFor more information on the Communications Manager API please refer to [the documentation](https://digital.nhs.uk/developer/api-catalogue/communications-manager).", + "description" : "This collection allows you to run a number of pre-generated requests to simulate responses from our sandbox environment.\n\nThis environment requires no authentication and no upfront setup for you to use.\n\nFor more information on the Communications Manager API please refer to [the documentation](https://digital.nhs.uk/developer/api-catalogue/nhs-notify).", "lastUpdatedBy" : "35992763", "name" : "Communications Manager - Sandbox", "schema" : "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", diff --git a/proxies/shared/resources/jsc/helpers/validationErrors.js b/proxies/shared/resources/jsc/helpers/validationErrors.js index 2192539b9..ad2867d0b 100644 --- a/proxies/shared/resources/jsc/helpers/validationErrors.js +++ b/proxies/shared/resources/jsc/helpers/validationErrors.js @@ -2,7 +2,7 @@ function createErrorObject(code, title, detail, pointer, links) { return { "id": messageId + "." + errors.length, "code": code, - "links": Object.assign({}, { "about": "https://digital.nhs.uk/developer/api-catalogue/communications-manager" }, links), // NOSONAR + "links": Object.assign({}, { "about": "https://digital.nhs.uk/developer/api-catalogue/nhs-notify" }, links), // NOSONAR "status": "400", "title": title, "detail": detail, diff --git a/pyproject.toml b/pyproject.toml index d2f14d895..f0ce9f900 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ authors = [ readme = "README.md" license = "MIT" repository = "https://github.com/NHSDigital/communications-manager-api" -homepage = "https://digital.nhs.uk/developer/api-catalogue/communications-manager" +homepage = "https://digital.nhs.uk/developer/api-catalogue/nhs-notify" keywords = ["healthcare", "uk", "nhs", "communications", "email", "sms", "letter"] diff --git a/specification/schemas/types/LinksError.yaml b/specification/schemas/types/LinksError.yaml index a38e88b90..f05b05215 100644 --- a/specification/schemas/types/LinksError.yaml +++ b/specification/schemas/types/LinksError.yaml @@ -4,6 +4,6 @@ properties: about: type: string format: uri - example: 'https://digital.nhs.uk/developer/api-catalogue/communications-manager' - description: 'https://digital.nhs.uk/developer/api-catalogue/communications-manager' + example: 'https://digital.nhs.uk/developer/api-catalogue/nhs-notify' + description: 'https://digital.nhs.uk/developer/api-catalogue/nhs-notify' minProperties: 1 diff --git a/specification/schemas/types/LinksErrorNHSNumber.yaml b/specification/schemas/types/LinksErrorNHSNumber.yaml index eea800510..b10701abf 100644 --- a/specification/schemas/types/LinksErrorNHSNumber.yaml +++ b/specification/schemas/types/LinksErrorNHSNumber.yaml @@ -4,8 +4,8 @@ properties: about: type: string format: uri - example: 'https://digital.nhs.uk/developer/api-catalogue/communications-manager' - description: 'https://digital.nhs.uk/developer/api-catalogue/communications-manager' + example: 'https://digital.nhs.uk/developer/api-catalogue/nhs-notify' + description: 'https://digital.nhs.uk/developer/api-catalogue/nhs-notify' nhsNumbers: type: string format: uri diff --git a/tests/lib/constants/constants.py b/tests/lib/constants/constants.py index de0f1d3e8..e982b0e28 100644 --- a/tests/lib/constants/constants.py +++ b/tests/lib/constants/constants.py @@ -64,7 +64,7 @@ def __init__(self, code, status, title, detail, links={}): self.title = title self.detail = detail self.links = { - **{"about": "https://digital.nhs.uk/developer/api-catalogue/communications-manager"}, + **{"about": "https://digital.nhs.uk/developer/api-catalogue/nhs-notify"}, **links } From 28d36e24302486d7dc8a0ebd6fd5ba0a372f9bee Mon Sep 17 00:00:00 2001 From: DavidFueryBJSS Date: Wed, 7 Aug 2024 13:16:35 +0100 Subject: [PATCH 12/19] Update README.md Co-authored-by: aaron-downing <92087051+aaron-downing@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eb6b76ac9..06ff0a655 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![Build](https://github.com/NHSDigital/communications-manager-api/workflows/Build/badge.svg?branch=release) -This is the RESTful API for the [*Communications Manager Service*](https://digital.nhs.uk/developer/api-catalogue/nhs-notify). +This is the RESTful API for the [*NHS Notify Service*](https://digital.nhs.uk/developer/api-catalogue/nhs-notify). It includes: From 777906d4ceb0c9fe20f22f1430ca5560291f1621 Mon Sep 17 00:00:00 2001 From: DavidFueryBJSS Date: Wed, 7 Aug 2024 13:18:05 +0100 Subject: [PATCH 13/19] Update README.md Co-authored-by: aaron-downing <92087051+aaron-downing@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 06ff0a655..a8dc80ec8 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ It includes: * `postman/` - Postman collections. * `docs/` - [Documentation for the project](docs/index.md) -Consumers of the API will find developer documentation on the [Communications Manager API entry](https://digital.nhs.uk/developer/api-catalogue/nhs-notify). +Consumers of the API will find developer documentation on the [NHS Notify API entry](https://digital.nhs.uk/developer/api-catalogue/nhs-notify). This repo does not include the Communications Manager back-end that is not currently open source. From 4656189cd701228dade869952cde8b48af9ff8e3 Mon Sep 17 00:00:00 2001 From: DavidFueryBJSS Date: Wed, 7 Aug 2024 13:51:35 +0100 Subject: [PATCH 14/19] Update postman/CommunicationsManager.Sandbox.postman_collection.json Co-authored-by: aaron-downing <92087051+aaron-downing@users.noreply.github.com> --- postman/CommunicationsManager.Sandbox.postman_collection.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postman/CommunicationsManager.Sandbox.postman_collection.json b/postman/CommunicationsManager.Sandbox.postman_collection.json index 5c73ec2d7..9a650ff02 100644 --- a/postman/CommunicationsManager.Sandbox.postman_collection.json +++ b/postman/CommunicationsManager.Sandbox.postman_collection.json @@ -34,7 +34,7 @@ "info" : { "_postman_id" : "ec078d1e-d4d7-4460-92b9-7d79d51f967a", "createdAt" : "2023-07-25T06:43:37.000Z", - "description" : "This collection allows you to run a number of pre-generated requests to simulate responses from our sandbox environment.\n\nThis environment requires no authentication and no upfront setup for you to use.\n\nFor more information on the Communications Manager API please refer to [the documentation](https://digital.nhs.uk/developer/api-catalogue/nhs-notify).", + "description" : "This collection allows you to run a number of pre-generated requests to simulate responses from our sandbox environment.\n\nThis environment requires no authentication and no upfront setup for you to use.\n\nFor more information on the NHS Notify API please refer to [the documentation](https://digital.nhs.uk/developer/api-catalogue/nhs-notify).", "lastUpdatedBy" : "35992763", "name" : "Communications Manager - Sandbox", "schema" : "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", From fe1b0c22b683f46bde715e8a30ba0be6defb2415 Mon Sep 17 00:00:00 2001 From: David Fuery BJSS Date: Wed, 7 Aug 2024 13:55:32 +0100 Subject: [PATCH 15/19] CCM-5952: undo out of scope change --- tests/lib/constants/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/constants/constants.py b/tests/lib/constants/constants.py index e982b0e28..de0f1d3e8 100644 --- a/tests/lib/constants/constants.py +++ b/tests/lib/constants/constants.py @@ -64,7 +64,7 @@ def __init__(self, code, status, title, detail, links={}): self.title = title self.detail = detail self.links = { - **{"about": "https://digital.nhs.uk/developer/api-catalogue/nhs-notify"}, + **{"about": "https://digital.nhs.uk/developer/api-catalogue/communications-manager"}, **links } From 36e18a3347d193e121f71e840681aa99527103d5 Mon Sep 17 00:00:00 2001 From: David Fuery BJSS Date: Wed, 7 Aug 2024 14:05:39 +0100 Subject: [PATCH 16/19] Revert "CCM-5952: undo out of scope change" This reverts commit fe1b0c22b683f46bde715e8a30ba0be6defb2415. --- tests/lib/constants/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/constants/constants.py b/tests/lib/constants/constants.py index de0f1d3e8..e982b0e28 100644 --- a/tests/lib/constants/constants.py +++ b/tests/lib/constants/constants.py @@ -64,7 +64,7 @@ def __init__(self, code, status, title, detail, links={}): self.title = title self.detail = detail self.links = { - **{"about": "https://digital.nhs.uk/developer/api-catalogue/communications-manager"}, + **{"about": "https://digital.nhs.uk/developer/api-catalogue/nhs-notify"}, **links } From e57cc9039eab92896d94d230ce8937d58052e47d Mon Sep 17 00:00:00 2001 From: lapenna-bjss <160487283+lapenna-bjss@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:48:26 +0100 Subject: [PATCH 17/19] CCM-6127: Add linting to pre-commit (#696) * CCM-6127: Add linting to pre-commit * CCM-6127: Add pre-commit hooks * test * test * test * Debugging fun * CCM-6127: fix formatting * CCM-6127: remove hooks commands in Makefile * CCM-6127: test pre-commit install * CCM-6127: add pre-commit install to makefile * CCM-6127: create pre-commit hooks script * CCM-6127: formatting pre-commit hooks script * CCM-6127: formatting pre-commit hooks script * CCM-6127: formatting pre-commit hooks script * CCM-6127: fix stash unstaged changes * CCM-6127: allow git-secrets pattern * CCM-6127: add secrets.allowed to config --------- Co-authored-by: Rachel Kennedy --- .pre-commit-config.yaml | 8 --- Makefile | 4 +- git-secrets | 1 + nhsd-git-secrets/pre-commit-mac.sh | 5 +- scripts/check_licences.sh | 2 + scripts/ensure_docs_validity.sh | 4 ++ scripts/lint_python.sh | 2 + scripts/pre-commit | 101 ++++++++++++++++++++++++++++- 8 files changed, 113 insertions(+), 14 deletions(-) delete mode 100644 .pre-commit-config.yaml create mode 100755 scripts/check_licences.sh create mode 100755 scripts/ensure_docs_validity.sh create mode 100755 scripts/lint_python.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index a18051fd3..000000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -repos: -- repo: local - hooks: - - id: git-secrets - name: Git Secrets - description: git-secrets scans commits, commit messages, and --no-ff merges to prevent adding secrets into your git repositories. - entry: 'nhsd-git-secrets/pre-commit-mac.sh' - language: script diff --git a/Makefile b/Makefile index a9acad56b..085f6885b 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,12 @@ install-node: cd sandbox && npm install --legacy-peer-deps #Configures Git Hooks, which are scripts that run given a specified event. -.git/hooks/pre-commit: +git/hooks/pre-commit: cp scripts/pre-commit .git/hooks/pre-commit chmod +x .git/hooks/pre-commit #Condensed Target to run all targets above. -install: install-node install-python .git/hooks/pre-commit +install: install-node install-python git/hooks/pre-commit #Referenced within readme install-hooks: .git/hooks/pre-commit diff --git a/git-secrets b/git-secrets index ceda0fa4c..506a73ae0 100755 --- a/git-secrets +++ b/git-secrets @@ -241,6 +241,7 @@ register_aws() { add_config 'secrets.patterns' "${opt_quote}${aws}(ACCOUNT|account|Account)_?(ID|id|Id)?${opt_quote}${connect}${opt_quote}[0-9]{4}\-?[0-9]{4}\-?[0-9]{4}${opt_quote}" add_config 'secrets.allowed' 'AKIAIOSFODNN7EXAMPLE' add_config 'secrets.allowed' "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" + add_config 'secrets.allowed' "UAT_NHS_APP_PASSWORD" if [[ $? == 0 ]]; then echo 'OK' diff --git a/nhsd-git-secrets/pre-commit-mac.sh b/nhsd-git-secrets/pre-commit-mac.sh index 456aa0d6f..356e5520e 100755 --- a/nhsd-git-secrets/pre-commit-mac.sh +++ b/nhsd-git-secrets/pre-commit-mac.sh @@ -3,7 +3,8 @@ # Note that this will be invoked by the git hook from the repo root, so cd .. isn't required # These only need to be run once per workstation but are included to try and ensure they are present +./git-secrets --register-aws ./git-secrets --add-provider -- cat nhsd-git-secrets/nhsd-rules-deny.txt -# Just scan the files changed in this commit -./git-secrets --pre_commit_hook +# Scan all files within this repo for this commit +./git-secrets --scan diff --git a/scripts/check_licences.sh b/scripts/check_licences.sh new file mode 100755 index 000000000..52f901da8 --- /dev/null +++ b/scripts/check_licences.sh @@ -0,0 +1,2 @@ +#!/bin/sh +npm run check-licenses && scripts/check_python_licenses.sh && cd sandbox && npm run check-licenses diff --git a/scripts/ensure_docs_validity.sh b/scripts/ensure_docs_validity.sh new file mode 100755 index 000000000..f6a88383a --- /dev/null +++ b/scripts/ensure_docs_validity.sh @@ -0,0 +1,4 @@ +#!/bin/sh +cd tests/docs +./build-docs.sh --verify +cd ../../ diff --git a/scripts/lint_python.sh b/scripts/lint_python.sh new file mode 100755 index 000000000..257bd5664 --- /dev/null +++ b/scripts/lint_python.sh @@ -0,0 +1,2 @@ +#!/bin/bash +find . -name "*.py" -not -path "**/.venv/*" | xargs poetry run flake8 diff --git a/scripts/pre-commit b/scripts/pre-commit index a7b83b930..7b5f8da2a 100644 --- a/scripts/pre-commit +++ b/scripts/pre-commit @@ -1,2 +1,99 @@ -#!/bin/sh -make lint +#!/bin/bash + +# Check if there are unstaged changes +if git diff --quiet; then + echo -e "No unstaged changes to stash...\n" + STASH_CREATED=false +else + # Unstaged changes detected + git stash --keep-index -u + echo -e "Stashing unstaged changes...\n" + STASH_CREATED=true +fi + +# Find all changed files for this commit +# Compute the diff only once to save a small amount of time. +CHANGED_FILES=$(git diff --name-only --cached --diff-filter=ACMR) +# Get only changed files that match our file suffix pattern +get_pattern_files() { + pattern=$(echo "$*" | sed "s/ /\$\\\|/g") + echo "$CHANGED_FILES" | { grep "$pattern$" || true; } +} +# Get all changed python files +PY_FILES=$(get_pattern_files .py) +JS_FILES=$(get_pattern_files .js) + +# Tracks if any checks fail +FAIL=0 + +# Git Secrets +echo "Running Git Secrets..." +./nhsd-git-secrets/pre-commit-mac.sh +if [ $? -ne 0 ]; then + echo -e "Git Secrets failed. Commit aborted. \n" + FAIL=1 +else + echo -e "Git Secrets check passed.\n" +fi + + +# Lint JavaScript files in the sandbox folder +echo "Linting JavaScript files..." +if [[ -n "$JS_FILES" ]]; then + node_modules/.bin/eslint 'sandbox/**/*.{js,jsx}' + if [ $? -ne 0 ]; then + echo -e "JavaScript linting failed. Commit aborted. \n" + FAIL=1 + else + echo -e "JavaScript linting passed.\n" + fi +else + echo -e "No JavaScript files to lint. Skipping JavaScript linting. \n" +fi + + +# Lint Python files in the project +echo "Linting Python files..." +if [[ -n "$PY_FILES" ]]; then + ./scripts/lint_python.sh + if [ $? -ne 0 ]; then + echo -e "Python linting failed. Commit aborted. \n" + FAIL=1 + else + echo -e "Python linting passed.\n" + fi +else + echo -e "No Python files to lint. Skipping Python linting. \n" +fi + +# Ensure Test Documentation Validity +echo "Ensuring test documentation validity..." +if ./scripts/ensure_docs_validity.sh > /dev/null 2>&1; then + echo -e "Documentation check passed. \n" +else + echo -e "Test documentation validation failed. Commit aborted. \n" + FAIL=1 +fi + +# Check Licences +echo "Checking licenses..." +if ./scripts/check_licences.sh > /dev/null 2>&1; then + echo -e "License check passed. \n" +else + echo -e "License check failed. Commit aborted. \n" + FAIL=1 +fi + +# Pop the stash only if a stash was created +if [ "$STASH_CREATED" = true ]; then + echo "Restoring unstaged changes..." + git stash pop -q +fi + +# Exit with failure if any checks failed +if [ $FAIL -ne 0 ]; then + exit 1 +fi + +echo -e "All checks passed. Proceeding with commit. \n" +exit 0 From b1049e5b62f68424ce0a06faa10f2c7d4bf43eef Mon Sep 17 00:00:00 2001 From: Tom <83403414+tdroza-nhs@users.noreply.github.com> Date: Fri, 16 Aug 2024 16:33:46 +0100 Subject: [PATCH 18/19] CCM-6099: API documentation fixes (#699) * CCM-6099: Fix minor inconsistencies in API docs * CCM-6099: Fix wrong type of apostrophe * CCM-6099: Update explanation of Free-text Comms * CCM-6099: Add charset examples * CCM-6099: Renamed to avoid conflict * CCM-6099: Fixed mismatched messageIDs * CCM-6099: Address review comments --- .../callbacks/channel-subscription-openapi-spec.json | 4 ++-- .../callbacks/message-subscription-openapi-spec.json | 4 ++-- specification/documentation/APIDescription.md | 6 +++--- specification/responses/4xx/406_NotAcceptable.yaml | 2 ++ specification/responses/4xx/415_UnsupportedMedia.yaml | 4 +++- specification/schemas/components/MessageStatus.yaml | 11 +++++------ specification/schemas/components/SupplierStatus.yaml | 10 +++------- specification/schemas/enums/RoutingPlanType.yaml | 1 + specification/schemas/responses/MessageResponse.yaml | 2 -- .../schemas/responses/errors/UnsupportedMedia.yaml | 2 +- specification/schemas/types/KSUID.yaml | 2 +- specification/schemas/types/Links.yaml | 2 +- specification/schemas/types/RoutingPlan.yaml | 1 - specification/snippets/MessageReferenceSnippet.yaml | 5 +++++ 14 files changed, 29 insertions(+), 27 deletions(-) create mode 100644 specification/snippets/MessageReferenceSnippet.yaml diff --git a/specification/callbacks/channel-subscription-openapi-spec.json b/specification/callbacks/channel-subscription-openapi-spec.json index 1e0224c22..b38e27503 100644 --- a/specification/callbacks/channel-subscription-openapi-spec.json +++ b/specification/callbacks/channel-subscription-openapi-spec.json @@ -142,7 +142,7 @@ "type": "string", "format": "uri", "examples": [ - "https://api.service.nhs.uk/comms/v1/messages/0ujsszwN8NRY24YaXiTIE2VWDTS" + "https://api.service.nhs.uk/comms/v1/messages/2WL3qFTEFM0qMY8xjRbt1LIKCzM" ] } }, @@ -177,7 +177,7 @@ "minLength": 27, "maxLength": 27, "examples": [ - "0ujsszwN8NRY24YaXiTIE2VWDTS" + "2WL3qFTEFM0qMY8xjRbt1LIKCzM" ] }, "Enum_ChannelStatus": { diff --git a/specification/callbacks/message-subscription-openapi-spec.json b/specification/callbacks/message-subscription-openapi-spec.json index d90cdf041..4c9252703 100644 --- a/specification/callbacks/message-subscription-openapi-spec.json +++ b/specification/callbacks/message-subscription-openapi-spec.json @@ -136,7 +136,7 @@ "type": "string", "format": "uri", "examples": [ - "https://api.service.nhs.uk/comms/v1/messages/0ujsszwN8NRY24YaXiTIE2VWDTS" + "https://api.service.nhs.uk/comms/v1/messages/2WL3qFTEFM0qMY8xjRbt1LIKCzM" ] } }, @@ -168,7 +168,7 @@ "minLength": 27, "maxLength": 27, "examples": [ - "0ujsszwN8NRY24YaXiTIE2VWDTS" + "2WL3qFTEFM0qMY8xjRbt1LIKCzM" ] }, "Enum_MessageStatus": { diff --git a/specification/documentation/APIDescription.md b/specification/documentation/APIDescription.md index 1182af51e..83bb09f6f 100644 --- a/specification/documentation/APIDescription.md +++ b/specification/documentation/APIDescription.md @@ -138,7 +138,7 @@ To understand how our online digital onboarding process works, see [digital onbo ## Free-text communications -Free-text communications (as opposed to fixed format communications) can be achieved by setting up a generic template and making use of the personalisation fields to provide the content of the message. In order to make this more convenient the service provides some globally available routing plans that any client can use. +Free-text communications (as opposed to fixed format communications) are possible via the use of a generic template and making use of the personalisation fields to provide the content of the message. In order to make this more convenient the service provides some globally available routing plans that any client can use. | Global Routing Plan ID | Channel/Supplier | Read wait time (before failing channel) | Personalisation field name | |--------------------------------------|------------------|-----------------------------------------|----------------------------| @@ -207,14 +207,14 @@ The channels can have the following supplier statuses: * `delivered` - the message has been successfully delivered to the user * `permanent_failure` - the Email/SMS provider could not deliver the message, this can happen if the phone number was wrong or if the network operator rejects the message -* `temporary_failure` - the Email/SMS provider could not deliver the message, this can happen when the recipient’s phone is off, has no signal, or their text message inbox is full +* `temporary_failure` - the Email/SMS provider could not deliver the message, this can happen when the recipient's phone is off, has no signal, or their text message inbox is full * `technical_failure` - the message was not sent because there was a problem between GOV.UK Notify and the Email/SMS provider ### SMS * `delivered` - the message has been successfully delivered to the user * `permanent_failure` - the Email/SMS provider could not deliver the message, this can happen if the phone number was wrong or if the network operator rejects the message -* `temporary_failure` - the Email/SMS provider could not deliver the message, this can happen when the recipient’s phone is off, has no signal, or their text message inbox is full +* `temporary_failure` - the Email/SMS provider could not deliver the message, this can happen when the recipient's phone is off, has no signal, or their text message inbox is full * `technical_failure` - the message was not sent because there was a problem between GOV.UK Notify and the Email/SMS provider ### Letters diff --git a/specification/responses/4xx/406_NotAcceptable.yaml b/specification/responses/4xx/406_NotAcceptable.yaml index 77bb4a29c..d8ad56b3b 100644 --- a/specification/responses/4xx/406_NotAcceptable.yaml +++ b/specification/responses/4xx/406_NotAcceptable.yaml @@ -6,6 +6,8 @@ description: |+ * `*/*` * `application/json` * `application/vnd.api+json` + * `application/json; charset=utf-8` + * `application/vnd.api+json; charset=utf-8` Where no `Accept` header is present, this will default to `application/vnd.api+json` content: diff --git a/specification/responses/4xx/415_UnsupportedMedia.yaml b/specification/responses/4xx/415_UnsupportedMedia.yaml index 38e03dd98..dc686705d 100644 --- a/specification/responses/4xx/415_UnsupportedMedia.yaml +++ b/specification/responses/4xx/415_UnsupportedMedia.yaml @@ -1,8 +1,10 @@ description: |+ The `Content-Type` of the request is not supported. This endpoint supports: - * `application/vnd.api+json` * `application/json` + * `application/vnd.api+json` + * `application/json; charset=utf-8` + * `application/vnd.api+json; charset=utf-8` content: application/vnd.api+json: schema: diff --git a/specification/schemas/components/MessageStatus.yaml b/specification/schemas/components/MessageStatus.yaml index 3979b2736..80d79b064 100644 --- a/specification/schemas/components/MessageStatus.yaml +++ b/specification/schemas/components/MessageStatus.yaml @@ -9,16 +9,14 @@ properties: messageId: $ref: ../types/KSUID.yaml messageReference: - type: string - format: uuid - examples: - - 1642109b-69eb-447f-8f97-ab70a74f5db4 + $ref: ../../snippets/MessageReferenceSnippet.yaml messageStatus: type: string $ref: ../enums/MessageStatusEnum.yaml messageStatusDescription: type: string - example: "" + description: If there is extra information associated with the status of this message, it is provided here. + example: " " channels: type: array minItems: 1 @@ -47,9 +45,10 @@ properties: properties: message: type: string + description: URL to retrieve overarching message status from the GET endpoint. format: uri examples: - - "https://api.service.nhs.uk/comms/v1/messages/0ujsszwN8NRY24YaXiTIE2VWDTS" + - "https://api.service.nhs.uk/comms/v1/messages/2WL3qFTEFM0qMY8xjRbt1LIKCzM" required: - message meta: diff --git a/specification/schemas/components/SupplierStatus.yaml b/specification/schemas/components/SupplierStatus.yaml index 888c6d8f7..502ca47ed 100644 --- a/specification/schemas/components/SupplierStatus.yaml +++ b/specification/schemas/components/SupplierStatus.yaml @@ -9,11 +9,7 @@ properties: messageId: $ref: ../types/KSUID.yaml messageReference: - type: string - format: uuid - description: Original reference supplied for the message - examples: - - 1642109b-69eb-447f-8f97-ab70a74f5db4 + $ref: ../../snippets/MessageReferenceSnippet.yaml channel: type: any enum: @@ -24,7 +20,7 @@ properties: channelStatusDescription: type: string description: If there is extra information associated with the status of this channel, it is provided here. - example: "" + example: " " supplierStatus: $ref: ../enums/SupplierStatusEnum.yaml timestamp: @@ -49,7 +45,7 @@ properties: description: URL to retrieve overarching message status from the GET endpoint. format: uri examples: - - "https://api.service.nhs.uk/comms/v1/messages/0ujsszwN8NRY24YaXiTIE2VWDTS" + - "https://api.service.nhs.uk/comms/v1/messages/2WL3qFTEFM0qMY8xjRbt1LIKCzM" required: - message meta: diff --git a/specification/schemas/enums/RoutingPlanType.yaml b/specification/schemas/enums/RoutingPlanType.yaml index 0502cb552..808c8381b 100644 --- a/specification/schemas/enums/RoutingPlanType.yaml +++ b/specification/schemas/enums/RoutingPlanType.yaml @@ -1,5 +1,6 @@ title: Enum_RoutingPlanType type: string +description: The routing plan used to send messages. enum: - original - override diff --git a/specification/schemas/responses/MessageResponse.yaml b/specification/schemas/responses/MessageResponse.yaml index 0017cc2d0..5657b83a6 100644 --- a/specification/schemas/responses/MessageResponse.yaml +++ b/specification/schemas/responses/MessageResponse.yaml @@ -10,8 +10,6 @@ properties: $ref: ../enums/EnumMessage.yaml id: $ref: ../types/KSUID.yaml - description: Identifier for this Message. - example: 0ujsszwN8NRY24YaXiTIE2VWDTS attributes: type: object additionalProperties: false diff --git a/specification/schemas/responses/errors/UnsupportedMedia.yaml b/specification/schemas/responses/errors/UnsupportedMedia.yaml index 7062d8afb..1cbcf4ed5 100644 --- a/specification/schemas/responses/errors/UnsupportedMedia.yaml +++ b/specification/schemas/responses/errors/UnsupportedMedia.yaml @@ -9,8 +9,8 @@ properties: uniqueItems: true items: type: object + additionalProperties: false properties: - additionalProperties: false id: $ref: ../../types/ErrorIdentifier.yaml code: diff --git a/specification/schemas/types/KSUID.yaml b/specification/schemas/types/KSUID.yaml index 4735b8aea..aea25c638 100644 --- a/specification/schemas/types/KSUID.yaml +++ b/specification/schemas/types/KSUID.yaml @@ -1,6 +1,6 @@ type: string title: Type_KSUID -description: Identifier for the message. +description: The unique identifier for the message. pattern: '^[a-zA-Z0-9]{27}$' minLength: 27 maxLength: 27 diff --git a/specification/schemas/types/Links.yaml b/specification/schemas/types/Links.yaml index 159826f8d..c86b717d4 100644 --- a/specification/schemas/types/Links.yaml +++ b/specification/schemas/types/Links.yaml @@ -6,4 +6,4 @@ properties: type: string format: uri description: URI of this message. - example: https://api.service.nhs.uk/comms/v1/messages/0ujsszwN8NRY24YaXiTIE2VWDTS + example: https://api.service.nhs.uk/comms/v1/messages/2WL3qFTEFM0qMY8xjRbt1LIKCzM diff --git a/specification/schemas/types/RoutingPlan.yaml b/specification/schemas/types/RoutingPlan.yaml index 4ab7d6d89..04312d551 100644 --- a/specification/schemas/types/RoutingPlan.yaml +++ b/specification/schemas/types/RoutingPlan.yaml @@ -1,4 +1,3 @@ -title: RoutingPlan type: object additionalProperties: false properties: diff --git a/specification/snippets/MessageReferenceSnippet.yaml b/specification/snippets/MessageReferenceSnippet.yaml new file mode 100644 index 000000000..7a71fa7ac --- /dev/null +++ b/specification/snippets/MessageReferenceSnippet.yaml @@ -0,0 +1,5 @@ +type: string +format: uuid +description: Original reference supplied for the message +examples: + - 1642109b-69eb-447f-8f97-ab70a74f5db4 \ No newline at end of file From f6ae261c784a93435b82b1d84214ffec10b5580f Mon Sep 17 00:00:00 2001 From: Chris Elliott Date: Tue, 20 Aug 2024 10:25:04 +0100 Subject: [PATCH 19/19] +minor