-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcontainer.ts
More file actions
88 lines (78 loc) · 2.45 KB
/
container.ts
File metadata and controls
88 lines (78 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import {
ComponentDimension,
DimensionName,
EventPublisher,
FlowDimension,
MetricHandler,
ParameterStoreCache,
createGetApimAccessToken,
eventBridgeClient,
logger,
sqsClient,
} from 'utils';
import { NotifyClient } from 'app/notify-api-client';
import { NotifyMessageProcessor } from 'app/notify-message-processor';
import type { SqsHandlerDependencies } from 'apis/sqs-handler';
import { loadConfig } from 'infra/config';
import { SenderManagement } from 'sender-management';
import { CoreRequestMapper } from 'domain/core-request-mapper';
import { MessageRequestSubmittedMapper } from 'domain/message-request-submitted-mapper';
import { MessageRequestRejectedMapper } from 'domain/message-request-rejected-mapper';
export async function createContainer(): Promise<SqsHandlerDependencies> {
const parameterStore = new ParameterStoreCache();
const config = loadConfig();
const senderManagement = SenderManagement({
parameterStore,
});
const accessTokenRepository = {
getAccessToken: createGetApimAccessToken(
config.apimAccessTokenSsmParameterName,
logger,
parameterStore,
),
};
const notifyClient = new NotifyClient(
config.apimBaseUrl,
accessTokenRepository,
logger,
);
const notifyMessageProcessor = new NotifyMessageProcessor({
nhsNotifyClient: notifyClient,
logger,
});
const {
dlMetricsNamespace,
eventPublisherDlqUrl,
eventPublisherEventBusArn,
} = config;
const metricHandler = new MetricHandler(dlMetricsNamespace, [
{ Name: DimensionName.Environment, Value: config.environment },
{ Name: DimensionName.Flow, Value: FlowDimension.DigitalLetter },
{ Name: DimensionName.Component, Value: ComponentDimension.CoreNotify },
{ Name: DimensionName.LambdaFunction, Value: 'core-notifier' },
]);
const eventPublisher = new EventPublisher({
eventBusArn: eventPublisherEventBusArn,
dlqUrl: eventPublisherDlqUrl,
logger,
sqsClient,
eventBridgeClient,
metricHandler,
});
const coreRequestMapper = new CoreRequestMapper(config.nhsAppBaseUrl);
const messageRequestSubmittedMapper = new MessageRequestSubmittedMapper(
config.nhsAppBaseUrl,
);
const messageRequestRejectedMapper = new MessageRequestRejectedMapper(
config.nhsAppBaseUrl,
);
return {
logger,
notifyMessageProcessor,
senderManagement,
eventPublisher,
coreRequestMapper,
messageRequestSubmittedMapper,
messageRequestRejectedMapper,
};
}