@de-otio/chaoskb-server 0.2.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/dist/lib/admin-handler/index.d.ts +22 -0
- package/dist/lib/admin-handler/index.d.ts.map +1 -0
- package/dist/lib/admin-handler/index.js +92 -0
- package/dist/lib/admin-handler/index.js.map +1 -0
- package/dist/lib/admin-handler/index.ts +123 -0
- package/dist/lib/admin-handler/routes/metrics.d.ts +11 -0
- package/dist/lib/admin-handler/routes/metrics.d.ts.map +1 -0
- package/dist/lib/admin-handler/routes/metrics.js +200 -0
- package/dist/lib/admin-handler/routes/metrics.js.map +1 -0
- package/dist/lib/admin-handler/routes/metrics.ts +234 -0
- package/dist/lib/admin-handler/routes/overview.d.ts +9 -0
- package/dist/lib/admin-handler/routes/overview.d.ts.map +1 -0
- package/dist/lib/admin-handler/routes/overview.js +110 -0
- package/dist/lib/admin-handler/routes/overview.js.map +1 -0
- package/dist/lib/admin-handler/routes/overview.ts +133 -0
- package/dist/lib/admin-handler/routes/tenants.d.ts +10 -0
- package/dist/lib/admin-handler/routes/tenants.d.ts.map +1 -0
- package/dist/lib/admin-handler/routes/tenants.js +108 -0
- package/dist/lib/admin-handler/routes/tenants.js.map +1 -0
- package/dist/lib/admin-handler/routes/tenants.ts +134 -0
- package/dist/lib/chaoskb-stack.d.ts +22 -0
- package/dist/lib/chaoskb-stack.d.ts.map +1 -0
- package/dist/lib/chaoskb-stack.js +60 -0
- package/dist/lib/chaoskb-stack.js.map +1 -0
- package/dist/lib/constructs/admin-api.d.ts +16 -0
- package/dist/lib/constructs/admin-api.d.ts.map +1 -0
- package/dist/lib/constructs/admin-api.js +93 -0
- package/dist/lib/constructs/admin-api.js.map +1 -0
- package/dist/lib/constructs/admin-dashboard.d.ts +18 -0
- package/dist/lib/constructs/admin-dashboard.d.ts.map +1 -0
- package/dist/lib/constructs/admin-dashboard.js +172 -0
- package/dist/lib/constructs/admin-dashboard.js.map +1 -0
- package/dist/lib/constructs/api.d.ts +17 -0
- package/dist/lib/constructs/api.d.ts.map +1 -0
- package/dist/lib/constructs/api.js +81 -0
- package/dist/lib/constructs/api.js.map +1 -0
- package/dist/lib/constructs/auth.d.ts +11 -0
- package/dist/lib/constructs/auth.d.ts.map +1 -0
- package/dist/lib/constructs/auth.js +18 -0
- package/dist/lib/constructs/auth.js.map +1 -0
- package/dist/lib/constructs/blob-store.d.ts +10 -0
- package/dist/lib/constructs/blob-store.d.ts.map +1 -0
- package/dist/lib/constructs/blob-store.js +31 -0
- package/dist/lib/constructs/blob-store.js.map +1 -0
- package/dist/lib/deploy-cli.d.ts +3 -0
- package/dist/lib/deploy-cli.d.ts.map +1 -0
- package/dist/lib/deploy-cli.js +49 -0
- package/dist/lib/deploy-cli.js.map +1 -0
- package/dist/lib/handler/index.d.ts +23 -0
- package/dist/lib/handler/index.d.ts.map +1 -0
- package/dist/lib/handler/index.js +276 -0
- package/dist/lib/handler/index.js.map +1 -0
- package/dist/lib/handler/index.ts +372 -0
- package/dist/lib/handler/logger.d.ts +16 -0
- package/dist/lib/handler/logger.d.ts.map +1 -0
- package/dist/lib/handler/logger.js +26 -0
- package/dist/lib/handler/logger.js.map +1 -0
- package/dist/lib/handler/logger.ts +36 -0
- package/dist/lib/handler/middleware/input-validation.d.ts +6 -0
- package/dist/lib/handler/middleware/input-validation.d.ts.map +1 -0
- package/dist/lib/handler/middleware/input-validation.js +36 -0
- package/dist/lib/handler/middleware/input-validation.js.map +1 -0
- package/dist/lib/handler/middleware/input-validation.ts +44 -0
- package/dist/lib/handler/middleware/rate-limit.d.ts +14 -0
- package/dist/lib/handler/middleware/rate-limit.d.ts.map +1 -0
- package/dist/lib/handler/middleware/rate-limit.js +94 -0
- package/dist/lib/handler/middleware/rate-limit.js.map +1 -0
- package/dist/lib/handler/middleware/rate-limit.ts +121 -0
- package/dist/lib/handler/middleware/ssh-auth.d.ts +48 -0
- package/dist/lib/handler/middleware/ssh-auth.d.ts.map +1 -0
- package/dist/lib/handler/middleware/ssh-auth.js +256 -0
- package/dist/lib/handler/middleware/ssh-auth.js.map +1 -0
- package/dist/lib/handler/middleware/ssh-auth.ts +300 -0
- package/dist/lib/handler/routes/audit.d.ts +24 -0
- package/dist/lib/handler/routes/audit.d.ts.map +1 -0
- package/dist/lib/handler/routes/audit.js +94 -0
- package/dist/lib/handler/routes/audit.js.map +1 -0
- package/dist/lib/handler/routes/audit.ts +101 -0
- package/dist/lib/handler/routes/blobs.d.ts +13 -0
- package/dist/lib/handler/routes/blobs.d.ts.map +1 -0
- package/dist/lib/handler/routes/blobs.js +298 -0
- package/dist/lib/handler/routes/blobs.js.map +1 -0
- package/dist/lib/handler/routes/blobs.ts +348 -0
- package/dist/lib/handler/routes/devices.d.ts +48 -0
- package/dist/lib/handler/routes/devices.d.ts.map +1 -0
- package/dist/lib/handler/routes/devices.js +394 -0
- package/dist/lib/handler/routes/devices.js.map +1 -0
- package/dist/lib/handler/routes/devices.ts +458 -0
- package/dist/lib/handler/routes/export.d.ts +9 -0
- package/dist/lib/handler/routes/export.d.ts.map +1 -0
- package/dist/lib/handler/routes/export.js +40 -0
- package/dist/lib/handler/routes/export.js.map +1 -0
- package/dist/lib/handler/routes/export.ts +55 -0
- package/dist/lib/handler/routes/github.d.ts +31 -0
- package/dist/lib/handler/routes/github.d.ts.map +1 -0
- package/dist/lib/handler/routes/github.js +118 -0
- package/dist/lib/handler/routes/github.js.map +1 -0
- package/dist/lib/handler/routes/github.ts +162 -0
- package/dist/lib/handler/routes/health.d.ts +6 -0
- package/dist/lib/handler/routes/health.d.ts.map +1 -0
- package/dist/lib/handler/routes/health.js +14 -0
- package/dist/lib/handler/routes/health.js.map +1 -0
- package/dist/lib/handler/routes/health.ts +10 -0
- package/dist/lib/handler/routes/invites.d.ts +24 -0
- package/dist/lib/handler/routes/invites.d.ts.map +1 -0
- package/dist/lib/handler/routes/invites.js +445 -0
- package/dist/lib/handler/routes/invites.js.map +1 -0
- package/dist/lib/handler/routes/invites.ts +527 -0
- package/dist/lib/handler/routes/notifications.d.ts +39 -0
- package/dist/lib/handler/routes/notifications.d.ts.map +1 -0
- package/dist/lib/handler/routes/notifications.js +150 -0
- package/dist/lib/handler/routes/notifications.js.map +1 -0
- package/dist/lib/handler/routes/notifications.ts +163 -0
- package/dist/lib/handler/routes/projects.d.ts +24 -0
- package/dist/lib/handler/routes/projects.d.ts.map +1 -0
- package/dist/lib/handler/routes/projects.js +47 -0
- package/dist/lib/handler/routes/projects.js.map +1 -0
- package/dist/lib/handler/routes/projects.ts +69 -0
- package/dist/lib/handler/routes/register.d.ts +19 -0
- package/dist/lib/handler/routes/register.d.ts.map +1 -0
- package/dist/lib/handler/routes/register.js +327 -0
- package/dist/lib/handler/routes/register.js.map +1 -0
- package/dist/lib/handler/routes/register.ts +363 -0
- package/dist/lib/handler/routes/restore.d.ts +9 -0
- package/dist/lib/handler/routes/restore.d.ts.map +1 -0
- package/dist/lib/handler/routes/restore.js +52 -0
- package/dist/lib/handler/routes/restore.js.map +1 -0
- package/dist/lib/handler/routes/restore.ts +73 -0
- package/dist/lib/handler/routes/revocation.d.ts +13 -0
- package/dist/lib/handler/routes/revocation.d.ts.map +1 -0
- package/dist/lib/handler/routes/revocation.js +63 -0
- package/dist/lib/handler/routes/revocation.js.map +1 -0
- package/dist/lib/handler/routes/revocation.ts +87 -0
- package/dist/lib/handler/routes/rotation.d.ts +24 -0
- package/dist/lib/handler/routes/rotation.d.ts.map +1 -0
- package/dist/lib/handler/routes/rotation.js +291 -0
- package/dist/lib/handler/routes/rotation.js.map +1 -0
- package/dist/lib/handler/routes/rotation.ts +336 -0
- package/dist/lib/handler/routes/tenants.d.ts +11 -0
- package/dist/lib/handler/routes/tenants.d.ts.map +1 -0
- package/dist/lib/handler/routes/tenants.js +181 -0
- package/dist/lib/handler/routes/tenants.js.map +1 -0
- package/dist/lib/handler/routes/tenants.ts +198 -0
- package/dist/lib/handler/routes/wrapped-key.d.ts +21 -0
- package/dist/lib/handler/routes/wrapped-key.d.ts.map +1 -0
- package/dist/lib/handler/routes/wrapped-key.js +76 -0
- package/dist/lib/handler/routes/wrapped-key.js.map +1 -0
- package/dist/lib/handler/routes/wrapped-key.ts +108 -0
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +16 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +18 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../lib/constructs/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAuC;AACvC,uDAA0G;AAC1G,qEAA+D;AAE/D,iDAA4C;AAE5C,2CAAuC;AACvC,2CAA6B;AAS7B,MAAa,GAAI,SAAQ,sBAAS;IAChB,WAAW,CAAc;IACzB,OAAO,CAAiB;IAExC,YAAY,KAAgB,EAAE,EAAU,EAAE,KAAe;QACvD,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEjB,MAAM,eAAe,GAAG,IAAI,eAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE;YACzD,eAAe,EAAE,sBAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,IAAI,kCAAc,CAAC,IAAI,EAAE,SAAS,EAAE;YACjD,OAAO,EAAE,oBAAO,CAAC,WAAW;YAC5B,YAAY,EAAE,yBAAY,CAAC,MAAM;YACjC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YACxD,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,sBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,WAAW,EAAE;gBACX,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;gBACjC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,qBAAqB,EAAE,KAAK,CAAC,mBAAmB,CAAC,aAAa;aAC/D;YACD,4BAA4B,EAAE,KAAK,CAAC,mBAAmB,IAAI,EAAE;YAC7D,eAAe;YACf,OAAO,EAAE,oBAAO,CAAC,MAAM;YACvB,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,SAAS,EAAE,yBAAyB;aAC7C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAC7C,QAAQ,EAAE,gCAAmB,CAAC,IAAI;SACnC,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;CACF;AAzCD,kBAyCC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { aws_ssm as ssm } from 'aws-cdk-lib';
|
|
3
|
+
export interface AuthProps {
|
|
4
|
+
readonly environment: string;
|
|
5
|
+
readonly signupsEnabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class Auth extends Construct {
|
|
8
|
+
readonly signupsEnabledParam: ssm.StringParameter;
|
|
9
|
+
constructor(scope: Construct, id: string, props: AuthProps);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../lib/constructs/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,qBAAa,IAAK,SAAQ,SAAS;IACjC,SAAgB,mBAAmB,EAAE,GAAG,CAAC,eAAe,CAAC;gBAE7C,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;CAS3D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Auth = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
class Auth extends constructs_1.Construct {
|
|
7
|
+
signupsEnabledParam;
|
|
8
|
+
constructor(scope, id, props) {
|
|
9
|
+
super(scope, id);
|
|
10
|
+
this.signupsEnabledParam = new aws_cdk_lib_1.aws_ssm.StringParameter(this, 'SignupsEnabled', {
|
|
11
|
+
parameterName: `/chaoskb/${props.environment}/signups-enabled`,
|
|
12
|
+
stringValue: props.signupsEnabled === false ? 'false' : 'true',
|
|
13
|
+
description: 'Whether new user signups are enabled',
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.Auth = Auth;
|
|
18
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../lib/constructs/auth.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AACvC,6CAA6C;AAO7C,MAAa,IAAK,SAAQ,sBAAS;IACjB,mBAAmB,CAAsB;IAEzD,YAAY,KAAgB,EAAE,EAAU,EAAE,KAAgB;QACxD,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEjB,IAAI,CAAC,mBAAmB,GAAG,IAAI,qBAAG,CAAC,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE;YACzE,aAAa,EAAE,YAAY,KAAK,CAAC,WAAW,kBAAkB;YAC9D,WAAW,EAAE,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YAC9D,WAAW,EAAE,sCAAsC;SACpD,CAAC,CAAC;IACL,CAAC;CACF;AAZD,oBAYC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TableV2 } from 'aws-cdk-lib/aws-dynamodb';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
export interface BlobStoreProps {
|
|
4
|
+
readonly environment: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class BlobStore extends Construct {
|
|
7
|
+
readonly table: TableV2;
|
|
8
|
+
constructor(scope: Construct, id: string, props: BlobStoreProps);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=blob-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-store.d.ts","sourceRoot":"","sources":["../../../lib/constructs/blob-store.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,SAAU,SAAQ,SAAS;IACtC,SAAgB,KAAK,EAAE,OAAO,CAAC;gBAEnB,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;CAqBhE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BlobStore = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
|
|
6
|
+
const constructs_1 = require("constructs");
|
|
7
|
+
class BlobStore extends constructs_1.Construct {
|
|
8
|
+
table;
|
|
9
|
+
constructor(scope, id, props) {
|
|
10
|
+
super(scope, id);
|
|
11
|
+
this.table = new aws_dynamodb_1.TableV2(this, 'Table', {
|
|
12
|
+
tableName: `chaoskb-${props.environment}`,
|
|
13
|
+
partitionKey: { name: 'PK', type: aws_dynamodb_1.AttributeType.STRING },
|
|
14
|
+
sortKey: { name: 'SK', type: aws_dynamodb_1.AttributeType.STRING },
|
|
15
|
+
billing: aws_dynamodb_1.Billing.onDemand(),
|
|
16
|
+
pointInTimeRecovery: true,
|
|
17
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
|
|
18
|
+
timeToLiveAttribute: 'ttl',
|
|
19
|
+
globalSecondaryIndexes: [
|
|
20
|
+
{
|
|
21
|
+
indexName: 'updatedAt-index',
|
|
22
|
+
partitionKey: { name: 'PK', type: aws_dynamodb_1.AttributeType.STRING },
|
|
23
|
+
sortKey: { name: 'updatedAt', type: aws_dynamodb_1.AttributeType.STRING },
|
|
24
|
+
projectionType: aws_dynamodb_1.ProjectionType.ALL,
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.BlobStore = BlobStore;
|
|
31
|
+
//# sourceMappingURL=blob-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-store.js","sourceRoot":"","sources":["../../../lib/constructs/blob-store.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAC5C,2DAA2F;AAC3F,2CAAuC;AAMvC,MAAa,SAAU,SAAQ,sBAAS;IACtB,KAAK,CAAU;IAE/B,YAAY,KAAgB,EAAE,EAAU,EAAE,KAAqB;QAC7D,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEjB,IAAI,CAAC,KAAK,GAAG,IAAI,sBAAO,CAAC,IAAI,EAAE,OAAO,EAAE;YACtC,SAAS,EAAE,WAAW,KAAK,CAAC,WAAW,EAAE;YACzC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,4BAAa,CAAC,MAAM,EAAE;YACxD,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,4BAAa,CAAC,MAAM,EAAE;YACnD,OAAO,EAAE,sBAAO,CAAC,QAAQ,EAAE;YAC3B,mBAAmB,EAAE,IAAI;YACzB,aAAa,EAAE,2BAAa,CAAC,MAAM;YACnC,mBAAmB,EAAE,KAAK;YAC1B,sBAAsB,EAAE;gBACtB;oBACE,SAAS,EAAE,iBAAiB;oBAC5B,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,4BAAa,CAAC,MAAM,EAAE;oBACxD,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,4BAAa,CAAC,MAAM,EAAE;oBAC1D,cAAc,EAAE,6BAAc,CAAC,GAAG;iBACnC;aACF;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAxBD,8BAwBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-cli.d.ts","sourceRoot":"","sources":["../../lib/deploy-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const chaoskb_stack_js_1 = require("./chaoskb-stack.js");
|
|
6
|
+
function parseArgs(argv) {
|
|
7
|
+
const args = argv.slice(2);
|
|
8
|
+
let region = 'us-east-1';
|
|
9
|
+
let environment = 'self-hosted';
|
|
10
|
+
for (let i = 0; i < args.length; i++) {
|
|
11
|
+
if (args[i] === '--region' && args[i + 1]) {
|
|
12
|
+
region = args[i + 1];
|
|
13
|
+
i++;
|
|
14
|
+
}
|
|
15
|
+
else if (args[i] === '--environment' && args[i + 1]) {
|
|
16
|
+
environment = args[i + 1];
|
|
17
|
+
i++;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return { region, environment };
|
|
21
|
+
}
|
|
22
|
+
function main() {
|
|
23
|
+
const { region, environment } = parseArgs(process.argv);
|
|
24
|
+
const app = new aws_cdk_lib_1.App();
|
|
25
|
+
new chaoskb_stack_js_1.ChaosKBStack(app, `ChaosKB-${environment}`, {
|
|
26
|
+
environment,
|
|
27
|
+
env: {
|
|
28
|
+
region,
|
|
29
|
+
account: process.env['CDK_DEFAULT_ACCOUNT'],
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
console.log(`
|
|
33
|
+
ChaosKB CDK App created.
|
|
34
|
+
|
|
35
|
+
Environment: ${environment}
|
|
36
|
+
Region: ${region}
|
|
37
|
+
|
|
38
|
+
To deploy, run:
|
|
39
|
+
|
|
40
|
+
npx cdk deploy --app "npx ts-node lib/deploy-cli.ts"
|
|
41
|
+
|
|
42
|
+
Or with specific AWS profile:
|
|
43
|
+
|
|
44
|
+
npx cdk deploy --app "npx ts-node lib/deploy-cli.ts" --profile <your-profile>
|
|
45
|
+
`);
|
|
46
|
+
app.synth();
|
|
47
|
+
}
|
|
48
|
+
main();
|
|
49
|
+
//# sourceMappingURL=deploy-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-cli.js","sourceRoot":"","sources":["../../lib/deploy-cli.ts"],"names":[],"mappings":";;;AAEA,6CAAkC;AAClC,yDAAkD;AAElD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,WAAW,CAAC;IACzB,IAAI,WAAW,GAAG,aAAa,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACtD,WAAW,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,IAAI;IACX,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,MAAM,GAAG,GAAG,IAAI,iBAAG,EAAE,CAAC;IAEtB,IAAI,+BAAY,CAAC,GAAG,EAAE,WAAW,WAAW,EAAE,EAAE;QAC9C,WAAW;QACX,GAAG,EAAE;YACH,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;SAC5C;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC;;;iBAGG,WAAW;iBACX,MAAM;;;;;;;;;CAStB,CAAC,CAAC;IAED,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface LambdaFunctionURLEvent {
|
|
2
|
+
requestContext: {
|
|
3
|
+
http: {
|
|
4
|
+
method: string;
|
|
5
|
+
path: string;
|
|
6
|
+
sourceIp?: string;
|
|
7
|
+
};
|
|
8
|
+
requestId: string;
|
|
9
|
+
};
|
|
10
|
+
headers: Record<string, string>;
|
|
11
|
+
queryStringParameters?: Record<string, string>;
|
|
12
|
+
body?: string;
|
|
13
|
+
isBase64Encoded: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface LambdaFunctionURLResult {
|
|
16
|
+
statusCode: number;
|
|
17
|
+
headers: Record<string, string>;
|
|
18
|
+
body: string;
|
|
19
|
+
isBase64Encoded?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const handler: (event: LambdaFunctionURLEvent) => Promise<LambdaFunctionURLResult>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/handler/index.ts"],"names":[],"mappings":"AAqCA,UAAU,sBAAsB;IAC9B,cAAc,EAAE;QACd,IAAI,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1D,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA8BD,eAAO,MAAM,OAAO,GAAU,OAAO,sBAAsB,KAAG,OAAO,CAAC,uBAAuB,CAgS5F,CAAC"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handler = void 0;
|
|
4
|
+
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
5
|
+
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
6
|
+
const logger_js_1 = require("./logger.js");
|
|
7
|
+
const ssh_auth_js_1 = require("./middleware/ssh-auth.js");
|
|
8
|
+
const rate_limit_js_1 = require("./middleware/rate-limit.js");
|
|
9
|
+
const health_js_1 = require("./routes/health.js");
|
|
10
|
+
const register_js_1 = require("./routes/register.js");
|
|
11
|
+
const blobs_js_1 = require("./routes/blobs.js");
|
|
12
|
+
const restore_js_1 = require("./routes/restore.js");
|
|
13
|
+
const tenants_js_1 = require("./routes/tenants.js");
|
|
14
|
+
const export_js_1 = require("./routes/export.js");
|
|
15
|
+
const wrapped_key_js_1 = require("./routes/wrapped-key.js");
|
|
16
|
+
const rotation_js_1 = require("./routes/rotation.js");
|
|
17
|
+
const audit_js_1 = require("./routes/audit.js");
|
|
18
|
+
const revocation_js_1 = require("./routes/revocation.js");
|
|
19
|
+
const devices_js_1 = require("./routes/devices.js");
|
|
20
|
+
const invites_js_1 = require("./routes/invites.js");
|
|
21
|
+
const projects_js_1 = require("./routes/projects.js");
|
|
22
|
+
const notifications_js_1 = require("./routes/notifications.js");
|
|
23
|
+
const TABLE_NAME = process.env['TABLE_NAME'] ?? '';
|
|
24
|
+
const SIGNUPS_ENABLED_PARAM = process.env['SIGNUPS_ENABLED_PARAM'] ?? '';
|
|
25
|
+
const client = new client_dynamodb_1.DynamoDBClient({});
|
|
26
|
+
const ddb = lib_dynamodb_1.DynamoDBDocumentClient.from(client, {
|
|
27
|
+
marshallOptions: { removeUndefinedValues: true },
|
|
28
|
+
});
|
|
29
|
+
const CORS_HEADERS = {
|
|
30
|
+
'Access-Control-Allow-Origin': 'none',
|
|
31
|
+
'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS',
|
|
32
|
+
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
|
33
|
+
};
|
|
34
|
+
function response(statusCode, body, headers = {}, isBase64Encoded = false) {
|
|
35
|
+
return {
|
|
36
|
+
statusCode,
|
|
37
|
+
headers: { ...CORS_HEADERS, ...headers },
|
|
38
|
+
body,
|
|
39
|
+
isBase64Encoded,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const handler = async (event) => {
|
|
43
|
+
const startTime = Date.now();
|
|
44
|
+
const method = event.requestContext.http.method;
|
|
45
|
+
const path = event.requestContext.http.path;
|
|
46
|
+
const requestId = event.requestContext.requestId;
|
|
47
|
+
logger_js_1.logger.info('Request received', { requestId, operation: `${method} ${path}` });
|
|
48
|
+
try {
|
|
49
|
+
// OPTIONS (CORS preflight)
|
|
50
|
+
if (method === 'OPTIONS') {
|
|
51
|
+
return response(204, '', {});
|
|
52
|
+
}
|
|
53
|
+
// Health check — no auth
|
|
54
|
+
if (method === 'GET' && path === '/health') {
|
|
55
|
+
const result = (0, health_js_1.handleHealth)();
|
|
56
|
+
return response(result.statusCode, result.body, result.headers);
|
|
57
|
+
}
|
|
58
|
+
// Registration challenge — no auth, IP rate limited
|
|
59
|
+
if (method === 'GET' && path === '/v1/register/challenge') {
|
|
60
|
+
const sourceIp = event.headers['x-forwarded-for']?.split(',')[0]?.trim()
|
|
61
|
+
?? event.requestContext.http.sourceIp
|
|
62
|
+
?? 'unknown';
|
|
63
|
+
const rateCheck = await (0, rate_limit_js_1.checkIpRateLimit)(sourceIp, 'CHALLENGE', ddb, TABLE_NAME);
|
|
64
|
+
if (!rateCheck.allowed) {
|
|
65
|
+
return response(429, JSON.stringify({ error: 'rate_limited', message: 'Too many requests' }), {
|
|
66
|
+
'Content-Type': 'application/json',
|
|
67
|
+
...(0, rate_limit_js_1.rateLimitHeaders)(rateCheck),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const result = await (0, register_js_1.handleChallenge)(ddb, TABLE_NAME);
|
|
71
|
+
return response(result.statusCode, result.body, result.headers);
|
|
72
|
+
}
|
|
73
|
+
// Link confirm — no auth, IP rate limited (new device submits its public key)
|
|
74
|
+
if (method === 'POST' && path === '/v1/link-confirm') {
|
|
75
|
+
const sourceIp = event.headers['x-forwarded-for']?.split(',')[0]?.trim()
|
|
76
|
+
?? event.requestContext.http.sourceIp
|
|
77
|
+
?? 'unknown';
|
|
78
|
+
const rateCheck = await (0, rate_limit_js_1.checkIpRateLimit)(sourceIp, 'LINK_CONFIRM', ddb, TABLE_NAME);
|
|
79
|
+
if (!rateCheck.allowed) {
|
|
80
|
+
return response(429, JSON.stringify({ error: 'rate_limited', message: 'Too many requests' }), {
|
|
81
|
+
'Content-Type': 'application/json',
|
|
82
|
+
...(0, rate_limit_js_1.rateLimitHeaders)(rateCheck),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const result = await (0, devices_js_1.handleLinkConfirm)(event.body, ddb, TABLE_NAME);
|
|
86
|
+
return response(result.statusCode, result.body, result.headers);
|
|
87
|
+
}
|
|
88
|
+
// Register — no auth, IP rate limited (1 req/sec)
|
|
89
|
+
if (method === 'POST' && path === '/v1/auth/register') {
|
|
90
|
+
const sourceIp = event.headers['x-forwarded-for']?.split(',')[0]?.trim()
|
|
91
|
+
?? event.requestContext.http.sourceIp
|
|
92
|
+
?? 'unknown';
|
|
93
|
+
const rateCheck = await (0, rate_limit_js_1.checkIpRateLimit)(sourceIp, 'REGISTER', ddb, TABLE_NAME);
|
|
94
|
+
if (!rateCheck.allowed) {
|
|
95
|
+
return response(429, JSON.stringify({ error: 'rate_limited', message: 'Too many requests' }), {
|
|
96
|
+
'Content-Type': 'application/json',
|
|
97
|
+
...(0, rate_limit_js_1.rateLimitHeaders)(rateCheck),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const result = await (0, register_js_1.handleRegister)(event.body, ddb, TABLE_NAME, SIGNUPS_ENABLED_PARAM);
|
|
101
|
+
return response(result.statusCode, result.body, result.headers);
|
|
102
|
+
}
|
|
103
|
+
// All other routes require authentication
|
|
104
|
+
const auth = await (0, ssh_auth_js_1.authenticateRequest)(event, ddb, TABLE_NAME);
|
|
105
|
+
const tenantId = auth.tenantId;
|
|
106
|
+
// Revoke all devices (emergency)
|
|
107
|
+
if (path === '/v1/revoke-all' && method === 'POST') {
|
|
108
|
+
const result = await (0, revocation_js_1.handleRevokeAll)(tenantId, ddb, TABLE_NAME);
|
|
109
|
+
return response(result.statusCode, result.body, result.headers);
|
|
110
|
+
}
|
|
111
|
+
// Audit log
|
|
112
|
+
if (path === '/v1/audit' && method === 'GET') {
|
|
113
|
+
const result = await (0, audit_js_1.handleGetAuditLog)(tenantId, ddb, TABLE_NAME);
|
|
114
|
+
return response(result.statusCode, result.body, result.headers);
|
|
115
|
+
}
|
|
116
|
+
// Key rotation routes
|
|
117
|
+
if (path === '/v1/rotate-start' && method === 'POST') {
|
|
118
|
+
const result = await (0, rotation_js_1.handleRotateStart)(tenantId, auth.fingerprint, event.body, ddb, TABLE_NAME);
|
|
119
|
+
return response(result.statusCode, result.body, result.headers);
|
|
120
|
+
}
|
|
121
|
+
if (path === '/v1/rotate-confirm' && method === 'POST') {
|
|
122
|
+
const result = await (0, rotation_js_1.handleRotateConfirm)(tenantId, auth.fingerprint, ddb, TABLE_NAME);
|
|
123
|
+
return response(result.statusCode, result.body, result.headers);
|
|
124
|
+
}
|
|
125
|
+
// Device linking routes (authenticated)
|
|
126
|
+
if (path === '/v1/link-code' && method === 'POST') {
|
|
127
|
+
const result = await (0, devices_js_1.handleCreateLinkCodeFull)(tenantId, event.body, ddb, TABLE_NAME);
|
|
128
|
+
return response(result.statusCode, result.body, result.headers);
|
|
129
|
+
}
|
|
130
|
+
const linkStatusMatch = path.match(/^\/v1\/link-code\/([^/]+)\/status$/);
|
|
131
|
+
if (linkStatusMatch && method === 'GET') {
|
|
132
|
+
const codeHash = linkStatusMatch[1];
|
|
133
|
+
const result = await (0, devices_js_1.handleGetLinkCodeStatus)(tenantId, codeHash, ddb, TABLE_NAME);
|
|
134
|
+
return response(result.statusCode, result.body, result.headers);
|
|
135
|
+
}
|
|
136
|
+
// Device management routes (authenticated)
|
|
137
|
+
if (path === '/v1/devices' && method === 'GET') {
|
|
138
|
+
const result = await (0, devices_js_1.handleListDevices)(tenantId, ddb, TABLE_NAME);
|
|
139
|
+
return response(result.statusCode, result.body, result.headers);
|
|
140
|
+
}
|
|
141
|
+
const deviceDeleteMatch = path.match(/^\/v1\/devices\/([^/]+)$/);
|
|
142
|
+
if (deviceDeleteMatch && method === 'DELETE') {
|
|
143
|
+
const fingerprint = deviceDeleteMatch[1];
|
|
144
|
+
const result = await (0, devices_js_1.handleDeleteDevice)(tenantId, fingerprint, ddb, TABLE_NAME);
|
|
145
|
+
return response(result.statusCode, result.body, result.headers);
|
|
146
|
+
}
|
|
147
|
+
// Wrapped key routes
|
|
148
|
+
if (path === '/v1/wrapped-key' && method === 'PUT') {
|
|
149
|
+
const result = await (0, wrapped_key_js_1.handlePutWrappedKey)(tenantId, auth.fingerprint, event.body, event.isBase64Encoded, ddb, TABLE_NAME);
|
|
150
|
+
return response(result.statusCode, result.body, result.headers);
|
|
151
|
+
}
|
|
152
|
+
if (path === '/v1/wrapped-key' && method === 'GET') {
|
|
153
|
+
const result = await (0, wrapped_key_js_1.handleGetWrappedKey)(tenantId, auth.fingerprint, ddb, TABLE_NAME);
|
|
154
|
+
if (result.statusCode === 200 && result.headers['Content-Type'] === 'application/octet-stream') {
|
|
155
|
+
return response(result.statusCode, result.body, result.headers, true);
|
|
156
|
+
}
|
|
157
|
+
return response(result.statusCode, result.body, result.headers);
|
|
158
|
+
}
|
|
159
|
+
// Blob routes
|
|
160
|
+
const blobMatch = path.match(/^\/v1\/blobs\/([^/]+)$/);
|
|
161
|
+
const restoreMatch = path.match(/^\/v1\/blobs\/([^/]+)\/restore$/);
|
|
162
|
+
if (restoreMatch && method === 'POST') {
|
|
163
|
+
const blobId = restoreMatch[1];
|
|
164
|
+
const result = await (0, restore_js_1.handleRestore)(blobId, tenantId, ddb, TABLE_NAME);
|
|
165
|
+
return response(result.statusCode, result.body, result.headers);
|
|
166
|
+
}
|
|
167
|
+
if (path === '/v1/blobs/count' && method === 'GET') {
|
|
168
|
+
const result = await (0, blobs_js_1.handleCountBlobs)(tenantId, ddb, TABLE_NAME);
|
|
169
|
+
return response(result.statusCode, result.body, result.headers);
|
|
170
|
+
}
|
|
171
|
+
if (blobMatch) {
|
|
172
|
+
const blobId = blobMatch[1];
|
|
173
|
+
if (method === 'PUT') {
|
|
174
|
+
const contentType = event.headers['content-type'] || event.headers['Content-Type'] || '';
|
|
175
|
+
const result = await (0, blobs_js_1.handlePutBlob)(blobId, tenantId, event.body, event.isBase64Encoded, contentType, ddb, TABLE_NAME);
|
|
176
|
+
if (result.statusCode === 200 && result.headers['Content-Type'] === 'application/octet-stream') {
|
|
177
|
+
return response(result.statusCode, result.body, result.headers, true);
|
|
178
|
+
}
|
|
179
|
+
return response(result.statusCode, result.body, result.headers);
|
|
180
|
+
}
|
|
181
|
+
if (method === 'GET') {
|
|
182
|
+
const result = await (0, blobs_js_1.handleGetBlob)(blobId, tenantId, ddb, TABLE_NAME);
|
|
183
|
+
if (result.statusCode === 200 && result.headers['Content-Type'] === 'application/octet-stream') {
|
|
184
|
+
return response(result.statusCode, result.body, result.headers, true);
|
|
185
|
+
}
|
|
186
|
+
return response(result.statusCode, result.body, result.headers);
|
|
187
|
+
}
|
|
188
|
+
if (method === 'DELETE') {
|
|
189
|
+
const result = await (0, blobs_js_1.handleDeleteBlob)(blobId, tenantId, ddb, TABLE_NAME);
|
|
190
|
+
return response(result.statusCode, result.body, result.headers);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (path === '/v1/blobs' && method === 'GET') {
|
|
194
|
+
const since = event.queryStringParameters?.['since'];
|
|
195
|
+
const result = await (0, blobs_js_1.handleListBlobs)(tenantId, since, ddb, TABLE_NAME);
|
|
196
|
+
return response(result.statusCode, result.body, result.headers);
|
|
197
|
+
}
|
|
198
|
+
// Tenant routes
|
|
199
|
+
const tenantDeleteMatch = path.match(/^\/v1\/tenants\/([^/]+)$/);
|
|
200
|
+
if (path === '/v1/tenants' && method === 'POST') {
|
|
201
|
+
const result = await (0, tenants_js_1.handleCreateTenant)(event.body, tenantId, ddb, TABLE_NAME);
|
|
202
|
+
return response(result.statusCode, result.body, result.headers);
|
|
203
|
+
}
|
|
204
|
+
if (path === '/v1/tenants' && method === 'GET') {
|
|
205
|
+
const result = await (0, tenants_js_1.handleListTenants)(tenantId, ddb, TABLE_NAME);
|
|
206
|
+
return response(result.statusCode, result.body, result.headers);
|
|
207
|
+
}
|
|
208
|
+
if (tenantDeleteMatch && method === 'DELETE') {
|
|
209
|
+
const projectTenantId = tenantDeleteMatch[1];
|
|
210
|
+
const result = await (0, tenants_js_1.handleDeleteTenant)(projectTenantId, tenantId, ddb, TABLE_NAME);
|
|
211
|
+
return response(result.statusCode, result.body, result.headers);
|
|
212
|
+
}
|
|
213
|
+
// Invite routes
|
|
214
|
+
const inviteActionMatch = path.match(/^\/v1\/invites\/([^/]+)\/(accept|decline)$/);
|
|
215
|
+
if (path === '/v1/invites' && method === 'POST') {
|
|
216
|
+
const result = await (0, invites_js_1.handleCreateInvite)(tenantId, auth.fingerprint, event.body, ddb, TABLE_NAME);
|
|
217
|
+
return response(result.statusCode, result.body, result.headers);
|
|
218
|
+
}
|
|
219
|
+
if (path === '/v1/invites' && method === 'GET') {
|
|
220
|
+
const result = await (0, invites_js_1.handleListInvites)(tenantId, auth.fingerprint, ddb, TABLE_NAME);
|
|
221
|
+
return response(result.statusCode, result.body, result.headers);
|
|
222
|
+
}
|
|
223
|
+
if (inviteActionMatch && method === 'POST') {
|
|
224
|
+
const inviteId = inviteActionMatch[1];
|
|
225
|
+
const action = inviteActionMatch[2];
|
|
226
|
+
if (action === 'accept') {
|
|
227
|
+
const result = await (0, invites_js_1.handleAcceptInvite)(tenantId, auth.fingerprint, inviteId, ddb, TABLE_NAME);
|
|
228
|
+
return response(result.statusCode, result.body, result.headers);
|
|
229
|
+
}
|
|
230
|
+
if (action === 'decline') {
|
|
231
|
+
const result = await (0, invites_js_1.handleDeclineInvite)(tenantId, auth.fingerprint, inviteId, event.body, ddb, TABLE_NAME);
|
|
232
|
+
return response(result.statusCode, result.body, result.headers);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Notifications
|
|
236
|
+
if (path === '/v1/notifications' && method === 'GET') {
|
|
237
|
+
const result = await (0, notifications_js_1.handleGetNotifications)(tenantId, ddb, TABLE_NAME);
|
|
238
|
+
return response(result.statusCode, result.body, result.headers);
|
|
239
|
+
}
|
|
240
|
+
const notificationDismissMatch = path.match(/^\/v1\/notifications\/(.+)\/dismiss$/);
|
|
241
|
+
if (notificationDismissMatch && method === 'POST') {
|
|
242
|
+
const notificationId = decodeURIComponent(notificationDismissMatch[1]);
|
|
243
|
+
const result = await (0, notifications_js_1.handleDismissNotification)(tenantId, notificationId, ddb, TABLE_NAME);
|
|
244
|
+
return response(result.statusCode, result.body, result.headers);
|
|
245
|
+
}
|
|
246
|
+
// Shared projects
|
|
247
|
+
if (path === '/v1/projects/available' && method === 'GET') {
|
|
248
|
+
const result = await (0, projects_js_1.handleListAvailableProjects)(tenantId, ddb, TABLE_NAME);
|
|
249
|
+
return response(result.statusCode, result.body, result.headers);
|
|
250
|
+
}
|
|
251
|
+
// Export
|
|
252
|
+
if (path === '/v1/export' && method === 'GET') {
|
|
253
|
+
const result = await (0, export_js_1.handleExport)(tenantId, ddb, TABLE_NAME);
|
|
254
|
+
return response(result.statusCode, result.body, result.headers);
|
|
255
|
+
}
|
|
256
|
+
// Not found
|
|
257
|
+
return response(404, JSON.stringify({ error: 'not_found', message: `No route for ${method} ${path}` }), {
|
|
258
|
+
'Content-Type': 'application/json',
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
const durationMs = Date.now() - startTime;
|
|
263
|
+
if (err instanceof ssh_auth_js_1.AuthError) {
|
|
264
|
+
logger_js_1.logger.warn('Auth failed', { requestId, durationMs, error: err.message });
|
|
265
|
+
return response(err.statusCode, JSON.stringify({ error: 'auth_error', message: err.message }), {
|
|
266
|
+
'Content-Type': 'application/json',
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
logger_js_1.logger.error('Unhandled error', { requestId, durationMs, error: String(err) });
|
|
270
|
+
return response(500, JSON.stringify({ error: 'internal_error', message: 'Internal server error' }), {
|
|
271
|
+
'Content-Type': 'application/json',
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
exports.handler = handler;
|
|
276
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/handler/index.ts"],"names":[],"mappings":"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"}
|