Skip to content

Commit 78e0480

Browse files
committed
CCM-13476: initial code and infrastructure
1 parent 003c3e5 commit 78e0480

25 files changed

Lines changed: 804 additions & 1 deletion

.gitleaksignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ d1c0a37078cbed4fbedae044e5cbafac71717af0:utils/utils/src/__tests__/key-generatio
1616
d1c0a37078cbed4fbedae044e5cbafac71717af0:utils/utils/src/__tests__/key-generation/get-private-key.test.ts:private-key:23
1717
d1c0a37078cbed4fbedae044e5cbafac71717af0:utils/utils/src/__tests__/key-generation/get-private-key.test.ts:private-key:30
1818
d1c0a37078cbed4fbedae044e5cbafac71717af0:utils/utils/src/__tests__/key-generation/get-private-key.test.ts:private-key:46
19+
f0eebf1356a699213340a45f64c6b990afcbb869:infrastructure/terraform/components/dl/ssm_parameter_mesh.tf:hashicorp-tf-password:11

.npmrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Package is scoped under @org, set registry for that scope
2+
@nhsdigital:registry=https://npm.pkg.github.com

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ config:: _install-dependencies version # Configure development environment (main
4040
$(MAKE) -C docs install
4141
$(MAKE) -C src/cloudevents install
4242
$(MAKE) -C src/eventcatalogasyncapiimporter install
43+
./scripts/set-github-token.sh
4344
npm install
4445
$(MAKE) generate
4546

