@mbc-cqrs-serverless/core 1.3.1 → 1.3.3
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/README.md +0 -37
- package/dist/app.module.js +0 -2
- package/dist/app.module.js.map +1 -1
- package/dist/context/invoke.d.ts +0 -1
- package/dist/context/invoke.js.map +1 -1
- package/dist/context/user.d.ts +0 -4
- package/dist/context/user.js +0 -50
- package/dist/context/user.js.map +1 -1
- package/dist/decorators/constants.d.ts +0 -2
- package/dist/decorators/constants.js +1 -3
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/index.d.ts +0 -2
- package/dist/decorators/index.js +0 -2
- package/dist/decorators/index.js.map +1 -1
- package/dist/env.validation.d.ts +0 -19
- package/dist/env.validation.js +1 -22
- package/dist/env.validation.js.map +1 -1
- package/dist/guard/roles.guard.d.ts +1 -11
- package/dist/guard/roles.guard.js +8 -44
- package/dist/guard/roles.guard.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/notifications/appsync.service.d.ts +2 -3
- package/dist/notifications/appsync.service.js +12 -20
- package/dist/notifications/appsync.service.js.map +1 -1
- package/dist/notifications/event/notification.event.handler.d.ts +5 -13
- package/dist/notifications/event/notification.event.handler.js +7 -31
- package/dist/notifications/event/notification.event.handler.js.map +1 -1
- package/dist/notifications/index.d.ts +0 -3
- package/dist/notifications/index.js +0 -3
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notification.module.js +2 -12
- package/dist/notifications/notification.module.js.map +1 -1
- package/dist/services/explorer.service.d.ts +0 -5
- package/dist/services/explorer.service.js +0 -9
- package/dist/services/explorer.service.js.map +1 -1
- package/package.json +2 -2
- package/dist/auth/auth.module.d.ts +0 -2
- package/dist/auth/auth.module.js +0 -30
- package/dist/auth/auth.module.js.map +0 -1
- package/dist/auth/authz-bootstrap.service.d.ts +0 -11
- package/dist/auth/authz-bootstrap.service.js +0 -47
- package/dist/auth/authz-bootstrap.service.js.map +0 -1
- package/dist/auth/group-role-resolver.interface.d.ts +0 -13
- package/dist/auth/group-role-resolver.interface.js +0 -3
- package/dist/auth/group-role-resolver.interface.js.map +0 -1
- package/dist/auth/group-role-resolver.registry.d.ts +0 -6
- package/dist/auth/group-role-resolver.registry.js +0 -26
- package/dist/auth/group-role-resolver.registry.js.map +0 -1
- package/dist/auth/index.d.ts +0 -4
- package/dist/auth/index.js +0 -21
- package/dist/auth/index.js.map +0 -1
- package/dist/decorators/group-role-resolver.decorator.d.ts +0 -9
- package/dist/decorators/group-role-resolver.decorator.js +0 -17
- package/dist/decorators/group-role-resolver.decorator.js.map +0 -1
- package/dist/decorators/notification-transport.decorator.d.ts +0 -6
- package/dist/decorators/notification-transport.decorator.js +0 -14
- package/dist/decorators/notification-transport.decorator.js.map +0 -1
- package/dist/notification-env.validation.d.ts +0 -8
- package/dist/notification-env.validation.js +0 -36
- package/dist/notification-env.validation.js.map +0 -1
- package/dist/notifications/appsync-events.service.d.ts +0 -44
- package/dist/notifications/appsync-events.service.js +0 -147
- package/dist/notifications/appsync-events.service.js.map +0 -1
- package/dist/notifications/enums/index.d.ts +0 -1
- package/dist/notifications/enums/index.js +0 -18
- package/dist/notifications/enums/index.js.map +0 -1
- package/dist/notifications/enums/notification-transport.enum.d.ts +0 -4
- package/dist/notifications/enums/notification-transport.enum.js +0 -9
- package/dist/notifications/enums/notification-transport.enum.js.map +0 -1
- package/dist/notifications/interfaces/index.d.ts +0 -1
- package/dist/notifications/interfaces/index.js +0 -18
- package/dist/notifications/interfaces/index.js.map +0 -1
- package/dist/notifications/interfaces/notification-transport.interface.d.ts +0 -7
- package/dist/notifications/interfaces/notification-transport.interface.js +0 -5
- package/dist/notifications/interfaces/notification-transport.interface.js.map +0 -1
- package/dist/services/mocks/group-role-resolver.mock.d.ts +0 -4
- package/dist/services/mocks/group-role-resolver.mock.js +0 -20
- package/dist/services/mocks/group-role-resolver.mock.js.map +0 -1
package/README.md
CHANGED
|
@@ -215,43 +215,6 @@ export class TodoDataSyncHandler implements IDataSyncHandler {
|
|
|
215
215
|
}
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
## Group-based roles
|
|
219
|
-
|
|
220
|
-
`RolesGuard` checks direct roles from JWT `custom:roles` first, then roles from groups in `custom:groups` (tenant-scoped). Group → role mappings are **not** stored in the JWT; implement a resolver in your app.
|
|
221
|
-
|
|
222
|
-
**JWT example:**
|
|
223
|
-
|
|
224
|
-
```json
|
|
225
|
-
{
|
|
226
|
-
"custom:roles": "[{\"tenant\":\"tenant-a\",\"role\":\"admin\"}]",
|
|
227
|
-
"custom:groups": "[{\"tenant\":\"tenant-a\",\"groups\":[\"sales-team\"]}]"
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
**Resolver (one per app):**
|
|
232
|
-
|
|
233
|
-
```typescript
|
|
234
|
-
import {
|
|
235
|
-
GroupRoleResolver,
|
|
236
|
-
IGroupRoleResolver,
|
|
237
|
-
} from '@mbc-cqrs-serverless/core';
|
|
238
|
-
|
|
239
|
-
// Do not add @Injectable() — @GroupRoleResolver() already registers the provider.
|
|
240
|
-
@GroupRoleResolver()
|
|
241
|
-
export class AppGroupRoleResolver implements IGroupRoleResolver {
|
|
242
|
-
async resolveRoles({ tenantCode, groupIds, claims }) {
|
|
243
|
-
// Load roles from DynamoDB, RDS, config, etc.
|
|
244
|
-
return ['viewer', 'reporter'];
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
Register the class in your NestJS module `providers`. `AuthModule` is imported automatically via core `AppModule.forRoot()` and exports `GroupRoleResolverRegistry` globally for `@Auth()` / `RolesGuard`.
|
|
250
|
-
|
|
251
|
-
### Extending authorization
|
|
252
|
-
|
|
253
|
-
`RolesGuard` evaluates `tenantRoles` from the JWT (not `getUserRole()`). The protected `getUserRole()` method is **deprecated** and not called by the default guard. Subclasses should override `verifyRole` or `resolveGroupRoles` for custom logic.
|
|
254
|
-
|
|
255
218
|
## Environment Variables
|
|
256
219
|
|
|
257
220
|
| Variable | Description | Default |
|
package/dist/app.module.js
CHANGED
|
@@ -13,7 +13,6 @@ const core_1 = require("@nestjs/core");
|
|
|
13
13
|
const app_controller_1 = require("./app.controller");
|
|
14
14
|
const app_module_definition_1 = require("./app.module-definition");
|
|
15
15
|
const app_service_1 = require("./app.service");
|
|
16
|
-
const auth_1 = require("./auth");
|
|
17
16
|
const data_sync_module_1 = require("./command-events/data-sync.module");
|
|
18
17
|
const data_store_module_1 = require("./data-store/data-store.module");
|
|
19
18
|
const env_validation_1 = require("./env.validation");
|
|
@@ -65,7 +64,6 @@ exports.AppModule = AppModule;
|
|
|
65
64
|
exports.AppModule = AppModule = __decorate([
|
|
66
65
|
(0, common_1.Module)({
|
|
67
66
|
imports: [
|
|
68
|
-
auth_1.AuthModule,
|
|
69
67
|
notification_module_1.NotificationModule,
|
|
70
68
|
data_store_module_1.DataStoreModule,
|
|
71
69
|
data_sync_module_1.DataSyncModule,
|
package/dist/app.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,2CAA6C;AAC7C,uCAAmD;AAEnD,qDAAgD;AAChD,mEAA+E;AAC/E,+CAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,2CAA6C;AAC7C,uCAAmD;AAEnD,qDAAgD;AAChD,mEAA+E;AAC/E,+CAA0C;AAC1C,wEAAkE;AAClE,sEAAgE;AAChE,qDAAoD;AACpD,qCAAsC;AACtC,6EAAwE;AACxE,uDAAkD;AAClD,kEAA6D;AAC7D,2EAAqE;AAa9D,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,+CAAuB;IACpD,MAAM,CAAC,OAAO,CAAC,OAA4B;QACzC,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,CAAA;QAC5E,MAAM,OAAO,GAAW;YACtB;gBACE,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,OAAO,CAAC,UAAU;aAC3B;SACF,CAAA;QACD,iCAAiC;QACjC,IAAI,uBAAuB,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,oBAAW;aACpB,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAA;QAC3C,OAAO,CAAC,IAAI,CACV,qBAAY,CAAC,OAAO,CAAC;YACnB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE;gBACjB,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,IAAI;aACjB;YACD,QAAQ,EAAE,IAAA,kCAAiB,EAAC,OAAO,CAAC,MAAM,CAAC;SAC5C,CAAC,CACH,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAChC,IAAI,uBAAuB,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,oBAAW,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,mBAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;QAE5C,OAAO;YACL,GAAG,MAAM;YACT,OAAO;SACR,CAAA;IACH,CAAC;CACF,CAAA;AA1CY,8BAAS;oBAAT,SAAS;IAXrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,wCAAkB;YAClB,mCAAe;YACf,iCAAc;YACd,yCAAkB;YAClB,0BAAW;SACZ;QACD,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE,CAAC,wBAAU,EAAE,kCAAe,CAAC;KACzC,CAAC;GACW,SAAS,CA0CrB"}
|
package/dist/context/invoke.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/context/invoke.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/context/invoke.ts"],"names":[],"mappings":";;AAiFA,oDAoDC;AAED,kDAsBC;AA7JD,sEAAgE;AAChE,2CAAwE;AAExE,2CAAsC;AAEtC,wCAA8C;AA4E9C,SAAgB,oBAAoB,CAAC,GAAsB;IACzD,IAAI,2BAAiB,EAAE,CAAC;QACtB,OAAO,IAAA,qCAAgB,GAAE,CAAA;IAC3B,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAA;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAiC,CAAA;IACzD,IAAI,UAAU,GAAuB,SAAS,CAAA;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAC9C,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YACxD,MAAM,MAAM,GAAG,IAAA,sBAAS,EAAY,KAAK,CAAC,CAAA;YAC1C,UAAU,GAAG;gBACX,GAAG,EAAE;oBACH,MAAM;oBACN,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;iBAClC;aACF,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,8BAAqB,CAC7B,0CAA0C,CAC3C,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE;YAC7C,OAAO,EAAE,OAAO,CAAC,WAAW;YAC5B,OAAO;YACP,cAAc,EAAE;gBACd,UAAU,EAAE,OAAO,CAAC,QAAQ;gBAC5B,IAAI,EAAE;oBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,EAAE;oBAClD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;iBACrC;gBACD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;gBACtC,UAAU;aACX;SACF;QACD,OAAO,EAAE;YACP,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;SAC9B;KACF,CAAA;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAY;IAC9C,OAAO,CACL,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,IAAK,EAAgB,CACzE,CAAA;IACD,IAAI;IACJ,mDAAmD;IACnD,mDAAmD;IACnD,kCAAkC;IAClC,kCAAkC;IAClC,0DAA0D;IAC1D,wCAAwC;IACxC,wDAAwD;IACxD,uBAAuB;IACvB,6BAA6B;IAC7B,sBAAsB;IACtB,6BAA6B;IAC7B,qDAAqD;IACrD,uBAAuB;IACvB,+BAA+B;IAC/B,uBAAuB;IACvB,kDAAkD;IAClD,IAAI;AACN,CAAC"}
|
package/dist/context/user.d.ts
CHANGED
|
@@ -8,10 +8,6 @@ export declare class UserContext {
|
|
|
8
8
|
userId: string;
|
|
9
9
|
tenantRole: string;
|
|
10
10
|
tenantCode: string;
|
|
11
|
-
/** Direct roles from custom:roles for the active tenant (excludes group-derived roles). */
|
|
12
|
-
tenantRoles: string[];
|
|
13
|
-
/** Group IDs from custom:groups for the active tenant. */
|
|
14
|
-
tenantGroupIds: string[];
|
|
15
11
|
constructor(partial: Partial<UserContext>);
|
|
16
12
|
}
|
|
17
13
|
/**
|
package/dist/context/user.js
CHANGED
|
@@ -10,52 +10,6 @@ class UserContext {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
exports.UserContext = UserContext;
|
|
13
|
-
function parseTenantGroups(raw, tenantCode) {
|
|
14
|
-
if (!tenantCode) {
|
|
15
|
-
return [];
|
|
16
|
-
}
|
|
17
|
-
let parsed;
|
|
18
|
-
try {
|
|
19
|
-
parsed = JSON.parse(raw || '[]');
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return [];
|
|
23
|
-
}
|
|
24
|
-
if (!Array.isArray(parsed)) {
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
const memberships = parsed.map((membership) => ({
|
|
28
|
-
...membership,
|
|
29
|
-
tenant: (membership.tenant || '').toLowerCase(),
|
|
30
|
-
}));
|
|
31
|
-
const match = memberships.find((membership) => membership.tenant === tenantCode);
|
|
32
|
-
const groups = match?.groups;
|
|
33
|
-
return Array.isArray(groups) ? groups : [];
|
|
34
|
-
}
|
|
35
|
-
function collectTenantRoles(roles, tenantCode) {
|
|
36
|
-
if (!tenantCode) {
|
|
37
|
-
return [];
|
|
38
|
-
}
|
|
39
|
-
const seen = new Set();
|
|
40
|
-
const result = [];
|
|
41
|
-
const add = (role) => {
|
|
42
|
-
if (!seen.has(role)) {
|
|
43
|
-
seen.add(role);
|
|
44
|
-
result.push(role);
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
for (const { tenant, role } of roles) {
|
|
48
|
-
if (tenant === tenantCode) {
|
|
49
|
-
add(role);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
for (const { tenant, role } of roles) {
|
|
53
|
-
if (tenant === '') {
|
|
54
|
-
add(role);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return result;
|
|
58
|
-
}
|
|
59
13
|
/**
|
|
60
14
|
* Extract user context from JWT claims and request headers.
|
|
61
15
|
*
|
|
@@ -79,8 +33,6 @@ function getUserContext(ctx) {
|
|
|
79
33
|
// 2. Otherwise, use header value (security check delegated to RolesGuard)
|
|
80
34
|
// Note: tenantCode is normalized to lowercase for case-insensitive matching with role.tenant
|
|
81
35
|
const tenantCode = (claims['custom:tenant'] || (ctx?.event?.headers || {})[constants_1.HEADER_TENANT_CODE])?.toLowerCase();
|
|
82
|
-
const tenantGroupIds = parseTenantGroups(claims['custom:groups'], tenantCode);
|
|
83
|
-
const tenantRoles = collectTenantRoles(roles, tenantCode);
|
|
84
36
|
// Find tenantRole (case-insensitive matching - both tenantCode and role.tenant are lowercase)
|
|
85
37
|
let tenantRole = '';
|
|
86
38
|
for (const { tenant, role } of roles) {
|
|
@@ -95,8 +47,6 @@ function getUserContext(ctx) {
|
|
|
95
47
|
userId,
|
|
96
48
|
tenantRole,
|
|
97
49
|
tenantCode,
|
|
98
|
-
tenantRoles,
|
|
99
|
-
tenantGroupIds,
|
|
100
50
|
};
|
|
101
51
|
}
|
|
102
52
|
//# sourceMappingURL=user.js.map
|
package/dist/context/user.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/context/user.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/context/user.ts"],"names":[],"mappings":";;;AA8BA,wCAqCC;AAjED,4CAAiD;AACjD,qCAA6E;AAO7E,MAAa,WAAW;IAKtB,YAAY,OAA6B;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AARD,kCAQC;AAED;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAAC,GAA+B;IAC5D,IAAI,YAAY,IAAI,GAAG,EAAE,CAAC;QACxB,GAAG,GAAG,IAAA,6BAAoB,EAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,GAAG,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;IAEzB,cAAc;IACd,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,IAAI,CAC1C,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA;IAEzE,wBAAwB;IACxB,oDAAoD;IACpD,0EAA0E;IAC1E,6FAA6F;IAC7F,MAAM,UAAU,GAAG,CACjB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,8BAAkB,CAAC,CAC3E,EAAE,WAAW,EAAE,CAAA;IAEhB,8FAA8F;IAC9F,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QACrC,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC3C,UAAU,GAAG,IAAI,CAAA;YACjB,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;gBAClB,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,UAAU;QACV,UAAU;KACX,CAAA;AACH,CAAC"}
|
|
@@ -3,5 +3,3 @@ export declare const EVENT_HANDLER_METADATA = "__eventHandler__";
|
|
|
3
3
|
export declare const EVENT_FACTORY_METADATA = "__eventFactory__";
|
|
4
4
|
export declare const DATA_SYNC_HANDLER_METADATA = "__dataSyncHandler__";
|
|
5
5
|
export declare const ROLE_METADATA = "__allowedRoles__";
|
|
6
|
-
export declare const NOTIFICATION_TRANSPORT_METADATA = "__notificationTransport__";
|
|
7
|
-
export declare const GROUP_ROLE_RESOLVER_METADATA = "__groupRoleResolver__";
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ROLE_METADATA = exports.DATA_SYNC_HANDLER_METADATA = exports.EVENT_FACTORY_METADATA = exports.EVENT_HANDLER_METADATA = exports.EVENT_METADATA = void 0;
|
|
4
4
|
exports.EVENT_METADATA = '__event__';
|
|
5
5
|
exports.EVENT_HANDLER_METADATA = '__eventHandler__';
|
|
6
6
|
exports.EVENT_FACTORY_METADATA = '__eventFactory__';
|
|
7
7
|
exports.DATA_SYNC_HANDLER_METADATA = '__dataSyncHandler__';
|
|
8
8
|
exports.ROLE_METADATA = '__allowedRoles__';
|
|
9
|
-
exports.NOTIFICATION_TRANSPORT_METADATA = '__notificationTransport__';
|
|
10
|
-
exports.GROUP_ROLE_RESOLVER_METADATA = '__groupRoleResolver__';
|
|
11
9
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,WAAW,CAAA;AAC5B,QAAA,sBAAsB,GAAG,kBAAkB,CAAA;AAC3C,QAAA,sBAAsB,GAAG,kBAAkB,CAAA;AAC3C,QAAA,0BAA0B,GAAG,qBAAqB,CAAA;AAClD,QAAA,aAAa,GAAG,kBAAkB,CAAA
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,WAAW,CAAA;AAC5B,QAAA,sBAAsB,GAAG,kBAAkB,CAAA;AAC3C,QAAA,sBAAsB,GAAG,kBAAkB,CAAA;AAC3C,QAAA,0BAA0B,GAAG,qBAAqB,CAAA;AAClD,QAAA,aAAa,GAAG,kBAAkB,CAAA"}
|
|
@@ -4,7 +4,5 @@ export * from './context.decorator';
|
|
|
4
4
|
export * from './data-sync-handler.decorator';
|
|
5
5
|
export * from './event-factory.decorator';
|
|
6
6
|
export * from './event-handler.decorator';
|
|
7
|
-
export * from './group-role-resolver.decorator';
|
|
8
|
-
export * from './notification-transport.decorator';
|
|
9
7
|
export * from './roles.decorator';
|
|
10
8
|
export * from './swagger-response.decorator';
|
package/dist/decorators/index.js
CHANGED
|
@@ -20,8 +20,6 @@ __exportStar(require("./context.decorator"), exports);
|
|
|
20
20
|
__exportStar(require("./data-sync-handler.decorator"), exports);
|
|
21
21
|
__exportStar(require("./event-factory.decorator"), exports);
|
|
22
22
|
__exportStar(require("./event-handler.decorator"), exports);
|
|
23
|
-
__exportStar(require("./group-role-resolver.decorator"), exports);
|
|
24
|
-
__exportStar(require("./notification-transport.decorator"), exports);
|
|
25
23
|
__exportStar(require("./roles.decorator"), exports);
|
|
26
24
|
__exportStar(require("./swagger-response.decorator"), exports);
|
|
27
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,8CAA2B;AAC3B,sDAAmC;AACnC,gEAA6C;AAC7C,4DAAyC;AACzC,4DAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,8CAA2B;AAC3B,sDAAmC;AACnC,gEAA6C;AAC7C,4DAAyC;AACzC,4DAAyC;AACzC,oDAAiC;AACjC,+DAA4C"}
|
package/dist/env.validation.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ClassConstructor } from 'class-transformer';
|
|
2
|
-
export { BUILTIN_NOTIFICATION_TRANSPORT_ENV, parseNotificationTransports, validateBuiltinNotificationTransportEnv, } from './notification-env.validation';
|
|
3
2
|
export declare enum Environment {
|
|
4
3
|
Local = "local",
|
|
5
4
|
Development = "dev",
|
|
@@ -23,25 +22,7 @@ export declare class EnvironmentVariables {
|
|
|
23
22
|
SFN_COMMAND_ARN: string;
|
|
24
23
|
SNS_ENDPOINT: string;
|
|
25
24
|
SNS_REGION: string;
|
|
26
|
-
/**
|
|
27
|
-
* Comma-separated list of active notification transport names.
|
|
28
|
-
* Supported built-in values: 'appsync-graphql' | 'appsync-event'
|
|
29
|
-
* Defaults to 'appsync-graphql' when not set.
|
|
30
|
-
*
|
|
31
|
-
* Examples:
|
|
32
|
-
* NOTIFICATION_TRANSPORTS=appsync-graphql
|
|
33
|
-
* NOTIFICATION_TRANSPORTS=appsync-event
|
|
34
|
-
* NOTIFICATION_TRANSPORTS=appsync-graphql,appsync-event
|
|
35
|
-
*/
|
|
36
|
-
NOTIFICATION_TRANSPORTS: string;
|
|
37
25
|
APPSYNC_ENDPOINT: string;
|
|
38
|
-
APPSYNC_EVENTS_ENDPOINT: string;
|
|
39
|
-
/**
|
|
40
|
-
* Channel namespace name — must match the pre-created namespace in the
|
|
41
|
-
* AppSync Event API (segment 1 of every channel path).
|
|
42
|
-
* Defaults to 'default'.
|
|
43
|
-
*/
|
|
44
|
-
APPSYNC_EVENTS_NAMESPACE: string;
|
|
45
26
|
SES_ENDPOINT: string;
|
|
46
27
|
SES_REGION: string;
|
|
47
28
|
SES_FROM_EMAIL: string;
|
package/dist/env.validation.js
CHANGED
|
@@ -9,15 +9,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.EnvironmentVariables = exports.Environment =
|
|
12
|
+
exports.EnvironmentVariables = exports.Environment = void 0;
|
|
13
13
|
exports.getValidateConfig = getValidateConfig;
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
-
const notification_env_validation_1 = require("./notification-env.validation");
|
|
17
|
-
var notification_env_validation_2 = require("./notification-env.validation");
|
|
18
|
-
Object.defineProperty(exports, "BUILTIN_NOTIFICATION_TRANSPORT_ENV", { enumerable: true, get: function () { return notification_env_validation_2.BUILTIN_NOTIFICATION_TRANSPORT_ENV; } });
|
|
19
|
-
Object.defineProperty(exports, "parseNotificationTransports", { enumerable: true, get: function () { return notification_env_validation_2.parseNotificationTransports; } });
|
|
20
|
-
Object.defineProperty(exports, "validateBuiltinNotificationTransportEnv", { enumerable: true, get: function () { return notification_env_validation_2.validateBuiltinNotificationTransportEnv; } });
|
|
21
16
|
var Environment;
|
|
22
17
|
(function (Environment) {
|
|
23
18
|
Environment["Local"] = "local";
|
|
@@ -101,26 +96,11 @@ __decorate([
|
|
|
101
96
|
(0, class_validator_1.IsOptional)(),
|
|
102
97
|
__metadata("design:type", String)
|
|
103
98
|
], EnvironmentVariables.prototype, "SNS_REGION", void 0);
|
|
104
|
-
__decorate([
|
|
105
|
-
(0, class_validator_1.IsString)(),
|
|
106
|
-
(0, class_validator_1.IsOptional)(),
|
|
107
|
-
__metadata("design:type", String)
|
|
108
|
-
], EnvironmentVariables.prototype, "NOTIFICATION_TRANSPORTS", void 0);
|
|
109
99
|
__decorate([
|
|
110
100
|
(0, class_validator_1.IsString)(),
|
|
111
101
|
(0, class_validator_1.IsOptional)(),
|
|
112
102
|
__metadata("design:type", String)
|
|
113
103
|
], EnvironmentVariables.prototype, "APPSYNC_ENDPOINT", void 0);
|
|
114
|
-
__decorate([
|
|
115
|
-
(0, class_validator_1.IsString)(),
|
|
116
|
-
(0, class_validator_1.IsOptional)(),
|
|
117
|
-
__metadata("design:type", String)
|
|
118
|
-
], EnvironmentVariables.prototype, "APPSYNC_EVENTS_ENDPOINT", void 0);
|
|
119
|
-
__decorate([
|
|
120
|
-
(0, class_validator_1.IsString)(),
|
|
121
|
-
(0, class_validator_1.IsOptional)(),
|
|
122
|
-
__metadata("design:type", String)
|
|
123
|
-
], EnvironmentVariables.prototype, "APPSYNC_EVENTS_NAMESPACE", void 0);
|
|
124
104
|
__decorate([
|
|
125
105
|
(0, class_validator_1.IsString)(),
|
|
126
106
|
(0, class_validator_1.IsOptional)(),
|
|
@@ -156,7 +136,6 @@ function getValidateConfig(cls) {
|
|
|
156
136
|
if (errors.length > 0) {
|
|
157
137
|
throw new Error(errors.toString());
|
|
158
138
|
}
|
|
159
|
-
(0, notification_env_validation_1.validateBuiltinNotificationTransportEnv)(validatedConfig);
|
|
160
139
|
return validatedConfig;
|
|
161
140
|
};
|
|
162
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.validation.js","sourceRoot":"","sources":["../src/env.validation.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"env.validation.js","sourceRoot":"","sources":["../src/env.validation.ts"],"names":[],"mappings":";;;;;;;;;;;;AAyFA,8CAoBC;AA7GD,yDAAqE;AACrE,qDAQwB;AAExB,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,kCAAmB,CAAA;IACnB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED,MAAa,oBAAoB;CAqEhC;AArED,oDAqEC;AAnEC;IADC,IAAA,wBAAM,EAAC,WAAW,CAAC;;sDACC;AAErB;IADC,IAAA,0BAAQ,GAAE;;sDACK;AAIhB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;sDACG;AAGhB;IADC,IAAA,2BAAS,GAAE;;mEACkB;AAG9B;IADC,IAAA,0BAAQ,GAAE;;uDACM;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+DACY;AAGzB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;6DACY;AAEvB;IADC,IAAA,4BAAU,GAAE;;kEACe;AAG5B;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;yDACM;AAGnB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;uDACI;AAEjB;IADC,IAAA,0BAAQ,GAAE;;4DACW;AAItB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAGpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;wDACK;AAElB;IADC,IAAA,0BAAQ,GAAE;;6DACY;AAIvB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAGpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;wDACK;AAIlB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8DACW;AAIxB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAGpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;wDACK;AAElB;IADC,IAAA,0BAAQ,GAAE;;4DACW;AAItB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;qEACkB;AAI/B;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;qEACkB;AAGjC,SAAgB,iBAAiB,CAC/B,GAAyB;IAEzB,OAAO,SAAS,QAAQ,CAAC,MAA+B;QACtD,MAAM,eAAe,GAAG,IAAA,mCAAe,EACrC,GAAG,IAAI,oBAAoB,EAC3B,MAAM,EACN;YACE,wBAAwB,EAAE,IAAI;SAC/B,CACF,CAAA;QACD,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,eAAe,EAAE;YAC3C,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,eAAe,CAAA;IACxB,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { CanActivate, ExecutionContext, Logger } from '@nestjs/common';
|
|
2
2
|
import { Reflector } from '@nestjs/core';
|
|
3
|
-
import { GroupRoleResolverRegistry } from '../auth/group-role-resolver.registry';
|
|
4
3
|
import { UserContext } from '../context';
|
|
5
4
|
export declare class RolesGuard implements CanActivate {
|
|
6
5
|
protected reflector: Reflector;
|
|
7
|
-
protected registry?: GroupRoleResolverRegistry;
|
|
8
6
|
protected readonly logger: Logger;
|
|
9
|
-
constructor(reflector: Reflector
|
|
7
|
+
constructor(reflector: Reflector);
|
|
10
8
|
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
11
9
|
/**
|
|
12
10
|
* Verify tenant access.
|
|
@@ -61,14 +59,6 @@ export declare class RolesGuard implements CanActivate {
|
|
|
61
59
|
* This is a helper method that can be used by subclasses.
|
|
62
60
|
*/
|
|
63
61
|
protected getAuthorizerClaims(context: ExecutionContext): import("../context").JwtClaims;
|
|
64
|
-
protected hasAnyRole(requiredRoles: string[], userRoles: string[]): boolean;
|
|
65
|
-
protected resolveGroupRoles(context: ExecutionContext, groupIds: string[]): Promise<string[]>;
|
|
66
62
|
protected verifyRole(context: ExecutionContext): Promise<boolean>;
|
|
67
|
-
/**
|
|
68
|
-
* Returns the primary direct role string from JWT context.
|
|
69
|
-
*
|
|
70
|
-
* @deprecated Not invoked by `verifyRole`. For custom authorization, override
|
|
71
|
-
* `verifyRole`, `resolveGroupRoles`, or `canOverrideTenant` instead.
|
|
72
|
-
*/
|
|
73
63
|
protected getUserRole(context: ExecutionContext): Promise<string>;
|
|
74
64
|
}
|
|
@@ -8,22 +8,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
11
|
var RolesGuard_1;
|
|
15
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
13
|
exports.RolesGuard = void 0;
|
|
17
14
|
const common_1 = require("@nestjs/common");
|
|
18
15
|
const core_1 = require("@nestjs/core");
|
|
19
|
-
const group_role_resolver_registry_1 = require("../auth/group-role-resolver.registry");
|
|
20
16
|
const constants_1 = require("../constants");
|
|
21
17
|
const context_1 = require("../context");
|
|
22
18
|
const decorators_1 = require("../decorators");
|
|
23
19
|
let RolesGuard = RolesGuard_1 = class RolesGuard {
|
|
24
|
-
constructor(reflector
|
|
20
|
+
constructor(reflector) {
|
|
25
21
|
this.reflector = reflector;
|
|
26
|
-
this.registry = registry;
|
|
27
22
|
this.logger = new common_1.Logger(RolesGuard_1.name);
|
|
28
23
|
}
|
|
29
24
|
async canActivate(context) {
|
|
@@ -118,51 +113,22 @@ let RolesGuard = RolesGuard_1 = class RolesGuard {
|
|
|
118
113
|
const invokeContext = (0, context_1.extractInvokeContext)(context);
|
|
119
114
|
return (0, context_1.getAuthorizerClaims)(invokeContext);
|
|
120
115
|
}
|
|
121
|
-
hasAnyRole(requiredRoles, userRoles) {
|
|
122
|
-
return requiredRoles.some((role) => userRoles.includes(role));
|
|
123
|
-
}
|
|
124
|
-
async resolveGroupRoles(context, groupIds) {
|
|
125
|
-
const resolver = this.registry?.get();
|
|
126
|
-
if (!resolver || !groupIds.length) {
|
|
127
|
-
return [];
|
|
128
|
-
}
|
|
129
|
-
const userContext = (0, context_1.getUserContext)(context);
|
|
130
|
-
const claims = this.getAuthorizerClaims(context);
|
|
131
|
-
try {
|
|
132
|
-
return await resolver.resolveRoles({
|
|
133
|
-
tenantCode: userContext.tenantCode,
|
|
134
|
-
groupIds,
|
|
135
|
-
claims,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
this.logger.error('GroupRoleResolver.resolveRoles failed', err);
|
|
140
|
-
throw err;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
116
|
async verifyRole(context) {
|
|
144
117
|
const requiredRoles = this.reflector.getAllAndOverride(decorators_1.ROLE_METADATA, [context.getHandler(), context.getClass()]);
|
|
145
118
|
if (!requiredRoles || !requiredRoles.length) {
|
|
146
119
|
// all user can access
|
|
147
120
|
return true;
|
|
148
121
|
}
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return true;
|
|
122
|
+
const userRole = await this.getUserRole(context);
|
|
123
|
+
if (!userRole) {
|
|
124
|
+
return false;
|
|
153
125
|
}
|
|
154
|
-
if (
|
|
126
|
+
if (userRole === constants_1.ROLE_SYSTEM_ADMIN) {
|
|
155
127
|
return true;
|
|
156
128
|
}
|
|
157
|
-
|
|
158
|
-
return this.hasAnyRole(requiredRoles, groupRoles);
|
|
129
|
+
return requiredRoles.includes(userRole);
|
|
159
130
|
}
|
|
160
|
-
|
|
161
|
-
* Returns the primary direct role string from JWT context.
|
|
162
|
-
*
|
|
163
|
-
* @deprecated Not invoked by `verifyRole`. For custom authorization, override
|
|
164
|
-
* `verifyRole`, `resolveGroupRoles`, or `canOverrideTenant` instead.
|
|
165
|
-
*/
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
166
132
|
async getUserRole(context) {
|
|
167
133
|
const userContext = (0, context_1.getUserContext)(context);
|
|
168
134
|
return userContext.tenantRole;
|
|
@@ -171,8 +137,6 @@ let RolesGuard = RolesGuard_1 = class RolesGuard {
|
|
|
171
137
|
exports.RolesGuard = RolesGuard;
|
|
172
138
|
exports.RolesGuard = RolesGuard = RolesGuard_1 = __decorate([
|
|
173
139
|
(0, common_1.Injectable)(),
|
|
174
|
-
|
|
175
|
-
__metadata("design:paramtypes", [core_1.Reflector,
|
|
176
|
-
group_role_resolver_registry_1.GroupRoleResolverRegistry])
|
|
140
|
+
__metadata("design:paramtypes", [core_1.Reflector])
|
|
177
141
|
], RolesGuard);
|
|
178
142
|
//# sourceMappingURL=roles.guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../src/guard/roles.guard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../src/guard/roles.guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -15,7 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./app.module"), exports);
|
|
18
|
-
__exportStar(require("./auth"), exports);
|
|
19
18
|
__exportStar(require("./bootstrap"), exports);
|
|
20
19
|
__exportStar(require("./command-events"), exports);
|
|
21
20
|
__exportStar(require("./commands"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,8CAA2B;AAC3B,mDAAgC;AAChC,6CAA0B;AAC1B,8CAA2B;AAC3B,4CAAyB;AACzB,+CAA4B;AAC5B,+CAA4B;AAC5B,mDAAgC;AAChC,2CAAwB;AACxB,+CAA4B;AAC5B,4CAAyB;AACzB,0CAAuB;AACvB,4CAAyB;AACzB,+CAA4B;AAC5B,kDAA+B;AAC/B,yCAAsB;AACtB,0CAAuB;AACvB,6CAA0B;AAC1B,8CAA2B"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ConfigService } from '@nestjs/config';
|
|
2
2
|
import { INotification } from '../interfaces';
|
|
3
|
-
|
|
4
|
-
export declare class AppSyncService implements INotificationTransport {
|
|
3
|
+
export declare class AppSyncService {
|
|
5
4
|
private readonly config;
|
|
6
5
|
private readonly logger;
|
|
7
6
|
private readonly endpoint;
|
|
@@ -10,5 +9,5 @@ export declare class AppSyncService implements INotificationTransport {
|
|
|
10
9
|
private readonly region;
|
|
11
10
|
private readonly signer;
|
|
12
11
|
constructor(config: ConfigService);
|
|
13
|
-
sendMessage(
|
|
12
|
+
sendMessage(msg: INotification): Promise<any>;
|
|
14
13
|
}
|
|
@@ -20,8 +20,6 @@ const signature_v4_1 = require("@aws-sdk/signature-v4");
|
|
|
20
20
|
const common_1 = require("@nestjs/common");
|
|
21
21
|
const config_1 = require("@nestjs/config");
|
|
22
22
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
23
|
-
const decorators_1 = require("../decorators");
|
|
24
|
-
const enums_1 = require("./enums");
|
|
25
23
|
const query = /* GraphQL */ `
|
|
26
24
|
mutation SEND_MESSAGE($message: AWSJSON!) {
|
|
27
25
|
sendMessage(message: $message) {
|
|
@@ -39,24 +37,18 @@ let AppSyncService = AppSyncService_1 = class AppSyncService {
|
|
|
39
37
|
constructor(config) {
|
|
40
38
|
this.config = config;
|
|
41
39
|
this.logger = new common_1.Logger(AppSyncService_1.name);
|
|
42
|
-
this.endpoint = config.get('APPSYNC_ENDPOINT')
|
|
43
|
-
this.apiKey = config.get('APPSYNC_API_KEY')
|
|
40
|
+
this.endpoint = config.get('APPSYNC_ENDPOINT');
|
|
41
|
+
this.apiKey = config.get('APPSYNC_API_KEY');
|
|
44
42
|
this.region = 'ap-northeast-1';
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
});
|
|
53
|
-
}
|
|
43
|
+
this.hostname = new URL(this.endpoint).hostname;
|
|
44
|
+
this.signer = new signature_v4_1.SignatureV4({
|
|
45
|
+
credentials: (0, credential_provider_node_1.defaultProvider)(),
|
|
46
|
+
region: this.region,
|
|
47
|
+
service: 'appsync',
|
|
48
|
+
sha256: sha256_js_1.Sha256,
|
|
49
|
+
});
|
|
54
50
|
}
|
|
55
|
-
async sendMessage(
|
|
56
|
-
if (!this.endpoint?.trim() || !this.hostname) {
|
|
57
|
-
this.logger.warn('APPSYNC_ENDPOINT is not set, skipping.');
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
51
|
+
async sendMessage(msg) {
|
|
60
52
|
const headers = {
|
|
61
53
|
'Content-Type': 'application/json',
|
|
62
54
|
host: this.hostname,
|
|
@@ -64,7 +56,7 @@ let AppSyncService = AppSyncService_1 = class AppSyncService {
|
|
|
64
56
|
const body = JSON.stringify({
|
|
65
57
|
query,
|
|
66
58
|
variables: {
|
|
67
|
-
message: JSON.stringify(
|
|
59
|
+
message: JSON.stringify(msg),
|
|
68
60
|
},
|
|
69
61
|
});
|
|
70
62
|
const method = 'POST';
|
|
@@ -104,7 +96,7 @@ let AppSyncService = AppSyncService_1 = class AppSyncService {
|
|
|
104
96
|
};
|
|
105
97
|
exports.AppSyncService = AppSyncService;
|
|
106
98
|
exports.AppSyncService = AppSyncService = AppSyncService_1 = __decorate([
|
|
107
|
-
(0,
|
|
99
|
+
(0, common_1.Injectable)(),
|
|
108
100
|
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
109
101
|
], AppSyncService);
|
|
110
102
|
//# sourceMappingURL=appsync.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appsync.service.js","sourceRoot":"","sources":["../../src/notifications/appsync.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAA8C;AAC9C,gFAAmE;AACnE,wDAAmD;AACnD,
|
|
1
|
+
{"version":3,"file":"appsync.service.js","sourceRoot":"","sources":["../../src/notifications/appsync.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAA8C;AAC9C,gFAAmE;AACnE,wDAAmD;AACnD,2CAAmD;AACnD,2CAA8C;AAC9C,4DAA4C;AAI5C,MAAM,KAAK,GAAG,aAAa,CAAC;;;;;;;;;;;;CAY3B,CAAA;AAGM,IAAM,cAAc,sBAApB,MAAM,cAAc;IASzB,YAA6B,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QARjC,WAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAA;QASvD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAS,kBAAkB,CAAC,CAAA;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAS,iBAAiB,CAAC,CAAA;QACnD,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,0BAAW,CAAC;YAC5B,WAAW,EAAE,IAAA,0CAAe,GAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,kBAAM;SACf,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAkB;QAClC,MAAM,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,KAAK;YACL,SAAS,EAAE;gBACT,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;aAC7B;SACF,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,MAAM,CAAA;QACrB,IAAI,GAAa,CAAA;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YAClC,GAAG,GAAG,MAAM,IAAA,oBAAK,EAAC,IAAI,CAAC,QAAQ,EAAE;gBAC/B,MAAM;gBACN,OAAO;gBACP,IAAI;aACL,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG;gBACd,MAAM;gBACN,OAAO;gBACP,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,SAAS;aACnB,CAAA;YACD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBACpD,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAA;YACF,GAAG,GAAG,MAAM,IAAA,oBAAK,EAAC,IAAI,CAAC,QAAQ,EAAE;gBAC/B,MAAM,EAAE,aAAa,CAAC,MAAM;gBAC5B,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,IAAI,EAAE,aAAa,CAAC,IAAI;aACzB,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,IAAI,CAAC,CAAA;QAE/D,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAnEY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAU0B,sBAAa;GATvC,cAAc,CAmE1B"}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import { ConfigService } from '@nestjs/config';
|
|
3
|
-
import { ModuleRef } from '@nestjs/core';
|
|
4
1
|
import { IEventHandler } from '../../interfaces';
|
|
5
|
-
import {
|
|
2
|
+
import { AppSyncService } from '../appsync.service';
|
|
6
3
|
import { NotificationEvent } from './notification.event';
|
|
7
|
-
export declare class NotificationEventHandler implements IEventHandler<NotificationEvent
|
|
8
|
-
private readonly
|
|
9
|
-
private readonly explorerService;
|
|
10
|
-
private readonly config;
|
|
4
|
+
export declare class NotificationEventHandler implements IEventHandler<NotificationEvent> {
|
|
5
|
+
private readonly appSyncService;
|
|
11
6
|
private readonly logger;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
constructor(moduleRef: ModuleRef, explorerService: ExplorerService, config: ConfigService);
|
|
15
|
-
onModuleInit(): void;
|
|
16
|
-
execute(event: NotificationEvent): Promise<void>;
|
|
7
|
+
constructor(appSyncService: AppSyncService);
|
|
8
|
+
execute(event: NotificationEvent): Promise<any>;
|
|
17
9
|
}
|