@othree.io/chisel-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.gitlab-ci.yml ADDED
@@ -0,0 +1,29 @@
1
+ image: node:22-alpine
2
+
3
+ cache:
4
+ key: ${CI_PIPELINE_ID}
5
+ paths:
6
+ - node_modules/
7
+ - lib/
8
+
9
+ build:
10
+ stage: build
11
+ script:
12
+ - npm install && npm run build
13
+
14
+ test:
15
+ stage: test
16
+ script:
17
+ - npm test
18
+
19
+ deploy:
20
+ image: node:22
21
+ stage: deploy
22
+ variables:
23
+ NPM_CONFIG_USERCONFIG: '$CI_PROJECT_DIR/.npmrc'
24
+ script:
25
+ - cat $NPM > .npmrc
26
+ - npx semantic-release
27
+ only:
28
+ refs:
29
+ - main
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # chisel-sdk
@@ -0,0 +1,3 @@
1
+ export * from './read';
2
+ export * from './write';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aws/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./read"), exports);
18
+ __exportStar(require("./write"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/aws/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAsB;AACtB,0CAAuB"}
@@ -0,0 +1,28 @@
1
+ import { Keys } from '@othree.io/awsome/lib/dynamo';
2
+ import { Optional } from '@othree.io/optional';
3
+ import { SQSRecord } from 'aws-lambda';
4
+ export interface ProjectionConfiguration {
5
+ readonly projectionTable: string;
6
+ readonly projectionDLQ: string;
7
+ readonly projectionPk: string;
8
+ }
9
+ type CreateProjectionInput = {
10
+ readonly boundedContext: string;
11
+ readonly getConfiguration?: () => ProjectionConfiguration;
12
+ };
13
+ export declare const getProcessInput: <AggregateRoot>(input: SQSRecord) => Promise<Optional<AggregateRoot>>;
14
+ export declare const getProjectionById: (boundedContext: string, configuration: ProjectionConfiguration) => <AggregateRoot>(getBy: (keys: Keys) => Promise<Optional<Array<AggregateRoot>>>) => (input: GetByIdQuery) => Promise<Optional<AggregateRoot>>;
15
+ export interface GetByIdQuery {
16
+ readonly id: string;
17
+ }
18
+ export declare const getConfiguration: () => ProjectionConfiguration;
19
+ export declare const getProjectionServices: <AggregateRoot>(input: CreateProjectionInput) => {
20
+ sqs: {
21
+ updateProjection: (...args: import("aws-lambda").SQSEvent[]) => Promise<import("aws-lambda").SQSBatchResponse>;
22
+ };
23
+ services: {
24
+ getById: (...args: import("@othree.io/projection-utils").Query<GetByIdQuery>[]) => Promise<AggregateRoot>;
25
+ };
26
+ };
27
+ export {};
28
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/aws/read.ts"],"names":[],"mappings":"AAGA,OAAO,EAAQ,IAAI,EAAgB,MAAM,8BAA8B,CAAA;AAEvE,OAAO,EAAC,QAAQ,EAAW,MAAM,qBAAqB,CAAA;AAGtD,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAA;AAGpC,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAChC;AAED,KAAK,qBAAqB,GAAG;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,uBAAuB,CAAA;CAC5D,CAAA;AAQD,eAAO,MAAM,eAAe,GAAU,aAAa,EAAE,OAAO,SAAS,KAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAQtG,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,MAAM,EAAE,eAAe,uBAAuB,MAC3F,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,MACnE,OAAO,YAAY,KAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAU3D,CAAA;AAET,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,gBAAgB,QAAO,uBAQnC,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,aAAa,EAAE,OAAO,qBAAqB;;;;;;;CA6ChF,CAAA"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getProjectionServices = exports.getConfiguration = exports.getProjectionById = exports.getProcessInput = void 0;
13
+ const stethoscope_1 = require("@othree.io/stethoscope");
14
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
15
+ const journal_1 = require("@othree.io/journal");
16
+ const dynamo_1 = require("@othree.io/awsome/lib/dynamo");
17
+ const projection_utils_1 = require("@othree.io/projection-utils");
18
+ const optional_1 = require("@othree.io/optional");
19
+ const zod_1 = require("zod");
20
+ const auditor_1 = require("@othree.io/auditor");
21
+ const excuses_1 = require("@othree.io/excuses");
22
+ const ProjectionConstraints = zod_1.z.object({
23
+ projectionTable: auditor_1.zod.NonEmptyString,
24
+ projectionDLQ: auditor_1.zod.NonEmptyString,
25
+ projectionPk: auditor_1.zod.NonEmptyString
26
+ });
27
+ const getProcessInput = (input) => __awaiter(void 0, void 0, void 0, function* () {
28
+ return (0, optional_1.TryAsync)(() => __awaiter(void 0, void 0, void 0, function* () {
29
+ const { body } = input;
30
+ const sqsEvent = JSON.parse(body);
31
+ const eventMessage = JSON.parse(sqsEvent.Message);
32
+ return eventMessage.state;
33
+ }));
34
+ });
35
+ exports.getProcessInput = getProcessInput;
36
+ const getProjectionById = (boundedContext, configuration) => (getBy) => (input) => __awaiter(void 0, void 0, void 0, function* () {
37
+ return (yield getBy({
38
+ [configuration.projectionPk]: input.id
39
+ })).map(offers => {
40
+ if (offers.length > 0) {
41
+ return offers[0];
42
+ }
43
+ throw new excuses_1.NotFoundError(input.id, boundedContext);
44
+ });
45
+ });
46
+ exports.getProjectionById = getProjectionById;
47
+ const getConfiguration = () => {
48
+ const envVars = auditor_1.zod.zodValidate(ProjectionConstraints)({
49
+ projectionTable: (0, optional_1.Optional)(process.env.PROJECTION_TABLE).map(String).orElse(''),
50
+ projectionDLQ: (0, optional_1.Optional)(process.env.PROJECTION_DLQ).map(String).orElse(''),
51
+ projectionPk: (0, optional_1.Optional)(process.env.PROJECTION_PK).map(String).orElse(''),
52
+ }).get();
53
+ return envVars;
54
+ };
55
+ exports.getConfiguration = getConfiguration;
56
+ const getProjectionServices = (input) => {
57
+ const logLevel = (0, optional_1.Optional)(process.env.LOG_LEVEL)
58
+ .orMap(() => {
59
+ console.warn(`LOG_LEVEL env var not defined. Defaulting to 'info'`);
60
+ return 'info';
61
+ })
62
+ .get();
63
+ const configuration = (0, optional_1.Optional)(input.getConfiguration)
64
+ .map(_ => _())
65
+ .orElse((0, exports.getConfiguration)());
66
+ const logger = journal_1.winston.createWinstonLogger(input.boundedContext, logLevel);
67
+ const now = () => new Date().getTime();
68
+ const logDebug = (0, journal_1.logIOAsync)(now)(logger.debug)(logger.error);
69
+ const logInfo = (0, journal_1.logIOAsync)(now)(logger.info)(logger.error);
70
+ const dynamoDbClient = new client_dynamodb_1.DynamoDBClient({});
71
+ const upsertProjection = logDebug((0, dynamo_1.upsert)(dynamoDbClient, {
72
+ TableName: configuration.projectionTable
73
+ }))(`upsert${input.boundedContext}`);
74
+ const getProjectionBy = logDebug((0, dynamo_1.getBy)((0, dynamo_1.query)(dynamoDbClient, {
75
+ TableName: configuration.projectionTable
76
+ })))(`get${input.boundedContext}`);
77
+ const getById = logDebug((0, exports.getProjectionById)(input.boundedContext, configuration)(getProjectionBy))(`get${input.boundedContext}ById`);
78
+ const processSqsFn = (0, stethoscope_1.processSqs)(logInfo)({
79
+ dlqUrl: configuration.projectionTable,
80
+ exponentialTimeouts: [5, 10, 30]
81
+ })((_) => false)(upsertProjection)(exports.getProcessInput);
82
+ const getByIdHandlerFn = logInfo((0, projection_utils_1.getProjectionServiceHandler)(getById))(`get${input.boundedContext}ByIdHandler`);
83
+ return {
84
+ sqs: {
85
+ updateProjection: processSqsFn
86
+ },
87
+ services: {
88
+ getById: getByIdHandlerFn
89
+ }
90
+ };
91
+ };
92
+ exports.getProjectionServices = getProjectionServices;
93
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/aws/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { LambdaCommand } from '@othree.io/chisel-aws/lib/lambda-command-handler';
2
+ import { ChiselEvent, CommandResult, EventSourceConfiguration } from '@othree.io/chisel';
3
+ import { lambda } from '@othree.io/awsome';
4
+ import { Optional } from '@othree.io/optional';
5
+ import { ChiselDynamoConfiguration, ChiselShardedSnsConfiguration } from '@othree.io/chisel-aws';
6
+ import { Reduce } from '@othree.io/chisel/lib/event-source';
7
+ import { HandleCommand } from '@othree.io/chisel/lib/actor';
8
+ type GetStateQuery = {
9
+ readonly contextId: string;
10
+ };
11
+ export type LambdaActor<AggregateRoot> = {
12
+ readonly handleCommand: (event: LambdaCommand) => Promise<CommandResult<AggregateRoot>>;
13
+ readonly getState: (event: lambda.Query<GetStateQuery>) => Promise<AggregateRoot>;
14
+ };
15
+ type CreateLambdaActorInput<AggregateRoot, Event extends ChiselEvent> = {
16
+ readonly boundedContext: string;
17
+ readonly getInitialState: (contextId: Optional<string>) => Promise<Optional<AggregateRoot>>;
18
+ readonly handleCommand: HandleCommand<AggregateRoot>;
19
+ readonly reduceEvent: Reduce<AggregateRoot, Event>;
20
+ readonly getConfiguration?: () => ChiselDynamoConfiguration & ChiselShardedSnsConfiguration<AggregateRoot> & EventSourceConfiguration;
21
+ };
22
+ export declare const createActor: <AggregateRoot, Event extends ChiselEvent>(input: CreateLambdaActorInput<AggregateRoot, Event>) => LambdaActor<AggregateRoot>;
23
+ export {};
24
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/aws/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kDAAkD,CAAA;AAC9E,OAAO,EAAQ,WAAW,EAAE,aAAa,EAAe,wBAAwB,EAAC,MAAM,mBAAmB,CAAA;AAC1G,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAA;AAExC,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAGH,yBAAyB,EACzB,6BAA6B,EAEhC,MAAM,uBAAuB,CAAA;AAQ9B,OAAO,EAAY,MAAM,EAAC,MAAM,oCAAoC,CAAA;AAEpE,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAA;AAEzD,KAAK,aAAa,GAAG;IACjB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,aAAa,IAAI;IACrC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAA;IACvF,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;CACpF,CAAA;AA6BD,KAAK,sBAAsB,CAAC,aAAa,EAAE,KAAK,SAAS,WAAW,IAAI;IACpE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAA;IAC3F,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IAClD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,yBAAyB,GAAG,6BAA6B,CAAC,aAAa,CAAC,GAAG,wBAAwB,CAAA;CACxI,CAAA;AAQD,eAAO,MAAM,WAAW,GAAI,aAAa,EAAE,KAAK,SAAS,WAAW,EAAE,OAAO,sBAAsB,CAAC,aAAa,EAAE,KAAK,CAAC,KAAG,WAAW,CAAC,aAAa,CAsCpJ,CAAA"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createActor = void 0;
13
+ const chisel_1 = require("@othree.io/chisel");
14
+ const journal_1 = require("@othree.io/journal");
15
+ const optional_1 = require("@othree.io/optional");
16
+ const chisel_aws_1 = require("@othree.io/chisel-aws");
17
+ const auditor_1 = require("@othree.io/auditor");
18
+ const zod_1 = require("zod");
19
+ const uuid_1 = require("uuid");
20
+ const AWSXRay = require("aws-xray-sdk-core");
21
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
22
+ const client_sns_1 = require("@aws-sdk/client-sns");
23
+ const actor_1 = require("@othree.io/chisel-aws/lib/actor");
24
+ const ChiselActorConstraints = zod_1.z.object({
25
+ eventsTable: auditor_1.zod.NonEmptyString,
26
+ eventsTopics: zod_1.z.array(auditor_1.zod.NonEmptyString),
27
+ });
28
+ const getConfiguration = (input) => {
29
+ const envVars = auditor_1.zod.zodValidate(ChiselActorConstraints)({
30
+ eventsTable: (0, optional_1.Optional)(process.env.EVENTS_TABLE).map(String).orElse(''),
31
+ eventsTopics: (0, optional_1.Optional)(process.env.EVENTS_TOPICS).map(_ => String(_).split(',')).orElse([]),
32
+ }).get();
33
+ return {
34
+ BoundedContext: input.boundedContext,
35
+ IsFifo: true,
36
+ SnapshotFrequency: 100,
37
+ TableName: envVars.eventsTable,
38
+ TopicsArn: envVars.eventsTopics,
39
+ SnapshotEventType: '$SNAPSHOT$',
40
+ GetMessageGroupId: (event, state) => event.contextId,
41
+ };
42
+ };
43
+ const getStateHandler = (loadState) => (event) => __awaiter(void 0, void 0, void 0, function* () {
44
+ return loadState((0, optional_1.Optional)(event.query.contextId))
45
+ .then(_ => _.map(state => state.state).get());
46
+ });
47
+ const createActor = (input) => {
48
+ const logLevel = (0, optional_1.Optional)(process.env.LOG_LEVEL)
49
+ .orMap(() => {
50
+ console.warn(`LOG_LEVEL env var not defined. Defaulting to 'info'`);
51
+ return 'info';
52
+ })
53
+ .get();
54
+ const logger = journal_1.winston.createWinstonLogger(input.boundedContext, logLevel);
55
+ const now = () => new Date().getTime();
56
+ const logDebug = (0, journal_1.logIOAsync)(now)(logger.debug)(logger.error);
57
+ const configuration = (0, optional_1.Optional)(input.getConfiguration)
58
+ .map(_ => _())
59
+ .orElse(getConfiguration(input));
60
+ const dynamoDbClient = AWSXRay.captureAWSv3Client(new client_dynamodb_1.DynamoDBClient({}));
61
+ const snsClient = AWSXRay.captureAWSv3Client(new client_sns_1.SNSClient({}));
62
+ const getEvents = logDebug(chisel_aws_1.awsEventSource.getEvents(dynamoDbClient, configuration))('getEvents');
63
+ const persistEvent = logDebug(chisel_aws_1.awsEventSource.persist(dynamoDbClient, configuration))('persistEvent');
64
+ const publishEvent = logDebug(chisel_aws_1.awsActor.publishShardedEvent(actor_1.hashCode)(snsClient, configuration))('publishEvent');
65
+ const loadState = logDebug(chisel_1.eventSource.loadState(configuration)(getEvents)(input.getInitialState)(input.reduceEvent))('loadState');
66
+ const calculateNewState = logDebug(chisel_1.eventSource.calculateNewState(configuration)(uuid_1.v7)(now)(persistEvent)(input.reduceEvent))('calculateNewState');
67
+ const getStateHandlerFn = logDebug(getStateHandler(loadState))('getStateHandler');
68
+ const actorHandler = logDebug(chisel_1.actor.handle(loadState)(input.handleCommand)(calculateNewState)(publishEvent))('chiselHandleCommand');
69
+ const handleCommand = logDebug(chisel_aws_1.handlers.handleLambdaCommand(actorHandler))('handleLambdaCommand');
70
+ return Object.freeze({
71
+ handleCommand: handleCommand,
72
+ getState: getStateHandlerFn,
73
+ });
74
+ };
75
+ exports.createActor = createActor;
76
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/aws/write.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8CAA0G;AAE1G,gDAAsD;AACtD,kDAA4C;AAC5C,sDAM8B;AAC9B,gDAAsC;AACtC,6BAAqB;AACrB,+BAAkC;AAClC,6CAA4C;AAC5C,8DAAuD;AACvD,oDAA6C;AAC7C,2DAAwD;AAmBxD,MAAM,sBAAsB,GAAiD,OAAC,CAAC,MAAM,CAAC;IAClF,WAAW,EAAE,aAAG,CAAC,cAAc;IAC/B,YAAY,EAAE,OAAC,CAAC,KAAK,CAAC,aAAG,CAAC,cAAc,CAAC;CAC5C,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,CAA2C,KAAmD,EAAuG,EAAE;IAC5N,MAAM,OAAO,GAAG,aAAG,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QACpD,WAAW,EAAE,IAAA,mBAAQ,EAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACtE,YAAY,EAAE,IAAA,mBAAQ,EAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;KAC9F,CAAC,CAAC,GAAG,EAAE,CAAA;IAER,OAAO;QACH,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,MAAM,EAAE,IAAI;QACZ,iBAAiB,EAAE,GAAG;QACtB,SAAS,EAAE,OAAO,CAAC,WAAW;QAC9B,SAAS,EAAE,OAAO,CAAC,YAAY;QAC/B,iBAAiB,EAAE,YAAY;QAC/B,iBAAiB,EAAE,CAAC,KAAkB,EAAE,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS;KACnF,CAAA;AACL,CAAC,CAAA;AAUD,MAAM,eAAe,GAAG,CAAgB,SAAmC,EAAE,EAAE,CAC3E,CAAO,KAA2B,EAA0B,EAAE;IAC1D,OAAO,SAAS,CAAC,IAAA,mBAAQ,EAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;AACrD,CAAC,CAAA,CAAA;AAEE,MAAM,WAAW,GAAG,CAA2C,KAAmD,EAA8B,EAAE;IACrJ,MAAM,QAAQ,GAAG,IAAA,mBAAQ,EAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;SAC3C,KAAK,CAAC,GAAG,EAAE;QACR,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;QACnE,OAAO,MAAM,CAAA;IACjB,CAAC,CAAC;SACD,GAAG,EAAE,CAAA;IAEV,MAAM,MAAM,GAAG,iBAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;IAC1E,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAEtC,MAAM,QAAQ,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAE5D,MAAM,aAAa,GAAG,IAAA,mBAAQ,EAAC,KAAK,CAAC,gBAAgB,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;SACb,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEpC,MAAM,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,gCAAc,CAAC,EAAE,CAAC,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAC,CAAA;IAE/D,MAAM,SAAS,GAAG,QAAQ,CAAC,2BAAc,CAAC,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAChG,MAAM,YAAY,GAAG,QAAQ,CAAC,2BAAc,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;IAEpG,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAQ,CAAC,mBAAmB,CAAC,gBAAQ,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;IAE/G,MAAM,SAAS,GAAG,QAAQ,CAAC,oBAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAClI,MAAM,iBAAiB,GAAG,QAAQ,CAAC,oBAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,SAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAA;IAElJ,MAAM,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;IAEjF,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAA;IAEnI,MAAM,aAAa,GAAG,QAAQ,CAAC,qBAAQ,CAAC,mBAAmB,CAAgB,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAA;IAEhH,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,aAAa,EAAE,aAAa;QAC5B,QAAQ,EAAE,iBAAiB;KAC9B,CAAC,CAAA;AACN,CAAC,CAAA;AAtCY,QAAA,WAAW,eAsCvB"}
@@ -0,0 +1,24 @@
1
+ import { App } from 'aws-cdk-lib';
2
+ import { TopicsStackOutput } from './shared';
3
+ import { WritePersistenceStackOutput, WriteServicesStackOutput, WriteSideInput } from './write';
4
+ import { QueueSubscribersStackOutput, ReadPersistenceStackOutput, ReadServicesStackOutput, ReadSideInput } from './read';
5
+ export type StacksInput = {
6
+ readonly boundedContext: string;
7
+ readonly version: string;
8
+ readonly writeSide: WriteSideInput;
9
+ readonly readSide?: ReadSideInput;
10
+ };
11
+ export type ChiselStacks = {
12
+ readonly topics: TopicsStackOutput;
13
+ readonly writeSide: {
14
+ readonly persistence: WritePersistenceStackOutput;
15
+ readonly services: WriteServicesStackOutput;
16
+ };
17
+ readonly readSide?: {
18
+ readonly subscribers: QueueSubscribersStackOutput;
19
+ readonly persistence: ReadPersistenceStackOutput;
20
+ readonly servicesStack: ReadServicesStackOutput;
21
+ };
22
+ };
23
+ export declare const createChiselStacks: (app: App, input: StacksInput) => ChiselStacks;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/iac/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAA;AAK/B,OAAO,EAAoB,iBAAiB,EAAC,MAAM,UAAU,CAAA;AAC7D,OAAO,EAEH,2BAA2B,EAC3B,wBAAwB,EACxB,cAAc,EACjB,MAAM,SAAS,CAAA;AAChB,OAAO,EAGH,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,aAAa,EAChB,MAAM,QAAQ,CAAA;AAGf,MAAM,MAAM,WAAW,GAAG;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAA;QACjD,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAA;KAC9C,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAA;QACjD,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAA;QAChD,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAA;KAClD,CAAA;CACJ,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,GAAG,EAAE,OAAO,WAAW,KAAG,YAoDjE,CAAA"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createChiselStacks = void 0;
4
+ const context_1 = require("@othree.io/cdk/lib/context");
5
+ const auditor_1 = require("@othree.io/auditor");
6
+ const optional_1 = require("@othree.io/optional");
7
+ const types_1 = require("./types");
8
+ const shared_1 = require("./shared");
9
+ const write_1 = require("./write");
10
+ const read_1 = require("./read");
11
+ const createChiselStacks = (app, input) => {
12
+ const context = ((0, context_1.loadCdkContext)(auditor_1.zod.zodValidate)(app, types_1.ChiselServiceContextConstraints)).get();
13
+ const topicsStack = (0, shared_1.createTopicsStack)(app, context, {
14
+ boundedContext: input.boundedContext,
15
+ version: input.version,
16
+ });
17
+ const writePersistenceStack = (0, write_1.createWritePersistenceStack)(app, context, input);
18
+ const writeServicesStack = (0, write_1.createWriteServicesStack)(app, context, Object.assign(Object.assign({}, input), { eventsTable: writePersistenceStack.eventsTable, topics: topicsStack.topics }));
19
+ const readSideStacks = (0, optional_1.Optional)(input.readSide).map(readSide => {
20
+ const subscribersStack = (0, read_1.createTopicSubscribersStack)(app, context, {
21
+ boundedContext: input.boundedContext,
22
+ version: input.version,
23
+ readSide: readSide,
24
+ topics: topicsStack.topics
25
+ });
26
+ const persistenceStack = (0, read_1.createReadPersistenceStack)(app, context, {
27
+ boundedContext: input.boundedContext,
28
+ version: input.version,
29
+ readSide: readSide
30
+ });
31
+ const servicesStack = (0, read_1.createReadServicesStack)(app, context, {
32
+ boundedContext: input.boundedContext,
33
+ version: input.version,
34
+ readSide: readSide,
35
+ dlq: subscribersStack.dlq,
36
+ eventQueues: subscribersStack.eventQueues,
37
+ projectionTable: persistenceStack.projectionTable
38
+ });
39
+ return Object.freeze({
40
+ subscribers: subscribersStack,
41
+ persistence: persistenceStack,
42
+ servicesStack: servicesStack
43
+ });
44
+ });
45
+ return Object.freeze({
46
+ topics: topicsStack,
47
+ writeSide: Object.freeze({
48
+ persistence: writePersistenceStack,
49
+ services: writeServicesStack,
50
+ }),
51
+ readSide: readSideStacks.orElse(undefined)
52
+ });
53
+ };
54
+ exports.createChiselStacks = createChiselStacks;
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/iac/index.ts"],"names":[],"mappings":";;;AACA,wDAAyD;AACzD,gDAAsC;AACtC,kDAA4C;AAC5C,mCAA6E;AAC7E,qCAA6D;AAC7D,mCAKgB;AAChB,iCAOe;AAuBR,MAAM,kBAAkB,GAAG,CAAC,GAAQ,EAAE,KAAkB,EAAgB,EAAE;IAC7E,MAAM,OAAO,GAAyB,CAAC,IAAA,wBAAc,EAAuB,aAAG,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,uCAA+B,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;IAEzI,MAAM,WAAW,GAAG,IAAA,0BAAiB,EAAC,GAAG,EAAE,OAAO,EAAE;QAChD,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO;KACzB,CAAC,CAAA;IACF,MAAM,qBAAqB,GAAG,IAAA,mCAA2B,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IAC9E,MAAM,kBAAkB,GAAG,IAAA,gCAAwB,EAAC,GAAG,EAAE,OAAO,kCACzD,KAAK,KACR,WAAW,EAAE,qBAAqB,CAAC,WAAW,EAC9C,MAAM,EAAE,WAAW,CAAC,MAAM,IAC5B,CAAA;IAEF,MAAM,cAAc,GAAG,IAAA,mBAAQ,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC3D,MAAM,gBAAgB,GAAG,IAAA,kCAA2B,EAAC,GAAG,EAAE,OAAO,EAAE;YAC/D,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,WAAW,CAAC,MAAM;SAC7B,CAAC,CAAA;QAEF,MAAM,gBAAgB,GAAG,IAAA,iCAA0B,EAAC,GAAG,EAAE,OAAO,EAAE;YAC9D,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAA;QAEF,MAAM,aAAa,GAAG,IAAA,8BAAuB,EAAC,GAAG,EAAE,OAAO,EAAE;YACxD,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,QAAQ;YAClB,GAAG,EAAE,gBAAgB,CAAC,GAAG;YACzB,WAAW,EAAE,gBAAgB,CAAC,WAAW;YACzC,eAAe,EAAE,gBAAgB,CAAC,eAAe;SACpD,CAAC,CAAA;QAEF,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,gBAAgB;YAC7B,aAAa,EAAE,aAAa;SAC/B,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,kBAAkB;SAC/B,CAAC;QACF,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,SAAU,CAAC;KAC9C,CAAC,CAAA;AACN,CAAC,CAAA;AApDY,QAAA,kBAAkB,sBAoD9B"}
@@ -0,0 +1,36 @@
1
+ import { App, Stack } from 'aws-cdk-lib';
2
+ import { ChiselServiceContext } from './types';
3
+ export type ReadSideInput = {
4
+ readonly codePath: string;
5
+ readonly tablePk?: string;
6
+ };
7
+ export type ReadSide = {
8
+ readonly boundedContext: string;
9
+ readonly version: string;
10
+ readonly readSide: ReadSideInput;
11
+ };
12
+ export type QueueSubscribersInput = ReadSide & {
13
+ readonly topics: Array<string>;
14
+ };
15
+ export type QueueSubscribersStackOutput = {
16
+ readonly stack: Stack;
17
+ readonly eventQueues: Array<string>;
18
+ readonly dlq: string;
19
+ };
20
+ export declare const createTopicSubscribersStack: (app: App, context: ChiselServiceContext, input: QueueSubscribersInput) => QueueSubscribersStackOutput;
21
+ export type ReadPersistenceInput = ReadSide;
22
+ export type ReadPersistenceStackOutput = {
23
+ readonly stack: Stack;
24
+ readonly projectionTable: string;
25
+ };
26
+ export declare const createReadPersistenceStack: (app: App, context: ChiselServiceContext, input: ReadPersistenceInput) => ReadPersistenceStackOutput;
27
+ export type ReadServicesInput = ReadSide & {
28
+ readonly projectionTable: string;
29
+ readonly eventQueues: Array<string>;
30
+ readonly dlq: string;
31
+ };
32
+ export type ReadServicesStackOutput = {
33
+ readonly stack: Stack;
34
+ };
35
+ export declare const createReadServicesStack: (app: App, context: ChiselServiceContext, input: ReadServicesInput) => ReadServicesStackOutput;
36
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/iac/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAY,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAA;AAW5C,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACnB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG;IAC3C,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACtC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAI,KAAK,GAAG,EAAE,SAAS,oBAAoB,EAAE,OAAO,qBAAqB,KAAG,2BAsDnH,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAA;AAE3C,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,KAAK,GAAG,EAAE,SAAS,oBAAoB,EAAE,OAAO,oBAAoB,KAAG,0BAqBjH,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,KAAK,GAAG,EAAE,SAAS,oBAAoB,EAAE,OAAO,iBAAiB,KAAG,uBA2D3G,CAAA"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createReadServicesStack = exports.createReadPersistenceStack = exports.createTopicSubscribersStack = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const cdk_1 = require("@othree.io/cdk");
6
+ const core_1 = require("@othree.io/cdk/lib/core");
7
+ const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
8
+ const aws_sns_1 = require("aws-cdk-lib/aws-sns");
9
+ const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
10
+ const optional_1 = require("@othree.io/optional");
11
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
12
+ const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources");
13
+ const createTopicSubscribersStack = (app, context, input) => {
14
+ const withId = cdk_1.core.id(input.version)({
15
+ suffix: context.project.env,
16
+ });
17
+ const topicSubscribersStack = cdk_1.stack.withStack(cdk_1.stack.withDefaultConfiguration(cdk_1.stack.loadProjectMetadata(app), 'TopicSubscribersStack'))(app)({
18
+ id: withId(`${input.boundedContext}-TopicSubscribers`),
19
+ });
20
+ const newQueue = cdk_1.sqs.withQueue(cdk_1.sqs.withDefaultConfiguration((0, core_1.appContext)(app)))(topicSubscribersStack);
21
+ const redriveDLQ = newQueue({
22
+ id: `${withId(`${input.boundedContext}-Projection-RedriveDLQ`)}.fifo`,
23
+ });
24
+ const dlqName = withId(`${input.boundedContext}-Projection-EventsDLQ`);
25
+ const dlq = newQueue({
26
+ id: dlqName
27
+ });
28
+ const dlqArn = cdk_1.sqs.queueArnFromName(cdk_1.core.getStackAccountFromEnv())(dlqName);
29
+ const eventQueues = input.topics.map((topic, idx) => {
30
+ const queueName = `${withId(`${input.boundedContext}-Projection-EventsQueue-${idx + 1}`)}.fifo`;
31
+ const queue = newQueue({
32
+ id: queueName,
33
+ }, {
34
+ fifo: true,
35
+ contentBasedDeduplication: true,
36
+ visibilityTimeout: aws_cdk_lib_1.Duration.seconds(30),
37
+ deduplicationScope: aws_sqs_1.DeduplicationScope.MESSAGE_GROUP,
38
+ deadLetterQueue: {
39
+ queue: redriveDLQ,
40
+ maxReceiveCount: 4,
41
+ },
42
+ });
43
+ cdk_1.sns.withSqsSubscription()(cdk_1.sns.withChiselFilterPolicy({
44
+ bcs: [input.boundedContext],
45
+ }))({
46
+ queue: queue,
47
+ dlq: redriveDLQ,
48
+ topic: aws_sns_1.Topic.fromTopicArn(topicSubscribersStack, `Subscriber-Topic${idx}`, topic),
49
+ });
50
+ const queueArn = cdk_1.sqs.queueArnFromName(cdk_1.core.getStackAccountFromEnv())(queueName);
51
+ return queueArn;
52
+ });
53
+ return {
54
+ stack: topicSubscribersStack,
55
+ eventQueues: eventQueues,
56
+ dlq: dlqArn
57
+ };
58
+ };
59
+ exports.createTopicSubscribersStack = createTopicSubscribersStack;
60
+ const createReadPersistenceStack = (app, context, input) => {
61
+ const withId = cdk_1.core.id(input.version)({
62
+ suffix: context.project.env,
63
+ });
64
+ const readPersistenceStack = cdk_1.stack.withStack(cdk_1.stack.withDefaultConfiguration(cdk_1.stack.loadProjectMetadata(app), 'ProjectionPersistenceStack'))(app)({
65
+ id: withId(`${input.boundedContext}-ProjectionPersistence`),
66
+ });
67
+ const tableName = withId(`${input.boundedContext}-Projection`);
68
+ const projectionTable = cdk_1.dynamo.withTable(cdk_1.dynamo.withDefaultConfiguration((0, core_1.appContext)(app)))(readPersistenceStack)({
69
+ id: tableName,
70
+ partitionKey: { type: aws_dynamodb_1.AttributeType.STRING, name: (0, optional_1.Optional)(input.readSide.tablePk).orElse('id') }
71
+ });
72
+ const account = (0, core_1.getStackAccountFromEnv)();
73
+ return Object.freeze({
74
+ stack: readPersistenceStack,
75
+ projectionTable: `arn:aws:dynamodb:${account.region}:${account.accountId}:table/${tableName}`,
76
+ });
77
+ };
78
+ exports.createReadPersistenceStack = createReadPersistenceStack;
79
+ const createReadServicesStack = (app, context, input) => {
80
+ const withId = cdk_1.core.id(input.version)({
81
+ suffix: context.project.env,
82
+ });
83
+ const readServicesStack = cdk_1.stack.withStack(cdk_1.stack.withDefaultConfiguration(cdk_1.stack.loadProjectMetadata(app), 'ReadServicesStack'))(app)({
84
+ id: withId(`${input.boundedContext}-ReadServices`),
85
+ });
86
+ const withScalingConfiguration = cdk_1.lambda.withScalingConfiguration(app);
87
+ const withLambdaConfiguration = cdk_1.lambda.withLambdaConfiguration(app)(cdk_1.lambda.withDefaultConfiguration);
88
+ const createLambda = cdk_1.lambda.withLambda(readServicesStack)(withScalingConfiguration)(withLambdaConfiguration);
89
+ const projectionTable = aws_dynamodb_1.Table.fromTableArn(readServicesStack, 'ProjectionTable', input.projectionTable);
90
+ const dlq = aws_sqs_1.Queue.fromQueueArn(readServicesStack, 'ProjectionDLQ', input.dlq);
91
+ const environment = {
92
+ PROJECTION_TABLE: projectionTable.tableName,
93
+ PROJECTION_DLQ: input.dlq,
94
+ PROJECTION_PK: (0, optional_1.Optional)(input.readSide.tablePk).orElse('id')
95
+ };
96
+ const updateProjectionHandler = createLambda({
97
+ functionName: withId(`${input.boundedContext}-Projection-SQS-UpdateProjection`),
98
+ code: aws_lambda_1.Code.fromAsset('../codebase/read/dist'),
99
+ environment: Object.assign({}, environment),
100
+ handler: 'entrypoint.sqs.updateProjection',
101
+ });
102
+ projectionTable.grantReadWriteData(updateProjectionHandler);
103
+ input.eventQueues.forEach((queueArn, idx) => {
104
+ const queue = aws_sqs_1.Queue.fromQueueArn(readServicesStack, `QueueSource${idx}`, queueArn);
105
+ updateProjectionHandler.addEventSource(new aws_lambda_event_sources_1.SqsEventSource(queue, {
106
+ batchSize: 10,
107
+ maxConcurrency: (0, optional_1.Optional)(context.lambda.functions.find(_ => _.name === updateProjectionHandler.functionName))
108
+ .map(_ => (0, optional_1.Optional)(_.reservedConcurrentExecutions))
109
+ .map(_ => Math.floor(_ / input.eventQueues.length))
110
+ .map(_ => _ < 2 ? (0, optional_1.Empty)() : _)
111
+ .orElse(2),
112
+ reportBatchItemFailures: true,
113
+ }));
114
+ });
115
+ dlq.grantSendMessages(updateProjectionHandler);
116
+ const getById = createLambda({
117
+ functionName: withId(`${input.boundedContext}-Projection-Service-GetById`),
118
+ code: aws_lambda_1.Code.fromAsset('../codebase/read/dist'),
119
+ environment: Object.assign({}, environment),
120
+ handler: 'entrypoint.services.getById',
121
+ });
122
+ projectionTable.grantReadWriteData(getById);
123
+ return {
124
+ stack: readServicesStack
125
+ };
126
+ };
127
+ exports.createReadServicesStack = createReadServicesStack;
128
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/iac/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { App, Stack } from 'aws-cdk-lib';
2
+ import { ChiselServiceContext } from './types';
3
+ export type TopicsStackInput = {
4
+ readonly boundedContext: string;
5
+ readonly version: string;
6
+ };
7
+ export type TopicsStackOutput = {
8
+ readonly stack: Stack;
9
+ readonly topics: Array<string>;
10
+ };
11
+ export declare const createTopicsStack: (app: App, context: ChiselServiceContext, input: TopicsStackInput) => TopicsStackOutput;
12
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/iac/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AACtC,OAAO,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAA;AAI5C,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACjC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,KAAK,GAAG,EAAE,SAAS,oBAAoB,EAAE,OAAO,gBAAgB,KAAG,iBA4BpG,CAAA"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTopicsStack = void 0;
4
+ const cdk_1 = require("@othree.io/cdk");
5
+ const core_1 = require("@othree.io/cdk/lib/core");
6
+ const createTopicsStack = (app, context, input) => {
7
+ const withId = cdk_1.core.id(input.version)({
8
+ suffix: context.project.env,
9
+ });
10
+ const eventsStack = cdk_1.stack.withStack(cdk_1.stack.withDefaultConfiguration(cdk_1.stack.loadProjectMetadata(app), 'EventBusStack'))(app)({
11
+ id: withId(`${input.boundedContext}-EventBus`),
12
+ });
13
+ const range = [...Array(context.chisel.numberOfShards).keys()];
14
+ const topics = range.map(idx => {
15
+ const topicName = `${withId(`${input.boundedContext}-Topic-${idx + 1}`)}.fifo`;
16
+ cdk_1.sns.withTopic()(eventsStack)({
17
+ id: topicName,
18
+ }, {
19
+ fifo: true,
20
+ contentBasedDeduplication: true,
21
+ });
22
+ return cdk_1.sns.topicArnFromName((0, core_1.getStackAccountFromEnv)())(topicName);
23
+ });
24
+ return Object.freeze({
25
+ stack: eventsStack,
26
+ topics: topics,
27
+ });
28
+ };
29
+ exports.createTopicsStack = createTopicsStack;
30
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/iac/shared.ts"],"names":[],"mappings":";;;AAEA,wCAA+C;AAC/C,kDAA8D;AAYvD,MAAM,iBAAiB,GAAG,CAAC,GAAQ,EAAE,OAA6B,EAAE,KAAuB,EAAqB,EAAE;IACrH,MAAM,MAAM,GAAG,UAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;KAC9B,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,WAAK,CAAC,SAAS,CAAC,WAAK,CAAC,wBAAwB,CAAC,WAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtH,EAAE,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,cAAc,WAAW,CAAC;KACjD,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAE9D,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC3B,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,cAAc,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAA;QAE9E,SAAG,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC;YACzB,EAAE,EAAE,SAAS;SAChB,EAAE;YACC,IAAI,EAAE,IAAI;YACV,yBAAyB,EAAE,IAAI;SAClC,CAAC,CAAA;QAEF,OAAO,SAAG,CAAC,gBAAgB,CAAC,IAAA,6BAAsB,GAAE,CAAC,CAAC,SAAS,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,MAAM;KACjB,CAAC,CAAA;AACN,CAAC,CAAA;AA5BY,QAAA,iBAAiB,qBA4B7B"}
@@ -0,0 +1,13 @@
1
+ import { ZodSchema } from 'zod';
2
+ import { context } from '@othree.io/cdk';
3
+ export interface ChiselContext {
4
+ readonly numberOfShards: number;
5
+ }
6
+ export declare const ChiselConstraints: ZodSchema<ChiselContext>;
7
+ export interface ChiselServiceContext {
8
+ readonly project: context.ProjectContext;
9
+ readonly lambda: context.LambdaContext;
10
+ readonly chisel: ChiselContext;
11
+ }
12
+ export declare const ChiselServiceContextConstraints: ZodSchema<ChiselServiceContext>;
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/iac/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAI,SAAS,EAAC,MAAM,KAAK,CAAA;AAChC,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAA;AAEtC,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAClC;AAED,eAAO,MAAM,iBAAiB,EAAE,SAAS,CAAC,aAAa,CAErD,CAAA;AAEF,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CACjC;AAED,eAAO,MAAM,+BAA+B,EAAE,SAAS,CAAC,oBAAoB,CAI1E,CAAA"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChiselServiceContextConstraints = exports.ChiselConstraints = void 0;
4
+ const zod_1 = require("zod");
5
+ const cdk_1 = require("@othree.io/cdk");
6
+ exports.ChiselConstraints = zod_1.z.object({
7
+ numberOfShards: zod_1.z.number().int().min(1),
8
+ });
9
+ exports.ChiselServiceContextConstraints = zod_1.z.object({
10
+ project: cdk_1.context.ProjectContextConstraints,
11
+ lambda: cdk_1.context.LambdaContextConstraints,
12
+ chisel: exports.ChiselConstraints,
13
+ });
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/iac/types.ts"],"names":[],"mappings":";;;AAAA,6BAAgC;AAChC,wCAAsC;AAMzB,QAAA,iBAAiB,GAA6B,OAAC,CAAC,MAAM,CAAC;IAChE,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1C,CAAC,CAAA;AAQW,QAAA,+BAA+B,GAAoC,OAAC,CAAC,MAAM,CAAC;IACrF,OAAO,EAAE,aAAO,CAAC,yBAAyB;IAC1C,MAAM,EAAE,aAAO,CAAC,wBAAwB;IACxC,MAAM,EAAE,yBAAiB;CAC5B,CAAC,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { App, Stack } from 'aws-cdk-lib';
2
+ import { ChiselServiceContext } from './types';
3
+ export type WriteSideInput = {
4
+ readonly codePath: string;
5
+ };
6
+ export type WritePersistenceStackInput = {
7
+ readonly boundedContext: string;
8
+ readonly version: string;
9
+ readonly writeSide: WriteSideInput;
10
+ };
11
+ export type WritePersistenceStackOutput = {
12
+ readonly stack: Stack;
13
+ readonly eventsTable: string;
14
+ };
15
+ export declare const createWritePersistenceStack: (app: App, context: ChiselServiceContext, input: WritePersistenceStackInput) => WritePersistenceStackOutput;
16
+ export type WriteServicesInput = {
17
+ readonly boundedContext: string;
18
+ readonly version: string;
19
+ readonly writeSide: WriteSideInput;
20
+ readonly topics: Array<string>;
21
+ readonly eventsTable: string;
22
+ };
23
+ export type WriteServicesStackOutput = {
24
+ readonly stack: Stack;
25
+ readonly handleCommandArn: string;
26
+ readonly getStateArn: string;
27
+ };
28
+ export declare const createWriteServicesStack: (app: App, context: ChiselServiceContext, input: WriteServicesInput) => WriteServicesStackOutput;
29
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/iac/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAMtC,OAAO,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACtC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAI,KAAK,GAAG,EAAE,SAAS,oBAAoB,EAAE,OAAO,0BAA0B,KAAG,2BAkBxH,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,KAAK,GAAG,EAAE,SAAS,oBAAoB,EAAE,OAAO,kBAAkB,KAAG,wBAoD7G,CAAA"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWriteServicesStack = exports.createWritePersistenceStack = void 0;
4
+ const cdk_1 = require("@othree.io/cdk");
5
+ const core_1 = require("@othree.io/cdk/lib/core");
6
+ const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
7
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
8
+ const aws_sns_1 = require("aws-cdk-lib/aws-sns");
9
+ const createWritePersistenceStack = (app, context, input) => {
10
+ const withId = cdk_1.core.id(input.version)({
11
+ suffix: context.project.env,
12
+ });
13
+ const writePersistenceStack = cdk_1.stack.withStack(cdk_1.stack.withDefaultConfiguration(cdk_1.stack.loadProjectMetadata(app), 'WritePersistenceStack'))(app)({
14
+ id: withId(`${input.boundedContext}-WritePersistence`),
15
+ });
16
+ const tableName = withId(`${input.boundedContext}-Events`);
17
+ const eventsTable = cdk_1.dynamo.withTable(cdk_1.dynamo.withDefaultConfiguration((0, core_1.appContext)(app)))(writePersistenceStack)(cdk_1.dynamo.withChiselEventsTableInput(tableName));
18
+ const account = (0, core_1.getStackAccountFromEnv)();
19
+ return Object.freeze({
20
+ stack: writePersistenceStack,
21
+ eventsTable: `arn:aws:dynamodb:${account.region}:${account.accountId}:table/${tableName}`,
22
+ });
23
+ };
24
+ exports.createWritePersistenceStack = createWritePersistenceStack;
25
+ const createWriteServicesStack = (app, context, input) => {
26
+ const withId = cdk_1.core.id(input.version)({
27
+ suffix: context.project.env,
28
+ });
29
+ const writeServicesStack = cdk_1.stack.withStack(cdk_1.stack.withDefaultConfiguration(cdk_1.stack.loadProjectMetadata(app), 'WriteServicesStack'))(app)({
30
+ id: withId(`${input.boundedContext}-WriteServices`),
31
+ });
32
+ const withScalingConfiguration = cdk_1.lambda.withScalingConfiguration(app);
33
+ const withLambdaConfiguration = cdk_1.lambda.withLambdaConfiguration(app)(cdk_1.lambda.withDefaultConfiguration);
34
+ const createLambda = cdk_1.lambda.withLambda(writeServicesStack)(withScalingConfiguration)(withLambdaConfiguration);
35
+ const eventsTable = aws_dynamodb_1.Table.fromTableArn(writeServicesStack, 'EventsTable', input.eventsTable);
36
+ const commandHandlerName = withId(`${input.boundedContext}-Service-CommandHandler`);
37
+ const commandHandler = createLambda({
38
+ functionName: commandHandlerName,
39
+ code: aws_lambda_1.Code.fromAsset(input.writeSide.codePath),
40
+ handler: 'entrypoint.actor.handleCommand',
41
+ environment: {
42
+ EVENTS_TABLE: eventsTable.tableName,
43
+ EVENTS_TOPICS: input.topics.join(','),
44
+ BOUNDED_CONTEXT: input.boundedContext,
45
+ },
46
+ });
47
+ eventsTable.grantReadWriteData(commandHandler);
48
+ input.topics.forEach((topic, idx) => {
49
+ aws_sns_1.Topic.fromTopicArn(writeServicesStack, `CommandHandlerTopic-${idx}`, topic)
50
+ .grantPublish(commandHandler);
51
+ });
52
+ const getStateHandlerName = withId(`${input.boundedContext}-Service-GetState`);
53
+ const getStateHandler = createLambda({
54
+ functionName: getStateHandlerName,
55
+ code: aws_lambda_1.Code.fromAsset('../codebase/write/dist'),
56
+ handler: 'entrypoint.actor.getState',
57
+ environment: {
58
+ BOUNDED_CONTEXT: input.boundedContext,
59
+ EVENTS_TABLE: eventsTable.tableName,
60
+ },
61
+ });
62
+ eventsTable.grantReadWriteData(getStateHandler);
63
+ const getLambdaArn = cdk_1.lambda.functionArnFromNameAndDefaultAlias((0, core_1.getStackAccountFromEnv)());
64
+ return Object.freeze({
65
+ stack: writeServicesStack,
66
+ handleCommandArn: getLambdaArn(commandHandlerName),
67
+ getStateArn: getLambdaArn(getStateHandlerName),
68
+ });
69
+ };
70
+ exports.createWriteServicesStack = createWriteServicesStack;
71
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/iac/write.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * as aws from './aws';
2
+ export * as iac from './iac';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAC5B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA"}
package/lib/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iac = exports.aws = void 0;
4
+ exports.aws = require("./aws");
5
+ exports.iac = require("./iac");
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,+BAA4B"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@othree.io/chisel-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Utility functions for Chisel",
5
+ "private": false,
6
+ "publishConfig": {
7
+ "access": "public",
8
+ "registry": "https://registry.npmjs.org/"
9
+ },
10
+ "main": "lib/index.js",
11
+ "scripts": {
12
+ "test": "jest --passWithNoTests",
13
+ "build": "tsc"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git@gitlab.com:othree.oss/chisel-sdk.git"
18
+ },
19
+ "keywords": [
20
+ "event",
21
+ "sourcing",
22
+ "chisel",
23
+ "sdk"
24
+ ],
25
+ "author": "othree",
26
+ "license": "ISC",
27
+ "bugs": {
28
+ "url": "https://gitlab.com/othree.oss/chisel-sdk/issues"
29
+ },
30
+ "homepage": "https://gitlab.com/othree.oss/chisel-sdk#readme",
31
+ "peerDependencies": {
32
+ "@othree.io/auditor": "^1.0.0",
33
+ "@othree.io/awsome": "^2.0.0",
34
+ "@othree.io/cdk": "^2.3.0",
35
+ "@othree.io/chisel": "^4.0.0",
36
+ "@othree.io/chisel-aws": "^4.0.0",
37
+ "@othree.io/excuses": "^1.0.0",
38
+ "@othree.io/journal": "^1.0.0",
39
+ "@othree.io/projection-utils": "^1.0.0",
40
+ "@othree.io/stethoscope": "^1.0.0",
41
+ "aws-cdk-lib": "^2.189.0",
42
+ "aws-lambda": "^1.0.7",
43
+ "aws-xray-sdk-core": "^3.10.3",
44
+ "uuid": "^11.1.0",
45
+ "zod": "^3.24.2"
46
+ },
47
+ "devDependencies": {
48
+ "@types/aws-lambda": "^8.10.149",
49
+ "@types/jest": "^29.5.14",
50
+ "jest": "^29.7.0",
51
+ "ts-jest": "^29.3.1",
52
+ "typescript": "^5.8.3"
53
+ }
54
+ }
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ plugins: ['@semantic-release/commit-analyzer', '@semantic-release/release-notes-generator', '@semantic-release/npm'],
3
+ branches: ['master', 'main']
4
+ }