infrastructure/terraform/components/dl/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,13 @@ No requirements.
4545
| <a name="module_mesh_poll"></a> [mesh\_poll](#module\_mesh\_poll) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
4646
| <a name="module_pdm_mock"></a> [pdm\_mock](#module\_pdm\_mock) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
4747
| <a name="module_pdm_uploader"></a> [pdm\_uploader](#module\_pdm\_uploader) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
48+
| <a name="module_print_status_handler"></a> [print\_status\_handler](#module\_print\_status\_handler) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
4849
| <a name="module_s3bucket_cf_logs"></a> [s3bucket\_cf\_logs](#module\_s3bucket\_cf\_logs) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-s3bucket.zip | n/a |
4950
| <a name="module_s3bucket_letters"></a> [s3bucket\_letters](#module\_s3bucket\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-s3bucket.zip | n/a |
5051
| <a name="module_s3bucket_static_assets"></a> [s3bucket\_static\_assets](#module\_s3bucket\_static\_assets) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-s3bucket.zip | n/a |
5152
| <a name="module_sqs_event_publisher_errors"></a> [sqs\_event\_publisher\_errors](#module\_sqs\_event\_publisher\_errors) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
5253
| <a name="module_sqs_pdm_uploader"></a> [sqs\_pdm\_uploader](#module\_sqs\_pdm\_uploader) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
54+
| <a name="module_sqs_print_status_handler"></a> [sqs\_print\_status\_handler](#module\_sqs\_print\_status\_handler) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
5355
| <a name="module_sqs_ttl"></a> [sqs\_ttl](#module\_sqs\_ttl) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
5456
| <a name="module_sqs_ttl_handle_expiry_errors"></a> [sqs\_ttl\_handle\_expiry\_errors](#module\_sqs\_ttl\_handle\_expiry\_errors) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
5557
| <a name="module_ttl_create"></a> [ttl\_create](#module\_ttl\_create) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
resource "aws_cloudwatch_event_rule" "print_status_changed" {
2+
name = "${local.csi}-print-status-changed"
3+
description = "Print status changed event rule"
4+
event_bus_name = aws_cloudwatch_event_bus.main.name
5+
6+
event_pattern = jsonencode({
7+
"detail" : {
8+
"type" : [
9+
"uk.nhs.notify.supplier-api.letter.ACCEPTED.v1",
10+
"uk.nhs.notify.supplier-api.letter.REJECTED.v1",
11+
"uk.nhs.notify.supplier-api.letter.PRINTED.v1",
12+
"uk.nhs.notify.supplier-api.letter.DISPATCHED.v1",
13+
"uk.nhs.notify.supplier-api.letter.FAILED.v1",
14+
"uk.nhs.notify.supplier-api.letter.RETURNED.v1"
15+
]
16+
}
17+
})
18+
}
19+
20+
resource "aws_cloudwatch_event_target" "print_status_changed_print_status_handler" {
21+
rule = aws_cloudwatch_event_rule.print_status_changed.name
22+
arn = module.sqs_print_status_handler.sqs_queue_arn
23+
event_bus_name = aws_cloudwatch_event_bus.main.name
24+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
resource "aws_lambda_event_source_mapping" "print_status_handler" {
2+
event_source_arn = module.sqs_print_status_handler.sqs_queue_arn
3+
function_name = module.print_status_handler.function_name
4+
batch_size = var.queue_batch_size
5+
maximum_batching_window_in_seconds = var.queue_batch_window_seconds
6+
7+
function_response_types = [
8+
"ReportBatchItemFailures"
9+
]
10+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
module "print_status_handler" {
2+
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip"
3+
4+
function_name = "print-status-handler"
5+
description = "A function for processing letter printing statuses "
6+
7+
aws_account_id = var.aws_account_id
8+
component = local.component
9+
environment = var.environment
10+
project = var.project
11+
region = var.region
12+
group = var.group
13+
14+
log_retention_in_days = var.log_retention_in_days
15+
kms_key_arn = module.kms.key_arn
16+
17+
iam_policy_document = {
18+
body = data.aws_iam_policy_document.print_status_handler.json
19+
}
20+
21+
function_s3_bucket = local.acct.s3_buckets["lambda_function_artefacts"]["id"]
22+
function_code_base_path = local.aws_lambda_functions_dir_path
23+
function_code_dir = "print-status-handler/dist"
24+
function_include_common = true
25+
handler_function_name = "handler"
26+
runtime = "nodejs22.x"
27+
memory = 128
28+
timeout = 60
29+
log_level = var.log_level
30+
31+
force_lambda_code_deploy = var.force_lambda_code_deploy
32+
enable_lambda_insights = false
33+
34+
log_destination_arn = local.log_destination_arn
35+
log_subscription_role_arn = local.acct.log_subscription_role_arn
36+
37+
lambda_env_vars = {
38+
"EVENT_PUBLISHER_EVENT_BUS_ARN" = aws_cloudwatch_event_bus.main.arn
39+
"EVENT_PUBLISHER_DLQ_URL" = module.sqs_event_publisher_errors.sqs_queue_url
40+
}
41+
}
42+
43+
data "aws_iam_policy_document" "print_status_handler" {
44+
statement {
45+
sid = "PutEvents"
46+
effect = "Allow"
47+
48+
actions = [
49+
"events:PutEvents",
50+
]
51+
52+
resources = [
53+
aws_cloudwatch_event_bus.main.arn,
54+
]
55+
}
56+
57+
statement {
58+
sid = "SQSPermissionsDLQs"
59+
effect = "Allow"
60+
61+
actions = [
62+
"sqs:SendMessage",
63+
"sqs:SendMessageBatch",
64+
]
65+
66+
resources = [
67+
module.sqs_event_publisher_errors.sqs_queue_arn,
68+
]
69+
}
70+
71+
statement {
72+
sid = "SQSPermissionsPrintStatusHandlerQueue"
73+
effect = "Allow"
74+
75+
actions = [
76+
"sqs:ReceiveMessage",
77+
"sqs:DeleteMessage",
78+
"sqs:GetQueueAttributes",
79+
"sqs:GetQueueUrl",
80+
]
81+
82+
resources = [
83+
module.sqs_print_status_handler.sqs_queue_arn,
84+
]
85+
}
86+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
module "sqs_print_status_handler" {
2+
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip"
3+
4+
aws_account_id = var.aws_account_id
5+
component = local.component
6+
environment = var.environment
7+
project = var.project
8+
region = var.region
9+
name = "print-status-handler"
10+
sqs_kms_key_arn = module.kms.key_arn
11+
visibility_timeout_seconds = 60
12+
delay_seconds = 5
13+
create_dlq = true
14+
sqs_policy_overload = data.aws_iam_policy_document.sqs_print_status_handler.json
15+
}
16+
17+
data "aws_iam_policy_document" "sqs_print_status_handler" {
18+
statement {
19+
sid = "AllowEventBridgeToSendMessage"
20+
effect = "Allow"
21+
22+
principals {
23+
type = "Service"
24+
identifiers = ["events.amazonaws.com"]
25+
}
26+
27+
actions = [
28+
"sqs:SendMessage"
29+
]
30+
31+
resources = [
32+
"arn:aws:sqs:${var.region}:${var.aws_account_id}:${local.csi}-print-status-handler-queue"
33+
]
34+
}
35+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { baseJestConfig } from '../../jest.config.base';
2+
3+
const config = baseJestConfig;
4+
5+
config.transformIgnorePatterns = [
6+
'node_modules/(?!@nhsdigital/nhs-notify-event-schemas-supplier-api)',
7+
];
8+
9+
export default config;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"dependencies": {
3+
"@nhsdigital/nhs-notify-event-schemas-supplier-api": "^1.0.6",
4+
"aws-lambda": "^1.0.7",
5+
"digital-letters-events": "^0.0.1",
6+
"utils": "^0.0.1",
7+
"zod": "^4.1.12"
8+
},
9+
"devDependencies": {
10+
"@tsconfig/node22": "^22.0.2",
11+
"@types/aws-lambda": "^8.10.155",
12+
"@types/jest": "^29.5.14",
13+
"jest": "^29.7.0",
14+
"jest-mock-extended": "^3.0.7",
15+
"typescript": "^5.9.3"
16+
},
17+
"name": "nhs-notify-digital-letters-print-status-handler",
18+
"private": true,
19+
"scripts": {
20+
"lambda-build": "rm -rf dist && npx esbuild --bundle --minify --sourcemap --target=es2020 --platform=node --loader:.node=file --entry-names=[name] --outdir=dist src/index.ts",
21+
"lint": "eslint .",
22+
"lint:fix": "eslint . --fix",
23+
"test:unit": "jest",
24+
"typecheck": "tsc --noEmit"
25+
},
26+
"version": "0.0.1"
27+
}

0 commit comments

Comments
 (0)