LPA"
+#~ "abbr> bapur i chi. Nid oes angen ichi gysylltu â ni, rydym yn ymwybodol o’r "
+#~ "mater hwn."
+
+#~ msgid ""
+#~ "A scanned image of the donor’s instructions will appear here soon. The "
+#~ "first time may take up to 10 minutes. Please refresh this page."
+#~ msgstr ""
+#~ "Bydd delwedd wedi ei sganio o gyfarwyddiadau’r rhoddwr yn ymddangos yma’n "
+#~ "fuan. Efallai y bydd yn cymryd hyd at 10 munud y tro cyntaf. Adnewyddwch y "
+#~ "dudalen hon os gwelwch yn dda."
+
+#~ msgid ""
+#~ "The organisation could be a hospital, care home, or other health care "
+#~ "provider. This is for your reference only"
+#~ msgstr ""
+#~ "Gallai’r sefydliad fod yn ysbyty, cartref gofal neu ddarparwr gofal iechyd "
+#~ "arall. I chi gyfeirio ato yn unig mae hyn"
+
+#~ msgid ""
+#~ "The organisation could be a bank, energy provider, or another business. "
+#~ "This is for your reference only"
+#~ msgstr ""
+#~ "Gallai’r sefydliad fod yn fanc, darparwr ynni, neu’n fusnes arall. I chi "
+#~ "gyfeirio ato yn unig mae hyn"
#~ msgid ""
#~ "Some semantic elements were implemented in a way that did not convey the "
diff --git a/service-front/app/languages/messages.pot b/service-front/app/languages/messages.pot
index 776ff8dcfe..6a692dd7eb 100644
--- a/service-front/app/languages/messages.pot
+++ b/service-front/app/languages/messages.pot
@@ -1,8 +1,7 @@
msgid ""
msgstr ""
"Language: en_GB\n"
-"POT-Creation-Date: 2023-09-20T07:41:51+00:00\n"
-
+"POT-Creation-Date: 2023-10-12T09:26:27+00:00\n"
"X-Domain: messages\n"
#: src/Actor/templates/actor/activation-key-request-received.html.twig:12
@@ -69,7 +68,7 @@ msgstr ""
#: src/Actor/templates/actor/check-access-codes.html.twig:19
#: src/Actor/templates/actor/lpa-already-added.html.twig:33
#: src/Actor/templates/actor/view-lpa-summary.html.twig:17
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:66
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:68
#: src/Actor/templates/actor/check-lpa.html.twig:26
#: src/Actor/templates/actor/lpa-create-viewercode.html.twig:19
#: src/Viewer/templates/viewer/check-code-found.html.twig:25
@@ -82,7 +81,7 @@ msgstr ""
#: src/Actor/templates/actor/check-access-codes.html.twig:19
#: src/Actor/templates/actor/lpa-already-added.html.twig:35
#: src/Actor/templates/actor/view-lpa-summary.html.twig:17
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:66
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:68
#: src/Actor/templates/actor/check-lpa.html.twig:28
#: src/Actor/templates/actor/lpa-create-viewercode.html.twig:19
#: src/Viewer/templates/viewer/check-code-found.html.twig:25
@@ -289,7 +288,7 @@ msgstr ""
#: src/Actor/templates/actor/check-your-answers.html.twig:90
#: src/Actor/templates/actor/home-page.html.twig:47
#: src/Actor/templates/actor/lpa-create-viewercode.html.twig:72
-#: src/Viewer/templates/viewer/enter-code.html.twig:60
+#: src/Viewer/templates/viewer/enter-code.html.twig:63
msgid "Continue"
msgstr ""
@@ -551,6 +550,20 @@ msgstr ""
msgid "Postcode"
msgstr ""
+#: src/Actor/templates/actor/cannot-find-lpa.html.twig:71
+#: src/Actor/templates/actor/request-activation-key/postcode.html.twig:19
+#: src/Actor/templates/actor/check-your-answers.html.twig:71
+msgid "Do you live in the UK?"
+msgstr ""
+
+#: src/Actor/templates/actor/cannot-find-lpa.html.twig:74
+#: src/Actor/templates/actor/request-activation-key/postcode.html.twig:35
+#: src/Actor/templates/actor/check-your-answers.html.twig:74
+#: src/Common/templates/common/cookies.html.twig:136
+#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:143
+msgid "No"
+msgstr ""
+
#: src/Actor/templates/actor/cannot-find-lpa.html.twig:80
msgid "Did you give us the right LPA reference number?"
msgstr ""
@@ -888,8 +901,8 @@ msgstr ""
msgid "LPA details"
msgstr ""
-#: src/Actor/templates/actor/view-lpa-summary.html.twig:124
-msgid "If the scanned image is not readable, organisations may ask to see the paper LPA so that they can find out what the instructions or preferences are."
+#: src/Actor/templates/actor/view-lpa-summary.html.twig:133
+msgid "If any scanned images are not readable, organisations may ask to see the paper LPA so that they can find out what the instructions or preferences are."
msgstr ""
#: src/Actor/templates/actor/view-lpa-summary.html.twig:145
@@ -1082,6 +1095,11 @@ msgstr ""
msgid "We’re not responsible for how personal data, accessed by a third party using a code created by a donor or attorney, is used, shared, or held."
msgstr ""
+#: src/Actor/templates/actor/actor-privacy-notice.html.twig:117
+#: src/Viewer/templates/viewer/viewer-privacy-notice.html.twig:96
+msgid "How we store data"
+msgstr ""
+
#: src/Actor/templates/actor/actor-privacy-notice.html.twig:119
#: src/Viewer/templates/viewer/viewer-privacy-notice.html.twig:100
msgid "Information you enter into the service is stored in a secure database within the European Economic Area (EEA). However, due to the global nature of the internet, the data sent to and from the database may transit through countries outside of the EEA. Data is not stored in a non-EEA country."
@@ -1271,7 +1289,7 @@ msgid "If an LPA has instructio
msgstr ""
#: src/Actor/templates/actor/instructions-preferences.html.twig:28
-msgid "This scanned image is also shown to anyone you give an access code to. Please check that the scanned image is readable before giving an access code to organisations."
+msgid "This scanned image is also shown to anyone you give an access code to. Please check that the scanned image is readable before giving an access code to organisations. This will work for all access codes made after 4 July 2023."
msgstr ""
#: src/Actor/templates/actor/instructions-preferences.html.twig:35
@@ -1290,12 +1308,8 @@ msgstr ""
msgid "On most LPAs, you’ll find the instructions and preferences in section 7."
msgstr ""
-#: src/Actor/templates/actor/instructions-preferences.html.twig:41
-msgid "On some LPAs made in or before 2015, instructions and preferences are called ‘restrictions and conditions’. You’ll find them on page 9 of the LPA."
-msgstr ""
-
-#: src/Actor/templates/actor/instructions-preferences.html.twig:67
-msgid "In some older LPAs, instructions and preferences are called 'restrictions and conditions'."
+#: src/Actor/templates/actor/instructions-preferences.html.twig:60
+msgid "On some LPAs made in or before 2015, instructions and preferences are called 'restrictions and conditions'. You’ll find them on page 9 of the LPA."
msgstr ""
#: src/Actor/templates/actor/instructions-preferences.html.twig:70
@@ -2214,25 +2228,11 @@ msgstr ""
msgid "What is your UK postcode?"
msgstr ""
-#: src/Actor/templates/actor/cannot-find-lpa.html.twig:71
-#: src/Actor/templates/actor/request-activation-key/postcode.html.twig:19
-#: src/Actor/templates/actor/check-your-answers.html.twig:71
-msgid "Do you live in the UK?"
-msgstr ""
-
#: src/Actor/templates/actor/request-activation-key/postcode.html.twig:30
#: src/Common/templates/common/cookies.html.twig:131
msgid "Yes"
msgstr ""
-#: src/Actor/templates/actor/cannot-find-lpa.html.twig:74
-#: src/Actor/templates/actor/request-activation-key/postcode.html.twig:35
-#: src/Actor/templates/actor/check-your-answers.html.twig:74
-#: src/Common/templates/common/cookies.html.twig:136
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:143
-msgid "No"
-msgstr ""
-
#: src/Actor/templates/actor/request-activation-key/attorney-details.html.twig:18
#: src/Actor/templates/actor/request-activation-key/stop-replacement-attorney.html.twig:3
msgid "Attorney details"
@@ -2477,58 +2477,54 @@ msgstr ""
msgid "If an LPA's reference number is not 12 numbers long, you cannot currently add that LPA to the service."
msgstr ""
-#: src/Actor/templates/actor/request-activation-key/reference-number.html.twig:39
-msgid "We are working to open up the service to more LPAs. Please try again in a few weeks time."
-msgstr ""
-
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:13
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:15
#: src/Actor/templates/actor/lpa-blank-dashboard.html.twig:13
msgid "Your lasting powers of attorney"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:19
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:21
msgid "Any lasting power of attorney (LPA) you add to your account will appear on this page."
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:21
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:23
#: src/Actor/templates/actor/lpa-blank-dashboard.html.twig:21
msgid "Find out about the role of an attorney and how to support the donor to make decisions."
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:26
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:28
#: src/Actor/templates/actor/lpa-blank-dashboard.html.twig:26
msgid "What can I do with this service?"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:30
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:32
#: src/Actor/templates/actor/lpa-blank-dashboard.html.twig:30
msgid "Use this service to:"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:32
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:34
#: src/Actor/templates/actor/lpa-blank-dashboard.html.twig:32
msgid "give organisations access to an online summary of an LPA by making a secure access code"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:33
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:35
#: src/Actor/templates/actor/lpa-blank-dashboard.html.twig:33
msgid "keep track of the organisations that have online access to an LPA"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:34
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:36
msgid "view an LPA summary, including a scanned image of the instructions and preferences if there are any"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:35
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:37
#: src/Actor/templates/actor/lpa-blank-dashboard.html.twig:35
msgid "ask for an activation key if you have not been given one - or it has expired"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:41
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:43
msgid "Add another LPA"
msgstr ""
-#: src/Actor/templates/actor/lpa-dashboard.html.twig:53
+#: src/Actor/templates/actor/lpa-dashboard.html.twig:55
msgid "You have %count% LPA in your account"
msgid_plural "You have %count% LPAs in your account"
msgstr[0] ""
@@ -2700,8 +2696,9 @@ msgstr ""
msgid "You must then contact us so we can correct the date on our records."
msgstr ""
-#: src/Actor/templates/actor/lpa-not-found.html.twig:27
-msgid "LPA reference number:"
+#: src/Actor/templates/actor/lpa-not-found.html.twig:24
+#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:57
+msgid "LPA reference number"
msgstr ""
#: src/Actor/templates/actor/lpa-not-found.html.twig:25
@@ -2822,10 +2819,6 @@ msgstr ""
msgid "Change postcode"
msgstr ""
-#: src/Actor/templates/actor/check-your-answers.html.twig:93
-msgid "These details must match the information we have about you on our records."
-msgstr ""
-
#: src/Actor/templates/actor/home-page.html.twig:3
msgid "Sign in or create an account"
msgstr ""
@@ -3289,26 +3282,11 @@ msgstr ""
msgid "You can only use this service if your LPA was registered on or after 1 January 2016."
msgstr ""
-#: src/Actor/templates/actor/partials/lpas-registered-after.html.twig:12
-msgid "You can only use this service if your LPA was registered on or after 1 September 2019."
-msgstr ""
-
#: src/Actor/templates/actor/partials/new-use-service.html.twig:5
#: src/Viewer/templates/viewer/new-view-service.html.twig:5
msgid "Your feedback(opens in new tab) will help us to improve"
msgstr ""
-#: src/Actor/templates/actor/partials/upcoming-service-downtime.html.twig:9
-#: src/Actor/templates/actor/partials/warning-upcoming-service-downtime.html.twig:6
-#: src/Viewer/templates/viewer/partials/upcoming-service-downtime.html.twig:9
-msgid "This service will be unavailable between 9pm on Friday 31st March 2023 and 9:30am on Saturday 1st April 2023."
-msgstr ""
-
-#: src/Actor/templates/actor/partials/upcoming-service-downtime.html.twig:11
-#: src/Actor/templates/actor/partials/warning-upcoming-service-downtime.html.twig:10
-msgid "If you need to use your lasting power of attorney during this time you can still use the paper LPA document."
-msgstr ""
-
#: src/Actor/templates/actor/partials/cancel-code-option.html.twig:8
msgid "Cancel organisation's access"
msgstr ""
@@ -3329,6 +3307,19 @@ msgstr ""
msgid "This LPA has instructions and preferences. You might need to show organisations the paper LPA."
msgstr ""
+#: src/Actor/templates/actor/partials/warning-upcoming-service-downtime.html.twig:6
+msgid "This service will be unavailable between 9pm on Friday 31st March 2023 and 9:30am on Saturday 1st April 2023."
+msgstr ""
+
+#: src/Actor/templates/actor/partials/warning-upcoming-service-downtime.html.twig:10
+msgid "If you need to use your lasting power of attorney during this time you can still use the paper LPA document."
+msgstr ""
+
+#: src/Actor/templates/actor/partials/service-message.html.twig:16
+#: src/Viewer/templates/viewer/partials/service-message.html.twig:16
+msgid "Important"
+msgstr ""
+
#: src/Actor/templates/actor/change-details.html.twig:3
msgid "Let us know if a donor or attorney’s details change"
msgstr ""
@@ -3353,8 +3344,8 @@ msgstr ""
msgid "the donor's or an attorney's name or address is misspelt"
msgstr ""
-#: src/Actor/templates/actor/change-details.html.twig:36
-msgid "a date of birth is wrong"
+#: src/Actor/templates/actor/change-details.html.twig:33
+msgid "an attorneys date of birth is wrong"
msgstr ""
#: src/Actor/templates/actor/change-details.html.twig:37
@@ -3679,12 +3670,13 @@ msgstr ""
msgid "This health and welfare LPA is valid"
msgstr ""
-#: src/Common/templates/partials/full-lpa-display.html.twig:38
-msgid "This LPA can only be used when the donor has lost capacity"
+#: src/Common/templates/partials/full-lpa-display.html.twig:33
+#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:20
+msgid "This LPA can only be used when the donor has lost capacity"
msgstr ""
-#: src/Common/templates/partials/full-lpa-display.html.twig:40
-msgid "This LPA can be used as soon as it's registered unless instructions say otherwise"
+#: src/Common/templates/partials/full-lpa-display.html.twig:35
+msgid "This LPA can be used as soon as it's registered unless instructions say otherwise"
msgstr ""
#: src/Common/templates/partials/full-lpa-display.html.twig:50
@@ -3761,11 +3753,6 @@ msgstr ""
msgid "The donor has said that this LPA can be used now. While the donor has mental capacity, you can only use the LPA if the donor allows you to."
msgstr ""
-#: src/Common/templates/partials/full-lpa-display.html.twig:33
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:20
-msgid "This LPA can only be used when the donor has lost capacity"
-msgstr ""
-
#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:30
msgid "Life-sustaining
treatment"
msgstr ""
@@ -3786,11 +3773,6 @@ msgstr ""
msgid "Registration date"
msgstr ""
-#: src/Actor/templates/actor/lpa-not-found.html.twig:24
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:57
-msgid "LPA reference number"
-msgstr ""
-
#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:66
msgid "Yes, the donor made instructions and/or preferences on their LPA."
msgstr ""
@@ -3803,10 +3785,6 @@ msgstr ""
msgid "Some words in these instructions or preferences have been removed by the court of protection. To check which words have been removed, please ask to see the paper LPA or the court order."
msgstr ""
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:98
-msgid "Some words in these instructions or preferences may have been removed by the Court of Protection. If you need to check this, please see the paper LPA."
-msgstr ""
-
#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:99
msgid "Preferences"
msgstr ""
@@ -3815,22 +3793,6 @@ msgstr ""
msgid "Yes, the donor made preferences on their LPA."
msgstr ""
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:119
-msgid "We cannot show the preferences for this LPA. Until we can fix this problem, you’ll need to show the paper LPA to anyone who needs to see them. You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:125
-msgid "We cannot show the preferences for this LPA. Until we can fix this problem, if you need to see these you’ll need to ask the person who gave you the access code to show you the paper LPA. You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:140
-msgid "A scanned image of the donor’s preferences will appear here soon. The first time may take up to 10 minutes. Please refresh this page."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:3
-msgid "A scanned copy of the donor’s preferences and/or instructions - the text cannot be digitised at present"
-msgstr ""
-
#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:133
msgid "Instructions"
msgstr ""
@@ -3839,22 +3801,6 @@ msgstr ""
msgid "Yes, the donor set instructions on their LPA."
msgstr ""
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:183
-msgid "We cannot show the instructions for this LPA. Until we can fix this problem, you’ll need to show the paper LPA to anyone who needs to see them. You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:189
-msgid "We cannot show the instructions for this LPA. Until we can fix this problem, if you need to see these you’ll need to ask the person who gave you the access code to show you the paper LPA. You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/lpa-details.html.twig:204
-msgid "A scanned image of the donor’s instructions will appear here soon. The first time may take up to 10 minutes. Please refresh this page."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:37
-msgid "Additional Information"
-msgstr ""
-
#: src/Common/templates/partials/lpa-summary-details/lpa-attorney-details.html.twig:1
msgid "The attorneys"
msgstr ""
@@ -3884,6 +3830,76 @@ msgid "%attorneyOrdinal% attorney"
msgid_plural "%attorneyOrdinal% attorney"
msgstr[0] ""
+#: src/Common/templates/partials/lpa-summary-details/lpa-attorney-details.html.twig:44
+msgid "(Trust corporation)"
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:3
+msgid "A scanned copy of the donor’s preferences and/or instructions - the text cannot be digitised at present"
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:37
+msgid "Additional Information"
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:49
+msgid ""
+"We cannot show the preferences for this LPA.\n"
+" Until we can fix this problem, you’ll need to show the paper\n"
+" LPA to anyone who needs to see them.\n"
+" You do not need to contact us. We are aware of this issue."
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:56
+msgid ""
+"We cannot show the preferences for this LPA.\n"
+" Until we can fix this problem, if you need to see these you’ll need to ask the person who\n"
+" gave you the access code to show you the paper LPA.\n"
+" You do not need to contact us. We are aware of this issue."
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:65
+msgid ""
+"A scanned image of the donor’s preferences will appear here soon.\n"
+" The first time may take up to 10 minutes.\n"
+" You do not need to stay on the page or refresh it whilst you wait."
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:72
+msgid ""
+"A scanned image of the donor’s preferences will appear here soon. The first time may\n"
+" take up to 10 minutes. Please refresh this page."
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:82
+msgid ""
+"We cannot show the instructions for this LPA.\n"
+" Until we can fix this problem, you’ll need to show the paper\n"
+" LPA to anyone who needs to see them.\n"
+" You do not need to contact us. We are aware of this issue."
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:89
+msgid ""
+"We cannot show the instructions for this LPA.\n"
+" Until we can fix this problem, if you need to see these you’ll need to ask the person who\n"
+" gave you the access code to show you the paper LPA.\n"
+" You do not need to contact us. We are aware of this issue."
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:97
+msgid ""
+"A scanned image of the donor’s instructions will appear here soon. The first time may\n"
+" take up to 10 minutes. Please refresh this page."
+msgstr ""
+
+#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:105
+msgid ""
+"A scanned image of the donor’s instructions will appear here soon.\n"
+" The first time may take up to 10 minutes.\n"
+" You do not need to stay on the page or refresh it whilst you wait."
+msgstr ""
+
#: src/Common/templates/partials/lpa-summary-details/lpa-donor-details.html.twig:1
msgid "The donor"
msgstr ""
@@ -3905,7 +3921,7 @@ msgid "Telephone"
msgstr ""
#: src/Common/templates/partials/contact-details/telephone.html.twig:3
-msgid "Telephone: 0300 456 0300
Textphone: 0115 934 2778
Monday to Friday, 9:30am to 5pm, except Wednesday, 10am to 5pm"
+msgid "Telephone: 0300 456 0300
Textphone: 0115 934 2778
Monday to Friday, 9:00am to 5pm, except Wednesday, 10am to 5pm"
msgstr ""
#: src/Common/templates/partials/contact-details/telephone.html.twig:8
@@ -3920,6 +3936,10 @@ msgstr ""
msgid "Email"
msgstr ""
+#: src/Common/templates/partials/flash-message.html.twig:5
+msgid "Success"
+msgstr ""
+
#: src/Common/templates/partials/flash-message.html.twig:10
msgid "You’ve set your cookie preferences."
msgstr ""
@@ -4056,7 +4076,7 @@ msgid "Although we could not find this LPA, it does not mean it does not exist,
msgstr ""
#: src/Viewer/templates/viewer/check-code-not-found.html.twig:32
-#: src/Viewer/templates/viewer/enter-code.html.twig:39
+#: src/Viewer/templates/viewer/enter-code.html.twig:42
msgid "LPA access code"
msgstr ""
@@ -4108,35 +4128,35 @@ msgstr ""
msgid "Enter LPA access code"
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:19
+#: src/Viewer/templates/viewer/enter-code.html.twig:22
msgid "Enter the LPA access code"
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:24
+#: src/Viewer/templates/viewer/enter-code.html.twig:27
msgid "An LPA access code is a unique code given to you by the donor or an attorney named on a lasting power of attorney."
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:31
+#: src/Viewer/templates/viewer/enter-code.html.twig:34
msgid "Donor's last name"
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:41
+#: src/Viewer/templates/viewer/enter-code.html.twig:44
msgid "Access codes are 13 characters long and start with a V
For example, V-AB12-CD34-EF56"
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:49
+#: src/Viewer/templates/viewer/enter-code.html.twig:52
msgid "The code I've been given does not begin with a V"
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:53
+#: src/Viewer/templates/viewer/enter-code.html.twig:56
msgid "The donor or attorney may have given you the wrong code."
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:54
+#: src/Viewer/templates/viewer/enter-code.html.twig:57
msgid "Ask them to go to www.gov.uk/use-lpa to create an LPA access code for your organisation."
msgstr ""
-#: src/Viewer/templates/viewer/enter-code.html.twig:58
+#: src/Viewer/templates/viewer/enter-code.html.twig:61
msgid "By continuing you agree to our terms of use (opens in new tab)."
msgstr ""
@@ -4316,11 +4336,6 @@ msgstr ""
msgid "We operate the View a lasting power of attorney service as part of our legal functions under the Mental Capacity Act 2005."
msgstr ""
-#: src/Actor/templates/actor/actor-privacy-notice.html.twig:117
-#: src/Viewer/templates/viewer/viewer-privacy-notice.html.twig:96
-msgid "How we store data"
-msgstr ""
-
#: src/Viewer/templates/viewer/viewer-privacy-notice.html.twig:103
msgid "It may sometimes be necessary to transfer personal information overseas. Any transfers made will fully comply with all aspects of data protection law."
msgstr ""
@@ -4447,97 +4462,3 @@ msgstr ""
msgctxt "flashMessage"
msgid "You've removed %donor%'s %lpaType% LPA"
msgstr ""
-
-#: src/Actor/templates/actor/view-lpa-summary.html.twig:133
-msgid "If any scanned images are not readable, organisations may ask to see the paper LPA so that they can find out what the instructions or preferences are."
-msgstr ""
-
-#: src/Actor/templates/actor/instructions-preferences.html.twig:28
-msgid "This scanned image is also shown to anyone you give an access code to. Please check that the scanned image is readable before giving an access code to organisations. This will work for all access codes made after 4 July 2023."
-msgstr ""
-
-#: src/Actor/templates/actor/instructions-preferences.html.twig:60
-msgid "On some LPAs made in or before 2015, instructions and preferences are called 'restrictions and conditions'. You’ll find them on page 9 of the LPA."
-msgstr ""
-
-#: src/Common/templates/partials/full-lpa-display.html.twig:35
-msgid "This LPA can be used as soon as it's registered unless instructions say otherwise"
-msgstr ""
-
-#: src/Actor/templates/actor/lpa-create-viewercode.html.twig:39
-msgid "The organisation could be a hospital, care home, or other health care provider. This is for your reference only"
-msgstr ""
-
-#: src/Actor/templates/actor/lpa-create-viewercode.html.twig:41
-msgid "The organisation could be a bank, energy provider, or another business. This is for your reference only"
-msgstr ""
-
-#: src/Actor/templates/actor/change-details.html.twig:33
-msgid "an attorneys date of birth is wrong"
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/lpa-attorney-details.html.twig:44
-msgid "(Trust corporation)"
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:49
-msgid ""
-"We cannot show the preferences for this LPA.\n"
-" Until we can fix this problem, you’ll need to show the paper\n"
-" LPA to anyone who needs to see them.\n"
-" You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:56
-msgid ""
-"We cannot show the preferences for this LPA.\n"
-" Until we can fix this problem, if you need to see these you’ll need to ask the person who\n"
-" gave you the access code to show you the paper LPA.\n"
-" You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:72
-msgid ""
-"A scanned image of the donor’s preferences will appear here soon. The first time may\n"
-" take up to 10 minutes. Please refresh this page."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:82
-msgid ""
-"We cannot show the instructions for this LPA.\n"
-" Until we can fix this problem, you’ll need to show the paper\n"
-" LPA to anyone who needs to see them.\n"
-" You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:89
-msgid ""
-"We cannot show the instructions for this LPA.\n"
-" Until we can fix this problem, if you need to see these you’ll need to ask the person who\n"
-" gave you the access code to show you the paper LPA.\n"
-" You do not need to contact us. We are aware of this issue."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:97
-msgid ""
-"A scanned image of the donor’s instructions will appear here soon. The first time may\n"
-" take up to 10 minutes. Please refresh this page."
-msgstr ""
-
-#: src/Common/templates/partials/flash-message.html.twig:5
-msgid "Success"
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:65
-msgid ""
-"A scanned image of the donor’s preferences will appear here soon.\n"
-" The first time may take up to 10 minutes.\n"
-" You do not need to stay on the page or refresh it whilst you wait."
-msgstr ""
-
-#: src/Common/templates/partials/lpa-summary-details/iap-macros.html.twig:105
-msgid ""
-"A scanned image of the donor’s instructions will appear here soon.\n"
-" The first time may take up to 10 minutes.\n"
-" You do not need to stay on the page or refresh it whilst you wait."
-msgstr ""
diff --git a/service-front/app/src/Common/templates/partials/contact-details/telephone.html.twig b/service-front/app/src/Common/templates/partials/contact-details/telephone.html.twig
index 4a20a4c285..6285b5bc22 100644
--- a/service-front/app/src/Common/templates/partials/contact-details/telephone.html.twig
+++ b/service-front/app/src/Common/templates/partials/contact-details/telephone.html.twig
@@ -2,7 +2,7 @@
{% trans %}Telephone: 0300 456 0300
Textphone: 0115 934 2778
- Monday to Friday, 9:30am to 5pm, except Wednesday, 10am to 5pm{% endtrans %}
+ Monday to Friday, 9:00am to 5pm, except Wednesday, 10am to 5pm{% endtrans %}
{% trans %}Find out about call charges{% endtrans %}
diff --git a/service-front/web/package-lock.json b/service-front/web/package-lock.json
index 2317db4daf..162d69925a 100644
--- a/service-front/web/package-lock.json
+++ b/service-front/web/package-lock.json
@@ -37,7 +37,7 @@
"eslint-plugin-prettier": "^4.2.1",
"jest": "^29.2.0",
"jest-environment-jsdom": "^29.2.2",
- "jest-junit": "^13.2.0",
+ "jest-junit": "^16.0.0",
"prettier": "^2.7.1",
"sass": "^1.55.0"
}
@@ -6941,9 +6941,9 @@
}
},
"node_modules/jest-junit": {
- "version": "13.2.0",
- "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.2.0.tgz",
- "integrity": "sha512-B0XNlotl1rdsvFZkFfoa19mc634+rrd8E4Sskb92Bb8MmSXeWV9XJGUyctunZS1W410uAxcyYuPUGVnbcOH8cg==",
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz",
+ "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==",
"dev": true,
"dependencies": {
"mkdirp": "^1.0.4",
diff --git a/service-front/web/package.json b/service-front/web/package.json
index ca5e5de176..e4228d5471 100644
--- a/service-front/web/package.json
+++ b/service-front/web/package.json
@@ -37,7 +37,7 @@
"eslint-plugin-prettier": "^4.2.1",
"jest": "^29.2.0",
"jest-environment-jsdom": "^29.2.2",
- "jest-junit": "^13.2.0",
+ "jest-junit": "^16.0.0",
"prettier": "^2.7.1",
"sass": "^1.55.0"
},
diff --git a/terraform/account/pagerduty.tf b/terraform/account/pagerduty.tf
index 0390e74a78..4a96845d4a 100644
--- a/terraform/account/pagerduty.tf
+++ b/terraform/account/pagerduty.tf
@@ -66,12 +66,6 @@ data "aws_iam_policy_document" "pagerduty_sns_kms" {
}
}
-
-
-# data "pagerduty_service" "pagerduty" {
-# name = local.account.pagerduty_service_name
-# }
-
data "pagerduty_vendor" "cloudwatch" {
name = "Cloudwatch"
}
@@ -79,8 +73,7 @@ data "pagerduty_vendor" "cloudwatch" {
resource "pagerduty_service_integration" "cloudwatch_integration" {
name = "${data.pagerduty_vendor.cloudwatch.name} ${local.environment} Account"
service = local.account.pagerduty_service_id
- # service = data.pagerduty_service.pagerduty.id
- vendor = data.pagerduty_vendor.cloudwatch.id
+ vendor = data.pagerduty_vendor.cloudwatch.id
}
resource "aws_sns_topic" "cloudwatch_to_pagerduty" {
diff --git a/terraform/environment/autoscaling.tf b/terraform/environment/autoscaling.tf
deleted file mode 100644
index 3afb5d6b6e..0000000000
--- a/terraform/environment/autoscaling.tf
+++ /dev/null
@@ -1,40 +0,0 @@
-module "view_ecs_autoscaling" {
- source = "./modules/ecs_autoscaling"
- environment = local.environment_name
- aws_ecs_cluster_name = module.eu_west_1.ecs_cluster.name
- aws_ecs_service_name = module.eu_west_1.ecs_services.viewer.name
- ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
- ecs_task_autoscaling_minimum = local.environment.autoscaling.view.minimum
- ecs_task_autoscaling_maximum = local.environment.autoscaling.view.maximum
- max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
-}
-module "use_ecs_autoscaling" {
- source = "./modules/ecs_autoscaling"
- environment = local.environment_name
- aws_ecs_cluster_name = module.eu_west_1.ecs_cluster.name
- aws_ecs_service_name = module.eu_west_1.ecs_services.actor.name
- ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
- ecs_task_autoscaling_minimum = local.environment.autoscaling.use.minimum
- ecs_task_autoscaling_maximum = local.environment.autoscaling.use.maximum
- max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
-}
-module "api_ecs_autoscaling" {
- source = "./modules/ecs_autoscaling"
- environment = local.environment_name
- aws_ecs_cluster_name = module.eu_west_1.ecs_cluster.name
- aws_ecs_service_name = module.eu_west_1.ecs_services.api.name
- ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
- ecs_task_autoscaling_minimum = local.environment.autoscaling.api.minimum
- ecs_task_autoscaling_maximum = local.environment.autoscaling.api.maximum
- max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
-}
-module "pdf_ecs_autoscaling" {
- source = "./modules/ecs_autoscaling"
- environment = local.environment_name
- aws_ecs_cluster_name = module.eu_west_1.ecs_cluster.name
- aws_ecs_service_name = module.eu_west_1.ecs_services.pdf.name
- ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
- ecs_task_autoscaling_minimum = local.environment.autoscaling.pdf.minimum
- ecs_task_autoscaling_maximum = local.environment.autoscaling.pdf.maximum
- max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
-}
diff --git a/terraform/environment/dynamodb.tf b/terraform/environment/dynamodb.tf
index c24e33cce2..1af40e444b 100644
--- a/terraform/environment/dynamodb.tf
+++ b/terraform/environment/dynamodb.tf
@@ -1,7 +1,9 @@
resource "aws_dynamodb_table" "actor_codes_table" {
- name = "${local.environment_name}-${local.environment.dynamodb_tables.actor_codes.name}"
- billing_mode = "PAY_PER_REQUEST"
- hash_key = "ActorCode"
+ name = "${local.environment_name}-${local.environment.dynamodb_tables.actor_codes.name}"
+ billing_mode = "PAY_PER_REQUEST"
+ hash_key = "ActorCode"
+ stream_enabled = true
+ stream_view_type = "NEW_AND_OLD_IMAGES"
server_side_encryption {
enabled = true
}
@@ -15,15 +17,34 @@ resource "aws_dynamodb_table" "actor_codes_table" {
enabled = true
}
+ # For each region in the environment that is not the primary_region, create a DynamoDB replica.
+
+ dynamic "replica" {
+ for_each = [
+ for region in local.environment.regions : region
+ if region.is_primary != true
+ ]
+
+ content {
+ region_name = replica.value.name
+ propagate_tags = true
+
+ }
+ }
+
lifecycle {
prevent_destroy = false
}
+
+ provider = aws.eu_west_1
}
resource "aws_dynamodb_table" "stats_table" {
- name = "${local.environment_name}-${local.environment.dynamodb_tables.stats.name}"
- billing_mode = "PAY_PER_REQUEST"
- hash_key = "TimePeriod"
+ name = "${local.environment_name}-${local.environment.dynamodb_tables.stats.name}"
+ billing_mode = "PAY_PER_REQUEST"
+ hash_key = "TimePeriod"
+ stream_enabled = true
+ stream_view_type = "NEW_AND_OLD_IMAGES"
#tfsec:ignore:aws-dynamodb-table-customer-key - same as the other tables. Will update in one go as separate ticket
server_side_encryption {
enabled = true
@@ -38,15 +59,31 @@ resource "aws_dynamodb_table" "stats_table" {
enabled = true
}
+ dynamic "replica" {
+ for_each = [
+ for region in local.environment.regions : region
+ if region.is_primary != true
+ ]
+
+ content {
+ region_name = replica.value.name
+ propagate_tags = true
+ }
+ }
+
lifecycle {
prevent_destroy = false
}
+
+ provider = aws.eu_west_1
}
resource "aws_dynamodb_table" "actor_users_table" {
- name = "${local.environment_name}-${local.environment.dynamodb_tables.actor_users.name}"
- billing_mode = "PAY_PER_REQUEST"
- hash_key = "Id"
+ name = "${local.environment_name}-${local.environment.dynamodb_tables.actor_users.name}"
+ billing_mode = "PAY_PER_REQUEST"
+ hash_key = "Id"
+ stream_enabled = true
+ stream_view_type = "NEW_AND_OLD_IMAGES"
server_side_encryption {
enabled = true
}
@@ -111,16 +148,31 @@ resource "aws_dynamodb_table" "actor_users_table" {
enabled = true
}
+ dynamic "replica" {
+ for_each = [
+ for region in local.environment.regions : region
+ if region.is_primary != true
+ ]
+
+ content {
+ region_name = replica.value.name
+ propagate_tags = true
+ }
+ }
lifecycle {
prevent_destroy = false
}
+
+ provider = aws.eu_west_1
}
resource "aws_dynamodb_table" "viewer_codes_table" {
- name = "${local.environment_name}-${local.environment.dynamodb_tables.viewer_codes.name}"
- billing_mode = "PAY_PER_REQUEST"
- hash_key = "ViewerCode"
+ name = "${local.environment_name}-${local.environment.dynamodb_tables.viewer_codes.name}"
+ billing_mode = "PAY_PER_REQUEST"
+ hash_key = "ViewerCode"
+ stream_enabled = true
+ stream_view_type = "NEW_AND_OLD_IMAGES"
server_side_encryption {
enabled = true
}
@@ -151,17 +203,33 @@ resource "aws_dynamodb_table" "viewer_codes_table" {
enabled = true
}
+ dynamic "replica" {
+ for_each = [
+ for region in local.environment.regions : region
+ if region.is_primary != true
+ ]
+
+ content {
+ region_name = replica.value.name
+ propagate_tags = true
+ }
+ }
+
lifecycle {
prevent_destroy = false
}
+
+ provider = aws.eu_west_1
}
resource "aws_dynamodb_table" "viewer_activity_table" {
- name = "${local.environment_name}-${local.environment.dynamodb_tables.viewer_activity.name}"
- billing_mode = "PAY_PER_REQUEST"
- hash_key = "ViewerCode"
- range_key = "Viewed"
+ name = "${local.environment_name}-${local.environment.dynamodb_tables.viewer_activity.name}"
+ billing_mode = "PAY_PER_REQUEST"
+ hash_key = "ViewerCode"
+ range_key = "Viewed"
+ stream_enabled = true
+ stream_view_type = "NEW_AND_OLD_IMAGES"
server_side_encryption {
enabled = true
}
@@ -179,16 +247,32 @@ resource "aws_dynamodb_table" "viewer_activity_table" {
enabled = true
}
+ dynamic "replica" {
+ for_each = [
+ for region in local.environment.regions : region
+ if region.is_primary != true
+ ]
+
+ content {
+ region_name = replica.value.name
+ propagate_tags = true
+ }
+ }
+
lifecycle {
prevent_destroy = false
}
+
+ provider = aws.eu_west_1
}
resource "aws_dynamodb_table" "user_lpa_actor_map" {
- name = "${local.environment_name}-${local.environment.dynamodb_tables.user_lpa_actor_map.name}"
- billing_mode = "PAY_PER_REQUEST"
- hash_key = "Id"
+ name = "${local.environment_name}-${local.environment.dynamodb_tables.user_lpa_actor_map.name}"
+ billing_mode = "PAY_PER_REQUEST"
+ hash_key = "Id"
+ stream_enabled = true
+ stream_view_type = "NEW_AND_OLD_IMAGES"
server_side_encryption {
enabled = true
}
@@ -240,8 +324,21 @@ resource "aws_dynamodb_table" "user_lpa_actor_map" {
enabled = true
}
+ dynamic "replica" {
+ for_each = [
+ for region in local.environment.regions : region
+ if region.is_primary != true
+ ]
+
+ content {
+ region_name = replica.value.name
+ propagate_tags = true
+ }
+ }
lifecycle {
prevent_destroy = false
}
+
+ provider = aws.eu_west_1
}
diff --git a/terraform/environment/locals.tf b/terraform/environment/locals.tf
index 17ad3e0399..a5cbf801be 100644
--- a/terraform/environment/locals.tf
+++ b/terraform/environment/locals.tf
@@ -104,7 +104,14 @@ variable "environments" {
stats = object({
name = string
})
- })
+ }),
+ regions = map(
+ object({
+ name = string
+ is_active = bool
+ is_primary = bool
+ })
+ )
})
)
}
diff --git a/terraform/environment/refactor.tf b/terraform/environment/refactor.tf
index e33b4e3408..0617a4984e 100644
--- a/terraform/environment/refactor.tf
+++ b/terraform/environment/refactor.tf
@@ -391,3 +391,473 @@ moved {
from = aws_security_group_rule.viewer_loadbalancer_ingress_public_access[0]
to = module.eu_west_1.aws_security_group_rule.viewer_loadbalancer_ingress_public_access[0]
}
+
+moved {
+ from = aws_cloudwatch_log_group.application_logs
+ to = module.eu_west_1.aws_cloudwatch_log_group.application_logs
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.api_5xx_errors
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.api_5xx_errors
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACCOUNT_ACTIVATED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACCOUNT_ACTIVATED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACCOUNT_CREATED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACCOUNT_CREATED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACCOUNT_DELETED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACCOUNT_DELETED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACTIVATION_KEY_REQUEST_REPLACEMENT_ATTORNEY"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ACTIVATION_KEY_REQUEST_REPLACEMENT_ATTORNEY"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADDED_LPA_TYPE_HW"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADDED_LPA_TYPE_HW"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADDED_LPA_TYPE_PFA"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADDED_LPA_TYPE_PFA"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_ALREADY_ADDED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_ALREADY_ADDED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_FAILURE"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_FAILURE"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_FOUND"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_FOUND"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_NOT_ELIGIBLE"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_NOT_ELIGIBLE"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_NOT_FOUND"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_NOT_FOUND"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_SUCCESS"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.ADD_LPA_SUCCESS"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.DOWNLOAD_SUMMARY"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.DOWNLOAD_SUMMARY"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.FULL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_HW"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.FULL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_HW"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.FULL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_PFA"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.FULL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_PFA"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.IDENTITY_HASH_CHANGE"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.IDENTITY_HASH_CHANGE"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.LPA_REMOVED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.LPA_REMOVED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_ALREADY_ADDED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_ALREADY_ADDED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_DOES_NOT_MATCH"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_DOES_NOT_MATCH"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_FORCE_ACTIVATION_KEY"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_FORCE_ACTIVATION_KEY"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_FOUND"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_FOUND"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_HAS_ACTIVATION_KEY"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_HAS_ACTIVATION_KEY"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_INVALID_STATUS"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_INVALID_STATUS"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_KEY_ALREADY_REQUESTED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_KEY_ALREADY_REQUESTED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_NEEDS_CLEANSING"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_NEEDS_CLEANSING"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_NOT_ELIGIBLE"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_NOT_ELIGIBLE"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_NOT_FOUND"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_NOT_FOUND"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_PARTIAL_MATCH_HAS_BEEN_CLEANSED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_PARTIAL_MATCH_HAS_BEEN_CLEANSED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_PARTIAL_MATCH_TOO_RECENT"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_PARTIAL_MATCH_TOO_RECENT"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_SUCCESS"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_SUCCESS"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_TOO_OLD"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.OLDER_LPA_TOO_OLD"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.PARTIAL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_HW"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.PARTIAL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_HW"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.PARTIAL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_PFA"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.PARTIAL_MATCH_KEY_REQUEST_SUCCESS_LPA_TYPE_PFA"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.SHARE_CODE_NOT_FOUND"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.SHARE_CODE_NOT_FOUND"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.UNEXPECTED_DATA_LPA_API_RESPONSE"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.UNEXPECTED_DATA_LPA_API_RESPONSE"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.USER_ABROAD_ADDRESS_REQUEST_SUCCESS"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.USER_ABROAD_ADDRESS_REQUEST_SUCCESS"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_CANCELLED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_CANCELLED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_EXPIRED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_EXPIRED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_NOT_FOUND"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_NOT_FOUND"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_SUCCESS"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["event_code.VIEW_LPA_SHARE_CODE_SUCCESS"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["key_status.ACTIVATION_KEY_EXISTS"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["key_status.ACTIVATION_KEY_EXISTS"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["key_status.ACTIVATION_KEY_EXPIRED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["key_status.ACTIVATION_KEY_EXPIRED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["key_status.ACTIVATION_KEY_NOT_EXISTS"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["key_status.ACTIVATION_KEY_NOT_EXISTS"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["phone.OOLPA_PHONE_NUMBER_NOT_PROVIDED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["phone.OOLPA_PHONE_NUMBER_NOT_PROVIDED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["phone.OOLPA_PHONE_NUMBER_PROVIDED"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["phone.OOLPA_PHONE_NUMBER_PROVIDED"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["role.OOLPA_KEY_REQUESTED_FOR_ATTORNEY"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["role.OOLPA_KEY_REQUESTED_FOR_ATTORNEY"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.log_event_code_metrics["role.OOLPA_KEY_REQUESTED_FOR_DONOR"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.log_event_code_metrics["role.OOLPA_KEY_REQUESTED_FOR_DONOR"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.login_attempt_failures["401"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.login_attempt_failures["401"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.login_attempt_failures["403"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.login_attempt_failures["403"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.login_attempt_failures["404"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.login_attempt_failures["404"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.rate_limiting_metrics["actor_code_failure"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.rate_limiting_metrics["actor_code_failure"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.rate_limiting_metrics["actor_login_failure"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.rate_limiting_metrics["actor_login_failure"]
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.rate_limiting_metrics["viewer_code_failure"]
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.rate_limiting_metrics["viewer_code_failure"]
+}
+
+moved {
+ from = aws_cloudwatch_metric_alarm.actor_5xx_errors
+ to = module.eu_west_1.aws_cloudwatch_metric_alarm.actor_5xx_errors
+}
+
+moved {
+ from = aws_cloudwatch_metric_alarm.actor_ddos_attack_external
+ to = module.eu_west_1.aws_cloudwatch_metric_alarm.actor_ddos_attack_external
+}
+
+moved {
+ from = aws_cloudwatch_metric_alarm.admin_ddos_attack_external
+ to = module.eu_west_1.aws_cloudwatch_metric_alarm.admin_ddos_attack_external
+}
+
+moved {
+ from = aws_cloudwatch_metric_alarm.api_5xx_errors
+ to = module.eu_west_1.aws_cloudwatch_metric_alarm.api_5xx_errors
+}
+
+moved {
+ from = aws_cloudwatch_metric_alarm.unexpected_data_lpa_api_resposnes
+ to = module.eu_west_1.aws_cloudwatch_metric_alarm.unexpected_data_lpa_api_resposnes
+}
+
+moved {
+ from = aws_cloudwatch_metric_alarm.viewer_5xx_errors
+ to = module.eu_west_1.aws_cloudwatch_metric_alarm.viewer_5xx_errors
+}
+
+moved {
+ from = aws_cloudwatch_metric_alarm.viewer_ddos_attack_external
+ to = module.eu_west_1.aws_cloudwatch_metric_alarm.viewer_ddos_attack_external
+}
+
+moved {
+ from = aws_cloudwatch_query_definition.app_container_messages
+ to = module.eu_west_1.aws_cloudwatch_query_definition.app_container_messages
+}
+
+moved {
+ from = aws_cloudwatch_log_group.application_logs
+ to = module.eu_west_1.aws_cloudwatch_log_group.application_logs
+}
+
+moved {
+ from = aws_cloudwatch_log_metric_filter.api_5xx_errors
+ to = module.eu_west_1.aws_cloudwatch_log_metric_filter.api_5xx_errors
+}
+
+moved {
+ from = aws_sns_topic.cloudwatch_to_pagerduty
+ to = module.eu_west_1.aws_sns_topic.cloudwatch_to_pagerduty
+}
+
+moved {
+ from = pagerduty_service_integration.cloudwatch_integration
+ to = module.eu_west_1.pagerduty_service_integration.cloudwatch_integration
+}
+
+moved {
+ from = aws_sns_topic_subscription.cloudwatch_sns_subscription
+ to = module.eu_west_1.aws_sns_topic_subscription.cloudwatch_sns_subscription
+}
+
+moved {
+ from = module.api_ecs_autoscaling.aws_appautoscaling_policy.down
+ to = module.eu_west_1.module.api_ecs_autoscaling.aws_appautoscaling_policy.down
+}
+
+moved {
+ from = module.api_ecs_autoscaling.aws_appautoscaling_policy.up
+ to = module.eu_west_1.module.api_ecs_autoscaling.aws_appautoscaling_policy.up
+}
+
+moved {
+ from = module.api_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+ to = module.eu_west_1.module.api_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+}
+
+moved {
+ from = module.api_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+ to = module.eu_west_1.module.api_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+}
+
+moved {
+ from = module.api_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+ to = module.eu_west_1.module.api_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+}
+
+moved {
+ from = module.api_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+ to = module.eu_west_1.module.api_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+}
+
+moved {
+ from = module.pdf_ecs_autoscaling.aws_appautoscaling_policy.down
+ to = module.eu_west_1.module.pdf_ecs_autoscaling.aws_appautoscaling_policy.down
+}
+
+moved {
+ from = module.pdf_ecs_autoscaling.aws_appautoscaling_policy.up
+ to = module.eu_west_1.module.pdf_ecs_autoscaling.aws_appautoscaling_policy.up
+}
+
+moved {
+ from = module.pdf_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+ to = module.eu_west_1.module.pdf_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+}
+
+moved {
+ from = module.pdf_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+ to = module.eu_west_1.module.pdf_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+}
+
+moved {
+ from = module.pdf_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+ to = module.eu_west_1.module.pdf_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+}
+
+moved {
+ from = module.pdf_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+ to = module.eu_west_1.module.pdf_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+}
+
+moved {
+ from = module.use_ecs_autoscaling.aws_appautoscaling_policy.down
+ to = module.eu_west_1.module.use_ecs_autoscaling.aws_appautoscaling_policy.down
+}
+
+moved {
+ from = module.use_ecs_autoscaling.aws_appautoscaling_policy.up
+ to = module.eu_west_1.module.use_ecs_autoscaling.aws_appautoscaling_policy.up
+}
+
+moved {
+ from = module.use_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+ to = module.eu_west_1.module.use_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+}
+
+moved {
+ from = module.use_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+ to = module.eu_west_1.module.use_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+}
+
+moved {
+ from = module.use_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+ to = module.eu_west_1.module.use_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+}
+
+moved {
+ from = module.use_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+ to = module.eu_west_1.module.use_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+}
+
+moved {
+ from = module.view_ecs_autoscaling.aws_appautoscaling_policy.down
+ to = module.eu_west_1.module.view_ecs_autoscaling.aws_appautoscaling_policy.down
+}
+
+moved {
+ from = module.view_ecs_autoscaling.aws_appautoscaling_policy.up
+ to = module.eu_west_1.module.view_ecs_autoscaling.aws_appautoscaling_policy.up
+}
+
+moved {
+ from = module.view_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+ to = module.eu_west_1.module.view_ecs_autoscaling.aws_appautoscaling_target.ecs_service
+}
+
+moved {
+ from = module.view_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+ to = module.eu_west_1.module.view_ecs_autoscaling.aws_cloudwatch_metric_alarm.max_scaling_reached
+}
+
+moved {
+ from = module.view_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+ to = module.eu_west_1.module.view_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_down
+}
+
+moved {
+ from = module.view_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+ to = module.eu_west_1.module.view_ecs_autoscaling.aws_cloudwatch_metric_alarm.scale_up
+}
+
+moved {
+ from = aws_cloudwatch_log_subscription_filter.events
+ to = module.eu_west_1.aws_cloudwatch_log_subscription_filter.events
+}
+
+moved {
+ from = aws_lambda_permission.allow_cloudwatch
+ to = module.eu_west_1.aws_lambda_permission.allow_cloudwatch
+}
diff --git a/terraform/environment/region.tf b/terraform/environment/region.tf
index 39e3cdf9df..5e69355b83 100644
--- a/terraform/environment/region.tf
+++ b/terraform/environment/region.tf
@@ -3,7 +3,6 @@ module "eu_west_1" {
account_name = local.environment.account_name
admin_container_version = var.admin_container_version
- application_logs_name = aws_cloudwatch_log_group.application_logs.name
autoscaling = local.environment.autoscaling
aws_service_discovery_service = aws_service_discovery_private_dns_namespace.internal_ecs
capacity_provider = local.capacity_provider
@@ -18,16 +17,20 @@ module "eu_west_1" {
iap_images_endpoint = local.environment.iap_images_endpoint
load_balancer_deletion_protection_enabled = local.environment.load_balancer_deletion_protection_enabled
logging_level = local.environment.logging_level
+ log_retention_days = local.environment.log_retention_in_days
lpa_codes_endpoint = local.environment.lpa_codes_endpoint
lpas_collection_endpoint = local.environment.lpas_collection_endpoint
moj_sites = module.allow_list.moj_sites
notify_key_secret_name = local.environment.notify_key_secret_name
parameter_store_arns = [aws_ssm_parameter.system_message_view_en.arn, aws_ssm_parameter.system_message_view_cy.arn, aws_ssm_parameter.system_message_use_en.arn, aws_ssm_parameter.system_message_use_cy.arn]
+ pagerduty_service_id = local.environment.pagerduty_service_id
pdf_container_version = local.environment.pdf_container_version
public_access_enabled = var.public_access_enabled
+ regions = local.environment.regions
session_expires_use = local.environment.session_expires_use
session_expires_view = local.environment.session_expires_view
session_expiry_warning = local.environment.session_expiry_warning
+ ship_metrics_queue_enabled = local.environment.ship_metrics_queue_enabled
sirius_account_id = local.environment.sirius_account_id
@@ -73,7 +76,6 @@ module "eu_west_1" {
"viewer" = aws_route53_record.viewer_use_my_lpa.fqdn
}
-
providers = {
aws.region = aws.eu_west_1
aws.management = aws.management
diff --git a/terraform/environment/region/actor_ecs.tf b/terraform/environment/region/actor_ecs.tf
index 51e6e2a24b..d0a4f9b715 100644
--- a/terraform/environment/region/actor_ecs.tf
+++ b/terraform/environment/region/actor_ecs.tf
@@ -5,7 +5,7 @@ resource "aws_ecs_service" "actor" {
name = "actor-service"
cluster = aws_ecs_cluster.use_an_lpa.id
task_definition = aws_ecs_task_definition.actor.arn
- desired_count = var.autoscaling.use.minimum
+ desired_count = local.use_desired_count
platform_version = "1.4.0"
network_configuration {
@@ -186,7 +186,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.actor-web.use-an-lpa"
}
@@ -233,7 +233,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.actor-otel.use-an-lpa"
}
@@ -266,7 +266,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.actor-app.use-an-lpa"
}
diff --git a/terraform/environment/region/admin_ecs.tf b/terraform/environment/region/admin_ecs.tf
index 17f5e0aabd..fb99508389 100644
--- a/terraform/environment/region/admin_ecs.tf
+++ b/terraform/environment/region/admin_ecs.tf
@@ -5,7 +5,7 @@ resource "aws_ecs_service" "admin" {
name = "admin-service"
cluster = aws_ecs_cluster.use_an_lpa.id
task_definition = aws_ecs_task_definition.admin.arn
- desired_count = 1
+ desired_count = local.admin_desired_count
platform_version = "1.4.0"
network_configuration {
@@ -165,16 +165,16 @@ data "aws_iam_policy_document" "admin_permissions_role" {
]
resources = [
- var.dynamodb_tables.actor_users_table.arn,
- "${var.dynamodb_tables.actor_users_table.arn}/index/*",
- var.dynamodb_tables.viewer_codes_table.arn,
- "${var.dynamodb_tables.viewer_codes_table.arn}/index/*",
- var.dynamodb_tables.viewer_activity_table.arn,
- "${var.dynamodb_tables.viewer_activity_table.arn}/index/*",
- var.dynamodb_tables.user_lpa_actor_map.arn,
- "${var.dynamodb_tables.user_lpa_actor_map.arn}/index/*",
- var.dynamodb_tables.stats_table.arn,
- "${var.dynamodb_tables.stats_table.arn}/index/*",
+ local.dynamodb_tables_arns.actor_users_table_arn,
+ "${local.dynamodb_tables_arns.actor_users_table_arn}/index/*",
+ local.dynamodb_tables_arns.viewer_codes_table_arn,
+ "${local.dynamodb_tables_arns.viewer_codes_table_arn}/index/*",
+ local.dynamodb_tables_arns.viewer_activity_table_arn,
+ "${local.dynamodb_tables_arns.viewer_activity_table_arn}/index/*",
+ local.dynamodb_tables_arns.user_lpa_actor_map_arn,
+ "${local.dynamodb_tables_arns.user_lpa_actor_map_arn}/index/*",
+ local.dynamodb_tables_arns.stats_table_arn,
+ "${local.dynamodb_tables_arns.stats_table_arn}/index/*",
]
}
@@ -239,7 +239,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.admin-app.use-an-lpa"
}
diff --git a/terraform/environment/region/api_ecs.tf b/terraform/environment/region/api_ecs.tf
index 5823a957a6..457d3cf2c6 100644
--- a/terraform/environment/region/api_ecs.tf
+++ b/terraform/environment/region/api_ecs.tf
@@ -5,7 +5,7 @@ resource "aws_ecs_service" "api" {
name = "api-service"
cluster = aws_ecs_cluster.use_an_lpa.id
task_definition = aws_ecs_task_definition.api.arn
- desired_count = var.autoscaling.api.minimum
+ desired_count = local.api_desired_count
platform_version = "1.4.0"
health_check_grace_period_seconds = 0
@@ -193,18 +193,18 @@ data "aws_iam_policy_document" "api_permissions_role" {
]
resources = [
- var.dynamodb_tables.actor_codes_table.arn,
- "${var.dynamodb_tables.actor_codes_table.arn}/index/*",
- var.dynamodb_tables.actor_users_table.arn,
- "${var.dynamodb_tables.actor_users_table.arn}/index/*",
- var.dynamodb_tables.viewer_codes_table.arn,
- "${var.dynamodb_tables.viewer_codes_table.arn}/index/*",
- var.dynamodb_tables.viewer_activity_table.arn,
- "${var.dynamodb_tables.viewer_activity_table.arn}/index/*",
- var.dynamodb_tables.user_lpa_actor_map.arn,
- "${var.dynamodb_tables.user_lpa_actor_map.arn}/index/*",
- var.dynamodb_tables.stats_table.arn,
- "${var.dynamodb_tables.stats_table.arn}/index/*",
+ local.dynamodb_tables_arns.actor_codes_table_arn,
+ "${local.dynamodb_tables_arns.actor_codes_table_arn}/index/*",
+ local.dynamodb_tables_arns.actor_users_table_arn,
+ "${local.dynamodb_tables_arns.actor_users_table_arn}/index/*",
+ local.dynamodb_tables_arns.viewer_codes_table_arn,
+ "${local.dynamodb_tables_arns.viewer_codes_table_arn}/index/*",
+ local.dynamodb_tables_arns.viewer_activity_table_arn,
+ "${local.dynamodb_tables_arns.viewer_activity_table_arn}/index/*",
+ local.dynamodb_tables_arns.user_lpa_actor_map_arn,
+ "${local.dynamodb_tables_arns.user_lpa_actor_map_arn}/index/*",
+ local.dynamodb_tables_arns.stats_table_arn,
+ "${local.dynamodb_tables_arns.stats_table_arn}/index/*",
]
}
@@ -282,7 +282,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.api-web.use-an-lpa"
}
@@ -325,7 +325,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.actor-otel.use-an-lpa"
}
@@ -358,7 +358,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.api-app.use-an-lpa"
}
diff --git a/terraform/environment/region/autoscaling.tf b/terraform/environment/region/autoscaling.tf
new file mode 100644
index 0000000000..209899fd54
--- /dev/null
+++ b/terraform/environment/region/autoscaling.tf
@@ -0,0 +1,59 @@
+module "view_ecs_autoscaling" {
+ source = "./modules/ecs_autoscaling"
+ environment = var.environment_name
+ aws_ecs_cluster_name = aws_ecs_cluster.use_an_lpa.name
+ aws_ecs_service_name = aws_ecs_service.viewer.name
+ ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
+ ecs_task_autoscaling_minimum = local.view_desired_count
+ ecs_task_autoscaling_maximum = var.autoscaling.view.maximum
+ max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
+
+ providers = {
+ aws.region = aws.region
+ }
+}
+
+module "use_ecs_autoscaling" {
+ source = "./modules/ecs_autoscaling"
+ environment = var.environment_name
+ aws_ecs_cluster_name = aws_ecs_cluster.use_an_lpa.name
+ aws_ecs_service_name = aws_ecs_service.actor.name
+ ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
+ ecs_task_autoscaling_minimum = local.use_desired_count
+ ecs_task_autoscaling_maximum = var.autoscaling.use.maximum
+ max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
+
+ providers = {
+ aws.region = aws.region
+ }
+}
+
+module "api_ecs_autoscaling" {
+ source = "./modules/ecs_autoscaling"
+ environment = var.environment_name
+ aws_ecs_cluster_name = aws_ecs_cluster.use_an_lpa.name
+ aws_ecs_service_name = aws_ecs_service.api.name
+ ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
+ ecs_task_autoscaling_minimum = local.api_desired_count
+ ecs_task_autoscaling_maximum = var.autoscaling.api.maximum
+ max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
+
+ providers = {
+ aws.region = aws.region
+ }
+}
+
+module "pdf_ecs_autoscaling" {
+ source = "./modules/ecs_autoscaling"
+ environment = var.environment_name
+ aws_ecs_cluster_name = aws_ecs_cluster.use_an_lpa.name
+ aws_ecs_service_name = aws_ecs_service.pdf.name
+ ecs_autoscaling_service_role_arn = data.aws_iam_role.ecs_autoscaling_service_role.arn
+ ecs_task_autoscaling_minimum = local.pdf_desired_count
+ ecs_task_autoscaling_maximum = var.autoscaling.pdf.maximum
+ max_scaling_alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
+
+ providers = {
+ aws.region = aws.region
+ }
+}
diff --git a/terraform/environment/cloudwatch_alarms.tf b/terraform/environment/region/cloudwatch_alarms.tf
similarity index 80%
rename from terraform/environment/cloudwatch_alarms.tf
rename to terraform/environment/region/cloudwatch_alarms.tf
index 67e5e2612d..5694a25dbe 100644
--- a/terraform/environment/cloudwatch_alarms.tf
+++ b/terraform/environment/region/cloudwatch_alarms.tf
@@ -1,12 +1,12 @@
resource "aws_cloudwatch_metric_alarm" "viewer_5xx_errors" {
actions_enabled = true
alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
- alarm_description = "5XX Errors returned to viewer users for ${local.environment_name}"
- alarm_name = "${local.environment_name} viewer 5XX errors"
+ alarm_description = "5XX Errors returned to viewer users for ${var.environment_name}"
+ alarm_name = "${var.environment_name} viewer 5XX errors"
comparison_operator = "GreaterThanThreshold"
datapoints_to_alarm = 2
dimensions = {
- "LoadBalancer" = trimprefix(split(":", module.eu_west_1.albs.viewer.arn)[5], "loadbalancer/")
+ "LoadBalancer" = trimprefix(split(":", aws_lb.viewer.arn)[5], "loadbalancer/")
}
evaluation_periods = 2
insufficient_data_actions = []
@@ -18,17 +18,19 @@ resource "aws_cloudwatch_metric_alarm" "viewer_5xx_errors" {
tags = {}
threshold = 2
treat_missing_data = "notBreaching"
+
+ provider = aws.region
}
resource "aws_cloudwatch_metric_alarm" "actor_5xx_errors" {
actions_enabled = true
alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
- alarm_description = "5XX Errors returned to actor users for ${local.environment_name}"
- alarm_name = "${local.environment_name} actor 5XX errors"
+ alarm_description = "5XX Errors returned to actor users for ${var.environment_name}"
+ alarm_name = "${var.environment_name} actor 5XX errors"
comparison_operator = "GreaterThanThreshold"
datapoints_to_alarm = 2
dimensions = {
- "LoadBalancer" = trimprefix(split(":", module.eu_west_1.albs.actor.arn)[5], "loadbalancer/")
+ "LoadBalancer" = trimprefix(split(":", aws_lb.actor.arn)[5], "loadbalancer/")
}
evaluation_periods = 2
insufficient_data_actions = []
@@ -40,15 +42,17 @@ resource "aws_cloudwatch_metric_alarm" "actor_5xx_errors" {
tags = {}
threshold = 2
treat_missing_data = "notBreaching"
+
+ provider = aws.region
}
resource "aws_cloudwatch_metric_alarm" "unexpected_data_lpa_api_resposnes" {
actions_enabled = true
- alarm_name = "${local.environment_name}_unexpected_data_lpa_api_resposnes"
+ alarm_name = "${var.environment_name}_unexpected_data_lpa_api_resposnes"
alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
alarm_description = "increase in unexpected data lpa api resposnes"
- namespace = "${local.environment_name}_events"
- metric_name = "${local.environment_name}_unexpected_data_lpa_api_responses"
+ namespace = "${var.environment_name}_events"
+ metric_name = "${var.environment_name}_unexpected_data_lpa_api_responses"
comparison_operator = "GreaterThanOrEqualToThreshold"
period = 180
evaluation_periods = 1
@@ -56,11 +60,13 @@ resource "aws_cloudwatch_metric_alarm" "unexpected_data_lpa_api_resposnes" {
statistic = "Sum"
threshold = 5
treat_missing_data = "notBreaching"
+
+ provider = aws.region
}
resource "aws_cloudwatch_metric_alarm" "api_5xx_errors" {
actions_enabled = true
- alarm_name = "${local.environment_name}_api_5xx_errors"
+ alarm_name = "${var.environment_name}_api_5xx_errors"
alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
metric_name = aws_cloudwatch_log_metric_filter.api_5xx_errors.metric_transformation[0].name
comparison_operator = "GreaterThanOrEqualToThreshold"
@@ -74,7 +80,7 @@ resource "aws_cloudwatch_metric_alarm" "api_5xx_errors" {
}
resource "aws_cloudwatch_metric_alarm" "actor_ddos_attack_external" {
- alarm_name = "${local.environment_name}_ActorDDoSDetected"
+ alarm_name = "${var.environment_name}_ActorDDoSDetected"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "3"
metric_name = "DDoSDetected"
@@ -86,12 +92,14 @@ resource "aws_cloudwatch_metric_alarm" "actor_ddos_attack_external" {
treat_missing_data = "notBreaching"
alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
dimensions = {
- ResourceArn = module.eu_west_1.albs.actor.arn
+ ResourceArn = aws_lb.actor.arn
}
+
+ provider = aws.region
}
resource "aws_cloudwatch_metric_alarm" "viewer_ddos_attack_external" {
- alarm_name = "${local.environment_name}_ViewerDDoSDetected"
+ alarm_name = "${var.environment_name}_ViewerDDoSDetected"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "3"
metric_name = "DDoSDetected"
@@ -103,12 +111,12 @@ resource "aws_cloudwatch_metric_alarm" "viewer_ddos_attack_external" {
treat_missing_data = "notBreaching"
alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
dimensions = {
- ResourceArn = module.eu_west_1.albs.viewer.arn
+ ResourceArn = aws_lb.viewer.arn
}
}
resource "aws_cloudwatch_metric_alarm" "admin_ddos_attack_external" {
- alarm_name = "${local.environment_name}_AdminDDoSDetected"
+ alarm_name = "${var.environment_name}_AdminDDoSDetected"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "3"
metric_name = "DDoSDetected"
@@ -120,8 +128,10 @@ resource "aws_cloudwatch_metric_alarm" "admin_ddos_attack_external" {
treat_missing_data = "notBreaching"
alarm_actions = [aws_sns_topic.cloudwatch_to_pagerduty.arn]
dimensions = {
- ResourceArn = module.eu_west_1.albs.admin.arn
+ ResourceArn = aws_lb.admin.arn
}
+
+ provider = aws.region
}
moved {
diff --git a/terraform/environment/cloudwatch_log_groups.tf b/terraform/environment/region/cloudwatch_log_groups.tf
similarity index 68%
rename from terraform/environment/cloudwatch_log_groups.tf
rename to terraform/environment/region/cloudwatch_log_groups.tf
index 51b427a7f1..f79947c38a 100644
--- a/terraform/environment/cloudwatch_log_groups.tf
+++ b/terraform/environment/region/cloudwatch_log_groups.tf
@@ -1,14 +1,16 @@
resource "aws_cloudwatch_log_group" "application_logs" {
- name = "${local.environment_name}_application_logs"
- retention_in_days = local.environment.log_retention_in_days
+ name = "${var.environment_name}_application_logs"
+ retention_in_days = var.log_retention_days
kms_key_id = data.aws_kms_alias.cloudwatch_encryption.target_key_arn
tags = {
- "Name" = "${local.environment_name}_application_logs"
+ "Name" = "${var.environment_name}_application_logs"
}
+
+ provider = aws.region
}
resource "aws_cloudwatch_query_definition" "app_container_messages" {
- name = "Application Logs/${local.environment_name} app container messages"
+ name = "Application Logs/${var.environment_name} app container messages"
log_group_names = [aws_cloudwatch_log_group.application_logs.name]
query_string = < region_data if region_data.is_primary })[0]
+ is_primary_region = local.primary_region == data.aws_region.current.name ? true : false
+ is_active_region = var.regions[data.aws_region.current.name].is_active
+
+ # Desired count of the ECS services. Only an active region will have a desired count greater than 0.
+ use_desired_count = local.is_active_region ? var.autoscaling.use.minimum : 0
+ pdf_desired_count = local.is_active_region ? var.autoscaling.pdf.minimum : 0
+ view_desired_count = local.is_active_region ? var.autoscaling.view.minimum : 0
+ api_desired_count = local.is_active_region ? var.autoscaling.api.minimum : 0
+ admin_desired_count = local.is_active_region ? 1 : 0
+
+ # Replace the region in the ARN of the DynamoDB tables with the region of the current stack as the tables are created in the primary region
+ # and replicated to the secondary region. This allows use to grant access to the tables in the secondary region for applications running in the secondary region.
+ dynamodb_tables_arns = {
+ actor_codes_table_arn = replace(var.dynamodb_tables.actor_codes_table.arn, local.primary_region, data.aws_region.current.name)
+ stats_table_arn = replace(var.dynamodb_tables.stats_table.arn, local.primary_region, data.aws_region.current.name)
+ actor_users_table_arn = replace(var.dynamodb_tables.actor_users_table.arn, local.primary_region, data.aws_region.current.name)
+ viewer_codes_table_arn = replace(var.dynamodb_tables.viewer_codes_table.arn, local.primary_region, data.aws_region.current.name)
+ viewer_activity_table_arn = replace(var.dynamodb_tables.viewer_activity_table.arn, local.primary_region, data.aws_region.current.name)
+ user_lpa_actor_map_arn = replace(var.dynamodb_tables.user_lpa_actor_map.arn, local.primary_region, data.aws_region.current.name)
+ }
+}
diff --git a/terraform/environment/region/modules/ecs_autoscaling/.terraform.lock.hcl b/terraform/environment/region/modules/ecs_autoscaling/.terraform.lock.hcl
new file mode 100644
index 0000000000..0b6e645cd1
--- /dev/null
+++ b/terraform/environment/region/modules/ecs_autoscaling/.terraform.lock.hcl
@@ -0,0 +1,24 @@
+# This file is maintained automatically by "terraform init".
+# Manual edits may be lost in future updates.
+
+provider "registry.terraform.io/hashicorp/aws" {
+ version = "5.21.0"
+ hashes = [
+ "h1:bCRZDV8QYPpl+zIU7karO77B4x2cvQ7UHKAGNvTFWQs=",
+ "zh:1ba1411e4f8c047950db94c236f146d4590790320c68320b4e56082d8746a507",
+ "zh:3185e4a34cfcad35dcf11439290a4bd0ad52d462eca2ab5d4940488a2db72833",
+ "zh:3c6b901f874b4d9a85301a653d0bd507b052992bd84fc81100f4e5f73b1adab7",
+ "zh:45d3fdbbc5804f295576b7155fdca527dedff17a014ed40c215af3bc60c329db",
+ "zh:47b64b453d2c373062e47a54f3df33335dc29bce6ddbbf2da9e7be768c560abe",
+ "zh:5cdf57ffd465288d9732d14ba13b377a8d389e0ba0ce3ac4773fd6fdfc09d6a1",
+ "zh:81ec4c662581a2446c78da7b27d7e0d5c2e4d50925294789ec13661817f4b5a4",
+ "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
+ "zh:ac248464fd4ce1f020c05f27e3182532a7d1af4b8185a4b4be8b906b30b0ca5a",
+ "zh:bbbedc6b6eaffcce0b31b397d607464f0c21c1b9406182163d504d3f392cc68d",
+ "zh:c2afc111f9503829ed055e2ae91d873670c57bd16acc1a3246ac3957f6998d4e",
+ "zh:cd3c8175b2152848113482da70e5b9c7cb4c951f2046fc0b832715300bd88b97",
+ "zh:cf89b0c09d426d489f9477209d4084e64ad1b598036284fa688b41de626b58e6",
+ "zh:d9d127637c3b9ff6e2d0a2c30f54bd48ab1de34f725a5df1a6a3d039b021e636",
+ "zh:dccca1090e4054d6558218406385fb0421ab4ac3b75e121641973be481a81f01",
+ ]
+}
diff --git a/terraform/environment/modules/ecs_autoscaling/README.md b/terraform/environment/region/modules/ecs_autoscaling/README.md
similarity index 100%
rename from terraform/environment/modules/ecs_autoscaling/README.md
rename to terraform/environment/region/modules/ecs_autoscaling/README.md
diff --git a/terraform/environment/modules/ecs_autoscaling/main.tf b/terraform/environment/region/modules/ecs_autoscaling/main.tf
similarity index 97%
rename from terraform/environment/modules/ecs_autoscaling/main.tf
rename to terraform/environment/region/modules/ecs_autoscaling/main.tf
index b7f92aa086..2333b5e059 100644
--- a/terraform/environment/modules/ecs_autoscaling/main.tf
+++ b/terraform/environment/region/modules/ecs_autoscaling/main.tf
@@ -5,6 +5,8 @@ resource "aws_appautoscaling_target" "ecs_service" {
role_arn = var.ecs_autoscaling_service_role_arn
max_capacity = var.ecs_task_autoscaling_maximum
min_capacity = var.ecs_task_autoscaling_minimum
+
+ provider = aws.region
}
# Automatically scale capacity up by one
@@ -26,6 +28,8 @@ resource "aws_appautoscaling_policy" "up" {
}
depends_on = [aws_appautoscaling_target.ecs_service]
+
+ provider = aws.region
}
# Automatically scale capacity down by one
@@ -47,6 +51,8 @@ resource "aws_appautoscaling_policy" "down" {
}
depends_on = [aws_appautoscaling_target.ecs_service]
+
+ provider = aws.region
}
resource "aws_cloudwatch_metric_alarm" "scale_up" {
@@ -113,6 +119,8 @@ resource "aws_cloudwatch_metric_alarm" "scale_up" {
}
}
alarm_actions = [aws_appautoscaling_policy.up.arn]
+
+ provider = aws.region
}
resource "aws_cloudwatch_metric_alarm" "scale_down" {
@@ -179,6 +187,8 @@ resource "aws_cloudwatch_metric_alarm" "scale_down" {
}
}
alarm_actions = [aws_appautoscaling_policy.down.arn]
+
+ provider = aws.region
}
@@ -198,4 +208,6 @@ resource "aws_cloudwatch_metric_alarm" "max_scaling_reached" {
ServiceName = var.aws_ecs_service_name
ClusterName = var.aws_ecs_cluster_name
}
+
+ provider = aws.region
}
diff --git a/terraform/environment/region/modules/ecs_autoscaling/terraform.tf b/terraform/environment/region/modules/ecs_autoscaling/terraform.tf
new file mode 100644
index 0000000000..627607ccd6
--- /dev/null
+++ b/terraform/environment/region/modules/ecs_autoscaling/terraform.tf
@@ -0,0 +1,12 @@
+terraform {
+ required_version = ">= 1.5.2"
+
+ required_providers {
+ aws = {
+ source = "hashicorp/aws"
+ configuration_aliases = [
+ aws.region,
+ ]
+ }
+ }
+}
diff --git a/terraform/environment/modules/ecs_autoscaling/variables.tf b/terraform/environment/region/modules/ecs_autoscaling/variables.tf
similarity index 100%
rename from terraform/environment/modules/ecs_autoscaling/variables.tf
rename to terraform/environment/region/modules/ecs_autoscaling/variables.tf
diff --git a/terraform/environment/pagerduty.tf b/terraform/environment/region/pagerduty.tf
similarity index 60%
rename from terraform/environment/pagerduty.tf
rename to terraform/environment/region/pagerduty.tf
index 4704e64d8f..a308f2872d 100644
--- a/terraform/environment/pagerduty.tf
+++ b/terraform/environment/region/pagerduty.tf
@@ -1,21 +1,18 @@
-# data "pagerduty_service" "pagerduty" {
-# name = local.environment.pagerduty_service_name
-# }
-
data "pagerduty_vendor" "cloudwatch" {
name = "Cloudwatch"
}
resource "pagerduty_service_integration" "cloudwatch_integration" {
- name = "${data.pagerduty_vendor.cloudwatch.name} ${local.environment_name}"
- service = local.environment.pagerduty_service_id
- # service = data.pagerduty_service.pagerduty.id
- vendor = data.pagerduty_vendor.cloudwatch.id
+ name = "${data.pagerduty_vendor.cloudwatch.name} ${var.environment_name}"
+ service = var.pagerduty_service_id
+ vendor = data.pagerduty_vendor.cloudwatch.id
}
resource "aws_sns_topic" "cloudwatch_to_pagerduty" {
- name = "CloudWatch-to-PagerDuty-${local.environment_name}"
+ name = "CloudWatch-to-PagerDuty-${var.environment_name}"
kms_master_key_id = data.aws_kms_alias.pagerduty_sns.target_key_arn
+
+ provider = aws.region
}
resource "aws_sns_topic_subscription" "cloudwatch_sns_subscription" {
@@ -23,4 +20,6 @@ resource "aws_sns_topic_subscription" "cloudwatch_sns_subscription" {
protocol = "https"
endpoint_auto_confirms = true
endpoint = "https://events.pagerduty.com/integration/${pagerduty_service_integration.cloudwatch_integration.integration_key}/enqueue"
+
+ provider = aws.region
}
diff --git a/terraform/environment/region/pdf_ecs.tf b/terraform/environment/region/pdf_ecs.tf
index 818a5573c3..d8f4d575a6 100644
--- a/terraform/environment/region/pdf_ecs.tf
+++ b/terraform/environment/region/pdf_ecs.tf
@@ -5,7 +5,7 @@ resource "aws_ecs_service" "pdf" {
name = "pdf-service"
cluster = aws_ecs_cluster.use_an_lpa.id
task_definition = aws_ecs_task_definition.pdf.arn
- desired_count = var.autoscaling.pdf.minimum
+ desired_count = local.pdf_desired_count
platform_version = "1.4.0"
network_configuration {
@@ -155,7 +155,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.pdf-app.use-an-lpa"
}
diff --git a/terraform/environment/ship_to_metrics.tf b/terraform/environment/region/ship_to_metrics.tf
similarity index 56%
rename from terraform/environment/ship_to_metrics.tf
rename to terraform/environment/region/ship_to_metrics.tf
index e3ce3f003a..f34861969b 100644
--- a/terraform/environment/ship_to_metrics.tf
+++ b/terraform/environment/region/ship_to_metrics.tf
@@ -1,31 +1,36 @@
data "aws_sqs_queue" "ship_to_opg_metrics" {
- count = local.environment.ship_metrics_queue_enabled ? 1 : 0
- name = "${local.environment.account_name}-ship-to-opg-metrics"
+ count = var.ship_metrics_queue_enabled ? 1 : 0
+ name = "${var.account_name}-ship-to-opg-metrics"
}
+
data "aws_lambda_function" "clsf_to_sqs" {
- count = local.environment.ship_metrics_queue_enabled ? 1 : 0
+ count = var.ship_metrics_queue_enabled ? 1 : 0
function_name = "clsf-to-sqs"
}
data "aws_lambda_function" "ship_to_opg_metrics" {
- count = local.environment.ship_metrics_queue_enabled ? 1 : 0
+ count = var.ship_metrics_queue_enabled ? 1 : 0
function_name = "ship-to-opg-metrics"
}
resource "aws_cloudwatch_log_subscription_filter" "events" {
- count = local.environment.ship_metrics_queue_enabled ? 1 : 0
- name = "${local.environment_name}-clsf-to-sqs"
+ count = var.ship_metrics_queue_enabled ? 1 : 0
+ name = "${var.environment_name}-clsf-to-sqs"
log_group_name = aws_cloudwatch_log_group.application_logs.name
filter_pattern = "{ $.context.event_code = * }"
destination_arn = data.aws_lambda_function.clsf_to_sqs[0].arn
depends_on = [aws_lambda_permission.allow_cloudwatch]
+
+ provider = aws.region
}
resource "aws_lambda_permission" "allow_cloudwatch" {
- count = local.environment.ship_metrics_queue_enabled ? 1 : 0
- statement_id = "${local.environment_name}-AllowExecutionFromCloudWatch"
+ count = var.ship_metrics_queue_enabled ? 1 : 0
+ statement_id = "${var.environment_name}-AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = data.aws_lambda_function.clsf_to_sqs[0].function_name
- principal = "logs.eu-west-1.amazonaws.com"
+ principal = "logs.${data.aws_region.current.name}.amazonaws.com"
source_arn = "${aws_cloudwatch_log_group.application_logs.arn}:*"
+
+ provider = aws.region
}
diff --git a/terraform/environment/region/terraform.tf b/terraform/environment/region/terraform.tf
index 575a64eb16..563f5790bd 100644
--- a/terraform/environment/region/terraform.tf
+++ b/terraform/environment/region/terraform.tf
@@ -9,6 +9,10 @@ terraform {
aws.management,
]
}
+ pagerduty = {
+ source = "PagerDuty/pagerduty"
+ version = ">= 3.0.0"
+ }
}
}
@@ -20,4 +24,4 @@ data "aws_vpc" "default" {
data "aws_region" "current" {
provider = aws.region
-}
\ No newline at end of file
+}
diff --git a/terraform/environment/region/variables.tf b/terraform/environment/region/variables.tf
index 31ac77b91d..dd63874082 100644
--- a/terraform/environment/region/variables.tf
+++ b/terraform/environment/region/variables.tf
@@ -1,6 +1,3 @@
-# Many of these variables are temporary and will be removed once the relevant region specific resources are moved to the region module.
-# E.g. dynamodb_tables will no longer be needed once the DynamoDB tables are moved to the region module.
-
variable "account_name" {
description = "The name of the AWS account."
type = string
@@ -34,11 +31,6 @@ variable "admin_container_version" {
type = string
}
-variable "application_logs_name" {
- description = "The name of the CloudWatch Logs group to send application logs to."
- type = string
-}
-
variable "autoscaling" {
description = "The min and max number of instances to run for each ECS service."
type = map(object({
@@ -132,6 +124,11 @@ variable "logging_level" {
type = string
}
+variable "log_retention_days" {
+ description = "The number of days to retain logs for."
+ type = number
+}
+
variable "lpa_codes_endpoint" {
description = "The endpoint to use for LPA codes."
type = string
@@ -158,6 +155,11 @@ variable "notify_key_secret_name" {
type = string
}
+variable "pagerduty_service_id" {
+ description = "The ID of the PagerDuty service to use."
+ type = string
+}
+
variable "parameter_store_arns" {
description = "The ARNs of the Parameter Store parameters to use."
type = list(string)
@@ -174,6 +176,19 @@ variable "public_access_enabled" {
default = false
}
+variable "regions" {
+ description = "Information about which regions are being used"
+ type = map(object({
+ is_primary = bool
+ is_active = bool
+ }))
+
+ validation {
+ condition = length([for region in keys(var.regions) : region if var.regions[region].is_primary]) == 1
+ error_message = "One (and only one) region must be marked as primary"
+ }
+}
+
variable "route_53_fqdns" {
description = "The FQDNs to use for the Route 53 records."
@@ -195,6 +210,12 @@ variable "session_expiry_warning" {
type = string
}
+variable "ship_metrics_queue_enabled" {
+ description = "Whether or not to forward metrics to opg-metrics"
+ type = bool
+ default = false
+}
+
variable "sirius_account_id" {
description = "The AWS ID of the Sirius account."
type = string
diff --git a/terraform/environment/region/viewer_ecs.tf b/terraform/environment/region/viewer_ecs.tf
index 1e730e0b11..ffb70dd340 100644
--- a/terraform/environment/region/viewer_ecs.tf
+++ b/terraform/environment/region/viewer_ecs.tf
@@ -5,7 +5,7 @@ resource "aws_ecs_service" "viewer" {
name = "viewer-service"
cluster = aws_ecs_cluster.use_an_lpa.id
task_definition = aws_ecs_task_definition.viewer.arn
- desired_count = var.autoscaling.view.minimum
+ desired_count = local.view_desired_count
platform_version = "1.4.0"
network_configuration {
@@ -187,7 +187,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.viewer-web.use-an-lpa"
}
@@ -230,7 +230,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.viewer-otel.use-an-lpa"
}
@@ -263,7 +263,7 @@ locals {
logConfiguration = {
logDriver = "awslogs",
options = {
- awslogs-group = var.application_logs_name,
+ awslogs-group = aws_cloudwatch_log_group.application_logs.name,
awslogs-region = data.aws_region.current.name,
awslogs-stream-prefix = "${var.environment_name}.viewer-app.use-an-lpa"
}
diff --git a/terraform/environment/terraform.tfvars.json b/terraform/environment/terraform.tfvars.json
index ca834ae08b..70b5f6ad05 100644
--- a/terraform/environment/terraform.tfvars.json
+++ b/terraform/environment/terraform.tfvars.json
@@ -73,6 +73,13 @@
"stats": {
"name": "Stats"
}
+ },
+ "regions": {
+ "eu-west-1": {
+ "name": "eu-west-1",
+ "is_active": true,
+ "is_primary": true
+ }
}
},
"demo": {
@@ -148,6 +155,13 @@
"stats": {
"name": "Stats"
}
+ },
+ "regions": {
+ "eu-west-1": {
+ "name": "eu-west-1",
+ "is_active": true,
+ "is_primary": true
+ }
}
},
"preproduction": {
@@ -223,6 +237,18 @@
"stats": {
"name": "Stats"
}
+ },
+ "regions": {
+ "eu-west-1": {
+ "name": "eu-west-1",
+ "is_active": true,
+ "is_primary": true
+ },
+ "eu-west-2": {
+ "name": "eu-west-2",
+ "is_active": true,
+ "is_primary": false
+ }
}
},
"production": {
@@ -298,6 +324,13 @@
"stats": {
"name": "Stats"
}
+ },
+ "regions": {
+ "eu-west-1": {
+ "name": "eu-west-1",
+ "is_active": true,
+ "is_primary": true
+ }
}
}
}
diff --git a/tests/smoke/composer.json b/tests/smoke/composer.json
index c9796bed4f..38aba561b2 100644
--- a/tests/smoke/composer.json
+++ b/tests/smoke/composer.json
@@ -11,10 +11,22 @@
"fig/http-message-util": "^1.1",
"phpunit/phpunit": "^9.0"
},
+ "require-dev": {
+ "vimeo/psalm": "^5.15",
+ "squizlabs/php_codesniffer": "3.*",
+ "webimpress/coding-standard": "^1.3",
+ "slevomat/coding-standard": "^8.9",
+ "psalm/plugin-phpunit": "^0.18"
+ },
"autoload": {
"psr-4": {
"Smoke\\": "src/",
"Test\\Context\\": "context/"
}
+ },
+ "config": {
+ "allow-plugins": {
+ "dealerdirect/phpcodesniffer-composer-installer": true
+ }
}
}
diff --git a/tests/smoke/composer.lock b/tests/smoke/composer.lock
index d827611a2a..d86c06dc89 100644
--- a/tests/smoke/composer.lock
+++ b/tests/smoke/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "1789df6c451afff28427426683aaa0c3",
+ "content-hash": "338aadcf70629c5e12f2608d11acfd62",
"packages": [
{
"name": "behat/behat",
@@ -499,16 +499,16 @@
},
{
"name": "friends-of-behat/mink-extension",
- "version": "v2.7.2",
+ "version": "v2.7.4",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfBehat/MinkExtension.git",
- "reference": "ffc5ee88aa8e5b430f0c417adb3f0c943ffeafed"
+ "reference": "18d5a53dff3e2c8934c53e2db8b02b7ea345fe85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/ffc5ee88aa8e5b430f0c417adb3f0c943ffeafed",
- "reference": "ffc5ee88aa8e5b430f0c417adb3f0c943ffeafed",
+ "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/18d5a53dff3e2c8934c53e2db8b02b7ea345fe85",
+ "reference": "18d5a53dff3e2c8934c53e2db8b02b7ea345fe85",
"shasum": ""
},
"require": {
@@ -558,9 +558,9 @@
"web"
],
"support": {
- "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.7.2"
+ "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.7.4"
},
- "time": "2022-10-17T07:23:22+00:00"
+ "time": "2023-10-03T13:15:12+00:00"
},
{
"name": "myclabs/deep-copy",
@@ -623,16 +623,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.15.5",
+ "version": "v4.17.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e"
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/11e2663a5bc9db5d714eedb4277ee300403b4a9e",
- "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
"shasum": ""
},
"require": {
@@ -673,9 +673,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.5"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
},
- "time": "2023-05-19T20:20:00+00:00"
+ "time": "2023-08-13T19:53:39+00:00"
},
{
"name": "phar-io/manifest",
@@ -790,16 +790,16 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.26",
+ "version": "9.2.29",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1"
+ "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1",
- "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76",
+ "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76",
"shasum": ""
},
"require": {
@@ -855,7 +855,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26"
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29"
},
"funding": [
{
@@ -863,7 +864,7 @@
"type": "github"
}
],
- "time": "2023-03-06T12:58:08+00:00"
+ "time": "2023-09-19T04:57:46+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -1108,16 +1109,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "9.6.8",
+ "version": "9.6.13",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "17d621b3aff84d0c8b62539e269e87d8d5baa76e"
+ "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/17d621b3aff84d0c8b62539e269e87d8d5baa76e",
- "reference": "17d621b3aff84d0c8b62539e269e87d8d5baa76e",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be",
+ "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be",
"shasum": ""
},
"require": {
@@ -1132,7 +1133,7 @@
"phar-io/manifest": "^2.0.3",
"phar-io/version": "^3.0.2",
"php": ">=7.3",
- "phpunit/php-code-coverage": "^9.2.13",
+ "phpunit/php-code-coverage": "^9.2.28",
"phpunit/php-file-iterator": "^3.0.5",
"phpunit/php-invoker": "^3.1.1",
"phpunit/php-text-template": "^2.0.3",
@@ -1191,7 +1192,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.8"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13"
},
"funding": [
{
@@ -1207,36 +1208,36 @@
"type": "tidelift"
}
],
- "time": "2023-05-11T05:14:45+00:00"
+ "time": "2023-09-19T05:39:22+00:00"
},
{
"name": "phrity/net-uri",
- "version": "1.2.0",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/phrity-net-uri.git",
- "reference": "c6ecf127e7c99a41ce04d3cdcda7f51108dd96f7"
+ "reference": "3f458e0c4d1ddc0e218d7a5b9420127c63925f43"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sirn-se/phrity-net-uri/zipball/c6ecf127e7c99a41ce04d3cdcda7f51108dd96f7",
- "reference": "c6ecf127e7c99a41ce04d3cdcda7f51108dd96f7",
+ "url": "https://api.github.com/repos/sirn-se/phrity-net-uri/zipball/3f458e0c4d1ddc0e218d7a5b9420127c63925f43",
+ "reference": "3f458e0c4d1ddc0e218d7a5b9420127c63925f43",
"shasum": ""
},
"require": {
- "php": "^7.4|^8.0",
+ "php": "^7.4 | ^8.0",
"psr/http-factory": "^1.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.0 | ^2.0"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.0",
- "phpunit/phpunit": "^9.0",
+ "phpunit/phpunit": "^9.0 | ^10.0",
"squizlabs/php_codesniffer": "^3.0"
},
"type": "library",
"autoload": {
"psr-4": {
- "": "src/"
+ "Phrity\\Net\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1260,9 +1261,9 @@
],
"support": {
"issues": "https://github.com/sirn-se/phrity-net-uri/issues",
- "source": "https://github.com/sirn-se/phrity-net-uri/tree/1.2.0"
+ "source": "https://github.com/sirn-se/phrity-net-uri/tree/1.3.0"
},
- "time": "2022-11-30T07:20:06+00:00"
+ "time": "2023-08-21T10:33:06+00:00"
},
{
"name": "phrity/util-errorhandler",
@@ -2082,16 +2083,16 @@
},
{
"name": "sebastian/global-state",
- "version": "5.0.5",
+ "version": "5.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34",
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34",
"shasum": ""
},
"require": {
@@ -2134,7 +2135,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6"
},
"funding": [
{
@@ -2142,7 +2143,7 @@
"type": "github"
}
],
- "time": "2022-02-14T08:28:10+00:00"
+ "time": "2023-08-02T09:26:13+00:00"
},
{
"name": "sebastian/lines-of-code",
@@ -2542,16 +2543,16 @@
},
{
"name": "symfony/config",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "a5e00dec161b08c946a2c16eed02adbeedf827ae"
+ "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/a5e00dec161b08c946a2c16eed02adbeedf827ae",
- "reference": "a5e00dec161b08c946a2c16eed02adbeedf827ae",
+ "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467",
+ "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467",
"shasum": ""
},
"require": {
@@ -2597,7 +2598,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/v6.3.0"
+ "source": "https://github.com/symfony/config/tree/v6.3.2"
},
"funding": [
{
@@ -2613,20 +2614,20 @@
"type": "tidelift"
}
],
- "time": "2023-04-25T10:46:17+00:00"
+ "time": "2023-07-19T20:22:16+00:00"
},
{
"name": "symfony/console",
- "version": "v6.3.0",
+ "version": "v6.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7"
+ "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7",
- "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7",
+ "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6",
+ "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6",
"shasum": ""
},
"require": {
@@ -2687,7 +2688,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.3.0"
+ "source": "https://github.com/symfony/console/tree/v6.3.4"
},
"funding": [
{
@@ -2703,20 +2704,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-29T12:49:39+00:00"
+ "time": "2023-08-16T10:10:12+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "88453e64cd86c5b60e8d2fb2c6f953bbc353ffbf"
+ "reference": "883d961421ab1709877c10ac99451632a3d6fa57"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/88453e64cd86c5b60e8d2fb2c6f953bbc353ffbf",
- "reference": "88453e64cd86c5b60e8d2fb2c6f953bbc353ffbf",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57",
+ "reference": "883d961421ab1709877c10ac99451632a3d6fa57",
"shasum": ""
},
"require": {
@@ -2752,7 +2753,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v6.3.0"
+ "source": "https://github.com/symfony/css-selector/tree/v6.3.2"
},
"funding": [
{
@@ -2768,20 +2769,20 @@
"type": "tidelift"
}
],
- "time": "2023-03-20T16:43:42+00:00"
+ "time": "2023-07-12T16:00:22+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v6.3.0",
+ "version": "v6.3.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "ebf5f9c5bb5c21d75ab74995ce5e26c3fbbda44d"
+ "reference": "2ed62b3bf98346e1f45529a7b6be2196739bb993"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ebf5f9c5bb5c21d75ab74995ce5e26c3fbbda44d",
- "reference": "ebf5f9c5bb5c21d75ab74995ce5e26c3fbbda44d",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2ed62b3bf98346e1f45529a7b6be2196739bb993",
+ "reference": "2ed62b3bf98346e1f45529a7b6be2196739bb993",
"shasum": ""
},
"require": {
@@ -2833,7 +2834,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dependency-injection/tree/v6.3.0"
+ "source": "https://github.com/symfony/dependency-injection/tree/v6.3.5"
},
"funding": [
{
@@ -2849,7 +2850,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-30T17:12:32+00:00"
+ "time": "2023-09-25T16:46:40+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -2920,16 +2921,16 @@
},
{
"name": "symfony/event-dispatcher",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa"
+ "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa",
- "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
+ "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
"shasum": ""
},
"require": {
@@ -2980,7 +2981,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.0"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2"
},
"funding": [
{
@@ -2996,7 +2997,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-21T14:41:17+00:00"
+ "time": "2023-07-06T06:56:43+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -3076,16 +3077,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v6.3.0",
+ "version": "v6.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "97b698e1d77d356304def77a8d0cd73090b359ea"
+ "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/97b698e1d77d356304def77a8d0cd73090b359ea",
- "reference": "97b698e1d77d356304def77a8d0cd73090b359ea",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae",
+ "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae",
"shasum": ""
},
"require": {
@@ -3119,7 +3120,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.3.0"
+ "source": "https://github.com/symfony/filesystem/tree/v6.3.1"
},
"funding": [
{
@@ -3135,20 +3136,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-30T17:12:32+00:00"
+ "time": "2023-06-01T08:30:39+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.27.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
- "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
"shasum": ""
},
"require": {
@@ -3163,7 +3164,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -3201,7 +3202,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0"
},
"funding": [
{
@@ -3217,20 +3218,20 @@
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.27.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "511a08c03c1960e08a883f4cffcacd219b758354"
+ "reference": "875e90aeea2777b6f135677f618529449334a612"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
- "reference": "511a08c03c1960e08a883f4cffcacd219b758354",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
+ "reference": "875e90aeea2777b6f135677f618529449334a612",
"shasum": ""
},
"require": {
@@ -3242,7 +3243,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -3282,7 +3283,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
},
"funding": [
{
@@ -3298,20 +3299,20 @@
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.27.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
- "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
"shasum": ""
},
"require": {
@@ -3323,7 +3324,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -3366,7 +3367,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
},
"funding": [
{
@@ -3382,20 +3383,20 @@
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.27.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
+ "reference": "42292d99c55abe617799667f454222c54c60e229"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
- "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
+ "reference": "42292d99c55abe617799667f454222c54c60e229",
"shasum": ""
},
"require": {
@@ -3410,7 +3411,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -3449,7 +3450,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
},
"funding": [
{
@@ -3465,20 +3466,20 @@
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2023-07-28T09:04:16+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.27.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
- "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
"shasum": ""
},
"require": {
@@ -3487,7 +3488,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -3532,7 +3533,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
},
"funding": [
{
@@ -3548,20 +3549,20 @@
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/process",
- "version": "v5.4.24",
+ "version": "v5.4.28",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "e3c46cc5689c8782944274bb30702106ecbe3b64"
+ "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/e3c46cc5689c8782944274bb30702106ecbe3b64",
- "reference": "e3c46cc5689c8782944274bb30702106ecbe3b64",
+ "url": "https://api.github.com/repos/symfony/process/zipball/45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b",
+ "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b",
"shasum": ""
},
"require": {
@@ -3594,7 +3595,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v5.4.24"
+ "source": "https://github.com/symfony/process/tree/v5.4.28"
},
"funding": [
{
@@ -3610,7 +3611,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-17T11:26:05+00:00"
+ "time": "2023-08-07T10:36:04+00:00"
},
{
"name": "symfony/service-contracts",
@@ -3696,16 +3697,16 @@
},
{
"name": "symfony/string",
- "version": "v6.3.0",
+ "version": "v6.3.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f"
+ "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f",
- "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f",
+ "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339",
+ "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339",
"shasum": ""
},
"require": {
@@ -3762,7 +3763,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.3.0"
+ "source": "https://github.com/symfony/string/tree/v6.3.5"
},
"funding": [
{
@@ -3778,24 +3779,25 @@
"type": "tidelift"
}
],
- "time": "2023-03-21T21:06:29+00:00"
+ "time": "2023-09-18T10:38:32+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.3.0",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f"
+ "reference": "869b26c7a9d4b8a48afdd77ab36031909c87e3a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/f72b2cba8f79dd9d536f534f76874b58ad37876f",
- "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/869b26c7a9d4b8a48afdd77ab36031909c87e3a2",
+ "reference": "869b26c7a9d4b8a48afdd77ab36031909c87e3a2",
"shasum": ""
},
"require": {
"php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^2.5|^3.0"
},
@@ -3856,7 +3858,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.3.0"
+ "source": "https://github.com/symfony/translation/tree/v6.3.6"
},
"funding": [
{
@@ -3872,7 +3874,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-19T12:46:45+00:00"
+ "time": "2023-10-17T11:32:53+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -3954,16 +3956,16 @@
},
{
"name": "symfony/var-exporter",
- "version": "v6.3.0",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "db5416d04269f2827d8c54331ba4cfa42620d350"
+ "reference": "374d289c13cb989027274c86206ddc63b16a2441"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/db5416d04269f2827d8c54331ba4cfa42620d350",
- "reference": "db5416d04269f2827d8c54331ba4cfa42620d350",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/374d289c13cb989027274c86206ddc63b16a2441",
+ "reference": "374d289c13cb989027274c86206ddc63b16a2441",
"shasum": ""
},
"require": {
@@ -4008,7 +4010,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v6.3.0"
+ "source": "https://github.com/symfony/var-exporter/tree/v6.3.6"
},
"funding": [
{
@@ -4024,24 +4026,25 @@
"type": "tidelift"
}
],
- "time": "2023-04-21T08:48:44+00:00"
+ "time": "2023-10-13T09:16:49+00:00"
},
{
"name": "symfony/yaml",
- "version": "v6.3.0",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "a9a8337aa641ef2aa39c3e028f9107ec391e5927"
+ "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/a9a8337aa641ef2aa39c3e028f9107ec391e5927",
- "reference": "a9a8337aa641ef2aa39c3e028f9107ec391e5927",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add",
+ "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add",
"shasum": ""
},
"require": {
"php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@@ -4079,7 +4082,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.3.0"
+ "source": "https://github.com/symfony/yaml/tree/v6.3.3"
},
"funding": [
{
@@ -4095,7 +4098,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-28T13:28:14+00:00"
+ "time": "2023-07-31T07:08:24+00:00"
},
{
"name": "textalk/websocket",
@@ -4199,7 +4202,1522 @@
"time": "2021-07-28T10:34:58+00:00"
}
],
- "packages-dev": [],
+ "packages-dev": [
+ {
+ "name": "amphp/amp",
+ "version": "v2.6.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/amphp/amp.git",
+ "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
+ "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "amphp/php-cs-fixer-config": "dev-master",
+ "amphp/phpunit-util": "^1",
+ "ext-json": "*",
+ "jetbrains/phpstorm-stubs": "^2019.3",
+ "phpunit/phpunit": "^7 | ^8 | ^9",
+ "psalm/phar": "^3.11@dev",
+ "react/promise": "^2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/functions.php",
+ "lib/Internal/functions.php"
+ ],
+ "psr-4": {
+ "Amp\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Lowrey",
+ "email": "rdlowrey@php.net"
+ },
+ {
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
+ },
+ {
+ "name": "Bob Weinand",
+ "email": "bobwei9@hotmail.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
+ }
+ ],
+ "description": "A non-blocking concurrency framework for PHP applications.",
+ "homepage": "https://amphp.org/amp",
+ "keywords": [
+ "async",
+ "asynchronous",
+ "awaitable",
+ "concurrency",
+ "event",
+ "event-loop",
+ "future",
+ "non-blocking",
+ "promise"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/amphp",
+ "issues": "https://github.com/amphp/amp/issues",
+ "source": "https://github.com/amphp/amp/tree/v2.6.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/amphp",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-20T17:52:18+00:00"
+ },
+ {
+ "name": "amphp/byte-stream",
+ "version": "v1.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/amphp/byte-stream.git",
+ "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd",
+ "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd",
+ "shasum": ""
+ },
+ "require": {
+ "amphp/amp": "^2",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "amphp/php-cs-fixer-config": "dev-master",
+ "amphp/phpunit-util": "^1.4",
+ "friendsofphp/php-cs-fixer": "^2.3",
+ "jetbrains/phpstorm-stubs": "^2019.3",
+ "phpunit/phpunit": "^6 || ^7 || ^8",
+ "psalm/phar": "^3.11.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/functions.php"
+ ],
+ "psr-4": {
+ "Amp\\ByteStream\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
+ }
+ ],
+ "description": "A stream abstraction to make working with non-blocking I/O simple.",
+ "homepage": "http://amphp.org/byte-stream",
+ "keywords": [
+ "amp",
+ "amphp",
+ "async",
+ "io",
+ "non-blocking",
+ "stream"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/amphp",
+ "issues": "https://github.com/amphp/byte-stream/issues",
+ "source": "https://github.com/amphp/byte-stream/tree/v1.8.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/amphp",
+ "type": "github"
+ }
+ ],
+ "time": "2021-03-30T17:13:30+00:00"
+ },
+ {
+ "name": "composer/package-versions-deprecated",
+ "version": "1.11.99.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/package-versions-deprecated.git",
+ "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d",
+ "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.1.0 || ^2.0",
+ "php": "^7 || ^8"
+ },
+ "replace": {
+ "ocramius/package-versions": "1.11.99"
+ },
+ "require-dev": {
+ "composer/composer": "^1.9.3 || ^2.0@dev",
+ "ext-zip": "^1.13",
+ "phpunit/phpunit": "^6.5 || ^7"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "PackageVersions\\Installer",
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PackageVersions\\": "src/PackageVersions"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
+ "support": {
+ "issues": "https://github.com/composer/package-versions-deprecated/issues",
+ "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-17T14:14:24+00:00"
+ },
+ {
+ "name": "composer/pcre",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9",
+ "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.3",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "symfony/phpunit-bridge": "^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Pcre\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+ "keywords": [
+ "PCRE",
+ "preg",
+ "regex",
+ "regular expression"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/pcre/issues",
+ "source": "https://github.com/composer/pcre/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-10-11T07:11:09+00:00"
+ },
+ {
+ "name": "composer/semver",
+ "version": "3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
+ "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.4",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-08-31T09:50:34+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "ced299686f41dce890debac69273b47ffe98a40c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
+ "reference": "ced299686f41dce890debac69273b47ffe98a40c",
+ "shasum": ""
+ },
+ "require": {
+ "composer/pcre": "^1 || ^2 || ^3",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "symfony/phpunit-bridge": "^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-25T21:32:43+00:00"
+ },
+ {
+ "name": "dealerdirect/phpcodesniffer-composer-installer",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/composer-installer.git",
+ "reference": "4be43904336affa5c2f70744a348312336afd0da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da",
+ "reference": "4be43904336affa5c2f70744a348312336afd0da",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.4",
+ "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
+ },
+ "require-dev": {
+ "composer/composer": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "php-parallel-lint/php-parallel-lint": "^1.3.1",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "yoast/phpunit-polyfills": "^1.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Franck Nijhof",
+ "email": "franck.nijhof@dealerdirect.com",
+ "homepage": "http://www.frenck.nl",
+ "role": "Developer / IT Manager"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors"
+ }
+ ],
+ "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
+ "homepage": "http://www.dealerdirect.com",
+ "keywords": [
+ "PHPCodeSniffer",
+ "PHP_CodeSniffer",
+ "code quality",
+ "codesniffer",
+ "composer",
+ "installer",
+ "phpcbf",
+ "phpcs",
+ "plugin",
+ "qa",
+ "quality",
+ "standard",
+ "standards",
+ "style guide",
+ "stylecheck",
+ "tests"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCSStandards/composer-installer/issues",
+ "source": "https://github.com/PHPCSStandards/composer-installer"
+ },
+ "time": "2023-01-05T11:28:13+00:00"
+ },
+ {
+ "name": "dnoegel/php-xdg-base-dir",
+ "version": "v0.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "XdgBaseDir\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "implementation of xdg base directory specification for php",
+ "support": {
+ "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
+ "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
+ },
+ "time": "2019-12-04T15:06:13+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
+ "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.2"
+ },
+ "time": "2023-09-27T20:04:15+00:00"
+ },
+ {
+ "name": "felixfbecker/advanced-json-rpc",
+ "version": "v3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
+ "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
+ "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
+ "shasum": ""
+ },
+ "require": {
+ "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
+ "php": "^7.1 || ^8.0",
+ "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "AdvancedJsonRpc\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "ISC"
+ ],
+ "authors": [
+ {
+ "name": "Felix Becker",
+ "email": "felix.b@outlook.com"
+ }
+ ],
+ "description": "A more advanced JSONRPC implementation",
+ "support": {
+ "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
+ "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
+ },
+ "time": "2021-06-11T22:34:44+00:00"
+ },
+ {
+ "name": "felixfbecker/language-server-protocol",
+ "version": "v1.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
+ "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842",
+ "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "*",
+ "squizlabs/php_codesniffer": "^3.1",
+ "vimeo/psalm": "^4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "LanguageServerProtocol\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "ISC"
+ ],
+ "authors": [
+ {
+ "name": "Felix Becker",
+ "email": "felix.b@outlook.com"
+ }
+ ],
+ "description": "PHP classes for the Language Server Protocol",
+ "keywords": [
+ "language",
+ "microsoft",
+ "php",
+ "server"
+ ],
+ "support": {
+ "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
+ "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2"
+ },
+ "time": "2022-03-02T22:36:06+00:00"
+ },
+ {
+ "name": "fidry/cpu-core-counter",
+ "version": "0.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theofidry/cpu-core-counter.git",
+ "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623",
+ "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "fidry/makefile": "^0.2.0",
+ "phpstan/extension-installer": "^1.2.0",
+ "phpstan/phpstan": "^1.9.2",
+ "phpstan/phpstan-deprecation-rules": "^1.0.0",
+ "phpstan/phpstan-phpunit": "^1.2.2",
+ "phpstan/phpstan-strict-rules": "^1.4.4",
+ "phpunit/phpunit": "^9.5.26 || ^8.5.31",
+ "theofidry/php-cs-fixer-config": "^1.0",
+ "webmozarts/strict-phpunit": "^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Fidry\\CpuCoreCounter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Théo FIDRY",
+ "email": "theo.fidry@gmail.com"
+ }
+ ],
+ "description": "Tiny utility to get the number of CPU cores.",
+ "keywords": [
+ "CPU",
+ "core"
+ ],
+ "support": {
+ "issues": "https://github.com/theofidry/cpu-core-counter/issues",
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theofidry",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-24T12:35:10+00:00"
+ },
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v4.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cweiske/jsonmapper.git",
+ "reference": "f60565f8c0566a31acf06884cdaa591867ecc956"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956",
+ "reference": "f60565f8c0566a31acf06884cdaa591867ecc956",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0",
+ "squizlabs/php_codesniffer": "~3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "JsonMapper": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "OSL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Christian Weiske",
+ "email": "cweiske@cweiske.de",
+ "homepage": "http://github.com/cweiske/jsonmapper/",
+ "role": "Developer"
+ }
+ ],
+ "description": "Map nested JSON structures onto PHP classes",
+ "support": {
+ "email": "cweiske@cweiske.de",
+ "issues": "https://github.com/cweiske/jsonmapper/issues",
+ "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0"
+ },
+ "time": "2023-04-09T17:37:40+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-2.x": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ },
+ "time": "2020-06-27T09:03:43+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.3",
+ "webmozart/assert": "^1.9.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.2",
+ "psalm/phar": "^4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ },
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "account@ijaap.nl"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+ },
+ "time": "2021-10-19T17:43:47+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.7.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
+ "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.4 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0",
+ "phpstan/phpdoc-parser": "^1.13"
+ },
+ "require-dev": {
+ "ext-tokenizer": "*",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpunit/phpunit": "^9.5",
+ "rector/rector": "^0.13.9",
+ "vimeo/psalm": "^4.25"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3"
+ },
+ "time": "2023-08-12T11:01:26+00:00"
+ },
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "1.24.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "bcad8d995980440892759db0c32acae7c8e79442"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442",
+ "reference": "bcad8d995980440892759db0c32acae7c8e79442",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^2.0",
+ "nikic/php-parser": "^4.15",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.5",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5",
+ "symfony/process": "^5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\PhpDocParser\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPDoc parser with support for nullable, intersection and generic types",
+ "support": {
+ "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2"
+ },
+ "time": "2023-09-26T12:28:12+00:00"
+ },
+ {
+ "name": "psalm/plugin-phpunit",
+ "version": "0.18.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psalm/psalm-plugin-phpunit.git",
+ "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc",
+ "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc",
+ "shasum": ""
+ },
+ "require": {
+ "composer/package-versions-deprecated": "^1.10",
+ "composer/semver": "^1.4 || ^2.0 || ^3.0",
+ "ext-simplexml": "*",
+ "php": "^7.1 || ^8.0",
+ "vimeo/psalm": "dev-master || dev-4.x || ^4.7.1 || ^5@beta || ^5.0"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<7.5"
+ },
+ "require-dev": {
+ "codeception/codeception": "^4.0.3",
+ "php": "^7.3 || ^8.0",
+ "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0",
+ "squizlabs/php_codesniffer": "^3.3.1",
+ "weirdan/codeception-psalm-module": "^0.11.0",
+ "weirdan/prophecy-shim": "^1.0 || ^2.0"
+ },
+ "type": "psalm-plugin",
+ "extra": {
+ "psalm": {
+ "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psalm\\PhpUnitPlugin\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matt Brown",
+ "email": "github@muglug.com"
+ }
+ ],
+ "description": "Psalm plugin for PHPUnit",
+ "support": {
+ "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues",
+ "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.4"
+ },
+ "time": "2022-12-03T07:47:07+00:00"
+ },
+ {
+ "name": "slevomat/coding-standard",
+ "version": "8.14.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slevomat/coding-standard.git",
+ "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/fea1fd6f137cc84f9cba0ae30d549615dbc6a926",
+ "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0",
+ "php": "^7.2 || ^8.0",
+ "phpstan/phpdoc-parser": "^1.23.1",
+ "squizlabs/php_codesniffer": "^3.7.1"
+ },
+ "require-dev": {
+ "phing/phing": "2.17.4",
+ "php-parallel-lint/php-parallel-lint": "1.3.2",
+ "phpstan/phpstan": "1.10.37",
+ "phpstan/phpstan-deprecation-rules": "1.1.4",
+ "phpstan/phpstan-phpunit": "1.3.14",
+ "phpstan/phpstan-strict-rules": "1.5.1",
+ "phpunit/phpunit": "8.5.21|9.6.8|10.3.5"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SlevomatCodingStandard\\": "SlevomatCodingStandard/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
+ "keywords": [
+ "dev",
+ "phpcs"
+ ],
+ "support": {
+ "issues": "https://github.com/slevomat/coding-standard/issues",
+ "source": "https://github.com/slevomat/coding-standard/tree/8.14.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kukulich",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-10-08T07:28:08+00:00"
+ },
+ {
+ "name": "spatie/array-to-xml",
+ "version": "3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/array-to-xml.git",
+ "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f9ab39c808500c347d5a8b6b13310bd5221e39e7",
+ "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.2",
+ "pestphp/pest": "^1.21",
+ "spatie/pest-plugin-snapshots": "^1.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\ArrayToXml\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://freek.dev",
+ "role": "Developer"
+ }
+ ],
+ "description": "Convert an array to xml",
+ "homepage": "https://github.com/spatie/array-to-xml",
+ "keywords": [
+ "array",
+ "convert",
+ "xml"
+ ],
+ "support": {
+ "source": "https://github.com/spatie/array-to-xml/tree/3.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2023-07-19T18:30:26+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "bin": [
+ "bin/phpcs",
+ "bin/phpcbf"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "lead"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
+ "source": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
+ },
+ "time": "2023-02-22T23:07:41+00:00"
+ },
+ {
+ "name": "vimeo/psalm",
+ "version": "5.15.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vimeo/psalm.git",
+ "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/5c774aca4746caf3d239d9c8cadb9f882ca29352",
+ "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352",
+ "shasum": ""
+ },
+ "require": {
+ "amphp/amp": "^2.4.2",
+ "amphp/byte-stream": "^1.5",
+ "composer-runtime-api": "^2",
+ "composer/semver": "^1.4 || ^2.0 || ^3.0",
+ "composer/xdebug-handler": "^2.0 || ^3.0",
+ "dnoegel/php-xdg-base-dir": "^0.1.1",
+ "ext-ctype": "*",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "felixfbecker/advanced-json-rpc": "^3.1",
+ "felixfbecker/language-server-protocol": "^1.5.2",
+ "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1",
+ "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
+ "nikic/php-parser": "^4.16",
+ "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
+ "sebastian/diff": "^4.0 || ^5.0",
+ "spatie/array-to-xml": "^2.17.0 || ^3.0",
+ "symfony/console": "^4.1.6 || ^5.0 || ^6.0",
+ "symfony/filesystem": "^5.4 || ^6.0"
+ },
+ "conflict": {
+ "nikic/php-parser": "4.17.0"
+ },
+ "provide": {
+ "psalm/psalm": "self.version"
+ },
+ "require-dev": {
+ "amphp/phpunit-util": "^2.0",
+ "bamarni/composer-bin-plugin": "^1.4",
+ "brianium/paratest": "^6.9",
+ "ext-curl": "*",
+ "mockery/mockery": "^1.5",
+ "nunomaduro/mock-final-classes": "^1.1",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/phpdoc-parser": "^1.6",
+ "phpunit/phpunit": "^9.6",
+ "psalm/plugin-mockery": "^1.1",
+ "psalm/plugin-phpunit": "^0.18",
+ "slevomat/coding-standard": "^8.4",
+ "squizlabs/php_codesniffer": "^3.6",
+ "symfony/process": "^4.4 || ^5.0 || ^6.0"
+ },
+ "suggest": {
+ "ext-curl": "In order to send data to shepherd",
+ "ext-igbinary": "^2.0.5 is required, used to serialize caching data"
+ },
+ "bin": [
+ "psalm",
+ "psalm-language-server",
+ "psalm-plugin",
+ "psalm-refactor",
+ "psalter"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev",
+ "dev-4.x": "4.x-dev",
+ "dev-3.x": "3.x-dev",
+ "dev-2.x": "2.x-dev",
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psalm\\": "src/Psalm/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthew Brown"
+ }
+ ],
+ "description": "A static analysis tool for finding errors in PHP applications",
+ "keywords": [
+ "code",
+ "inspection",
+ "php",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/vimeo/psalm/issues",
+ "source": "https://github.com/vimeo/psalm/tree/5.15.0"
+ },
+ "time": "2023-08-20T23:07:30+00:00"
+ },
+ {
+ "name": "webimpress/coding-standard",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webimpress/coding-standard.git",
+ "reference": "b26557e2386711ecb74f22718f4b4bde5ddbc899"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webimpress/coding-standard/zipball/b26557e2386711ecb74f22718f4b4bde5ddbc899",
+ "reference": "b26557e2386711ecb74f22718f4b4bde5ddbc899",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3 || ^8.0",
+ "squizlabs/php_codesniffer": "^3.7.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6.4"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "dev-master": "1.2.x-dev",
+ "dev-develop": "1.3.x-dev"
+ },
+ "autoload": {
+ "psr-4": {
+ "WebimpressCodingStandard\\": "src/WebimpressCodingStandard/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "description": "Webimpress Coding Standard",
+ "keywords": [
+ "Coding Standard",
+ "PSR-2",
+ "phpcs",
+ "psr-12",
+ "webimpress"
+ ],
+ "support": {
+ "issues": "https://github.com/webimpress/coding-standard/issues",
+ "source": "https://github.com/webimpress/coding-standard/tree/1.3.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/michalbundyra",
+ "type": "github"
+ }
+ ],
+ "time": "2023-03-09T15:05:18+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.13"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+ },
+ "time": "2022-06-03T18:03:27+00:00"
+ }
+ ],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
diff --git a/tests/smoke/context/AccountContext.php b/tests/smoke/context/AccountContext.php
index 9484586e81..19159e3aa0 100644
--- a/tests/smoke/context/AccountContext.php
+++ b/tests/smoke/context/AccountContext.php
@@ -7,10 +7,6 @@
use Behat\Behat\Context\Context;
/**
- * Class AccountContext
- *
- * @package Test\Context
- *
* @property string userEmail
* @property string userPassword
* @property string lpaReference
@@ -26,7 +22,7 @@ class AccountContext implements Context
*/
public function iAmAUserOfTheLpaApplication(): void
{
- $this->userEmail = 'opg-use-an-lpa+test-user@digital.justice.gov.uk';
+ $this->userEmail = 'opg-use-an-lpa+test-user@digital.justice.gov.uk';
$this->userPassword = 'umlTest1';
}
@@ -35,12 +31,12 @@ public function iAmAUserOfTheLpaApplication(): void
*/
public function iHaveBeenGivenAccessToUseAnLpaViaCredentials(): void
{
- $this->lpaReference = '700000000047';
+ $this->lpaReference = '700000000047';
$this->lpaActivationKey = 'RY4KKKVMRVAK';
- $this->userDob = [
- 'day' => 5,
+ $this->userDob = [
+ 'day' => 5,
'month' => 10,
- 'year' => 1975
+ 'year' => 1975,
];
}
diff --git a/tests/smoke/context/BaseContext.php b/tests/smoke/context/BaseContext.php
index df74618ceb..6be1c99520 100644
--- a/tests/smoke/context/BaseContext.php
+++ b/tests/smoke/context/BaseContext.php
@@ -5,12 +5,14 @@
namespace Test\Context;
use Behat\Behat\Context\Context;
+use Behat\Behat\Context\Environment\InitializedContextEnvironment;
use Behat\Behat\Hook\Scope\AfterStepScope;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use Behat\MinkExtension\Context\MinkContext;
use Behat\MinkExtension\Context\RawMinkContext;
use Behat\Testwork\Suite\Exception\SuiteConfigurationException;
use DMore\ChromeDriver\ChromeDriver;
+use Twig\Environment;
class BaseContext implements Context
{
@@ -19,7 +21,10 @@ class BaseContext implements Context
public string $oldBaseUrl = 'http://localhost';
- /** @var MinkContext An accessible mink instance that drives UI interactions */
+ /**
+ * @var MinkContext An accessible mink instance that drives UI interactions
+ * @psalm-suppress PropertyNotSetInConstructor
+ */
public MinkContext $ui;
/**
@@ -36,7 +41,7 @@ public function setupBaseUrl(BeforeScenarioScope $scope): void
$scope->getSuite()->getName(),
),
};
-
+ /** @psalm-var InitializedContextEnvironment $environment */
$environment = $scope->getEnvironment();
// we need to set this on *all* contexts
@@ -62,6 +67,7 @@ public function setupOldBaseUrl(BeforeScenarioScope $scope): void
),
};
+ /** @psalm-var InitializedContextEnvironment $environment */
$environment = $scope->getEnvironment();
// we need to set this on *all* contexts
@@ -78,6 +84,7 @@ public function setupOldBaseUrl(BeforeScenarioScope $scope): void
*/
public function gatherContexts(BeforeScenarioScope $scope): void
{
+ /** @psalm-var InitializedContextEnvironment $environment */
$environment = $scope->getEnvironment();
$this->ui = $environment->getContext(MinkContext::class);
}
diff --git a/tests/smoke/context/BaseContextTrait.php b/tests/smoke/context/BaseContextTrait.php
index 52bfbe2d03..6a489e8d47 100644
--- a/tests/smoke/context/BaseContextTrait.php
+++ b/tests/smoke/context/BaseContextTrait.php
@@ -4,6 +4,7 @@
namespace Test\Context;
+use Behat\Behat\Context\Environment\InitializedContextEnvironment;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use Behat\Mink\Exception\ExpectationException;
use Behat\MinkExtension\Context\MinkContext;
@@ -12,11 +13,10 @@
* Trait BaseContextTrait
*
* A trait that allows a utilising context to access the ui and mink functionality loaded in the BaseContext
- *
- * @package Test\Context
*/
trait BaseContextTrait
{
+ /** @psalm-suppress PropertyNotSetInConstructor */
protected MinkContext $ui;
/**
@@ -24,9 +24,10 @@ trait BaseContextTrait
*/
public function gatherContexts(BeforeScenarioScope $scope): void
{
+ /** @psalm-var InitializedContextEnvironment $environment */
$environment = $scope->getEnvironment();
- $base = $environment->getContext(BaseContext::class);
+ $base = $environment->getContext(BaseContext::class);
$this->ui = $base->ui; // MinkContext gathered in BaseContext
}
diff --git a/tests/smoke/context/CommonContext.php b/tests/smoke/context/CommonContext.php
index 99b3004b3f..e7fe359be6 100644
--- a/tests/smoke/context/CommonContext.php
+++ b/tests/smoke/context/CommonContext.php
@@ -85,7 +85,7 @@ public function iCanSeeEnglishText(): void
/**
* @Then /^I can see that the lpa has instructions and preferences images in summary$/
*/
- public function iCanSeeThatTheLpaHasInstructionsAndPreferencesImagesInSummary()
+ public function iCanSeeThatTheLpaHasInstructionsAndPreferencesImagesInSummary(): void
{
$this->ui->assertResponseStatus(StatusCodeInterface::STATUS_OK);
$instructionsElement = $this->ui->getMink()->getSession()->getPage()->findById('instructions_images');
@@ -138,6 +138,12 @@ public function iReceiveHeadersThatDescribeAContentSecurityPolicy(): void
public function theDocumentsLanguageIsSetToEnglish(): void
{
$htmlElement = $this->ui->getMink()->getSession()->getPage()->find('css', 'html');
+ if ($htmlElement === null) {
+ throw new ExpectationException(
+ 'Html tag not found',
+ $this->ui->getMink()->getSession()->getDriver()
+ );
+ }
if ($htmlElement->getAttribute('lang') !== 'en-gb') {
throw new ExpectationException(
@@ -153,6 +159,12 @@ public function theDocumentsLanguageIsSetToEnglish(): void
public function theDocumentsLanguageIsSetToWelsh(): void
{
$htmlElement = $this->ui->getMink()->getSession()->getPage()->find('css', 'html');
+ if ($htmlElement === null) {
+ throw new ExpectationException(
+ 'Html tag not found',
+ $this->ui->getMink()->getSession()->getDriver()
+ );
+ }
if ($htmlElement->getAttribute('lang') !== 'cy-gb') {
throw new ExpectationException(
diff --git a/tests/smoke/context/ViewerContext.php b/tests/smoke/context/ViewerContext.php
index 1c2d880860..e9ea7fa5b5 100644
--- a/tests/smoke/context/ViewerContext.php
+++ b/tests/smoke/context/ViewerContext.php
@@ -7,13 +7,9 @@
use Behat\Behat\Context\Context;
/**
- * Class ViewerContext
- *
- * @package BehatTest\Context
- *
* @property string $shareCode
* @property string $donorSurname
- * @property string $organisation
+ * @psalm-property string $organisation
*/
class ViewerContext implements Context
{
@@ -24,7 +20,7 @@ class ViewerContext implements Context
*/
public function iHaveBeenGivenAccessToAnLpaViaShareCode(): void
{
- $this->shareCode = 'P9H8A6MLD3AM';
+ $this->shareCode = 'P9H8A6MLD3AM';
$this->donorSurname = 'Gilson';
$this->organisation = 'Test organisation';
}
@@ -45,7 +41,7 @@ public function iGiveAValidLpaShareCode(): void
/**
* @When /^I enter an organisation name and confirm the LPA is correct$/
*/
- public function iEnterAnOrganisationNameAndConfirmTheLPAIsCorrect()
+ public function iEnterAnOrganisationNameAndConfirmTheLPAIsCorrect(): void
{
$this->ui->assertPageAddress('/check-code');
$this->ui->assertPageContainsText('We’ve found Babara Gilson\'s LPA');
diff --git a/tests/smoke/phpcs.xml.dist b/tests/smoke/phpcs.xml.dist
new file mode 100644
index 0000000000..6a5b217dfa
--- /dev/null
+++ b/tests/smoke/phpcs.xml.dist
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src
+ context
+
+
+
+
+
+ */test/*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src/Common/src/Service/Session/EncryptedCookiePersistence.php
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src/Common/src/Service/Session/EncryptedCookiePersistence.php
+
+
+
+
diff --git a/tests/smoke/psalm.xml b/tests/smoke/psalm.xml
new file mode 100644
index 0000000000..59ed20486c
--- /dev/null
+++ b/tests/smoke/psalm.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/smoke/src/DriverSubscriber.php b/tests/smoke/src/DriverSubscriber.php
index 73bafbc306..5359700749 100644
--- a/tests/smoke/src/DriverSubscriber.php
+++ b/tests/smoke/src/DriverSubscriber.php
@@ -24,7 +24,7 @@ public function __construct()
*
* @param Driver $driver
*/
- public function addDriver(Driver $driver)
+ public function addDriver(Driver $driver): void
{
$this->drivers[] = $driver;
}
@@ -35,8 +35,8 @@ public function addDriver(Driver $driver)
public static function getSubscribedEvents(): array
{
return [
- SuiteTested::BEFORE => 'startDrivers',
- ExerciseCompleted::AFTER => 'stopDrivers'
+ SuiteTested::BEFORE => 'startDrivers',
+ ExerciseCompleted::AFTER => 'stopDrivers',
];
}
diff --git a/tests/smoke/src/Drivers/ChromeDriver.php b/tests/smoke/src/Drivers/ChromeDriver.php
index 1a24983c10..6bb2273024 100644
--- a/tests/smoke/src/Drivers/ChromeDriver.php
+++ b/tests/smoke/src/Drivers/ChromeDriver.php
@@ -8,15 +8,11 @@
class ChromeDriver implements Driver
{
- private array $binArguments;
-
- private string $binPath;
-
private ?Process $process;
public function __construct(
- string $binPath = '/usr/bin/google-chrome-stable',
- array $binArguments = [
+ private string $binPath = '/usr/bin/google-chrome-stable',
+ private array $binArguments = [
'--disable-gpu',
'--headless',
'--remote-debugging-address=0.0.0.0',
@@ -28,12 +24,9 @@ public function __construct(
'--disable-dev-shm-usage',
'--no-startup-window',
'--no-first-run',
- '--no-pings'
- ]
+ '--no-pings',
+ ],
) {
- $this->binPath = $binPath;
- $this->binArguments = $binArguments;
-
$this->process = null;
}
@@ -51,22 +44,24 @@ public function start(): void
);
$this->process->start();
- $this->process->waitUntil(function ($type, $output) {
- if (! ($running = stristr($output, 'DevTools listening on ws://0.0.0.0:9222/devtools/browser/'))) {
- echo $output;
+ $this->process->waitUntil(
+ function (string $type, string $output) {
+ if (!($running = stristr($output, 'DevTools listening on ws://0.0.0.0:9222/devtools/browser/'))) {
+ echo $output;
+ }
+ return $running;
}
- return $running;
- });
+ );
}
public function stop(): void
{
- $this->process->stop();
+ $this->process?->stop();
}
public function isRunning(): bool
{
- if ($this->process !== null) {
+ if ($this->process === null) {
return false;
}
diff --git a/tests/smoke/src/Drivers/Driver.php b/tests/smoke/src/Drivers/Driver.php
index 5297e47a35..546c5cb067 100644
--- a/tests/smoke/src/Drivers/Driver.php
+++ b/tests/smoke/src/Drivers/Driver.php
@@ -6,9 +6,11 @@
interface Driver
{
- public const DRIVER_TAG = "smokedriver.driver";
+ public const DRIVER_TAG = 'smokedriver.driver';
public function start(): void;
+
public function stop(): void;
+
public function isRunning(): bool;
}
diff --git a/tests/smoke/src/SmokeExtension.php b/tests/smoke/src/SmokeExtension.php
index 0b941d404e..6340478fd6 100644
--- a/tests/smoke/src/SmokeExtension.php
+++ b/tests/smoke/src/SmokeExtension.php
@@ -12,13 +12,12 @@
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
+use Smoke\Drivers\ChromeDriver;
+use Smoke\DriverSubscriber;
class SmokeExtension implements Extension
{
- /**
- * @var ServiceProcessor
- */
- protected $processor;
+ protected ServiceProcessor $processor;
/**
* Initializes extension.
@@ -84,11 +83,11 @@ public function process(ContainerBuilder $container): void
*/
public function load(ContainerBuilder $container, array $config): void
{
- $definition = new Definition('Smoke\Drivers\ChromeDriver');
+ $definition = new Definition(ChromeDriver::class);
$definition->addTag(Driver::DRIVER_TAG);
$container->setDefinition('smokedriver.driver.chrome', $definition);
- $definition = new Definition('Smoke\DriverSubscriber');
+ $definition = new Definition(DriverSubscriber::class);
$definition->addTag(EventDispatcherExtension::SUBSCRIBER_TAG);
$container->setDefinition('smokedriver.suite_listener', $definition);
}