diff --git a/docs/tests/post_v1_message-batches/validation.md b/docs/tests/post_v1_message-batches/validation.md
index a639aaa5d..b55daa774 100644
--- a/docs/tests/post_v1_message-batches/validation.md
+++ b/docs/tests/post_v1_message-batches/validation.md
@@ -33,11 +33,11 @@ Below is a table showing the required attributes and their locations as seen in
| nhsNumber | /data/attributes/messages/0/recipient/nhsNumber |
-## Scenario: An API consumer submitting a request with an invalid address postcode receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string array address lines receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { sms: value, email: value, address: { lines: [], postcode: value } }
+A valid address lines contact detail must be structured in this format: { address: { lines: Value } } where Value is a string array
-**Given** the API consumer provides an message body with an invalid postcode
+**Given** the API consumer provides a message body with a non-string array address lines
**When** the request is submitted
@@ -48,34 +48,34 @@ A valid contact detail must be structured in this format: { sms: value, email: v
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|-----------|------------------------------------------------|
-| LS1 6AECD | Used to ensure only valid postcode is accepted |
+| Value | Description |
+|---------|--------------------------------------------------------------|
+| [1,2] | Used to ensure only a string array address lines is accepted |
-## Scenario: An API consumer submitting a request with invalid address lines (too few) receives a 400 ‘Too few items’ response
+## Scenario: An API consumer submitting a request with a non-string address postcode receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid address postcode contact detail must be structured in this format: { address: { postcode: Value } } where Value is a string
-**Given** the API consumer provides an message body with with too few address lines
+**Given** the API consumer provides a message body with a non-string address postcode
**When** the request is submitted
-**Then** the response returns a 400 too few items error
+**Then** the response returns a 400 invalid value error
**Asserts**
-- Response returns a 400 ‘Too few items’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
|---------|-----------------------------------------------------------|
-| [ “1” ] | Used to ensure list of less than 2 values is not accepted |
+| [] | Used to ensure only a string address postcode is accepted |
## Scenario: An API consumer submitting a request with invalid address lines (too many) receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: Value } }
**Given** the API consumer provides an message body with with too many address lines
@@ -93,11 +93,11 @@ A valid contact detail must be structured in this format: { address: { lines: [
| [ “1”, “2”, “3”, “4”, “5”, “6” ] | Used to ensure list of more than 5 values is not accepted |
-## Scenario: An API consumer submitting a request with an invalid email receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string email address receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { email: Value }
+A valid email contact detail must be structured in this format: { email: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid email address
+**Given** the API consumer provides a message body with a non-string email address
**When** the request is submitted
@@ -108,16 +108,16 @@ A valid contact detail must be structured in this format: { email: Value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|---------------------|------------------------------------------------------|
-| invalidEmailAddress | Used to ensure invalid email address is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------|
+| [] | Used to ensure only a string email address is accepted |
-## Scenario: An API consumer submitting a request with an invalid email receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string email address receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { email: Value }
+A valid email contact detail must be structured in this format: { email: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid email address
+**Given** the API consumer provides a message body with a non-string email address
**When** the request is submitted
@@ -128,16 +128,16 @@ A valid contact detail must be structured in this format: { email: Value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|---------------------|------------------------------------------------------|
-| invalidEmailAddress | Used to ensure invalid email address is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------|
+| [] | Used to ensure only a string email address is accepted |
-## Scenario: An API consumer submitting a request with an invalid sms receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string sms receives a 400 ‘Invalid Value’ response
-A valid sms contact detail must be structured in this format: { sms: value }
+A valid sms contact detail must be structured in this format: { sms: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid sms
+**Given** the API consumer provides a message body with a non-string sms
**When** the request is submitted
@@ -148,16 +148,16 @@ A valid sms contact detail must be structured in this format: { sms: value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|--------------|-----------------------------------------------------|
-| 077009000021 | Used to ensure invalid phone number is not accepted |
+| Value | Description |
+|---------|-------------------------------------------------------|
+| [] | Used to ensure only a string phone number is accepted |
-## Scenario: An API consumer submitting a request with an invalid sms receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string sms receives a 400 ‘Invalid Value’ response
-A valid sms contact detail must be structured in this format: { sms: value }
+A valid sms contact detail must be structured in this format: { sms: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid sms
+**Given** the API consumer provides a message body with a non-string sms
**When** the request is submitted
@@ -168,9 +168,9 @@ A valid sms contact detail must be structured in this format: { sms: value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|--------------|-----------------------------------------------------|
-| 077009000021 | Used to ensure invalid phone number is not accepted |
+| Value | Description |
+|---------|-------------------------------------------------------|
+| [] | Used to ensure only a string phone number is accepted |
## Scenario: An API consumer submitting a request with an contact details when not allowed receives a 400 ‘Cannot set contact details’ response
@@ -281,9 +281,9 @@ An NHS Number is a 10 digit number used to identify patients, for more informati
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -293,7 +293,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
@@ -364,9 +364,9 @@ Below is a table showing the required attributes and their locations as seen in
| nhsNumber | /data/attributes/messages/0/recipient/nhsNumber |
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -376,7 +376,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
diff --git a/docs/tests/post_v1_single-message/validation.md b/docs/tests/post_v1_single-message/validation.md
index f60681457..9103f6de9 100644
--- a/docs/tests/post_v1_single-message/validation.md
+++ b/docs/tests/post_v1_single-message/validation.md
@@ -1,11 +1,11 @@
# Validation Tests
-## Scenario: An API consumer submitting a request with an invalid address postcode receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string array address lines receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { sms: value, email: value, address: { lines: [], postcode: value } }
+A valid address lines contact detail must be structured in this format: { address: { lines: Value } } where Value is a string array
-**Given** the API consumer provides an message body with an invalid postcode
+**Given** the API consumer provides a message body with a non-string array address lines
**When** the request is submitted
@@ -16,34 +16,14 @@ A valid contact detail must be structured in this format: { sms: value, email: v
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|-----------|------------------------------------------------|
-| LS1 6AECD | Used to ensure only valid postcode is accepted |
-
-
-## Scenario: An API consumer submitting a request with invalid address lines (too few) receives a 400 ‘Too few items’ response
-
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
-
-**Given** the API consumer provides an message body with with too few address lines
-
-**When** the request is submitted
-
-**Then** the response returns a 400 too few items error
-
-
-**Asserts**
-- Response returns a 400 ‘Too few items’ error
-- Response returns the expected error message body with references to the invalid attribute
-
-| Value | Description |
-|---------|-----------------------------------------------------------|
-| [ “1” ] | Used to ensure list of less than 2 values is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------------|
+| [1,2] | Used to ensure only a string array address lines is accepted |
## Scenario: An API consumer submitting a request with invalid address lines (too many) receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: Value } }
**Given** the API consumer provides an message body with with too many address lines
@@ -61,11 +41,11 @@ A valid contact detail must be structured in this format: { address: { lines: [
| [ “1”, “2”, “3”, “4”, “5”, “6” ] | Used to ensure list of more than 5 values is not accepted |
-## Scenario: An API consumer submitting a request with an invalid email receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string email address receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { email: Value }
+A valid email contact detail must be structured in this format: { email: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid email address
+**Given** the API consumer provides a message body with a non-string email address
**When** the request is submitted
@@ -76,16 +56,16 @@ A valid contact detail must be structured in this format: { email: Value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|---------------------|------------------------------------------------------|
-| invalidEmailAddress | Used to ensure invalid email address is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------|
+| [] | Used to ensure only a string email address is accepted |
-## Scenario: An API consumer submitting a request with an invalid sms receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string sms receives a 400 ‘Invalid Value’ response
-A valid sms contact detail must be structured in this format: { sms: value }
+A valid sms contact detail must be structured in this format: { sms: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid sms
+**Given** the API consumer provides a message body with a non-string sms
**When** the request is submitted
@@ -96,9 +76,9 @@ A valid sms contact detail must be structured in this format: { sms: value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|--------------|-----------------------------------------------------|
-| 077009000021 | Used to ensure invalid phone number is not accepted |
+| Value | Description |
+|---------|-------------------------------------------------------|
+| [] | Used to ensure only a string phone number is accepted |
## Scenario: An API consumer submitting a request with an contact details when not allowed receives a 400 ‘Cannot set contact details’ response
@@ -192,9 +172,9 @@ An NHS Number is a 10 digit number used to identify patients, for more informati
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -204,7 +184,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
@@ -259,9 +239,9 @@ Below is a table showing the required attributes and their locations as seen in
| nhsNumber | /data/attributes/recipient/nhsNumber |
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -271,7 +251,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
diff --git a/docs/tests/sandbox/post_v1_message-batches/validation.md b/docs/tests/sandbox/post_v1_message-batches/validation.md
index 8dc7d17b9..cf95dd96f 100644
--- a/docs/tests/sandbox/post_v1_message-batches/validation.md
+++ b/docs/tests/sandbox/post_v1_message-batches/validation.md
@@ -129,29 +129,29 @@ Below is a table showing the required attributes and their locations as seen in
| nhsNumber | /data/attributes/messages/0/recipient/nhsNumber |
-## Scenario: An API consumer submitting a request with invalid address lines (too few) receives a 400 ‘Too few items’ response
+## Scenario: An API consumer submitting a request with a non-string array address lines receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid address lines contact detail must be structured in this format: { address: { lines: Value } } where Value is a string array
-**Given** the API consumer provides an message body with with too few address lines
+**Given** the API consumer provides a message body with a non-string array address lines
**When** the request is submitted
-**Then** the response returns a 400 too few items error
+**Then** the response returns a 400 invalid value error
**Asserts**
-- Response returns a 400 ‘Too few items’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|---------|-----------------------------------------------------------|
-| [ “1” ] | Used to ensure list of less than 2 values is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------------|
+| [1,2] | Used to ensure only a string array address lines is accepted |
## Scenario: An API consumer submitting a request with invalid address lines (too many) receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: Value } }
**Given** the API consumer provides an message body with with too many address lines
@@ -183,11 +183,11 @@ A valid contact detail must be structured in this format: { address: { lines: [
- Response returns the expected error message body
-## Scenario: An API consumer submitting a request with an invalid email receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string email address receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { email: Value }
+A valid email contact detail must be structured in this format: { email: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid email address
+**Given** the API consumer provides a message body with a non-string email address
**When** the request is submitted
@@ -198,9 +198,9 @@ A valid contact detail must be structured in this format: { email: Value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|---------------------|------------------------------------------------------|
-| invalidEmailAddress | Used to ensure invalid email address is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------|
+| [] | Used to ensure only a string email address is accepted |
## Scenario: An API consumer submitting a request with an invalid message batch reference receives a 400 ‘Invalid Value’ response
@@ -251,9 +251,9 @@ An NHS Number is a 10 digit number used to identify patients, for more informati
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -263,7 +263,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
@@ -288,11 +288,11 @@ The routing plan must be in a UUID format, for more information on UUID, look [h
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid sms receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string sms receives a 400 ‘Invalid Value’ response
-A valid sms contact detail must be structured in this format: { sms: value }
+A valid sms contact detail must be structured in this format: { sms: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid sms
+**Given** the API consumer provides a message body with a non-string sms
**When** the request is submitted
@@ -303,9 +303,9 @@ A valid sms contact detail must be structured in this format: { sms: value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|--------------|-----------------------------------------------------|
-| 077009000021 | Used to ensure invalid phone number is not accepted |
+| Value | Description |
+|---------|-------------------------------------------------------|
+| [] | Used to ensure only a string phone number is accepted |
## Scenario: An API consumer submitting a request with an invalid message value receives a 400 ‘Invalid Value’ response
@@ -336,9 +336,9 @@ A valid sms contact detail must be structured in this format: { sms: value }
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -348,7 +348,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
diff --git a/docs/tests/sandbox/post_v1_messages/validation.md b/docs/tests/sandbox/post_v1_messages/validation.md
index 475d93a1f..ded2fb523 100644
--- a/docs/tests/sandbox/post_v1_messages/validation.md
+++ b/docs/tests/sandbox/post_v1_messages/validation.md
@@ -62,29 +62,29 @@ Below is a table showing the required attributes and their locations as seen in
| nhsNumber | /data/attributes/recipient/nhsNumber |
-## Scenario: An API consumer submitting a request with invalid address lines (too few) receives a 400 ‘Too few items’ response
+## Scenario: An API consumer submitting a request with a non-string array address lines receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid address lines contact detail must be structured in this format: { address: { lines: Value } } where Value is a string array
-**Given** the API consumer provides an message body with with too few address lines
+**Given** the API consumer provides a message body with a non-string array address lines
**When** the request is submitted
-**Then** the response returns a 400 too few items error
+**Then** the response returns a 400 invalid value error
**Asserts**
-- Response returns a 400 ‘Too few items’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|---------|-----------------------------------------------------------|
-| [ “1” ] | Used to ensure list of less than 2 values is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------------|
+| [1,2] | Used to ensure only a string array address lines is accepted |
## Scenario: An API consumer submitting a request with invalid address lines (too many) receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: Value } }
**Given** the API consumer provides an message body with with too many address lines
@@ -116,11 +116,11 @@ A valid contact detail must be structured in this format: { address: { lines: [
- Response returns the expected error message body
-## Scenario: An API consumer submitting a request with an invalid email receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string email address receives a 400 ‘Invalid Value’ response
-A valid contact detail must be structured in this format: { email: Value }
+A valid email contact detail must be structured in this format: { email: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid email address
+**Given** the API consumer provides a message body with a non-string email address
**When** the request is submitted
@@ -131,9 +131,9 @@ A valid contact detail must be structured in this format: { email: Value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|---------------------|------------------------------------------------------|
-| invalidEmailAddress | Used to ensure invalid email address is not accepted |
+| Value | Description |
+|---------|--------------------------------------------------------|
+| [] | Used to ensure only a string email address is accepted |
## Scenario: An API consumer submitting a request with an invalid message reference receives a 400 ‘Invalid Value’ response
@@ -168,9 +168,9 @@ An NHS Number is a 10 digit number used to identify patients, for more informati
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -180,7 +180,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
@@ -205,11 +205,11 @@ The routing plan must be in a UUID format, for more information on UUID, look [h
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid sms receives a 400 ‘Invalid Value’ response
+## Scenario: An API consumer submitting a request with a non-string sms receives a 400 ‘Invalid Value’ response
-A valid sms contact detail must be structured in this format: { sms: value }
+A valid sms contact detail must be structured in this format: { sms: Value } where Value is a string
-**Given** the API consumer provides an message body with an invalid sms
+**Given** the API consumer provides a message body with a non-string sms
**When** the request is submitted
@@ -220,9 +220,9 @@ A valid sms contact detail must be structured in this format: { sms: value }
- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
-| Value | Description |
-|--------------|-----------------------------------------------------|
-| 077009000021 | Used to ensure invalid phone number is not accepted |
+| Value | Description |
+|---------|-------------------------------------------------------|
+| [] | Used to ensure only a string phone number is accepted |
## Scenario: An API consumer submitting a request with an contact details when not allowed receives a 400 ‘Cannot set contact details’ response
@@ -239,9 +239,9 @@ A valid sms contact detail must be structured in this format: { sms: value }
- Response returns the expected error message body with references to the invalid attribute
-## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid value’ response
+## Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 ‘Invalid Value’ response
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
**Given** the API consumer provides a message body with an invalid personalisation
@@ -251,7 +251,7 @@ A valid personalisation must be structured in this format: { parameter: value }
**Asserts**
-- Response returns a 400 ‘Invalid value’ error
+- Response returns a 400 ‘Invalid Value’ error
- Response returns the expected error message body with references to the invalid attribute
| Value | Description |
diff --git a/package.json b/package.json
index 36f84b6fd..433f80fe0 100644
--- a/package.json
+++ b/package.json
@@ -27,7 +27,7 @@
"devDependencies": {
"@babel/core": "^7.25.2",
"@babel/eslint-parser": "^7.25.1",
- "@redocly/cli": "^1.25.3",
+ "@redocly/cli": "^1.34.3",
"eslint": "^8.57.1",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^8.5.0",
@@ -48,6 +48,7 @@
"typescript": "^5.5.4"
},
"dependencies": {
+ "ajv": "4.11.8 - 8",
"jsrsasign": "^11.1.0",
"jsrsasign-util": "^1.0.5"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c3858724c..614a072bb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,22 +1,17 @@
lockfileVersion: 5.4
specifiers:
- '@playwright/test': ^1.42.1
- '@redocly/cli': ^1.10.6
- '@types/node': ^20.12.2
- '@typescript-eslint/eslint-plugin': ^5.44.0
- '@typescript-eslint/parser': ^7.17.0
- eslint: ^8.28.0
- eslint-config-airbnb: ^19.0.4
+ '@babel/core': ^7.25.2
+ '@babel/eslint-parser': ^7.25.1
+ '@redocly/cli': ^1.34.3
+ ajv: 4.11.8 - 8
+ eslint: ^8.57.1
eslint-config-airbnb-base: ^15.0.0
eslint-config-prettier: ^8.5.0
eslint-formatter-gitlab: ^3.0.0
- eslint-import-resolver-typescript: ^3.5.2
eslint-plugin-html: ^6.2.0
eslint-plugin-import: ^2.26.0
eslint-plugin-jsx-a11y: ^6.6.1
- eslint-plugin-react: ^7.31.11
- eslint-plugin-react-hooks: ^4.6.0
eslint-plugin-security: ^1.5.0
eslint-plugin-sonarjs: ^0.16.0
eslint-plugin-unicorn: ^45.0.1
@@ -28,54 +23,147 @@ specifiers:
license-checker: ^25.0.1
minimist: ^1.2.2
newman: ^6.1.2
- playwright: ^1.42.1
- react-is: ^18.2.0
sinon: ^17.0.1
typescript: ^5.5.4
dependencies:
+ ajv: 6.12.6
jsrsasign: 11.1.0
jsrsasign-util: 1.0.5
- playwright: 1.45.3
devDependencies:
- '@playwright/test': 1.45.3
- '@redocly/cli': 1.18.1
- '@types/node': 20.14.12
- '@typescript-eslint/eslint-plugin': 5.62.0_gdzsajg5b2i45zm6j25ky43zii
- '@typescript-eslint/parser': 7.17.0_qusgslmwnowdaqieuropes6b5q
- eslint: 8.57.0
- eslint-config-airbnb: 19.0.4_rkj5pdb7oeft273slftvhkzequ
- eslint-config-airbnb-base: 15.0.0_jrbq5spb6ym3vlo5mnlvtmgpyy
- eslint-config-prettier: 8.10.0_eslint@8.57.0
- eslint-formatter-gitlab: 3.0.0_eslint@8.57.0
- eslint-import-resolver-typescript: 3.6.1_v5rw2ov7t7riomm6bxikk4ok4a
+ '@babel/core': 7.27.1
+ '@babel/eslint-parser': 7.27.1_mqcsltiofq5aw2s45vjrvem2lm
+ '@redocly/cli': 1.34.3_ajv@6.12.6
+ eslint: 8.57.1
+ eslint-config-airbnb-base: 15.0.0_unjw4kdf4fotpociz7fwijpbcy
+ eslint-config-prettier: 8.10.0_eslint@8.57.1
+ eslint-formatter-gitlab: 3.0.0_eslint@8.57.1
eslint-plugin-html: 6.2.0
- eslint-plugin-import: 2.29.1_nneewum65j2qxmblkey6rl7qby
- eslint-plugin-jsx-a11y: 6.9.0_eslint@8.57.0
- eslint-plugin-react: 7.35.0_eslint@8.57.0
- eslint-plugin-react-hooks: 4.6.2_eslint@8.57.0
+ eslint-plugin-import: 2.29.1_eslint@8.57.1
+ eslint-plugin-jsx-a11y: 6.9.0_eslint@8.57.1
eslint-plugin-security: 1.7.1
- eslint-plugin-sonarjs: 0.16.0_eslint@8.57.0
- eslint-plugin-unicorn: 45.0.2_eslint@8.57.0
+ eslint-plugin-sonarjs: 0.16.0_eslint@8.57.1
+ eslint-plugin-unicorn: 45.0.2_eslint@8.57.1
eslint-plugin-workspaces: 0.7.0
- eslint-plugin-yml: 1.14.0_eslint@8.57.0
+ eslint-plugin-yml: 1.14.0_eslint@8.57.1
hbs-cli: 1.4.1
license-checker: 25.0.1
minimist: 1.2.8
newman: 6.1.3
- react-is: 18.3.1
sinon: 17.0.1
typescript: 5.5.4
packages:
- /@babel/code-frame/7.24.7:
- resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
+ /@ampproject/remapping/2.3.0:
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+ dev: true
+
+ /@babel/code-frame/7.27.1:
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.27.1
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+ dev: true
+
+ /@babel/compat-data/7.27.2:
+ resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/core/7.27.1:
+ resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.27.1_@babel+core@7.27.1
+ '@babel/helpers': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
+ convert-source-map: 2.0.0
+ debug: 4.3.5
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/eslint-parser/7.27.1_mqcsltiofq5aw2s45vjrvem2lm:
+ resolution: {integrity: sha512-q8rjOuadH0V6Zo4XLMkJ3RMQ9MSBqwaDByyYB0izsYdaIWGNLmEblbCOf1vyFHICcg16CD7Fsi51vcQnYxmt6Q==}
+ engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0
+ eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
+ dependencies:
+ '@babel/core': 7.27.1
+ '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
+ eslint: 8.57.1
+ eslint-visitor-keys: 2.1.0
+ semver: 6.3.1
+ dev: true
+
+ /@babel/generator/7.27.1:
+ resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/highlight': 7.24.7
- picocolors: 1.0.1
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 3.0.2
+ dev: true
+
+ /@babel/helper-compilation-targets/7.27.2:
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/compat-data': 7.27.2
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.24.5
+ lru-cache: 5.1.1
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-module-imports/7.27.1:
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-module-transforms/7.27.1_@babel+core@7.27.1:
+ resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-string-parser/7.27.1:
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-validator-identifier/7.24.7:
@@ -83,14 +171,30 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
- /@babel/highlight/7.24.7:
- resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
+ /@babel/helper-validator-identifier/7.27.1:
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-validator-option/7.27.1:
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helpers/7.27.1:
+ resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.24.7
- chalk: 2.4.2
- js-tokens: 4.0.0
- picocolors: 1.0.1
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.1
+ dev: true
+
+ /@babel/parser/7.27.2:
+ resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.27.1
dev: true
/@babel/runtime/7.24.8:
@@ -100,20 +204,36 @@ packages:
regenerator-runtime: 0.14.1
dev: true
- /@cfaester/enzyme-adapter-react-18/0.8.0_nnrd3gsncyragczmpvfhocinkq:
- resolution: {integrity: sha512-3Z3ThTUouHwz8oIyhTYQljEMNRFtlVyc3VOOHCbxs47U6cnXs8K9ygi/c1tv49s7MBlTXeIcuN+Ttd9aPtILFQ==}
- peerDependencies:
- enzyme: ^3.11.0
- react: '>=18'
- react-dom: '>=18'
+ /@babel/template/7.27.2:
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
dependencies:
- enzyme-shallow-equal: 1.0.7
- function.prototype.name: 1.1.6
- has: 1.0.4
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
- react-is: 18.3.1
- react-shallow-renderer: 16.15.0_react@18.3.1
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
+ dev: true
+
+ /@babel/traverse/7.27.1:
+ resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.1
+ debug: 4.3.5
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/types/7.27.1:
+ resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
dev: true
/@colors/colors/1.5.0:
@@ -137,13 +257,13 @@ packages:
resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
dev: true
- /@eslint-community/eslint-utils/4.4.0_eslint@8.57.0:
+ /@eslint-community/eslint-utils/4.4.0_eslint@8.57.1:
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
- eslint: 8.57.0
+ eslint: 8.57.1
eslint-visitor-keys: 3.4.3
dev: true
@@ -169,8 +289,8 @@ packages:
- supports-color
dev: true
- /@eslint/js/8.57.0:
- resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+ /@eslint/js/8.57.1:
+ resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
@@ -182,8 +302,13 @@ packages:
resolution: {integrity: sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==}
dev: true
- /@humanwhocodes/config-array/0.11.14:
- resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+ /@faker-js/faker/7.6.0:
+ resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==}
+ engines: {node: '>=14.0.0', npm: '>=6.0.0'}
+ dev: true
+
+ /@humanwhocodes/config-array/0.13.0:
+ resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
engines: {node: '>=10.10.0'}
deprecated: Use @eslint/config-array instead
dependencies:
@@ -199,6 +324,11 @@ packages:
engines: {node: '>=12.22'}
dev: true
+ /@humanwhocodes/momoa/2.0.4:
+ resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==}
+ engines: {node: '>=10.10.0'}
+ dev: true
+
/@humanwhocodes/object-schema/2.0.3:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
@@ -216,6 +346,13 @@ packages:
wrap-ansi-cjs: /wrap-ansi/7.0.0
dev: true
+ /@jest/schemas/29.6.3:
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+ dev: true
+
/@joshuajaco/get-monorepo-packages/1.2.1:
resolution: {integrity: sha512-3I32bp/UB4UmLqEj/yrBEWTYuCzojn8nR34PZ9Jwb2OeHV95l4Kw0ax1xnnA4yYWU1E1krM2RIWghP3U725dGQ==}
dependencies:
@@ -223,6 +360,60 @@ packages:
load-json-file: 4.0.0
dev: true
+ /@jridgewell/gen-mapping/0.3.8:
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+ dev: true
+
+ /@jridgewell/resolve-uri/3.1.2:
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/set-array/1.2.1:
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/sourcemap-codec/1.5.0:
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+ dev: true
+
+ /@jridgewell/trace-mapping/0.3.25:
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+ dev: true
+
+ /@jsep-plugin/assignment/1.3.0_jsep@1.4.0:
+ resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+ dependencies:
+ jsep: 1.4.0
+ dev: true
+
+ /@jsep-plugin/regex/1.0.4_jsep@1.4.0:
+ resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+ dependencies:
+ jsep: 1.4.0
+ dev: true
+
+ /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1:
+ resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
+ dependencies:
+ eslint-scope: 5.1.1
+ dev: true
+
/@nodelib/fs.scandir/2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -244,6 +435,164 @@ packages:
fastq: 1.17.1
dev: true
+ /@opentelemetry/api-logs/0.53.0:
+ resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ dev: true
+
+ /@opentelemetry/api/1.9.0:
+ resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
+ engines: {node: '>=8.0.0'}
+ dev: true
+
+ /@opentelemetry/context-async-hooks/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ dev: true
+
+ /@opentelemetry/core/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.27.0
+ dev: true
+
+ /@opentelemetry/exporter-trace-otlp-http/0.53.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-m7F5ZTq+V9mKGWYpX8EnZ7NjoqAU7VemQ1E2HAG+W/u0wpY1x0OmbxAXfGKFHCspdJk8UKlwPGrpcB8nay3P8A==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.0.0
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/otlp-exporter-base': 0.53.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/otlp-transformer': 0.53.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/resources': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/sdk-trace-base': 1.26.0_@opentelemetry+api@1.9.0
+ dev: true
+
+ /@opentelemetry/otlp-exporter-base/0.53.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-UCWPreGQEhD6FjBaeDuXhiMf6kkBODF0ZQzrk/tuQcaVDJ+dDQ/xhJp192H9yWnKxVpEjFrSSLnpqmX4VwX+eA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.0.0
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/otlp-transformer': 0.53.0_@opentelemetry+api@1.9.0
+ dev: true
+
+ /@opentelemetry/otlp-transformer/0.53.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-rM0sDA9HD8dluwuBxLetUmoqGJKSAbWenwD65KY9iZhUxdBHRLrIdrABfNDP7aiTjcgK8XFyTn5fhDz7N+W6DA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.3.0
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.53.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/resources': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/sdk-logs': 0.53.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/sdk-metrics': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/sdk-trace-base': 1.26.0_@opentelemetry+api@1.9.0
+ protobufjs: 7.4.0
+ dev: true
+
+ /@opentelemetry/propagator-b3/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-vvVkQLQ/lGGyEy9GT8uFnI047pajSOVnZI2poJqVGD3nJ+B9sFGdlHNnQKophE3lHfnIH0pw2ubrCTjZCgIj+Q==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ dev: true
+
+ /@opentelemetry/propagator-jaeger/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-DelFGkCdaxA1C/QA0Xilszfr0t4YbGd3DjxiCDPh34lfnFr+VkkrjV9S8ZTJvAzfdKERXhfOxIKBoGPJwoSz7Q==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ dev: true
+
+ /@opentelemetry/resources/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/semantic-conventions': 1.27.0
+ dev: true
+
+ /@opentelemetry/sdk-logs/0.53.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-dhSisnEgIj/vJZXZV6f6KcTnyLDx/VuQ6l3ejuZpMpPlh9S1qMHiZU9NMmOkVkwwHkMy3G6mEBwdP23vUZVr4g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.4.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.53.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/resources': 1.26.0_@opentelemetry+api@1.9.0
+ dev: true
+
+ /@opentelemetry/sdk-metrics/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/resources': 1.26.0_@opentelemetry+api@1.9.0
+ dev: true
+
+ /@opentelemetry/sdk-trace-base/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/resources': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/semantic-conventions': 1.27.0
+ dev: true
+
+ /@opentelemetry/sdk-trace-node/1.26.0_@opentelemetry+api@1.9.0:
+ resolution: {integrity: sha512-Fj5IVKrj0yeUwlewCRwzOVcr5avTuNnMHWf7GPc1t6WaT78J6CJyF3saZ/0RkZfdeNO8IcBl/bNcWMVZBMRW8Q==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/context-async-hooks': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/core': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/propagator-b3': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/propagator-jaeger': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/sdk-trace-base': 1.26.0_@opentelemetry+api@1.9.0
+ semver: 7.6.3
+ dev: true
+
+ /@opentelemetry/semantic-conventions/1.27.0:
+ resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==}
+ engines: {node: '>=14'}
+ dev: true
+
/@pkgjs/parseargs/0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -251,14 +600,6 @@ packages:
dev: true
optional: true
- /@playwright/test/1.45.3:
- resolution: {integrity: sha512-UKF4XsBfy+u3MFWEH44hva1Q8Da28G6RFtR2+5saw+jgAFQV5yYnB1fu68Mz7fO+5GJF3wgwAIs0UelU8TxFrA==}
- engines: {node: '>=18'}
- hasBin: true
- dependencies:
- playwright: 1.45.3
- dev: true
-
/@postman/form-data/3.1.1:
resolution: {integrity: sha512-vjh8Q2a8S6UCm/KKs31XFJqEEgmbjBmpPNVV2eVav6905wyFAwaUOBGA1NPBI4ERH9MMZc6w0umFgM6WbEPMdg==}
engines: {node: '>= 6'}
@@ -284,72 +625,151 @@ packages:
safe-buffer: 5.2.1
dev: true
- /@redocly/ajv/8.11.0:
- resolution: {integrity: sha512-9GWx27t7xWhDIR02PA18nzBdLcKQRgc46xNQvjFkrYk4UOmvKhJ/dawwiX0cCOeetN5LcaaiqQbVOWYK62SGHw==}
+ /@protobufjs/aspromise/1.1.2:
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+ dev: true
+
+ /@protobufjs/base64/1.1.2:
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+ dev: true
+
+ /@protobufjs/codegen/2.0.4:
+ resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+ dev: true
+
+ /@protobufjs/eventemitter/1.1.0:
+ resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+ dev: true
+
+ /@protobufjs/fetch/1.1.0:
+ resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/inquire': 1.1.0
+ dev: true
+
+ /@protobufjs/float/1.0.2:
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+ dev: true
+
+ /@protobufjs/inquire/1.1.0:
+ resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+ dev: true
+
+ /@protobufjs/path/1.1.2:
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+ dev: true
+
+ /@protobufjs/pool/1.1.0:
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+ dev: true
+
+ /@protobufjs/utf8/1.1.0:
+ resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+ dev: true
+
+ /@redocly/ajv/8.11.2:
+ resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==}
dependencies:
fast-deep-equal: 3.1.3
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
- uri-js: 4.4.1
+ uri-js-replace: 1.0.1
dev: true
- /@redocly/cli/1.18.1:
- resolution: {integrity: sha512-+bRKj46R9wvTzMdnoYfMueJ9/ek0NprEsQNowV7XcHgOXifeFFikRtBFcpkwqCNxaQ/nWAJn4LHZaFcssbcHow==}
- engines: {node: '>=14.19.0', npm: '>=7.0.0'}
+ /@redocly/cli/1.34.3_ajv@6.12.6:
+ resolution: {integrity: sha512-GJNBTMfm5wTCtH6K+RtPQZuGbqflMclXqAZ5My12tfux6xFDMW1l0MNd5RMpnIS1aeFcDX++P1gnnROWlesj4w==}
+ engines: {node: '>=18.17.0', npm: '>=9.5.0'}
hasBin: true
dependencies:
- '@redocly/openapi-core': 1.18.1
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/exporter-trace-otlp-http': 0.53.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/resources': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/sdk-trace-node': 1.26.0_@opentelemetry+api@1.9.0
+ '@opentelemetry/semantic-conventions': 1.27.0
+ '@redocly/config': 0.22.2
+ '@redocly/openapi-core': 1.34.3
+ '@redocly/respect-core': 1.34.3_ajv@6.12.6
abort-controller: 3.0.0
chokidar: 3.6.0
colorette: 1.4.0
core-js: 3.37.1
+ dotenv: 16.5.0
form-data: 4.0.0
get-port-please: 3.1.2
glob: 7.2.3
handlebars: 4.7.8
mobx: 6.13.1
- node-fetch: 2.7.0
pluralize: 8.0.0
react: 18.3.1
react-dom: 18.3.1_react@18.3.1
- redoc: 2.1.5_mzjea7mep7mcjf3n4cxnj6lfiu
+ redoc: 2.5.0_mzjea7mep7mcjf3n4cxnj6lfiu
semver: 7.6.3
simple-websocket: 9.1.0
styled-components: 6.1.12_nnrd3gsncyragczmpvfhocinkq
yargs: 17.0.1
transitivePeerDependencies:
+ - ajv
- bufferutil
- encoding
- - enzyme
- react-native
- supports-color
- utf-8-validate
dev: true
- /@redocly/config/0.7.0:
- resolution: {integrity: sha512-6GKxTo/9df0654Mtivvr4lQnMOp+pRj9neVywmI5+BwfZLTtkJnj2qB3D6d8FHTr4apsNOf6zTa5FojX0Evh4g==}
+ /@redocly/config/0.22.2:
+ resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==}
dev: true
- /@redocly/openapi-core/1.18.1:
- resolution: {integrity: sha512-y2ZR3aaVF80XRVoFP0Dp2z5DeCOilPTuS7V4HnHIYZdBTfsqzjkO169h5JqAaifnaLsLBhe3YArdgLb7W7wW6Q==}
- engines: {node: '>=14.19.0', npm: '>=7.0.0'}
+ /@redocly/openapi-core/1.34.3:
+ resolution: {integrity: sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==}
+ engines: {node: '>=18.17.0', npm: '>=9.5.0'}
dependencies:
- '@redocly/ajv': 8.11.0
- '@redocly/config': 0.7.0
+ '@redocly/ajv': 8.11.2
+ '@redocly/config': 0.22.2
colorette: 1.4.0
https-proxy-agent: 7.0.5
js-levenshtein: 1.1.6
js-yaml: 4.1.0
- lodash.isequal: 4.5.0
minimatch: 5.1.6
- node-fetch: 2.7.0
pluralize: 8.0.0
yaml-ast-parser: 0.0.43
transitivePeerDependencies:
- - encoding
- supports-color
dev: true
+ /@redocly/respect-core/1.34.3_ajv@6.12.6:
+ resolution: {integrity: sha512-vo/gu7dRGwTVsRueVSjVk04jOQuL0w22RBJRdRUWkfyse791tYXgMCOx35ijKekL83Q/7Okxf/YX6UY1v5CAug==}
+ engines: {node: '>=18.17.0', npm: '>=9.5.0'}
+ dependencies:
+ '@faker-js/faker': 7.6.0
+ '@redocly/ajv': 8.11.2
+ '@redocly/openapi-core': 1.34.3
+ better-ajv-errors: 1.2.0_ajv@6.12.6
+ colorette: 2.0.20
+ concat-stream: 2.0.0
+ cookie: 0.7.2
+ dotenv: 16.4.5
+ form-data: 4.0.0
+ jest-diff: 29.7.0
+ jest-matcher-utils: 29.7.0
+ js-yaml: 4.1.0
+ json-pointer: 0.6.2
+ jsonpath-plus: 10.3.0
+ open: 10.1.2
+ openapi-sampler: 1.6.1
+ outdent: 0.8.0
+ set-cookie-parser: 2.7.1
+ undici: 6.21.3
+ transitivePeerDependencies:
+ - ajv
+ - supports-color
+ dev: true
+
+ /@sinclair/typebox/0.27.8:
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+ dev: true
+
/@sinonjs/commons/2.0.0:
resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==}
dependencies:
@@ -398,187 +818,15 @@ packages:
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
dev: true
- /@types/semver/7.5.8:
- resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
- dev: true
-
/@types/stylis/4.2.5:
resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==}
dev: true
- /@typescript-eslint/eslint-plugin/5.62.0_gdzsajg5b2i45zm6j25ky43zii:
- resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- '@typescript-eslint/parser': ^5.0.0
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@eslint-community/regexpp': 4.11.0
- '@typescript-eslint/parser': 7.17.0_qusgslmwnowdaqieuropes6b5q
- '@typescript-eslint/scope-manager': 5.62.0
- '@typescript-eslint/type-utils': 5.62.0_qusgslmwnowdaqieuropes6b5q
- '@typescript-eslint/utils': 5.62.0_qusgslmwnowdaqieuropes6b5q
- debug: 4.3.5
- eslint: 8.57.0
- graphemer: 1.4.0
- ignore: 5.3.1
- natural-compare-lite: 1.4.0
- semver: 7.6.3
- tsutils: 3.21.0_typescript@5.5.4
- typescript: 5.5.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/parser/7.17.0_qusgslmwnowdaqieuropes6b5q:
- resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==}
- engines: {node: ^18.18.0 || >=20.0.0}
- peerDependencies:
- eslint: ^8.56.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/scope-manager': 7.17.0
- '@typescript-eslint/types': 7.17.0
- '@typescript-eslint/typescript-estree': 7.17.0_typescript@5.5.4
- '@typescript-eslint/visitor-keys': 7.17.0
- debug: 4.3.5
- eslint: 8.57.0
- typescript: 5.5.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/scope-manager/5.62.0:
- resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.62.0
- '@typescript-eslint/visitor-keys': 5.62.0
- dev: true
-
- /@typescript-eslint/scope-manager/7.17.0:
- resolution: {integrity: sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==}
- engines: {node: ^18.18.0 || >=20.0.0}
- dependencies:
- '@typescript-eslint/types': 7.17.0
- '@typescript-eslint/visitor-keys': 7.17.0
- dev: true
-
- /@typescript-eslint/type-utils/5.62.0_qusgslmwnowdaqieuropes6b5q:
- resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: '*'
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.5.4
- '@typescript-eslint/utils': 5.62.0_qusgslmwnowdaqieuropes6b5q
- debug: 4.3.5
- eslint: 8.57.0
- tsutils: 3.21.0_typescript@5.5.4
- typescript: 5.5.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/types/5.62.0:
- resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
-
- /@typescript-eslint/types/7.17.0:
- resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==}
- engines: {node: ^18.18.0 || >=20.0.0}
- dev: true
-
- /@typescript-eslint/typescript-estree/5.62.0_typescript@5.5.4:
- resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/types': 5.62.0
- '@typescript-eslint/visitor-keys': 5.62.0
- debug: 4.3.5
- globby: 11.1.0
- is-glob: 4.0.3
- semver: 7.6.3
- tsutils: 3.21.0_typescript@5.5.4
- typescript: 5.5.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/typescript-estree/7.17.0_typescript@5.5.4:
- resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==}
- engines: {node: ^18.18.0 || >=20.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/types': 7.17.0
- '@typescript-eslint/visitor-keys': 7.17.0
- debug: 4.3.5
- globby: 11.1.0
- is-glob: 4.0.3
- minimatch: 9.0.5
- semver: 7.6.3
- ts-api-utils: 1.3.0_typescript@5.5.4
- typescript: 5.5.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/utils/5.62.0_qusgslmwnowdaqieuropes6b5q:
- resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- dependencies:
- '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.0
- '@types/json-schema': 7.0.15
- '@types/semver': 7.5.8
- '@typescript-eslint/scope-manager': 5.62.0
- '@typescript-eslint/types': 5.62.0
- '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.5.4
- eslint: 8.57.0
- eslint-scope: 5.1.1
- semver: 7.6.3
- transitivePeerDependencies:
- - supports-color
- - typescript
- dev: true
-
- /@typescript-eslint/visitor-keys/5.62.0:
- resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.62.0
- eslint-visitor-keys: 3.4.3
- dev: true
-
- /@typescript-eslint/visitor-keys/7.17.0:
- resolution: {integrity: sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==}
- engines: {node: ^18.18.0 || >=20.0.0}
- dependencies:
- '@typescript-eslint/types': 7.17.0
- eslint-visitor-keys: 3.4.3
+ /@types/trusted-types/2.0.7:
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+ requiresBuild: true
dev: true
+ optional: true
/@ungap/structured-clone/1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
@@ -625,7 +873,6 @@ packages:
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- dev: true
/ansi-regex/5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
@@ -651,6 +898,11 @@ packages:
color-convert: 2.0.1
dev: true
+ /ansi-styles/5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+ dev: true
+
/ansi-styles/6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
@@ -714,28 +966,11 @@ packages:
array-uniq: 1.0.3
dev: true
- /array-union/2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
- dev: true
-
/array-uniq/1.0.3:
resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==}
engines: {node: '>=0.10.0'}
dev: true
- /array.prototype.findlast/1.2.5:
- resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- es-errors: 1.3.0
- es-object-atoms: 1.0.0
- es-shim-unscopables: 1.0.2
- dev: true
-
/array.prototype.findlastindex/1.2.5:
resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
engines: {node: '>= 0.4'}
@@ -768,17 +1003,6 @@ packages:
es-shim-unscopables: 1.0.2
dev: true
- /array.prototype.tosorted/1.1.4:
- resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- es-errors: 1.3.0
- es-shim-unscopables: 1.0.2
- dev: true
-
/arraybuffer.prototype.slice/1.0.3:
resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
engines: {node: '>= 0.4'}
@@ -870,6 +1094,20 @@ packages:
tweetnacl: 0.14.5
dev: true
+ /better-ajv-errors/1.2.0_ajv@6.12.6:
+ resolution: {integrity: sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==}
+ engines: {node: '>= 12.13.0'}
+ peerDependencies:
+ ajv: 4.11.8 - 8
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@humanwhocodes/momoa': 2.0.4
+ ajv: 6.12.6
+ chalk: 4.1.2
+ jsonpointer: 5.0.1
+ leven: 3.1.0
+ dev: true
+
/binary-extensions/2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
@@ -905,11 +1143,33 @@ packages:
base64-js: 1.5.1
dev: true
+ /browserslist/4.24.5:
+ resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001718
+ electron-to-chromium: 1.5.155
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.3_browserslist@4.24.5
+ dev: true
+
+ /buffer-from/1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ dev: true
+
/builtin-modules/3.3.0:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
dev: true
+ /bundle-name/4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+ dependencies:
+ run-applescript: 7.0.0
+ dev: true
+
/call-bind/1.0.7:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'}
@@ -934,6 +1194,10 @@ packages:
resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
dev: true
+ /caniuse-lite/1.0.30001718:
+ resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
+ dev: true
+
/caseless/0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
dev: true
@@ -1049,6 +1313,10 @@ packages:
resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==}
dev: true
+ /colorette/2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ dev: true
+
/colors/1.4.0:
resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
engines: {node: '>=0.1.90'}
@@ -1075,10 +1343,29 @@ packages:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
+ /concat-stream/2.0.0:
+ resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
+ engines: {'0': node >= 6.0}
+ dependencies:
+ buffer-from: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ typedarray: 0.0.6
+ dev: true
+
/confusing-browser-globals/1.0.11:
resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
dev: true
+ /convert-source-map/2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ dev: true
+
+ /cookie/0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/core-js/1.2.7:
resolution: {integrity: sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==}
deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
@@ -1232,6 +1519,19 @@ packages:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true
+ /default-browser-id/5.0.0:
+ resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /default-browser/5.2.1:
+ resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+ engines: {node: '>=18'}
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.0
+ dev: true
+
/define-data-property/1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -1241,6 +1541,11 @@ packages:
gopd: 1.0.1
dev: true
+ /define-lazy-prop/3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+ dev: true
+
/define-properties/1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
@@ -1269,6 +1574,11 @@ packages:
wrappy: 1.0.2
dev: true
+ /diff-sequences/29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dev: true
+
/diff/5.2.0:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
@@ -1281,13 +1591,6 @@ packages:
path-type: 3.0.0
dev: true
- /dir-glob/3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
- dependencies:
- path-type: 4.0.0
- dev: true
-
/doctrine/2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
@@ -1321,8 +1624,10 @@ packages:
domelementtype: 2.3.0
dev: true
- /dompurify/3.1.6:
- resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==}
+ /dompurify/3.2.6:
+ resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==}
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
dev: true
/domutils/2.8.0:
@@ -1333,6 +1638,16 @@ packages:
domhandler: 4.3.1
dev: true
+ /dotenv/16.4.5:
+ resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /dotenv/16.5.0:
+ resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
+ engines: {node: '>=12'}
+ dev: true
+
/eastasianwidth/0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
@@ -1344,6 +1659,10 @@ packages:
safer-buffer: 2.1.2
dev: true
+ /electron-to-chromium/1.5.155:
+ resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==}
+ dev: true
+
/emoji-regex/8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
@@ -1352,14 +1671,6 @@ packages:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
dev: true
- /enhanced-resolve/5.17.1:
- resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
- engines: {node: '>=10.13.0'}
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.2.1
- dev: true
-
/entities/2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
dev: true
@@ -1369,13 +1680,6 @@ packages:
engines: {node: '>=0.12'}
dev: true
- /enzyme-shallow-equal/1.0.7:
- resolution: {integrity: sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==}
- dependencies:
- hasown: 2.0.2
- object-is: 1.1.6
- dev: true
-
/error-ex/1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
@@ -1520,6 +1824,11 @@ packages:
engines: {node: '>=6'}
dev: true
+ /escalade/3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+ dev: true
+
/escape-string-regexp/1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
@@ -1530,17 +1839,17 @@ packages:
engines: {node: '>=10'}
dev: true
- /eslint-compat-utils/0.5.1_eslint@8.57.0:
+ /eslint-compat-utils/0.5.1_eslint@8.57.1:
resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
engines: {node: '>=12'}
peerDependencies:
eslint: '>=6.0.0'
dependencies:
- eslint: 8.57.0
+ eslint: 8.57.1
semver: 7.6.3
dev: true
- /eslint-config-airbnb-base/15.0.0_jrbq5spb6ym3vlo5mnlvtmgpyy:
+ /eslint-config-airbnb-base/15.0.0_unjw4kdf4fotpociz7fwijpbcy:
resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==}
engines: {node: ^10.12.0 || >=12.0.0}
peerDependencies:
@@ -1548,115 +1857,43 @@ packages:
eslint-plugin-import: ^2.25.2
dependencies:
confusing-browser-globals: 1.0.11
- eslint: 8.57.0
- eslint-plugin-import: 2.29.1_nneewum65j2qxmblkey6rl7qby
+ eslint: 8.57.1
+ eslint-plugin-import: 2.29.1_eslint@8.57.1
object.assign: 4.1.5
object.entries: 1.1.8
semver: 6.3.1
dev: true
- /eslint-config-airbnb/19.0.4_rkj5pdb7oeft273slftvhkzequ:
- resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==}
- engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^7.32.0 || ^8.2.0
- eslint-plugin-import: ^2.25.3
- eslint-plugin-jsx-a11y: ^6.5.1
- eslint-plugin-react: ^7.28.0
- eslint-plugin-react-hooks: ^4.3.0
- dependencies:
- eslint: 8.57.0
- eslint-config-airbnb-base: 15.0.0_jrbq5spb6ym3vlo5mnlvtmgpyy
- eslint-plugin-import: 2.29.1_nneewum65j2qxmblkey6rl7qby
- eslint-plugin-jsx-a11y: 6.9.0_eslint@8.57.0
- eslint-plugin-react: 7.35.0_eslint@8.57.0
- eslint-plugin-react-hooks: 4.6.2_eslint@8.57.0
- object.assign: 4.1.5
- object.entries: 1.1.8
- dev: true
-
- /eslint-config-prettier/8.10.0_eslint@8.57.0:
+ /eslint-config-prettier/8.10.0_eslint@8.57.1:
resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.57.0
+ eslint: 8.57.1
dev: true
- /eslint-formatter-gitlab/3.0.0_eslint@8.57.0:
+ /eslint-formatter-gitlab/3.0.0_eslint@8.57.1:
resolution: {integrity: sha512-fqZ2G45rgbrHcFunqmwuG5Qo6QAOlxEsR+KdOP08T1Xegw5tJhHh9KFWMSct8q6x8xCMUyYGHypZd342bLUttA==}
peerDependencies:
- eslint: ^5 || ^6 || ^7 || ^8
- dependencies:
- chalk: 4.1.2
- eslint: 8.57.0
- js-yaml: 4.1.0
- dev: true
-
- /eslint-import-resolver-node/0.3.9:
- resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- dependencies:
- debug: 3.2.7
- is-core-module: 2.15.0
- resolve: 1.22.8
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /eslint-import-resolver-typescript/3.6.1_v5rw2ov7t7riomm6bxikk4ok4a:
- resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- eslint: '*'
- eslint-plugin-import: '*'
- dependencies:
- debug: 4.3.5
- enhanced-resolve: 5.17.1
- eslint: 8.57.0
- eslint-module-utils: 2.8.1_nneewum65j2qxmblkey6rl7qby
- eslint-plugin-import: 2.29.1_nneewum65j2qxmblkey6rl7qby
- fast-glob: 3.3.2
- get-tsconfig: 4.7.6
- is-core-module: 2.15.0
- is-glob: 4.0.3
- transitivePeerDependencies:
- - '@typescript-eslint/parser'
- - eslint-import-resolver-node
- - eslint-import-resolver-webpack
- - supports-color
+ eslint: ^5 || ^6 || ^7 || ^8
+ dependencies:
+ chalk: 4.1.2
+ eslint: 8.57.1
+ js-yaml: 4.1.0
dev: true
- /eslint-module-utils/2.8.1_nneewum65j2qxmblkey6rl7qby:
- resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
- engines: {node: '>=4'}
- peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: '*'
- eslint-import-resolver-node: '*'
- eslint-import-resolver-typescript: '*'
- eslint-import-resolver-webpack: '*'
- peerDependenciesMeta:
- '@typescript-eslint/parser':
- optional: true
- eslint:
- optional: true
- eslint-import-resolver-node:
- optional: true
- eslint-import-resolver-typescript:
- optional: true
- eslint-import-resolver-webpack:
- optional: true
+ /eslint-import-resolver-node/0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
dependencies:
- '@typescript-eslint/parser': 7.17.0_qusgslmwnowdaqieuropes6b5q
debug: 3.2.7
- eslint: 8.57.0
- eslint-import-resolver-typescript: 3.6.1_v5rw2ov7t7riomm6bxikk4ok4a
+ is-core-module: 2.15.0
+ resolve: 1.22.8
transitivePeerDependencies:
- supports-color
dev: true
- /eslint-module-utils/2.8.1_pqk7zv6fiitje2mogc4etjt6ku:
+ /eslint-module-utils/2.8.1_rfhnpyqadzbw26eiqc3hoihdgi:
resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
engines: {node: '>=4'}
peerDependencies:
@@ -1677,11 +1914,9 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 7.17.0_qusgslmwnowdaqieuropes6b5q
debug: 3.2.7
- eslint: 8.57.0
+ eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.1_v5rw2ov7t7riomm6bxikk4ok4a
transitivePeerDependencies:
- supports-color
dev: true
@@ -1692,7 +1927,7 @@ packages:
htmlparser2: 7.2.0
dev: true
- /eslint-plugin-import/2.29.1_nneewum65j2qxmblkey6rl7qby:
+ /eslint-plugin-import/2.29.1_eslint@8.57.1:
resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
engines: {node: '>=4'}
peerDependencies:
@@ -1702,16 +1937,15 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 7.17.0_qusgslmwnowdaqieuropes6b5q
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2
debug: 3.2.7
doctrine: 2.1.0
- eslint: 8.57.0
+ eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.1_pqk7zv6fiitje2mogc4etjt6ku
+ eslint-module-utils: 2.8.1_rfhnpyqadzbw26eiqc3hoihdgi
hasown: 2.0.2
is-core-module: 2.15.0
is-glob: 4.0.3
@@ -1727,7 +1961,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-jsx-a11y/6.9.0_eslint@8.57.0:
+ /eslint-plugin-jsx-a11y/6.9.0_eslint@8.57.1:
resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -1742,7 +1976,7 @@ packages:
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
es-iterator-helpers: 1.0.19
- eslint: 8.57.0
+ eslint: 8.57.1
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -1752,68 +1986,32 @@ packages:
string.prototype.includes: 2.0.0
dev: true
- /eslint-plugin-react-hooks/4.6.2_eslint@8.57.0:
- resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
- engines: {node: '>=10'}
- peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
- dependencies:
- eslint: 8.57.0
- dev: true
-
- /eslint-plugin-react/7.35.0_eslint@8.57.0:
- resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==}
- engines: {node: '>=4'}
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
- dependencies:
- array-includes: 3.1.8
- array.prototype.findlast: 1.2.5
- array.prototype.flatmap: 1.3.2
- array.prototype.tosorted: 1.1.4
- doctrine: 2.1.0
- es-iterator-helpers: 1.0.19
- eslint: 8.57.0
- estraverse: 5.3.0
- hasown: 2.0.2
- jsx-ast-utils: 3.3.5
- minimatch: 3.1.2
- object.entries: 1.1.8
- object.fromentries: 2.0.8
- object.values: 1.2.0
- prop-types: 15.8.1
- resolve: 2.0.0-next.5
- semver: 6.3.1
- string.prototype.matchall: 4.0.11
- string.prototype.repeat: 1.0.0
- dev: true
-
/eslint-plugin-security/1.7.1:
resolution: {integrity: sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==}
dependencies:
safe-regex: 2.1.1
dev: true
- /eslint-plugin-sonarjs/0.16.0_eslint@8.57.0:
+ /eslint-plugin-sonarjs/0.16.0_eslint@8.57.1:
resolution: {integrity: sha512-al8ojAzcQW8Eu0tWn841ldhPpPcjrJ59TzzTfAVWR45bWvdAASCmrGl8vK0MWHyKVDdC0i17IGbtQQ1KgxLlVA==}
engines: {node: '>=14'}
peerDependencies:
eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- eslint: 8.57.0
+ eslint: 8.57.1
dev: true
- /eslint-plugin-unicorn/45.0.2_eslint@8.57.0:
+ /eslint-plugin-unicorn/45.0.2_eslint@8.57.1:
resolution: {integrity: sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==}
engines: {node: '>=14.18'}
peerDependencies:
eslint: '>=8.28.0'
dependencies:
'@babel/helper-validator-identifier': 7.24.7
- '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.0
+ '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.1
ci-info: 3.9.0
clean-regexp: 1.0.0
- eslint: 8.57.0
+ eslint: 8.57.1
esquery: 1.6.0
indent-string: 4.0.0
is-builtin-module: 3.2.1
@@ -1835,15 +2033,15 @@ packages:
'@joshuajaco/get-monorepo-packages': 1.2.1
dev: true
- /eslint-plugin-yml/1.14.0_eslint@8.57.0:
+ /eslint-plugin-yml/1.14.0_eslint@8.57.1:
resolution: {integrity: sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
dependencies:
debug: 4.3.5
- eslint: 8.57.0
- eslint-compat-utils: 0.5.1_eslint@8.57.0
+ eslint: 8.57.1
+ eslint-compat-utils: 0.5.1_eslint@8.57.1
lodash: 4.17.21
natural-compare: 1.4.0
yaml-eslint-parser: 1.2.3
@@ -1867,21 +2065,27 @@ packages:
estraverse: 5.3.0
dev: true
+ /eslint-visitor-keys/2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+ dev: true
+
/eslint-visitor-keys/3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /eslint/8.57.0:
- resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+ /eslint/8.57.1:
+ resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.0
+ '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.1
'@eslint-community/regexpp': 4.11.0
'@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.0
- '@humanwhocodes/config-array': 0.11.14
+ '@eslint/js': 8.57.1
+ '@humanwhocodes/config-array': 0.13.0
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
'@ungap/structured-clone': 1.2.0
@@ -1977,22 +2181,9 @@ packages:
/fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- dev: true
-
- /fast-glob/3.3.2:
- resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
- engines: {node: '>=8.6.0'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.7
- dev: true
/fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- dev: true
/fast-levenshtein/2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
@@ -2002,6 +2193,13 @@ packages:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
dev: true
+ /fast-xml-parser/4.5.3:
+ resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==}
+ hasBin: true
+ dependencies:
+ strnum: 1.1.2
+ dev: true
+
/fastq/1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
dependencies:
@@ -2107,13 +2305,6 @@ packages:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
- /fsevents/2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- optional: true
-
/fsevents/2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -2140,6 +2331,11 @@ packages:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: true
+ /gensync/1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
/get-caller-file/2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -2174,12 +2370,6 @@ packages:
get-intrinsic: 1.2.4
dev: true
- /get-tsconfig/4.7.6:
- resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
- dependencies:
- resolve-pkg-maps: 1.0.0
- dev: true
-
/getpass/0.1.7:
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
dependencies:
@@ -2232,6 +2422,11 @@ packages:
path-is-absolute: 1.0.1
dev: true
+ /globals/11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+ dev: true
+
/globals/13.24.0:
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
engines: {node: '>=8'}
@@ -2247,18 +2442,6 @@ packages:
gopd: 1.0.1
dev: true
- /globby/11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
- dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.2
- ignore: 5.3.1
- merge2: 1.4.1
- slash: 3.0.0
- dev: true
-
/globby/7.1.1:
resolution: {integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==}
engines: {node: '>=4'}
@@ -2295,7 +2478,7 @@ packages:
source-map: 0.6.1
wordwrap: 1.0.0
optionalDependencies:
- uglify-js: 3.19.0
+ uglify-js: 3.19.3
dev: true
/har-schema/2.0.0:
@@ -2349,11 +2532,6 @@ packages:
has-symbols: 1.0.3
dev: true
- /has/1.0.4:
- resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==}
- engines: {node: '>= 0.4.0'}
- dev: true
-
/hasown/2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -2570,6 +2748,12 @@ packages:
has-tostringtag: 1.0.2
dev: true
+ /is-docker/3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ dev: true
+
/is-extglob/2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -2600,6 +2784,14 @@ packages:
is-extglob: 2.1.1
dev: true
+ /is-inside-container/1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+ dependencies:
+ is-docker: 3.0.0
+ dev: true
+
/is-map/2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -2691,6 +2883,13 @@ packages:
get-intrinsic: 1.2.4
dev: true
+ /is-wsl/3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+ dependencies:
+ is-inside-container: 1.0.0
+ dev: true
+
/isarray/2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
dev: true
@@ -2722,6 +2921,31 @@ packages:
'@pkgjs/parseargs': 0.11.0
dev: true
+ /jest-diff/29.7.0:
+ resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dependencies:
+ chalk: 4.1.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+ dev: true
+
+ /jest-get-type/29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dev: true
+
+ /jest-matcher-utils/29.7.0:
+ resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dependencies:
+ chalk: 4.1.2
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+ dev: true
+
/jose/4.14.4:
resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==}
dev: true
@@ -2754,6 +2978,11 @@ packages:
resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
dev: true
+ /jsep/1.4.0:
+ resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==}
+ engines: {node: '>= 10.16.0'}
+ dev: true
+
/jsesc/0.5.0:
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
hasBin: true
@@ -2785,7 +3014,6 @@ packages:
/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- dev: true
/json-schema-traverse/1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
@@ -2810,10 +3038,31 @@ packages:
minimist: 1.2.8
dev: true
+ /json5/2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: true
+
/jsonc-parser/3.3.1:
resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
dev: false
+ /jsonpath-plus/10.3.0:
+ resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+ dependencies:
+ '@jsep-plugin/assignment': 1.3.0_jsep@1.4.0
+ '@jsep-plugin/regex': 1.0.4_jsep@1.4.0
+ jsep: 1.4.0
+ dev: true
+
+ /jsonpointer/5.0.1:
+ resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/jsprim/2.0.2:
resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==}
engines: {'0': node >=0.6.0}
@@ -2866,6 +3115,11 @@ packages:
language-subtag-registry: 0.3.23
dev: true
+ /leven/3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+ dev: true
+
/levn/0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -2929,10 +3183,6 @@ packages:
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
dev: true
- /lodash.isequal/4.5.0:
- resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
- dev: true
-
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
@@ -2941,6 +3191,10 @@ packages:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
dev: true
+ /long/5.3.2:
+ resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
+ dev: true
+
/loose-envify/1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -2953,6 +3207,12 @@ packages:
engines: {node: 20 || >=22}
dev: true
+ /lru-cache/5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ dependencies:
+ yallist: 3.1.1
+ dev: true
+
/lru-cache/6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
@@ -2974,19 +3234,6 @@ packages:
hasBin: true
dev: true
- /merge2/1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
- dev: true
-
- /micromatch/4.0.7:
- resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
- engines: {node: '>=8.6'}
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
- dev: true
-
/mime-db/1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@@ -3034,13 +3281,6 @@ packages:
brace-expansion: 2.0.1
dev: true
- /minimatch/9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
- dependencies:
- brace-expansion: 2.0.1
- dev: true
-
/minimist/1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
@@ -3130,10 +3370,6 @@ packages:
hasBin: true
dev: true
- /natural-compare-lite/1.4.0:
- resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
- dev: true
-
/natural-compare/1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true
@@ -3214,6 +3450,10 @@ packages:
es6-promise: 3.3.1
dev: true
+ /node-releases/2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+ dev: true
+
/nopt/4.0.3:
resolution: {integrity: sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==}
hasBin: true
@@ -3367,6 +3607,16 @@ packages:
wrappy: 1.0.2
dev: true
+ /open/10.1.2:
+ resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==}
+ engines: {node: '>=18'}
+ dependencies:
+ default-browser: 5.2.1
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 3.1.0
+ dev: true
+
/openapi-sampler/1.5.1:
resolution: {integrity: sha512-tIWIrZUKNAsbqf3bd9U1oH6JEXo8LNYuDlXw26By67EygpjT+ArFnsxxyTMjFWRfbqo5ozkvgSQDK69Gd8CddA==}
dependencies:
@@ -3374,6 +3624,14 @@ packages:
json-pointer: 0.6.2
dev: true
+ /openapi-sampler/1.6.1:
+ resolution: {integrity: sha512-s1cIatOqrrhSj2tmJ4abFYZQK6l5v+V4toO5q1Pa0DyN8mtyqy2I+Qrj5W9vOELEtybIMQs/TBZGVO/DtTFK8w==}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ fast-xml-parser: 4.5.3
+ json-pointer: 0.6.2
+ dev: true
+
/optionator/0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -3404,6 +3662,10 @@ packages:
os-tmpdir: 1.0.2
dev: true
+ /outdent/0.8.0:
+ resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==}
+ dev: true
+
/p-limit/2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
@@ -3460,7 +3722,7 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
dependencies:
- '@babel/code-frame': 7.24.7
+ '@babel/code-frame': 7.27.1
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -3513,11 +3775,6 @@ packages:
pify: 3.0.0
dev: true
- /path-type/4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
- dev: true
-
/perfect-scrollbar/1.5.5:
resolution: {integrity: sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==}
dev: true
@@ -3526,8 +3783,8 @@ packages:
resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
dev: true
- /picocolors/1.0.1:
- resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+ /picocolors/1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
dev: true
/picomatch/2.3.1:
@@ -3540,20 +3797,6 @@ packages:
engines: {node: '>=4'}
dev: true
- /playwright-core/1.45.3:
- resolution: {integrity: sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==}
- engines: {node: '>=18'}
- hasBin: true
-
- /playwright/1.45.3:
- resolution: {integrity: sha512-QhVaS+lpluxCaioejDZ95l4Y4jSFCsBvl2UZkpeXlzxmqS+aABr5c82YmfMHrL6x27nvrvykJAFpkzT2eWdJww==}
- engines: {node: '>=18'}
- hasBin: true
- dependencies:
- playwright-core: 1.45.3
- optionalDependencies:
- fsevents: 2.3.2
-
/pluralize/8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
@@ -3580,7 +3823,7 @@ packages:
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
- picocolors: 1.0.1
+ picocolors: 1.1.1
source-map-js: 1.2.0
dev: true
@@ -3688,6 +3931,15 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
+ /pretty-format/29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+ dev: true
+
/pretty-ms/7.0.1:
resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==}
engines: {node: '>=10'}
@@ -3708,6 +3960,25 @@ packages:
react-is: 16.13.1
dev: true
+ /protobufjs/7.4.0:
+ resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==}
+ engines: {node: '>=12.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/node': 20.14.12
+ long: 5.3.2
+ dev: true
+
/psl/1.9.0:
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
dev: true
@@ -3715,7 +3986,6 @@ packages:
/punycode/2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- dev: true
/qs/6.5.3:
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
@@ -3754,16 +4024,6 @@ packages:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
dev: true
- /react-shallow-renderer/16.15.0_react@18.3.1:
- resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==}
- peerDependencies:
- react: ^16.0.0 || ^17.0.0 || ^18.0.0
- dependencies:
- object-assign: 4.1.1
- react: 18.3.1
- react-is: 18.3.1
- dev: true
-
/react-tabs/6.0.2_react@18.3.1:
resolution: {integrity: sha512-aQXTKolnM28k3KguGDBSAbJvcowOQr23A+CUJdzJtOSDOtTwzEaJA+1U4KwhNL9+Obe+jFS7geuvA7ICQPXOnQ==}
peerDependencies:
@@ -3850,22 +4110,21 @@ packages:
picomatch: 2.3.1
dev: true
- /redoc/2.1.5_mzjea7mep7mcjf3n4cxnj6lfiu:
- resolution: {integrity: sha512-POSbVg+7WLf+/5/c6GWLxL7+9t2D+1WlZdLN0a6qaCQc+ih3XYzteRBkXEN5kjrYrRNjdspfxTZkDLN5WV3Tzg==}
+ /redoc/2.5.0_mzjea7mep7mcjf3n4cxnj6lfiu:
+ resolution: {integrity: sha512-NpYsOZ1PD9qFdjbLVBZJWptqE+4Y6TkUuvEOqPUmoH7AKOmPcE+hYjotLxQNTqVoWL4z0T2uxILmcc8JGDci+Q==}
engines: {node: '>=6.9', npm: '>=3.0.0'}
peerDependencies:
core-js: ^3.1.4
mobx: ^6.0.4
- react: ^16.8.4 || ^17.0.0 || ^18.0.0
- react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0
+ react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0
styled-components: ^4.1.1 || ^5.1.1 || ^6.0.5
dependencies:
- '@cfaester/enzyme-adapter-react-18': 0.8.0_nnrd3gsncyragczmpvfhocinkq
- '@redocly/openapi-core': 1.18.1
+ '@redocly/openapi-core': 1.34.3
classnames: 2.5.1
core-js: 3.37.1
decko: 1.2.0
- dompurify: 3.1.6
+ dompurify: 3.2.6
eventemitter3: 5.0.1
json-pointer: 0.6.2
lunr: 2.3.9
@@ -3889,7 +4148,6 @@ packages:
url-template: 2.0.8
transitivePeerDependencies:
- encoding
- - enzyme
- react-native
- supports-color
dev: true
@@ -3956,10 +4214,6 @@ packages:
engines: {node: '>=4'}
dev: true
- /resolve-pkg-maps/1.0.0:
- resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- dev: true
-
/resolve/1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
@@ -3969,15 +4223,6 @@ packages:
supports-preserve-symlinks-flag: 1.0.0
dev: true
- /resolve/2.0.0-next.5:
- resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
- hasBin: true
- dependencies:
- is-core-module: 2.15.0
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
- dev: true
-
/reusify/1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -3991,6 +4236,11 @@ packages:
glob: 7.2.3
dev: true
+ /run-applescript/7.0.0:
+ resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
+ engines: {node: '>=18'}
+ dev: true
+
/run-parallel/1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
@@ -4074,6 +4324,10 @@ packages:
uuid: 3.4.0
dev: true
+ /set-cookie-parser/2.7.1:
+ resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
+ dev: true
+
/set-function-length/1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -4195,11 +4449,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /slash/3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
- dev: true
-
/slide/1.1.6:
resolution: {integrity: sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==}
dev: true
@@ -4323,31 +4572,6 @@ packages:
es-abstract: 1.23.3
dev: true
- /string.prototype.matchall/4.0.11:
- resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- es-errors: 1.3.0
- es-object-atoms: 1.0.0
- get-intrinsic: 1.2.4
- gopd: 1.0.1
- has-symbols: 1.0.3
- internal-slot: 1.0.7
- regexp.prototype.flags: 1.5.2
- set-function-name: 2.0.2
- side-channel: 1.0.6
- dev: true
-
- /string.prototype.repeat/1.0.0:
- resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
- dependencies:
- define-properties: 1.2.1
- es-abstract: 1.23.3
- dev: true
-
/string.prototype.trim/1.2.9:
resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
engines: {node: '>= 0.4'}
@@ -4412,6 +4636,10 @@ packages:
engines: {node: '>=8'}
dev: true
+ /strnum/1.1.2:
+ resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==}
+ dev: true
+
/styled-components/6.1.12_nnrd3gsncyragczmpvfhocinkq:
resolution: {integrity: sha512-n/O4PzRPhbYI0k1vKKayfti3C/IGcPf+DqcrOB7O/ab9x4u/zjqraneT5N45+sIe87cxrCApXM8Bna7NYxwoTA==}
engines: {node: '>= 16'}
@@ -4474,11 +4702,6 @@ packages:
- encoding
dev: true
- /tapable/2.2.1:
- resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
- engines: {node: '>=6'}
- dev: true
-
/teleport-javascript/1.0.0:
resolution: {integrity: sha512-j1llvWVFyEn/6XIFDfX5LAU43DXe0GCt3NfXDwJ8XpRRMkS+i50SAkonAONBy+vxwPFBd50MFU8a2uj8R/ccLg==}
dev: true
@@ -4503,15 +4726,6 @@ packages:
engines: {node: '>=0.6'}
dev: true
- /ts-api-utils/1.3.0_typescript@5.5.4:
- resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
- engines: {node: '>=16'}
- peerDependencies:
- typescript: '>=4.2.0'
- dependencies:
- typescript: 5.5.4
- dev: true
-
/tsconfig-paths/3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
dependencies:
@@ -4521,24 +4735,10 @@ packages:
strip-bom: 3.0.0
dev: true
- /tslib/1.14.1:
- resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
- dev: true
-
/tslib/2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: true
- /tsutils/3.21.0_typescript@5.5.4:
- resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
- engines: {node: '>= 6'}
- peerDependencies:
- typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
- dependencies:
- tslib: 1.14.1
- typescript: 5.5.4
- dev: true
-
/tweetnacl/0.14.5:
resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
dev: true
@@ -4614,14 +4814,18 @@ packages:
possible-typed-array-names: 1.0.0
dev: true
+ /typedarray/0.0.6:
+ resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+ dev: true
+
/typescript/5.5.4:
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
engines: {node: '>=14.17'}
hasBin: true
dev: true
- /uglify-js/3.19.0:
- resolution: {integrity: sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==}
+ /uglify-js/3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
engines: {node: '>=0.8.0'}
hasBin: true
requiresBuild: true
@@ -4645,16 +4849,35 @@ packages:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
dev: true
+ /undici/6.21.3:
+ resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==}
+ engines: {node: '>=18.17'}
+ dev: true
+
/universalify/0.2.0:
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
engines: {node: '>= 4.0.0'}
dev: true
+ /update-browserslist-db/1.1.3_browserslist@4.24.5:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.24.5
+ escalade: 3.2.0
+ picocolors: 1.1.1
+ dev: true
+
+ /uri-js-replace/1.0.1:
+ resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==}
+ dev: true
+
/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
punycode: 2.3.1
- dev: true
/url-parse/1.5.10:
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
@@ -4839,6 +5062,10 @@ packages:
engines: {node: '>=10'}
dev: true
+ /yallist/3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ dev: true
+
/yallist/4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
diff --git a/sandbox/Dockerfile b/sandbox/Dockerfile
index 8ccce031d..c091d2c3f 100644
--- a/sandbox/Dockerfile
+++ b/sandbox/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20.15.0
+FROM node:22.16.0
COPY . /sandbox
diff --git a/sandbox/__test__/batch_send.spec.js b/sandbox/__test__/batch_send.spec.js
index d5a1c2941..4b9ca1c49 100644
--- a/sandbox/__test__/batch_send.spec.js
+++ b/sandbox/__test__/batch_send.spec.js
@@ -996,7 +996,7 @@ describe("/api/v1/send", () => {
recipient: {
nhsNumber: "1",
contactDetails: {
- sms: "11111111111",
+ sms: 1234,
},
},
},
@@ -1006,12 +1006,12 @@ describe("/api/v1/send", () => {
})
.expect(400, {
message:
- "Invalid recipient contact details. Field 'sms': Input failed format check",
+ "Invalid recipient contact details. Field 'sms': 'sms' is not a string",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/sms",
- message: "Input failed format check",
+ message: "'sms' is not a string",
title: "Invalid value",
statusCode: 400,
},
@@ -1020,7 +1020,7 @@ describe("/api/v1/send", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when invalid value for sms alternate contact detail is provided", (done) => {
+ it("returns a 200 when email alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/send")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1036,48 +1036,7 @@ describe("/api/v1/send", () => {
recipient: {
nhsNumber: "1",
contactDetails: {
- sms: {
- hello: 1,
- },
- },
- },
- },
- ],
- },
- },
- })
- .expect(400, {
- message: "Invalid recipient contact details. Field 'sms': Input is not a string",
- errors: [
- {
- code: 'CM_INVALID_VALUE',
- field: "/data/attributes/messages/0/recipient/contactDetails/sms",
- message: "Input is not a string",
- title: "Invalid value",
- statusCode: 400,
- },
- ],
- })
- .expect("Content-Type", /json/, done);
- });
-
- it("returns a 200 when sms alternate contact detail is provided", (done) => {
- request(server)
- .post("/api/v1/send")
- .set({ Authorization: "allowedContactDetailOverride" })
- .send({
- data: {
- type: "MessageBatch",
- attributes: {
- routingPlanId: "b838b13c-f98c-4def-93f0-515d4e4f4ee1",
- messageBatchReference: "request-id",
- messages: [
- {
- messageReference: "1",
- recipient: {
- nhsNumber: "1",
- contactDetails: {
- email: "hello",
+ email: "test@test.com",
},
},
},
@@ -1105,7 +1064,7 @@ describe("/api/v1/send", () => {
recipient: {
nhsNumber: "1",
contactDetails: {
- email: "invalidEmailAddress",
+ email: 1234,
},
},
},
@@ -1115,53 +1074,12 @@ describe("/api/v1/send", () => {
})
.expect(400, {
message:
- "Invalid recipient contact details. Field 'email': Input failed format check",
+ "Invalid recipient contact details. Field 'email': 'email' is not a string",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/email",
- message: "Input failed format check",
- title: "Invalid value",
- statusCode: 400,
- },
- ],
- })
- .expect("Content-Type", /json/, done);
- });
-
- it("returns a 400 when invalid value for email alternate contact detail is provided", (done) => {
- request(server)
- .post("/api/v1/send")
- .set({ Authorization: "allowedContactDetailOverride" })
- .send({
- data: {
- type: "MessageBatch",
- attributes: {
- routingPlanId: "b838b13c-f98c-4def-93f0-515d4e4f4ee1",
- messageBatchReference: "request-id",
- messages: [
- {
- messageReference: "1",
- recipient: {
- nhsNumber: "1",
- contactDetails: {
- email: {
- hello: 1,
- },
- },
- },
- },
- ],
- },
- },
- })
- .expect(400, {
- message: "Invalid recipient contact details. Field 'email': Input is not a string",
- errors: [
- {
- code: 'CM_INVALID_VALUE',
- field: "/data/attributes/messages/0/recipient/contactDetails/email",
- message: "Input is not a string",
+ message: "'email' is not a string",
title: "Invalid value",
statusCode: 400,
},
@@ -1308,13 +1226,13 @@ describe("/api/v1/send", () => {
})
.expect(400, {
message:
- "Invalid recipient contact details. Field 'address': 'lines' is missing",
+ "Invalid recipient contact details. Field 'address': 'lines' is not a string array",
errors: [
{
- code: 'CM_MISSING_VALUE',
+ code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/address",
- message: "`lines` is missing",
- title: "Missing value",
+ message: "'lines' is not a string array",
+ title: "Invalid value",
statusCode: 400,
},
],
@@ -1322,7 +1240,7 @@ describe("/api/v1/send", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when too few lines is provided in address alternate contact detail is provided", (done) => {
+ it("returns a 400 when too many lines is provided in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/send")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1339,7 +1257,7 @@ describe("/api/v1/send", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1"],
+ lines: ["1", "2", "3", "4", "5", "6"],
postcode: "hello",
},
},
@@ -1350,22 +1268,21 @@ describe("/api/v1/send", () => {
},
})
.expect(400, {
- message:
- "Invalid recipient contact details. Field 'address': Too few address lines were provided",
+ message: "Invalid recipient contact details. Field 'address': Too many address lines were provided",
errors: [
{
- code: 'CM_TOO_FEW_ITEMS',
+ code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/address",
- message: "Too few address lines were provided",
- title: "Too few items",
+ message: "Too many address lines were provided",
+ title: "Invalid value",
statusCode: 400,
- }
- ]
+ },
+ ],
})
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when too many lines is provided in address alternate contact detail is provided", (done) => {
+ it("returns a 400 when lines contains non-string value in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/send")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1382,7 +1299,7 @@ describe("/api/v1/send", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1", "2", "3", "4", "5", "6"],
+ lines: ["1", "2", 3, "4", "5"],
postcode: "hello",
},
},
@@ -1393,12 +1310,12 @@ describe("/api/v1/send", () => {
},
})
.expect(400, {
- message: "Invalid recipient contact details. Field 'address': Too many address lines were provided",
+ message: "Invalid recipient contact details. Field 'address': 'lines' is not a string array",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/address",
- message: "Too many address lines were provided",
+ message: "'lines' is not a string array",
title: "Invalid value",
statusCode: 400,
},
@@ -1407,7 +1324,7 @@ describe("/api/v1/send", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when lines contains non-string value in address alternate contact detail is provided", (done) => {
+ it("returns a 200 when no postcode is provided in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/send")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1424,8 +1341,7 @@ describe("/api/v1/send", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1", "2", 3, "4", "5"],
- postcode: "hello",
+ lines: ["1", "2"],
},
},
},
@@ -1434,22 +1350,11 @@ describe("/api/v1/send", () => {
},
},
})
- .expect(400, {
- message: "Invalid recipient contact details. Field 'address': Lines contain non-string or empty line",
- errors: [
- {
- code: 'CM_INVALID_VALUE',
- field: "/data/attributes/messages/0/recipient/contactDetails/address",
- message: "Lines contain non-string or empty line",
- title: "Invalid value",
- statusCode: 400,
- },
- ],
- })
+ .expect(200)
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when no postcode is provided in address alternate contact detail is provided", (done) => {
+ it("returns a 200 when no lines is provided in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/send")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1466,7 +1371,7 @@ describe("/api/v1/send", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1", "2"],
+ postcode: "hello",
},
},
},
@@ -1475,19 +1380,7 @@ describe("/api/v1/send", () => {
},
},
})
- .expect(400, {
- message:
- "Invalid recipient contact details. Field 'address': 'postcode' is missing",
- errors: [
- {
- code: 'CM_MISSING_VALUE',
- field: "/data/attributes/messages/0/recipient/contactDetails/address",
- message: "`postcode` is missing",
- title: "Missing value",
- statusCode: 400,
- },
- ],
- })
+ .expect(200)
.expect("Content-Type", /json/, done);
});
@@ -1780,51 +1673,6 @@ describe("/api/v1/send", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when no lastName is provided in name alternate contact detail is provided", (done) => {
- request(server)
- .post("/api/v1/send")
- .set({ Authorization: "allowedContactDetailOverride" })
- .send({
- data: {
- type: "MessageBatch",
- attributes: {
- routingPlanId: "b838b13c-f98c-4def-93f0-515d4e4f4ee1",
- messageBatchReference: "request-id",
- messages: [
- {
- messageReference: "1",
- recipient: {
- nhsNumber: "1",
- contactDetails: {
- name: {
- prefix: "Mr",
- firstName: "John",
- middleNames: "Little",
- suffix: "Jr"
- },
- },
- },
- },
- ],
- },
- },
- })
- .expect(400, {
- message:
- "Invalid recipient contact details. Field 'name': 'lastName' is missing",
- errors: [
- {
- code: 'CM_MISSING_VALUE',
- field: "/data/attributes/messages/0/recipient/contactDetails/name",
- message: "`lastName` is missing",
- title: "Missing value",
- statusCode: 400,
- },
- ],
- })
- .expect("Content-Type", /json/, done);
- });
-
it("returns a 400 when lastName contains non-string value in name alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/send")
@@ -1856,12 +1704,12 @@ describe("/api/v1/send", () => {
},
})
.expect(400, {
- message: "Invalid recipient contact details. Field 'name': 'lastName' must be a non-empty string",
+ message: "Invalid recipient contact details. Field 'name': 'lastName' is not a string",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/name",
- message: "'lastName' must be a non-empty string",
+ message: "'lastName' is not a string",
title: "Invalid value",
statusCode: 400,
},
@@ -1932,10 +1780,10 @@ describe("/api/v1/send", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1"],
+ lines: ["1", "2", "3", "4", "5", "6"],
postcode: [],
},
- email: "invalidEmailAddress",
+ email: 1234,
},
},
},
@@ -1945,20 +1793,20 @@ describe("/api/v1/send", () => {
})
.expect(400, {
message:
- "Invalid recipient contact details. Field 'email': Input failed format check. Field 'address': Too few address lines were provided",
+ "Invalid recipient contact details. Field 'email': 'email' is not a string. Field 'address': Too many address lines were provided",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/email",
- message: "Input failed format check",
+ message: "'email' is not a string",
title: "Invalid value",
statusCode: 400,
},
{
- code: 'CM_TOO_FEW_ITEMS',
+ code: 'CM_INVALID_VALUE',
field: "/data/attributes/messages/0/recipient/contactDetails/address",
- message: "Too few address lines were provided",
- title: "Too few items",
+ message: "Too many address lines were provided",
+ title: "Invalid value",
statusCode: 400,
},
],
diff --git a/sandbox/__test__/messages.spec.js b/sandbox/__test__/messages.spec.js
index d47d18d0e..ac943f583 100644
--- a/sandbox/__test__/messages.spec.js
+++ b/sandbox/__test__/messages.spec.js
@@ -681,42 +681,6 @@ describe("/api/v1/messages", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when invalid sms alternate contact detail is provided", (done) => {
- request(server)
- .post("/api/v1/messages")
- .set({ Authorization: "allowedContactDetailOverride" })
- .send({
- data: {
- type: "Message",
- attributes: {
- routingPlanId: "b838b13c-f98c-4def-93f0-515d4e4f4ee1",
- messageReference: "b5bb84b9-a522-41e9-aa8b-ad1b6a454243",
- recipient: {
- nhsNumber: "1",
- contactDetails: {
- sms: "11111111111",
- },
- },
- personalisation: {},
- },
- },
- })
- .expect(400, {
- message:
- "Invalid recipient contact details. Field 'sms': Input failed format check",
- errors: [
- {
- code: 'CM_INVALID_VALUE',
- field: "/data/attributes/recipient/contactDetails/sms",
- message: "Input failed format check",
- title: "Invalid value",
- statusCode: 400,
- },
- ],
- })
- .expect("Content-Type", /json/, done);
- });
-
it("returns a 400 when invalid value for sms alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
@@ -740,12 +704,12 @@ describe("/api/v1/messages", () => {
},
})
.expect(400, {
- message: "Invalid recipient contact details. Field 'sms': Input is not a string",
+ message: "Invalid recipient contact details. Field 'sms': 'sms' is not a string",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/sms",
- message: "Input is not a string",
+ message: "'sms' is not a string",
title: "Invalid value",
statusCode: 400,
},
@@ -778,42 +742,6 @@ describe("/api/v1/messages", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when invalid email alternate contact detail is provided", (done) => {
- request(server)
- .post("/api/v1/messages")
- .set({ Authorization: "allowedContactDetailOverride" })
- .send({
- data: {
- type: "Message",
- attributes: {
- routingPlanId: "b838b13c-f98c-4def-93f0-515d4e4f4ee1",
- messageReference: "b5bb84b9-a522-41e9-aa8b-ad1b6a454243",
- recipient: {
- nhsNumber: "1",
- contactDetails: {
- email: "invalidEmailAddress",
- },
- },
- personalisation: {},
- },
- },
- })
- .expect(400, {
- message:
- "Invalid recipient contact details. Field 'email': Input failed format check",
- errors: [
- {
- code: 'CM_INVALID_VALUE',
- field: "/data/attributes/recipient/contactDetails/email",
- message: "Input failed format check",
- title: "Invalid value",
- statusCode: 400,
- },
- ],
- })
- .expect("Content-Type", /json/, done);
- });
-
it("returns a 400 when invalid value for email alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
@@ -837,12 +765,12 @@ describe("/api/v1/messages", () => {
},
})
.expect(400, {
- message: "Invalid recipient contact details. Field 'email': Input is not a string",
+ message: "Invalid recipient contact details. Field 'email': 'email' is not a string",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/email",
- message: "Input is not a string",
+ message: "'email' is not a string",
title: "Invalid value",
statusCode: 400,
},
@@ -973,13 +901,13 @@ describe("/api/v1/messages", () => {
})
.expect(400, {
message:
- "Invalid recipient contact details. Field 'address': 'lines' is missing",
+ "Invalid recipient contact details. Field 'address': 'lines' is not a string array",
errors: [
{
- code: 'CM_MISSING_VALUE',
+ code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/address",
- message: "`lines` is missing",
- title: "Missing value",
+ message: "'lines' is not a string array",
+ title: "Invalid value",
statusCode: 400,
},
],
@@ -987,7 +915,7 @@ describe("/api/v1/messages", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when too few lines is provided in address alternate contact detail is provided", (done) => {
+ it("returns a 400 when too many lines is provided in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1001,7 +929,7 @@ describe("/api/v1/messages", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1"],
+ lines: ["1", "2", "3", "4", "5", "6"],
postcode: "hello",
},
},
@@ -1011,22 +939,21 @@ describe("/api/v1/messages", () => {
},
})
.expect(400, {
- message:
- "Invalid recipient contact details. Field 'address': Too few address lines were provided",
+ message: "Invalid recipient contact details. Field 'address': Too many address lines were provided",
errors: [
{
- code: 'CM_TOO_FEW_ITEMS',
+ code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/address",
- message: "Too few address lines were provided",
- title: "Too few items",
+ message: "Too many address lines were provided",
+ title: "Invalid value",
statusCode: 400,
- }
- ]
+ },
+ ],
})
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when too many lines is provided in address alternate contact detail is provided", (done) => {
+ it("returns a 400 when lines contains non-string value in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1040,7 +967,7 @@ describe("/api/v1/messages", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1", "2", "3", "4", "5", "6"],
+ lines: ["1", "2", 3, "4", "5"],
postcode: "hello",
},
},
@@ -1050,12 +977,12 @@ describe("/api/v1/messages", () => {
},
})
.expect(400, {
- message: "Invalid recipient contact details. Field 'address': Too many address lines were provided",
+ message: "Invalid recipient contact details. Field 'address': 'lines' is not a string array",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/address",
- message: "Too many address lines were provided",
+ message: "'lines' is not a string array",
title: "Invalid value",
statusCode: 400,
},
@@ -1064,7 +991,7 @@ describe("/api/v1/messages", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when lines contains non-string value in address alternate contact detail is provided", (done) => {
+ it("returns a 201 when no postcode is provided in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1078,8 +1005,7 @@ describe("/api/v1/messages", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1", "2", 3, "4", "5"],
- postcode: "hello",
+ lines: ["1", "2"],
},
},
},
@@ -1087,22 +1013,11 @@ describe("/api/v1/messages", () => {
},
},
})
- .expect(400, {
- message: "Invalid recipient contact details. Field 'address': Lines contain non-string or empty line",
- errors: [
- {
- code: 'CM_INVALID_VALUE',
- field: "/data/attributes/recipient/contactDetails/address",
- message: "Lines contain non-string or empty line",
- title: "Invalid value",
- statusCode: 400,
- },
- ],
- })
+ .expect(201)
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when no postcode is provided in address alternate contact detail is provided", (done) => {
+ it("returns a 201 when no lines is provided in address alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
.set({ Authorization: "allowedContactDetailOverride" })
@@ -1116,7 +1031,7 @@ describe("/api/v1/messages", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1", "2"],
+ postcode: "hello",
},
},
},
@@ -1124,19 +1039,7 @@ describe("/api/v1/messages", () => {
},
},
})
- .expect(400, {
- message:
- "Invalid recipient contact details. Field 'address': 'postcode' is missing",
- errors: [
- {
- code: 'CM_MISSING_VALUE',
- field: "/data/attributes/recipient/contactDetails/address",
- message: "`postcode` is missing",
- title: "Missing value",
- statusCode: 400,
- },
- ],
- })
+ .expect(201)
.expect("Content-Type", /json/, done);
});
@@ -1208,32 +1111,6 @@ describe("/api/v1/messages", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 201 when only lastName is provided for name alternate contact details", (done) => {
- request(server)
- .post("/api/v1/messages")
- .set({ Authorization: "allowedContactDetailOverride" })
- .send({
- data: {
- type: "Message",
- attributes: {
- routingPlanId: "b838b13c-f98c-4def-93f0-515d4e4f4ee1",
- messageReference: "b5bb84b9-a522-41e9-aa8b-ad1b6a454243",
- recipient: {
- nhsNumber: "1",
- contactDetails: {
- name: {
- lastName: "Smith"
- },
- },
- },
- personalisation: {},
- },
- },
- })
- .expect(201)
- .expect("Content-Type", /json/, done);
- });
-
it("returns a 400 when string for name alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
@@ -1427,47 +1304,6 @@ describe("/api/v1/messages", () => {
.expect("Content-Type", /json/, done);
});
- it("returns a 400 when no lastName is provided in name alternate contact detail is provided", (done) => {
- request(server)
- .post("/api/v1/messages")
- .set({ Authorization: "allowedContactDetailOverride" })
- .send({
- data: {
- type: "Message",
- attributes: {
- routingPlanId: "b838b13c-f98c-4def-93f0-515d4e4f4ee1",
- messageReference: "b5bb84b9-a522-41e9-aa8b-ad1b6a454243",
- recipient: {
- nhsNumber: "1",
- contactDetails: {
- name: {
- prefix: "Mr",
- firstName: "John",
- middleNames: "Little",
- suffix: "Jr"
- },
- },
- },
- personalisation: {},
- },
- },
- })
- .expect(400, {
- message:
- "Invalid recipient contact details. Field 'name': 'lastName' is missing",
- errors: [
- {
- code: 'CM_MISSING_VALUE',
- field: "/data/attributes/recipient/contactDetails/name",
- message: "`lastName` is missing",
- title: "Missing value",
- statusCode: 400,
- },
- ],
- })
- .expect("Content-Type", /json/, done);
- });
-
it("returns a 400 when lastName contains non-string value in name alternate contact detail is provided", (done) => {
request(server)
.post("/api/v1/messages")
@@ -1495,12 +1331,12 @@ describe("/api/v1/messages", () => {
},
})
.expect(400, {
- message: "Invalid recipient contact details. Field 'name': 'lastName' must be a non-empty string",
+ message: "Invalid recipient contact details. Field 'name': 'lastName' is not a string",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/name",
- message: "'lastName' must be a non-empty string",
+ message: "'lastName' is not a string",
title: "Invalid value",
statusCode: 400,
},
@@ -1526,7 +1362,7 @@ describe("/api/v1/messages", () => {
prefix: "Mr",
firstName: "John",
middleNames: "Little",
- lastName: "",
+ lastName: 1234,
suffix: "Jr"
},
},
@@ -1536,12 +1372,12 @@ describe("/api/v1/messages", () => {
},
})
.expect(400, {
- message: "Invalid recipient contact details. Field 'name': 'lastName' must be a non-empty string",
+ message: "Invalid recipient contact details. Field 'name': 'lastName' is not a string",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/name",
- message: "'lastName' must be a non-empty string",
+ message: "'lastName' is not a string",
title: "Invalid value",
statusCode: 400,
},
@@ -1605,10 +1441,10 @@ describe("/api/v1/messages", () => {
nhsNumber: "1",
contactDetails: {
address: {
- lines: ["1"],
+ lines: ["1", "2", "3", "4", "5", "6"],
postcode: [],
},
- email: "invalidEmailAddress",
+ email: 1234,
},
},
personalisation: {},
@@ -1617,20 +1453,20 @@ describe("/api/v1/messages", () => {
})
.expect(400, {
message:
- "Invalid recipient contact details. Field 'email': Input failed format check. Field 'address': Too few address lines were provided",
+ "Invalid recipient contact details. Field 'email': 'email' is not a string. Field 'address': Too many address lines were provided",
errors: [
{
code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/email",
- message: "Input failed format check",
+ message: "'email' is not a string",
title: "Invalid value",
statusCode: 400,
},
{
- code: 'CM_TOO_FEW_ITEMS',
+ code: 'CM_INVALID_VALUE',
field: "/data/attributes/recipient/contactDetails/address",
- message: "Too few address lines were provided",
- title: "Too few items",
+ message: "Too many address lines were provided",
+ title: "Invalid value",
statusCode: 400,
},
],
diff --git a/sandbox/handlers/config.js b/sandbox/handlers/config.js
index cb3e2f3e5..c30d12cc5 100644
--- a/sandbox/handlers/config.js
+++ b/sandbox/handlers/config.js
@@ -25,8 +25,6 @@ const validSendingGroupIds = {
[globalFreeTextSmsSendingGroupId]: "xoERWoahq12cq8WMXya4yed9hZtZbMxJ"
};
-const invalidEmailAddress = "invalidEmailAddress";
-
const duplicateTemplates = [
{
name: "EMAIL_TEMPLATE",
@@ -68,6 +66,5 @@ export {
globalFreeTextSmsSendingGroupId,
noDefaultOdsClientAuth,
noOdsChangeClientAuth,
- notAllowedContactDetailOverride,
- invalidEmailAddress
+ notAllowedContactDetailOverride
}
diff --git a/sandbox/handlers/error_scenarios/override_contact_details.js b/sandbox/handlers/error_scenarios/override_contact_details.js
index b9189dc5c..c9cd9f5f5 100644
--- a/sandbox/handlers/error_scenarios/override_contact_details.js
+++ b/sandbox/handlers/error_scenarios/override_contact_details.js
@@ -1,8 +1,5 @@
import { notAllowedContactDetailOverride } from "../config.js";
-const invalidPhoneNumber = "11111111111";
-const invalidEmailAddress = "invalidEmailAddress";
-
function validationSuccess() {
return {
valid: true,
@@ -20,28 +17,16 @@ function smsValidation(sms, path) {
if (!sms) {
return validationSuccess();
}
- if (sms === invalidPhoneNumber) {
- return validationFailure([
- {
- title: "Invalid value",
- code: 'CM_INVALID_VALUE',
- field: `${path}/recipient/contactDetails/sms`,
- message: "Input failed format check",
- statusCode: 400,
- },
- `Field 'sms': Input failed format check`,
- ]);
- }
if (typeof sms !== "string") {
return validationFailure([
{
title: "Invalid value",
code: 'CM_INVALID_VALUE',
field: `${path}/recipient/contactDetails/sms`,
- message: "Input is not a string",
+ message: "'sms' is not a string",
statusCode: 400,
},
- `Field 'sms': Input is not a string`,
+ `Field 'sms': 'sms' is not a string`,
]);
}
return validationSuccess();
@@ -51,28 +36,16 @@ function emailValidation(email, path) {
if (!email) {
return validationSuccess();
}
- if (email === invalidEmailAddress) {
- return validationFailure([
- {
- title: "Invalid value",
- code: 'CM_INVALID_VALUE',
- field: `${path}/recipient/contactDetails/email`,
- message: "Input failed format check",
- statusCode: 400,
- },
- `Field 'email': Input failed format check`,
- ]);
- }
if (typeof email !== "string") {
return validationFailure([
{
title: "Invalid value",
code: 'CM_INVALID_VALUE',
field: `${path}/recipient/contactDetails/email`,
- message: "Input is not a string",
+ message: "'email' is not a string",
statusCode: 400,
},
- `Field 'email': Input is not a string`,
+ `Field 'email': 'email' is not a string`,
]);
}
return validationSuccess();
@@ -96,83 +69,48 @@ function addressValidation(address, path) {
]);
}
- if (!address.lines) {
- return validationFailure([
- {
- title: "Missing value",
- code: 'CM_MISSING_VALUE',
- field: `${path}/recipient/contactDetails/address`,
- message: "`lines` is missing",
- statusCode: 400,
- },
- `Field 'address': 'lines' is missing`,
- ]);
- }
- if (!Array.isArray(address.lines)) {
- return validationFailure([
- {
- title: "Missing value",
- code: 'CM_MISSING_VALUE',
- field: `${path}/recipient/contactDetails/address`,
- message: "`lines` is missing",
- statusCode: 400,
- },
- `Field 'address': 'lines' is missing`,
- ]);
- }
-
- if (address.lines.some((line) => typeof line !== "string")) {
- return validationFailure([
- {
- title: "Invalid value",
- code: 'CM_INVALID_VALUE',
- field: `${path}/recipient/contactDetails/address`,
- message: "Lines contain non-string or empty line",
- statusCode: 400,
- },
- `Field 'address': Lines contain non-string or empty line`,
- ]);
- }
+ if ("lines" in address) {
+ if (!Array.isArray(address.lines)) {
+ return validationFailure([
+ {
+ title: "Invalid value",
+ code: 'CM_INVALID_VALUE',
+ field: `${path}/recipient/contactDetails/address`,
+ message: "'lines' is not a string array",
+ statusCode: 400,
+ },
+ `Field 'address': 'lines' is not a string array`,
+ ]);
+ }
- if (address.lines.length < 2) {
- return validationFailure([
- {
- code: 'CM_TOO_FEW_ITEMS',
- title: "Too few items",
- field: `${path}/recipient/contactDetails/address`,
- message: "Too few address lines were provided",
- statusCode: 400,
- },
- `Field 'address': Too few address lines were provided`,
- ]);
- }
- if (address.lines.length > 5) {
- return validationFailure([
- {
- title: "Invalid value",
- code: 'CM_INVALID_VALUE',
- field: `${path}/recipient/contactDetails/address`,
- message: "Too many address lines were provided",
- statusCode: 400,
- },
- `Field 'address': Too many address lines were provided`,
- ]);
- }
+ if (address.lines.some((line) => typeof line !== "string")) {
+ return validationFailure([
+ {
+ title: "Invalid value",
+ code: 'CM_INVALID_VALUE',
+ field: `${path}/recipient/contactDetails/address`,
+ message: "'lines' is not a string array",
+ statusCode: 400,
+ },
+ `Field 'address': 'lines' is not a string array`,
+ ]);
+ }
- if (!address.postcode) {
- return validationFailure([
- {
- title: "Missing value",
- code: 'CM_MISSING_VALUE',
- field: `${path}/recipient/contactDetails/address`,
- message: "`postcode` is missing",
- statusCode: 400,
- },
- `Field 'address': 'postcode' is missing`,
- ]);
+ if (address.lines.length > 5) {
+ return validationFailure([
+ {
+ title: "Invalid value",
+ code: 'CM_INVALID_VALUE',
+ field: `${path}/recipient/contactDetails/address`,
+ message: "Too many address lines were provided",
+ statusCode: 400,
+ },
+ `Field 'address': Too many address lines were provided`,
+ ]);
+ }
}
- if (typeof address.postcode !== "string") {
+ if ("postcode" in address && typeof address.postcode !== "string") {
return validationFailure([
{
title: "Invalid value",
@@ -188,7 +126,6 @@ function addressValidation(address, path) {
}
function nameValidation(name, path) {
-
if (!name) {
return validationSuccess();
}
@@ -245,29 +182,16 @@ function nameValidation(name, path) {
]);
}
- if (typeof name.lastName === "undefined") {
- return validationFailure([
- {
- title: "Missing value",
- code: 'CM_MISSING_VALUE',
- field: `${path}/recipient/contactDetails/name`,
- message: "`lastName` is missing",
- statusCode: 400,
- },
- `Field 'name': 'lastName' is missing`,
- ]);
- }
-
- if (typeof name.lastName !== "string" || name.lastName.trim() === "") {
+ if ("lastName" in name && typeof name.lastName !== "string") {
return validationFailure([
{
title: "Invalid value",
code: 'CM_INVALID_VALUE',
field: `${path}/recipient/contactDetails/name`,
- message: "'lastName' must be a non-empty string",
+ message: "'lastName' is not a string",
statusCode: 400,
},
- `Field 'name': 'lastName' must be a non-empty string`,
+ `Field 'name': 'lastName' is not a string`,
]);
}
diff --git a/sandbox/package-lock.json b/sandbox/package-lock.json
index 646f88c82..8dd1074f9 100644
--- a/sandbox/package-lock.json
+++ b/sandbox/package-lock.json
@@ -161,6 +161,27 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@noble/hashes": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+ "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
+ "dev": true,
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@paralleldrive/cuid2": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
+ "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
+ "dev": true,
+ "dependencies": {
+ "@noble/hashes": "^1.1.5"
+ }
+ },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -660,9 +681,9 @@
"dev": true
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
@@ -1046,15 +1067,18 @@
}
},
"node_modules/formidable": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz",
- "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==",
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
+ "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
"dev": true,
"dependencies": {
+ "@paralleldrive/cuid2": "^2.2.2",
"dezalgo": "^1.0.4",
- "hexoid": "^1.0.0",
"once": "^1.4.0"
},
+ "engines": {
+ "node": ">=14.0.0"
+ },
"funding": {
"url": "https://ko-fi.com/tunnckoCore/commissions"
}
@@ -1264,15 +1288,6 @@
"he": "bin/he"
}
},
- "node_modules/hexoid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
- "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -3580,6 +3595,21 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "@noble/hashes": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+ "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
+ "dev": true
+ },
+ "@paralleldrive/cuid2": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
+ "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
+ "dev": true,
+ "requires": {
+ "@noble/hashes": "^1.1.5"
+ }
+ },
"@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -3958,9 +3988,9 @@
"dev": true
},
"cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
@@ -4248,13 +4278,13 @@
}
},
"formidable": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz",
- "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==",
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
+ "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
"dev": true,
"requires": {
+ "@paralleldrive/cuid2": "^2.2.2",
"dezalgo": "^1.0.4",
- "hexoid": "^1.0.0",
"once": "^1.4.0"
}
},
@@ -4393,12 +4423,6 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
- "hexoid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
- "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
- "dev": true
- },
"hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
diff --git a/specification/responses/4xx/message_batches/400_UnableToProcessMessageBatch.yaml b/specification/responses/4xx/message_batches/400_UnableToProcessMessageBatch.yaml
index 45553bb2b..6b3f02829 100644
--- a/specification/responses/4xx/message_batches/400_UnableToProcessMessageBatch.yaml
+++ b/specification/responses/4xx/message_batches/400_UnableToProcessMessageBatch.yaml
@@ -44,13 +44,6 @@ description: |+
-d '{"data":{"type":"MessageBatch","attributes":{"routingPlanId":"b838b13c-f98c-4def-93f0-515d4e4f4ee1","messageBatchReference":"346e3fc3-0b55-4c0d-bec9-0cc5aa431836","messages":[{"messageReference":"da0b1495-c7cb-468c-9d81-07dee089d728","recipient":{"nhsNumber":"9990548609","contactDetails":{"sms":"07777000000"}},"personalisation":{}}]}}}' \
https://sandbox.api.service.nhs.uk/comms/v1/message-batches
```
-
- Contact detail validation errors can be triggered with the following values.
-
- | Field | Value | Description |
- | ---------- | ----- | ----------- |
- | sms | 11111111111 | Returns 'Input failed format check' error with a pointer to sms. |
- | email | invalidEmailAddress | Returns 'Input failed format check' error with a pointer to email. |
content:
application/vnd.api+json:
schema:
diff --git a/specification/responses/4xx/messages/400_UnableToProcessMessage.yaml b/specification/responses/4xx/messages/400_UnableToProcessMessage.yaml
index 65d2dd229..a2562cc3f 100644
--- a/specification/responses/4xx/messages/400_UnableToProcessMessage.yaml
+++ b/specification/responses/4xx/messages/400_UnableToProcessMessage.yaml
@@ -42,13 +42,6 @@ description: |+
-d '{"data": {"type": "Message","attributes": {"routingPlanId": "b838b13c-f98c-4def-93f0-515d4e4f4ee1","messageReference": "da0b1495-c7cb-468c-9d81-07dee089d728","recipient": {"nhsNumber": "9990548609","contactDetails": {"sms": "07777000000"}},"personalisation": {}}}}' \
https://sandbox.api.service.nhs.uk/comms/v1/messages
```
-
- Contact detail validation errors can be triggered with the following values.
-
- | Field | Value | Description |
- | ---------- | ----- | ----------- |
- | sms | 11111111111 | Returns 'Input failed format check' error with a pointer to sms. |
- | email | invalidEmailAddress | Returns 'Input failed format check' error with a pointer to email. |
content:
application/vnd.api+json:
schema:
diff --git a/tests/api/message_batches/field_validation/test_400_invalid_contact_details.py b/tests/api/message_batches/field_validation/test_400_invalid_contact_details.py
index d7d1e2811..2b8b8d0f3 100644
--- a/tests/api/message_batches/field_validation/test_400_invalid_contact_details.py
+++ b/tests/api/message_batches/field_validation/test_400_invalid_contact_details.py
@@ -18,7 +18,7 @@ def test_invalid_sms_contact_details(url, bearer_token):
data = Generators.generate_valid_create_message_batch_body("dev")
data["data"]["attributes"]["messages"][0]["recipient"] = {
"contactDetails": {
- "sms": "077009000021"
+ "sms": 1234
}
}
@@ -33,7 +33,7 @@ def test_invalid_sms_contact_details(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/sms",
- "Input failed format check"
+ "'sms' is not a string"
),
None
)
@@ -51,7 +51,7 @@ def test_invalid_sms_contact_details_second_message(url, bearer_token):
data = Generators.generate_valid_create_message_batch_body("dev")
data["data"]["attributes"]["messages"][1]["recipient"] = {
"contactDetails": {
- "sms": "077009000021"
+ "sms": 1234
}
}
@@ -66,7 +66,7 @@ def test_invalid_sms_contact_details_second_message(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/1/recipient/contactDetails/sms",
- "Input failed format check"
+ "'sms' is not a string"
),
None
)
@@ -84,7 +84,7 @@ def test_invalid_email_contact_details(url, bearer_token):
data = Generators.generate_valid_create_message_batch_body("dev")
data["data"]["attributes"]["messages"][0]["recipient"] = {
"contactDetails": {
- "email": "invalidEmailAddress"
+ "email": 1234
}
}
@@ -99,7 +99,7 @@ def test_invalid_email_contact_details(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/email",
- "Input failed format check"
+ "'email' is not a string"
),
None
)
@@ -117,7 +117,7 @@ def test_invalid_email_contact_details_third_message(url, bearer_token):
data = Generators.generate_valid_create_message_batch_body("dev")
data["data"]["attributes"]["messages"][2]["recipient"] = {
"contactDetails": {
- "email": "invalidEmailAddress"
+ "email": 1234
}
}
@@ -131,7 +131,7 @@ def test_invalid_email_contact_details_third_message(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/2/recipient/contactDetails/email",
- "Input failed format check"
+ "'email' is not a string"
),
None
)
@@ -141,15 +141,15 @@ def test_invalid_email_contact_details_third_message(url, bearer_token):
@pytest.mark.devtest
@pytest.mark.inttest
@pytest.mark.prodtest
-def test_invalid_address_contact_details_too_few_lines(url, bearer_token):
+def test_invalid_address_contact_details_too_many_lines(url, bearer_token):
"""
- .. include:: ../partials/validation/test_invalid_contact_details_address_lines_too_few.rst
+ .. include:: ../partials/validation/test_invalid_contact_details_address_lines_too_many.rst
"""
headers = Generators.generate_valid_headers(bearer_token.value)
data = Generators.generate_valid_create_message_batch_body("dev")
data["data"]["attributes"]["messages"][0]["recipient"]["contactDetails"] = {
"address": {
- "lines": ["1"],
+ "lines": ["1", "2", "3", "4", "5", "6"],
"postcode": "LS1 6AE"
}
}
@@ -163,9 +163,9 @@ def test_invalid_address_contact_details_too_few_lines(url, bearer_token):
Assertions.assert_error_with_optional_correlation_id(
resp,
400,
- Generators.generate_too_few_items_error_custom_detail(
+ Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/address",
- "Too few address lines were provided"
+ "Too many address lines were provided"
),
None
)
@@ -175,15 +175,15 @@ def test_invalid_address_contact_details_too_few_lines(url, bearer_token):
@pytest.mark.devtest
@pytest.mark.inttest
@pytest.mark.prodtest
-def test_invalid_address_contact_details_too_many_lines(url, bearer_token):
+def test_invalid_address_contact_details_lines_not_string_array(url, bearer_token):
"""
- .. include:: ../partials/validation/test_invalid_contact_details_address_lines_too_many.rst
+ .. include:: ../partials/validation/test_invalid_contact_details_address_lines.rst
"""
headers = Generators.generate_valid_headers(bearer_token.value)
data = Generators.generate_valid_create_message_batch_body("dev")
data["data"]["attributes"]["messages"][0]["recipient"]["contactDetails"] = {
"address": {
- "lines": ["1", "2", "3", "4", "5", "6"],
+ "lines": [1, 2, 3],
"postcode": "LS1 6AE"
}
}
@@ -199,7 +199,7 @@ def test_invalid_address_contact_details_too_many_lines(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/address",
- "Too many address lines were provided"
+ "'lines' is not a string array"
),
None
)
@@ -209,7 +209,7 @@ def test_invalid_address_contact_details_too_many_lines(url, bearer_token):
@pytest.mark.devtest
@pytest.mark.inttest
@pytest.mark.prodtest
-def test_invalid_address_contact_details_postcode(url, bearer_token):
+def test_invalid_address_contact_details_postcode_not_string(url, bearer_token):
"""
.. include:: ../partials/validation/test_invalid_contact_details_address_postcode.rst
"""
@@ -217,8 +217,8 @@ def test_invalid_address_contact_details_postcode(url, bearer_token):
data = Generators.generate_valid_create_message_batch_body("dev")
data["data"]["attributes"]["messages"][0]["recipient"]["contactDetails"] = {
"address": {
- "lines": ["1", "2", "3", "4", "5"],
- "postcode": "LS1 6AECD"
+ "lines": ["1", "2"],
+ "postcode": []
}
}
@@ -233,7 +233,7 @@ def test_invalid_address_contact_details_postcode(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/address",
- "Postcode input failed format check"
+ "'postcode' is not a string"
),
None
)
diff --git a/tests/api/single_message/field_validation/test_400_invalid_contact_details.py b/tests/api/single_message/field_validation/test_400_invalid_contact_details.py
index a9214d0e9..08b92fbe1 100644
--- a/tests/api/single_message/field_validation/test_400_invalid_contact_details.py
+++ b/tests/api/single_message/field_validation/test_400_invalid_contact_details.py
@@ -16,7 +16,7 @@ def test_invalid_sms_contact_details(url, bearer_token):
"""
headers = Generators.generate_valid_headers(bearer_token.value)
data = Generators.generate_valid_create_message_body("dev")
- data["data"]["attributes"]["recipient"]["contactDetails"] = {"sms": "11111111111"}
+ data["data"]["attributes"]["recipient"]["contactDetails"] = {"sms": 1234}
resp = requests.post(
f"{url}{MESSAGES_ENDPOINT}",
@@ -29,7 +29,7 @@ def test_invalid_sms_contact_details(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/recipient/contactDetails/sms",
- "Input failed format check"
+ "'sms' is not a string"
),
None
)
@@ -45,7 +45,7 @@ def test_invalid_email_contact_details(url, bearer_token):
"""
headers = Generators.generate_valid_headers(bearer_token.value)
data = Generators.generate_valid_create_message_body("dev")
- data["data"]["attributes"]["recipient"]["contactDetails"] = {"email": "invalidEmailAddress"}
+ data["data"]["attributes"]["recipient"]["contactDetails"] = {"email": 1234}
resp = requests.post(
f"{url}{MESSAGES_ENDPOINT}",
@@ -58,41 +58,7 @@ def test_invalid_email_contact_details(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/recipient/contactDetails/email",
- "Input failed format check"
- ),
- None
- )
-
-
-@pytest.mark.test
-@pytest.mark.devtest
-@pytest.mark.inttest
-@pytest.mark.prodtest
-def test_invalid_address_contact_details_too_few_lines(url, bearer_token):
- """
- .. include :: /partials/validation/test_invalid_contact_details_address_lines_too_few.rst
- """
- headers = Generators.generate_valid_headers(bearer_token.value)
- data = Generators.generate_valid_create_message_body("dev")
- data["data"]["attributes"]["recipient"]["contactDetails"] = {
- "address": {
- "lines": ["1"],
- "postcode": "test"
- }
- }
-
- resp = requests.post(
- f"{url}{MESSAGES_ENDPOINT}",
- headers=headers,
- json=data
- )
-
- Assertions.assert_error_with_optional_correlation_id(
- resp,
- 400,
- Generators.generate_too_few_items_error_custom_detail(
- "/data/attributes/recipient/contactDetails/address",
- "Too few address lines were provided"
+ "'email' is not a string"
),
None
)
@@ -136,16 +102,16 @@ def test_invalid_address_contact_details_too_many_lines(url, bearer_token):
@pytest.mark.devtest
@pytest.mark.inttest
@pytest.mark.prodtest
-def test_invalid_address_contact_details_postcode(url, bearer_token):
+def test_invalid_address_contact_details_lines_not_string_array(url, bearer_token):
"""
- .. include :: /partials/validation/test_invalid_contact_details_address_postcode.rst
+ .. include:: /partials/validation/test_invalid_contact_details_address_lines.rst
"""
headers = Generators.generate_valid_headers(bearer_token.value)
data = Generators.generate_valid_create_message_body("dev")
data["data"]["attributes"]["recipient"]["contactDetails"] = {
"address": {
- "lines": ["1", "2", "3", "4", "5"],
- "postcode": "LS1 6AECD"
+ "lines": [1, 2, 3],
+ "postcode": "test"
}
}
@@ -160,7 +126,7 @@ def test_invalid_address_contact_details_postcode(url, bearer_token):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/recipient/contactDetails/address",
- "Postcode input failed format check"
+ "'lines' is not a string array"
),
None
)
diff --git a/tests/docs/partials/validation/test_invalid_contact_details_address_lines.rst b/tests/docs/partials/validation/test_invalid_contact_details_address_lines.rst
new file mode 100644
index 000000000..e7a166652
--- /dev/null
+++ b/tests/docs/partials/validation/test_invalid_contact_details_address_lines.rst
@@ -0,0 +1,22 @@
+Scenario: An API consumer submitting a request with a non-string array address lines receives a 400 'Invalid Value' response
+============================================================================================================================
+
+A valid address lines contact detail must be structured in this format: { address: { lines: Value } } where Value is a string array
+
+| **Given** the API consumer provides a message body with a non-string array address lines
+| **When** the request is submitted
+| **Then** the response returns a 400 invalid value error
+
+**Asserts**
+- Response returns a 400 'Invalid Value' error
+- Response returns the expected error message body with references to the invalid attribute
+
+.. list-table::
+ :widths: 50 50
+ :header-rows: 1
+
+ * - Value
+ - Description
+ * - [1,2]
+ - Used to ensure only a string array address lines is accepted
+
diff --git a/tests/docs/partials/validation/test_invalid_contact_details_address_lines_too_few.rst b/tests/docs/partials/validation/test_invalid_contact_details_address_lines_too_few.rst
deleted file mode 100644
index 61132ebd1..000000000
--- a/tests/docs/partials/validation/test_invalid_contact_details_address_lines_too_few.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-Scenario: An API consumer submitting a request with invalid address lines (too few) receives a 400 'Too few items' response
-============================================================================================================================
-
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
-
-| **Given** the API consumer provides an message body with with too few address lines
-| **When** the request is submitted
-| **Then** the response returns a 400 too few items error
-
-**Asserts**
-- Response returns a 400 'Too few items' error
-- Response returns the expected error message body with references to the invalid attribute
-
-.. list-table::
- :widths: 50 50
- :header-rows: 1
-
- * - Value
- - Description
- * - [ "1" ]
- - Used to ensure list of less than 2 values is not accepted
-
diff --git a/tests/docs/partials/validation/test_invalid_contact_details_address_lines_too_many.rst b/tests/docs/partials/validation/test_invalid_contact_details_address_lines_too_many.rst
index 3727100ce..126ec7407 100644
--- a/tests/docs/partials/validation/test_invalid_contact_details_address_lines_too_many.rst
+++ b/tests/docs/partials/validation/test_invalid_contact_details_address_lines_too_many.rst
@@ -1,7 +1,7 @@
Scenario: An API consumer submitting a request with invalid address lines (too many) receives a 400 'Invalid Value' response
===============================================================================================================================
-A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: value } }
+A valid contact detail must be structured in this format: { address: { lines: [ Value1, Value2 ], postcode: Value } }
| **Given** the API consumer provides an message body with with too many address lines
| **When** the request is submitted
diff --git a/tests/docs/partials/validation/test_invalid_contact_details_address_postcode.rst b/tests/docs/partials/validation/test_invalid_contact_details_address_postcode.rst
index 051f1b19e..1c05951f0 100644
--- a/tests/docs/partials/validation/test_invalid_contact_details_address_postcode.rst
+++ b/tests/docs/partials/validation/test_invalid_contact_details_address_postcode.rst
@@ -1,9 +1,9 @@
-Scenario: An API consumer submitting a request with an invalid address postcode receives a 400 'Invalid Value' response
-===========================================================================================================================
+Scenario: An API consumer submitting a request with a non-string address postcode receives a 400 'Invalid Value' response
+=========================================================================================================================
-A valid contact detail must be structured in this format: { sms: value, email: value, address: { lines: [], postcode: value } }
+A valid address postcode contact detail must be structured in this format: { address: { postcode: Value } } where Value is a string
-| **Given** the API consumer provides an message body with an invalid postcode
+| **Given** the API consumer provides a message body with a non-string address postcode
| **When** the request is submitted
| **Then** the response returns a 400 invalid value error
@@ -17,6 +17,6 @@ A valid contact detail must be structured in this format: { sms: value, email: v
* - Value
- Description
- * - LS1 6AECD
- - Used to ensure only valid postcode is accepted
+ * - []
+ - Used to ensure only a string address postcode is accepted
diff --git a/tests/docs/partials/validation/test_invalid_contact_details_email.rst b/tests/docs/partials/validation/test_invalid_contact_details_email.rst
index a2cf7e596..6eff865a0 100644
--- a/tests/docs/partials/validation/test_invalid_contact_details_email.rst
+++ b/tests/docs/partials/validation/test_invalid_contact_details_email.rst
@@ -1,9 +1,9 @@
-Scenario: An API consumer submitting a request with an invalid email receives a 400 'Invalid Value' response
+Scenario: An API consumer submitting a request with a non-string email address receives a 400 'Invalid Value' response
======================================================================================================================
-A valid contact detail must be structured in this format: { email: Value }
+A valid email contact detail must be structured in this format: { email: Value } where Value is a string
-| **Given** the API consumer provides an message body with an invalid email address
+| **Given** the API consumer provides a message body with a non-string email address
| **When** the request is submitted
| **Then** the response returns a 400 invalid value error
@@ -17,6 +17,6 @@ A valid contact detail must be structured in this format: { email: Value }
* - Value
- Description
- * - invalidEmailAddress
- - Used to ensure invalid email address is not accepted
+ * - []
+ - Used to ensure only a string email address is accepted
diff --git a/tests/docs/partials/validation/test_invalid_contact_details_sms.rst b/tests/docs/partials/validation/test_invalid_contact_details_sms.rst
index 0c52652f8..2c62f53d3 100644
--- a/tests/docs/partials/validation/test_invalid_contact_details_sms.rst
+++ b/tests/docs/partials/validation/test_invalid_contact_details_sms.rst
@@ -1,9 +1,9 @@
-Scenario: An API consumer submitting a request with an invalid sms receives a 400 'Invalid Value' response
-======================================================================================================================
+Scenario: An API consumer submitting a request with a non-string sms receives a 400 'Invalid Value' response
+============================================================================================================
-A valid sms contact detail must be structured in this format: { sms: value }
+A valid sms contact detail must be structured in this format: { sms: Value } where Value is a string
-| **Given** the API consumer provides an message body with an invalid sms
+| **Given** the API consumer provides a message body with a non-string sms
| **When** the request is submitted
| **Then** the response returns a 400 invalid value error
@@ -17,6 +17,6 @@ A valid sms contact detail must be structured in this format: { sms: value }
* - Value
- Description
- * - 077009000021
- - Used to ensure invalid phone number is not accepted
+ * - []
+ - Used to ensure only a string phone number is accepted
diff --git a/tests/docs/partials/validation/test_invalid_personalisation.rst b/tests/docs/partials/validation/test_invalid_personalisation.rst
index c40050bac..ecff04908 100644
--- a/tests/docs/partials/validation/test_invalid_personalisation.rst
+++ b/tests/docs/partials/validation/test_invalid_personalisation.rst
@@ -1,14 +1,14 @@
-Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 'Invalid value' response
+Scenario: An API consumer submitting a request with an invalid personalisation receives a 400 'Invalid Value' response
======================================================================================================================
-A valid personalisation must be structured in this format: { parameter: value }
+A valid personalisation must be structured in this format: { parameter: Value }
| **Given** the API consumer provides a message body with an invalid personalisation
| **When** the request is submitted
| **Then** the response returns a 400 invalid value error
**Asserts**
-- Response returns a 400 'Invalid value' error
+- Response returns a 400 'Invalid Value' error
- Response returns the expected error message body with references to the invalid attribute
.. list-table::
diff --git a/tests/lib/constants/constants.py b/tests/lib/constants/constants.py
index 021189639..1ad914d0b 100644
--- a/tests/lib/constants/constants.py
+++ b/tests/lib/constants/constants.py
@@ -109,14 +109,6 @@ def __init__(self, code, status, title, detail, links={}):
"The property at the specified location is required, but was not present in the request."
)
-# too few address lines
-ERROR_TOO_FEW_ADDRESS_LINES = Error(
- "CM_MISSING_VALUE",
- "400",
- "Missing value",
- "Too few address lines were provided"
-)
-
# null value constants
ERROR_NULL_VALUE = Error(
"CM_NULL_VALUE",
diff --git a/tests/sandbox/message_batches/create_message_batches/test_field_validation.py b/tests/sandbox/message_batches/create_message_batches/test_field_validation.py
index a51e1235e..51e83b006 100644
--- a/tests/sandbox/message_batches/create_message_batches/test_field_validation.py
+++ b/tests/sandbox/message_batches/create_message_batches/test_field_validation.py
@@ -554,7 +554,7 @@ def test_invalid_sms_contact_details(nhsd_apim_proxy_url, correlation_id):
"recipient": {
"nhsNumber": "9990548609",
"contactDetails": {
- "sms": "11111111111"
+ "sms": 1234
}
},
}
@@ -568,7 +568,7 @@ def test_invalid_sms_contact_details(nhsd_apim_proxy_url, correlation_id):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/sms",
- "Input failed format check"
+ "'sms' is not a string"
),
correlation_id
)
@@ -595,7 +595,7 @@ def test_invalid_email_contact_details(nhsd_apim_proxy_url, correlation_id):
"recipient": {
"nhsNumber": "9990548609",
"contactDetails": {
- "email": "invalidEmailAddress"
+ "email": 1234
}
},
}
@@ -609,7 +609,7 @@ def test_invalid_email_contact_details(nhsd_apim_proxy_url, correlation_id):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/email",
- "Input failed format check"
+ "'email' is not a string"
),
correlation_id
)
@@ -617,9 +617,9 @@ def test_invalid_email_contact_details(nhsd_apim_proxy_url, correlation_id):
@pytest.mark.sandboxtest
@pytest.mark.parametrize("correlation_id", constants.CORRELATION_ID)
-def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, correlation_id):
+def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, correlation_id):
"""
- .. include:: ../../partials/validation/test_invalid_contact_details_address_lines_too_few.rst
+ .. include:: ../../partials/validation/test_invalid_contact_details_address_lines_too_many.rst
"""
resp = requests.post(f"{nhsd_apim_proxy_url}{MESSAGE_BATCHES_ENDPOINT}", headers={
**headers,
@@ -638,7 +638,12 @@ def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, corr
"contactDetails": {
"address": {
"lines": [
- "1"
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6"
],
"postcode": "test"
}
@@ -653,9 +658,9 @@ def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, corr
Assertions.assert_error_with_optional_correlation_id(
resp,
400,
- Generators.generate_too_few_items_error_custom_detail(
+ Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/address",
- "Too few address lines were provided"
+ "Too many address lines were provided"
),
correlation_id
)
@@ -663,9 +668,9 @@ def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, corr
@pytest.mark.sandboxtest
@pytest.mark.parametrize("correlation_id", constants.CORRELATION_ID)
-def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, correlation_id):
+def test_invalid_address_contact_details_lines_not_string_array(nhsd_apim_proxy_url, correlation_id):
"""
- .. include:: ../../partials/validation/test_invalid_contact_details_address_lines_too_many.rst
+ .. include:: ../../partials/validation/test_invalid_contact_details_address_lines.rst
"""
resp = requests.post(f"{nhsd_apim_proxy_url}{MESSAGE_BATCHES_ENDPOINT}", headers={
**headers,
@@ -683,14 +688,7 @@ def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, cor
"nhsNumber": "9990548609",
"contactDetails": {
"address": {
- "lines": [
- "1",
- "2",
- "3",
- "4",
- "5",
- "6"
- ],
+ "lines": [1, 2, 3],
"postcode": "test"
}
}
@@ -706,7 +704,7 @@ def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, cor
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/messages/0/recipient/contactDetails/address",
- "Too many address lines were provided"
+ "'lines' is not a string array"
),
correlation_id
)
diff --git a/tests/sandbox/messages/create_messages/test_field_validation.py b/tests/sandbox/messages/create_messages/test_field_validation.py
index 811fd20e3..707d83f6f 100644
--- a/tests/sandbox/messages/create_messages/test_field_validation.py
+++ b/tests/sandbox/messages/create_messages/test_field_validation.py
@@ -334,7 +334,7 @@ def test_invalid_sms_contact_details(nhsd_apim_proxy_url, correlation_id):
"recipient": {
"nhsNumber": "9990548609",
"contactDetails": {
- "sms": "11111111111"
+ "sms": 1234
}
},
}
@@ -346,7 +346,7 @@ def test_invalid_sms_contact_details(nhsd_apim_proxy_url, correlation_id):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/recipient/contactDetails/sms",
- "Input failed format check"
+ "'sms' is not a string"
),
correlation_id
)
@@ -370,7 +370,7 @@ def test_invalid_email_contact_details(nhsd_apim_proxy_url, correlation_id):
"recipient": {
"nhsNumber": "9990548609",
"contactDetails": {
- "email": "invalidEmailAddress"
+ "email": 1234
}
},
}
@@ -382,7 +382,7 @@ def test_invalid_email_contact_details(nhsd_apim_proxy_url, correlation_id):
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/recipient/contactDetails/email",
- "Input failed format check"
+ "'email' is not a string"
),
correlation_id
)
@@ -390,9 +390,9 @@ def test_invalid_email_contact_details(nhsd_apim_proxy_url, correlation_id):
@pytest.mark.sandboxtest
@pytest.mark.parametrize("correlation_id", constants.CORRELATION_ID)
-def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, correlation_id):
+def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, correlation_id):
"""
- .. include:: ../../partials/validation/test_invalid_contact_details_address_lines_too_few.rst
+ .. include:: ../../partials/validation/test_invalid_contact_details_address_lines_too_many.rst
"""
resp = requests.post(f"{nhsd_apim_proxy_url}{MESSAGES_ENDPOINT}", headers={
**headers,
@@ -408,7 +408,12 @@ def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, corr
"contactDetails": {
"address": {
"lines": [
- "1"
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6"
],
"postcode": "test"
}
@@ -421,9 +426,9 @@ def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, corr
Assertions.assert_error_with_optional_correlation_id(
resp,
400,
- Generators.generate_too_few_items_error_custom_detail(
+ Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/recipient/contactDetails/address",
- "Too few address lines were provided"
+ "Too many address lines were provided"
),
correlation_id
)
@@ -431,9 +436,9 @@ def test_invalid_address_contact_details_too_few_lines(nhsd_apim_proxy_url, corr
@pytest.mark.sandboxtest
@pytest.mark.parametrize("correlation_id", constants.CORRELATION_ID)
-def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, correlation_id):
+def test_invalid_address_contact_details_lines_not_string_array(nhsd_apim_proxy_url, correlation_id):
"""
- .. include:: ../../partials/validation/test_invalid_contact_details_address_lines_too_many.rst
+ .. include:: ../../partials/validation/test_invalid_contact_details_address_lines.rst
"""
resp = requests.post(f"{nhsd_apim_proxy_url}{MESSAGES_ENDPOINT}", headers={
**headers,
@@ -448,14 +453,7 @@ def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, cor
"nhsNumber": "9990548609",
"contactDetails": {
"address": {
- "lines": [
- "1",
- "2",
- "3",
- "4",
- "5",
- "6"
- ],
+ "lines": [1, 2, 3],
"postcode": "test"
}
}
@@ -469,7 +467,7 @@ def test_invalid_address_contact_details_too_many_lines(nhsd_apim_proxy_url, cor
400,
Generators.generate_invalid_value_error_custom_detail(
"/data/attributes/recipient/contactDetails/address",
- "Too many address lines were provided"
+ "'lines' is not a string array"
),
correlation_id
)