@lilaquadrat/studio 10.6.0 → 10.8.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/lib/models.d.ts +2 -1
- package/lib/models.js +2 -1
- package/lib/models.js.map +1 -1
- package/lib/services.d.ts +2 -1
- package/lib/services.js +2 -1
- package/lib/services.js.map +1 -1
- package/lib/src/helpers/authPlugin.d.ts +11 -2
- package/lib/src/helpers/authPlugin.js +16 -6
- package/lib/src/helpers/authPlugin.js.map +1 -1
- package/lib/src/helpers/tokenRoles.d.ts +21 -0
- package/lib/src/helpers/tokenRoles.js +21 -0
- package/lib/src/helpers/tokenRoles.js.map +1 -0
- package/lib/src/helpers/verifyToken.d.ts +11 -3
- package/lib/src/helpers/verifyToken.js +13 -4
- package/lib/src/helpers/verifyToken.js.map +1 -1
- package/lib/src/models/conversation.model.js +4 -1
- package/lib/src/models/conversation.model.js.map +1 -1
- package/lib/src/models/permissions.model.js +6 -0
- package/lib/src/models/permissions.model.js.map +1 -1
- package/lib/src/models/sla.model.d.ts +4 -0
- package/lib/src/models/sla.model.js +84 -0
- package/lib/src/models/sla.model.js.map +1 -0
- package/lib/src/services/me.service.d.ts +17 -4
- package/lib/src/services/me.service.js +41 -25
- package/lib/src/services/me.service.js.map +1 -1
- package/lib/src/services/sla.service.d.ts +18 -0
- package/lib/src/services/sla.service.js +106 -0
- package/lib/src/services/sla.service.js.map +1 -0
- package/lib/tests/permissionsModel.spec.d.ts +1 -0
- package/lib/tests/permissionsModel.spec.js +8 -0
- package/lib/tests/permissionsModel.spec.js.map +1 -0
- package/lib/tests/slaModel.spec.d.ts +1 -0
- package/lib/tests/slaModel.spec.js +58 -0
- package/lib/tests/slaModel.spec.js.map +1 -0
- package/lib/tests/slaService.spec.d.ts +1 -0
- package/lib/tests/slaService.spec.js +128 -0
- package/lib/tests/slaService.spec.js.map +1 -0
- package/package.json +2 -2
- package/lib/src/helpers/isM2M.d.ts +0 -24
- package/lib/src/helpers/isM2M.js +0 -30
- package/lib/src/helpers/isM2M.js.map +0 -1
package/lib/models.d.ts
CHANGED
|
@@ -35,4 +35,5 @@ import invoiceModel from './src/models/invoice.model.js';
|
|
|
35
35
|
import emailLimitModel from './src/models/emailLimit.model.js';
|
|
36
36
|
import designModel from './src/models/design.model.js';
|
|
37
37
|
import conversationModel from './src/models/conversation.model.js';
|
|
38
|
-
|
|
38
|
+
import slaModel from './src/models/sla.model.js';
|
|
39
|
+
export { companyModel as CompanyModel, meModel as MeModel, editorModel as EditorModel, historyModel as HistoryModel, permissionsModel as PermissionsModel, projectModel as ProjectModel, settingsModel as SettingsModel, mediaModel as MediaModel, idModel as IdModel, publishModel as PublishModel, publishMethodModel as PublishMethodModel, secretsModel as SecretsModel, domainModel as DomainModel, hostingModel as HostingModel, hostingCommandModel as HostingCommandModel, hostingSettingsModel as HostingSettingsModel, trackerModel as TrackerModel, universalModel as UniversalModel, customersModel as CustomersModel, listsModel as ListsModel, listParticipantsModel as ListParticipantsModel, cacheModel as CacheModel, accessModel as AccessModel, mailFromModel as MailFromModel, webhookCallModel as WebhookCallModel, paymentModel as PaymentModel, paymentProviderModel as PaymentProviderModel, appModel as AppModel, importModel as ImportModel, structureModel as StructureModel, cartModel as CartModel, loggingModel as LoggingModel, uploadModel as UploadModel, invoiceModel as InvoiceModel, emailLimitModel as EmailLimitModel, designModel as DesignModel, conversationModel as ConversationModel, slaModel as SlaModel, };
|
package/lib/models.js
CHANGED
|
@@ -35,5 +35,6 @@ import invoiceModel from './src/models/invoice.model.js';
|
|
|
35
35
|
import emailLimitModel from './src/models/emailLimit.model.js';
|
|
36
36
|
import designModel from './src/models/design.model.js';
|
|
37
37
|
import conversationModel from './src/models/conversation.model.js';
|
|
38
|
-
|
|
38
|
+
import slaModel from './src/models/sla.model.js';
|
|
39
|
+
export { companyModel as CompanyModel, meModel as MeModel, editorModel as EditorModel, historyModel as HistoryModel, permissionsModel as PermissionsModel, projectModel as ProjectModel, settingsModel as SettingsModel, mediaModel as MediaModel, idModel as IdModel, publishModel as PublishModel, publishMethodModel as PublishMethodModel, secretsModel as SecretsModel, domainModel as DomainModel, hostingModel as HostingModel, hostingCommandModel as HostingCommandModel, hostingSettingsModel as HostingSettingsModel, trackerModel as TrackerModel, universalModel as UniversalModel, customersModel as CustomersModel, listsModel as ListsModel, listParticipantsModel as ListParticipantsModel, cacheModel as CacheModel, accessModel as AccessModel, mailFromModel as MailFromModel, webhookCallModel as WebhookCallModel, paymentModel as PaymentModel, paymentProviderModel as PaymentProviderModel, appModel as AppModel, importModel as ImportModel, structureModel as StructureModel, cartModel as CartModel, loggingModel as LoggingModel, uploadModel as UploadModel, invoiceModel as InvoiceModel, emailLimitModel as EmailLimitModel, designModel as DesignModel, conversationModel as ConversationModel, slaModel as SlaModel, };
|
|
39
40
|
//# sourceMappingURL=models.js.map
|
package/lib/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../models.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,gBAAgB,MAAM,mCAAmC,CAAC;AACjE,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAC3D,OAAO,UAAU,MAAM,+BAA+B,CAAC;AACvD,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,kBAAkB,MAAM,sCAAsC,CAAC;AACtE,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,WAAW,MAAM,8BAA8B,CAAA;AACtD,OAAO,YAAY,MAAM,+BAA+B,CAAA;AACxD,OAAO,mBAAmB,MAAM,sCAAsC,CAAC;AACvE,OAAO,oBAAoB,MAAM,uCAAuC,CAAC;AACzE,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,UAAU,MAAM,6BAA6B,CAAC;AACrD,OAAO,qBAAqB,MAAM,yCAAyC,CAAC;AAC5E,OAAO,UAAU,MAAM,6BAA6B,CAAC;AACrD,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAC3D,OAAO,gBAAgB,MAAM,oCAAoC,CAAC;AAClE,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,oBAAoB,MAAM,wCAAwC,CAAC;AAC1E,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,iBAAiB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../models.ts"],"names":[],"mappings":"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"}
|
package/lib/services.d.ts
CHANGED
|
@@ -34,4 +34,5 @@ import invoicesService from './src/services/invoices.service.js';
|
|
|
34
34
|
import emailLimitService from './src/services/emailLimit.service.js';
|
|
35
35
|
import designsService from './src/services/designs.service.js';
|
|
36
36
|
import supportService from './src/services/support.service.js';
|
|
37
|
-
|
|
37
|
+
import slaService from './src/services/sla.service.js';
|
|
38
|
+
export { editorService as EditorService, historyService as HistoryService, idService as IdService, publishService as PublishService, secretService as SecretService, publishMethodService as PublishMethodService, domainsService as DomainsService, confService as ConfService, hostingCommandsService as HostingCommandsService, hostingService as HostingService, hostingAdminService as HostingAdminService, customersService as CustomersService, listsService as ListsService, listParticipantsService as ListParticipantsService, spamAnalasysService as SpamAnalasysService, webhooksCallsService as WebhooksCallsService, paymentsService as PaymentsService, paymentProvidersService as PaymentProvidersService, permissionsService as PermissionsService, importService as ImportService, structuresService as StructuresService, meService, MeService, AccessService, PublishDataService, MailFromService, CartService, AiService, LoggingService, jetstreamService as JetStreamService, storageService as StorageService, uploadService as UploadService, authService as AuthService, invoicesService as InvoicesService, emailLimitService as EmailLimitService, designsService as DesignsService, supportService as SupportService, slaService as SlaService, };
|
package/lib/services.js
CHANGED
|
@@ -34,5 +34,6 @@ import invoicesService from './src/services/invoices.service.js';
|
|
|
34
34
|
import emailLimitService from './src/services/emailLimit.service.js';
|
|
35
35
|
import designsService from './src/services/designs.service.js';
|
|
36
36
|
import supportService from './src/services/support.service.js';
|
|
37
|
-
|
|
37
|
+
import slaService from './src/services/sla.service.js';
|
|
38
|
+
export { editorService as EditorService, historyService as HistoryService, idService as IdService, publishService as PublishService, secretService as SecretService, publishMethodService as PublishMethodService, domainsService as DomainsService, confService as ConfService, hostingCommandsService as HostingCommandsService, hostingService as HostingService, hostingAdminService as HostingAdminService, customersService as CustomersService, listsService as ListsService, listParticipantsService as ListParticipantsService, spamAnalasysService as SpamAnalasysService, webhooksCallsService as WebhooksCallsService, paymentsService as PaymentsService, paymentProvidersService as PaymentProvidersService, permissionsService as PermissionsService, importService as ImportService, structuresService as StructuresService, meService, MeService, AccessService, PublishDataService, MailFromService, CartService, AiService, LoggingService, jetstreamService as JetStreamService, storageService as StorageService, uploadService as UploadService, authService as AuthService, invoicesService as InvoicesService, emailLimitService as EmailLimitService, designsService as DesignsService, supportService as SupportService, slaService as SlaService, };
|
|
38
39
|
//# sourceMappingURL=services.js.map
|
package/lib/services.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../services.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,oBAAoB,MAAM,yCAAyC,CAAC;AAC3E,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,sBAAsB,MAAM,2CAA2C,CAAC;AAC/E,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,mBAAmB,MAAM,wCAAwC,CAAC;AACzE,OAAO,kBAAkB,MAAM,uCAAuC,CAAC;AACvE,OAAO,gBAAgB,MAAM,qCAAqC,CAAC;AACnE,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,uBAAuB,MAAM,4CAA4C,CAAC;AACjF,OAAO,mBAAmB,MAAM,wCAAwC,CAAC;AACzE,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,oBAAoB,MAAM,0CAA0C,CAAC;AAC5E,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,uBAAuB,MAAM,4CAA4C,CAAC;AACjF,OAAO,kBAAkB,MAAM,uCAAuC,CAAC;AACvE,OAAO,SAAS,EAAE,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAClE,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AACrE,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,gBAAgB,MAAM,qCAAqC,CAAC;AACnE,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AACrE,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,cAAc,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../services.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FastifyPluginAsync } from 'fastify';
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
2
|
+
import { tokenRoles } from './tokenRoles.js';
|
|
3
|
+
export { tokenRoles };
|
|
4
4
|
type OAuthJwtUser = {
|
|
5
5
|
given_name: string;
|
|
6
6
|
family_name: string;
|
|
@@ -18,8 +18,17 @@ type OAuthJwtUser = {
|
|
|
18
18
|
email_verified: boolean;
|
|
19
19
|
gty?: string;
|
|
20
20
|
scope?: string;
|
|
21
|
+
/** legacy Auth0 RBAC claim. Keycloak carries authorisation in realm_access/resource_access instead. */
|
|
21
22
|
permissions?: string[];
|
|
22
23
|
azp?: string;
|
|
24
|
+
client_id?: string;
|
|
25
|
+
preferred_username?: string;
|
|
26
|
+
realm_access?: {
|
|
27
|
+
roles?: string[];
|
|
28
|
+
};
|
|
29
|
+
resource_access?: Record<string, {
|
|
30
|
+
roles?: string[];
|
|
31
|
+
}>;
|
|
23
32
|
customerInternalId?: any;
|
|
24
33
|
};
|
|
25
34
|
declare module '@fastify/jwt' {
|
|
@@ -3,9 +3,9 @@ import fp from 'fastify-plugin';
|
|
|
3
3
|
import fastifyJwt from '@fastify/jwt';
|
|
4
4
|
import jwksRsa from 'jwks-rsa';
|
|
5
5
|
import respondCode from '../functions/respondCode.js';
|
|
6
|
+
import { tokenRoles } from './tokenRoles.js';
|
|
6
7
|
import auth0config from './auth0config.js';
|
|
7
|
-
|
|
8
|
-
export { isM2M };
|
|
8
|
+
export { tokenRoles };
|
|
9
9
|
const TRANSIENT_NETWORK_CODES = new Set([
|
|
10
10
|
'ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN', 'ECONNABORTED',
|
|
11
11
|
]);
|
|
@@ -106,13 +106,23 @@ const authPlugin = async (fastify) => {
|
|
|
106
106
|
return respondCode(upstream ? "SERVICE_UNAVAILABLE" : "UNAUTHORIZED", reply);
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
|
-
|
|
109
|
+
/**
|
|
110
|
+
* Authorise by ROLE rather than by caller type.
|
|
111
|
+
*
|
|
112
|
+
* Replaces the old `authenticateM2M`, which asked "is this a machine token?" and let any service
|
|
113
|
+
* account through. Classifying the caller was never the security question — what matters is
|
|
114
|
+
* whether this token is entitled to the operation. A service account carries the role via
|
|
115
|
+
* Keycloak realm roles; a user could be granted the same role and pass identically.
|
|
116
|
+
*/
|
|
117
|
+
fastify.decorate('authorize', (...roles) => async (request, reply) => {
|
|
110
118
|
try {
|
|
111
119
|
await request.jwtVerify();
|
|
112
|
-
|
|
120
|
+
request.auth = request.user;
|
|
121
|
+
const granted = tokenRoles(request.user);
|
|
122
|
+
if (!roles.some((single) => granted.includes(single))) {
|
|
123
|
+
request.requestLog?.warn?.('auth.forbidden', { required: roles, granted });
|
|
113
124
|
return respondCode("FORBIDDEN", reply);
|
|
114
125
|
}
|
|
115
|
-
request.auth = request.user;
|
|
116
126
|
}
|
|
117
127
|
catch (err) {
|
|
118
128
|
const upstream = isTransientAuthError(err);
|
|
@@ -145,7 +155,7 @@ const authPlugin = async (fastify) => {
|
|
|
145
155
|
email_verified: true
|
|
146
156
|
};
|
|
147
157
|
});
|
|
148
|
-
fastify.decorate('
|
|
158
|
+
fastify.decorate('authorize', (..._roles) => async (request, _reply) => {
|
|
149
159
|
request.auth = {
|
|
150
160
|
sub: 'dev-m2m@clients',
|
|
151
161
|
given_name: 'M2M',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authPlugin.js","sourceRoot":"","sources":["../../../src/helpers/authPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,UAA6B,MAAM,cAAc,CAAC;AACzD,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"authPlugin.js","sourceRoot":"","sources":["../../../src/helpers/authPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every role a token carries, from both realm-level and per-client mappings.
|
|
3
|
+
*
|
|
4
|
+
* Keycloak emits these natively through the default `roles` client scope — no protocol mapper and no
|
|
5
|
+
* realm-specific configuration required. Authorisation is therefore expressed as role assignments in
|
|
6
|
+
* Keycloak rather than as a hardcoded claim on each client.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: this helper must stay dependency-free. It is imported by me.service, which is reachable
|
|
9
|
+
* from non-Fastify NATS workers via the package barrel. It must NOT import authPlugin or anything
|
|
10
|
+
* that pulls in `fastify-plugin`, or those workers crash at import time with ERR_MODULE_NOT_FOUND.
|
|
11
|
+
* (This is why it lives here rather than alongside the Fastify decorator that also uses it.)
|
|
12
|
+
*/
|
|
13
|
+
export declare const tokenRoles: (auth: {
|
|
14
|
+
realm_access?: {
|
|
15
|
+
roles?: string[];
|
|
16
|
+
};
|
|
17
|
+
resource_access?: Record<string, {
|
|
18
|
+
roles?: string[];
|
|
19
|
+
}>;
|
|
20
|
+
} | undefined) => string[];
|
|
21
|
+
export default tokenRoles;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every role a token carries, from both realm-level and per-client mappings.
|
|
3
|
+
*
|
|
4
|
+
* Keycloak emits these natively through the default `roles` client scope — no protocol mapper and no
|
|
5
|
+
* realm-specific configuration required. Authorisation is therefore expressed as role assignments in
|
|
6
|
+
* Keycloak rather than as a hardcoded claim on each client.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: this helper must stay dependency-free. It is imported by me.service, which is reachable
|
|
9
|
+
* from non-Fastify NATS workers via the package barrel. It must NOT import authPlugin or anything
|
|
10
|
+
* that pulls in `fastify-plugin`, or those workers crash at import time with ERR_MODULE_NOT_FOUND.
|
|
11
|
+
* (This is why it lives here rather than alongside the Fastify decorator that also uses it.)
|
|
12
|
+
*/
|
|
13
|
+
export const tokenRoles = (auth) => {
|
|
14
|
+
if (!auth)
|
|
15
|
+
return [];
|
|
16
|
+
const realm = auth.realm_access?.roles ?? [];
|
|
17
|
+
const perClient = Object.values(auth.resource_access ?? {}).flatMap((single) => single.roles ?? []);
|
|
18
|
+
return [...new Set([...realm, ...perClient])];
|
|
19
|
+
};
|
|
20
|
+
export default tokenRoles;
|
|
21
|
+
//# sourceMappingURL=tokenRoles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenRoles.js","sourceRoot":"","sources":["../../../src/helpers/tokenRoles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAGd,EAAY,EAAE;IAEzB,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEpG,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEhD,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Standalone
|
|
3
|
-
*
|
|
2
|
+
* Standalone OIDC JWT verification — usable outside Fastify (e.g. the chat websocket
|
|
3
|
+
* server, which @fastify/jwt's request-bound jwtVerify can't reach).
|
|
4
4
|
* Verifies an RS256 token's signature against the IdP JWKS and validates the
|
|
5
5
|
* standard time/issuer/audience claims. Returns the decoded claims on success;
|
|
6
6
|
* throws on any failure (bad signature, expired, wrong issuer, unknown kid).
|
|
7
7
|
*
|
|
8
|
-
* Mirrors authPlugin's RS256 + jwks-rsa approach so HTTP and WS trust the same keys
|
|
8
|
+
* Mirrors authPlugin's RS256 + jwks-rsa approach so HTTP and WS trust the same keys —
|
|
9
|
+
* including its DUAL-ISSUER routing: when no explicit jwksUri is passed, the key set is
|
|
10
|
+
* chosen by the token's own `iss`, so Auth0 and Keycloak tokens both verify. Without this
|
|
11
|
+
* every websocket connection breaks the moment user auth moves to Keycloak, because the
|
|
12
|
+
* defaults (JWT_URL/JWT_ISSUER) only ever describe one issuer.
|
|
13
|
+
*
|
|
14
|
+
* Selecting the key set by the (still unverified) `iss` is safe: the signature is then
|
|
15
|
+
* checked against that issuer's real public key, so a token claiming iss=Keycloak but not
|
|
16
|
+
* signed by Keycloak fails the kid/signature check below.
|
|
9
17
|
*/
|
|
10
18
|
type JwtClaims = {
|
|
11
19
|
sub: string;
|
|
@@ -26,15 +26,24 @@ function decodeSegment(segment) {
|
|
|
26
26
|
return JSON.parse(base64UrlDecode(segment).toString('utf8'));
|
|
27
27
|
}
|
|
28
28
|
export default async function verifyToken(token, options = {}) {
|
|
29
|
-
const jwksUri = options.jwksUri ?? process.env.JWT_URL;
|
|
30
|
-
const issuer = options.issuer ?? process.env.JWT_ISSUER;
|
|
31
|
-
if (!jwksUri)
|
|
32
|
-
throw new Error('JWKS uri not configured (set JWT_URL or pass jwksUri)');
|
|
33
29
|
const parts = token.split('.');
|
|
34
30
|
if (parts.length !== 3)
|
|
35
31
|
throw new Error('malformed token');
|
|
36
32
|
const [headerB64, payloadB64, signatureB64] = parts;
|
|
37
33
|
const header = decodeSegment(headerB64);
|
|
34
|
+
const unverified = decodeSegment(payloadB64);
|
|
35
|
+
// dual-issuer: route the JWKS lookup by the token's own issuer unless a caller pinned one
|
|
36
|
+
const keycloakIssuer = process.env.KEYCLOAK_ISSUER;
|
|
37
|
+
const isKeycloak = !!keycloakIssuer && unverified.iss === keycloakIssuer;
|
|
38
|
+
const jwksUri = options.jwksUri
|
|
39
|
+
?? (isKeycloak ? process.env.KEYCLOAK_JWT_URL : process.env.JWT_URL);
|
|
40
|
+
const issuer = options.issuer
|
|
41
|
+
?? (isKeycloak ? keycloakIssuer : process.env.JWT_ISSUER);
|
|
42
|
+
if (!jwksUri) {
|
|
43
|
+
throw new Error(isKeycloak
|
|
44
|
+
? 'JWKS uri not configured for Keycloak (set KEYCLOAK_JWT_URL)'
|
|
45
|
+
: 'JWKS uri not configured (set JWT_URL or pass jwksUri)');
|
|
46
|
+
}
|
|
38
47
|
if (header.alg !== 'RS256')
|
|
39
48
|
throw new Error(`unsupported token alg: ${header.alg}`);
|
|
40
49
|
if (!header.kid)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyToken.js","sourceRoot":"","sources":["../../../src/helpers/verifyToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,OAAO,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyToken.js","sourceRoot":"","sources":["../../../src/helpers/verifyToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,10 @@ model.setSchema({
|
|
|
11
11
|
lastActivity: { type: 'string', format: 'date-time' },
|
|
12
12
|
messagesCount: { type: 'number', minimum: 0 },
|
|
13
13
|
messagesCountSystem: { type: 'number', minimum: 0 },
|
|
14
|
-
operationMode: { type: 'string', enum: ['default', 'support'] }
|
|
14
|
+
operationMode: { type: 'string', enum: ['default', 'support'] },
|
|
15
|
+
supportStatus: { type: 'string', enum: ['awaiting_agent', 'awaiting_customer', 'resolved'] },
|
|
16
|
+
supportStatusUpdatedAt: { type: 'string', format: 'date-time' },
|
|
17
|
+
supportStatusVersion: { type: 'integer', minimum: 1 }
|
|
15
18
|
},
|
|
16
19
|
required: ['participantsHash', 'participants', 'messagesCount'],
|
|
17
20
|
additionalProperties: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.model.js","sourceRoot":"","sources":["../../../src/models/conversation.model.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAElD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAmD,cAAc,EAAE,eAAe,CAAC,CAAC;AAE7G,KAAK,CAAC,SAAS,CAAC;IACd,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;QACxC,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAC1D,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QACrD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;QAClD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;QACrD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QAC7C,mBAAmB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QACnD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"conversation.model.js","sourceRoot":"","sources":["../../../src/models/conversation.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.model.js","sourceRoot":"","sources":["../../../src/models/permissions.model.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"permissions.model.js","sourceRoot":"","sources":["../../../src/models/permissions.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import Modelv2 from '../classes/modelv2.class.js';
|
|
2
|
+
const timePattern = '^(?:[01]\\d|2[0-3]):[0-5]\\d$';
|
|
3
|
+
const supportDaySchema = {
|
|
4
|
+
type: 'object',
|
|
5
|
+
properties: {
|
|
6
|
+
day: {
|
|
7
|
+
type: 'string',
|
|
8
|
+
enum: ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'],
|
|
9
|
+
},
|
|
10
|
+
startTime: { type: 'string', pattern: timePattern },
|
|
11
|
+
endTime: { type: 'string', pattern: timePattern },
|
|
12
|
+
},
|
|
13
|
+
required: ['day', 'startTime', 'endTime'],
|
|
14
|
+
additionalProperties: false,
|
|
15
|
+
};
|
|
16
|
+
const supportDaysSchema = {
|
|
17
|
+
type: 'array',
|
|
18
|
+
items: supportDaySchema,
|
|
19
|
+
maxItems: 7,
|
|
20
|
+
};
|
|
21
|
+
const model = new Modelv2('sla', 'sla');
|
|
22
|
+
model.immutable = ['company'];
|
|
23
|
+
model.addIndex({
|
|
24
|
+
key: {
|
|
25
|
+
company: 1,
|
|
26
|
+
},
|
|
27
|
+
unique: true,
|
|
28
|
+
name: 'company_unique',
|
|
29
|
+
}, 1);
|
|
30
|
+
model.setSchema({
|
|
31
|
+
type: 'object',
|
|
32
|
+
properties: {
|
|
33
|
+
company: { type: 'string', pattern: '^([a-z0-9]{1,15})$' },
|
|
34
|
+
providesSupport: { type: 'boolean' },
|
|
35
|
+
responseTimeHours: { type: 'number', exclusiveMinimum: 0 },
|
|
36
|
+
timeZone: { type: 'string', minLength: 1 },
|
|
37
|
+
supportDays: supportDaysSchema,
|
|
38
|
+
},
|
|
39
|
+
required: ['company', 'providesSupport', 'responseTimeHours', 'timeZone', 'supportDays'],
|
|
40
|
+
allOf: [
|
|
41
|
+
{
|
|
42
|
+
if: {
|
|
43
|
+
properties: {
|
|
44
|
+
providesSupport: { const: true },
|
|
45
|
+
},
|
|
46
|
+
required: ['providesSupport'],
|
|
47
|
+
},
|
|
48
|
+
then: {
|
|
49
|
+
properties: {
|
|
50
|
+
supportDays: { type: 'array', minItems: 1 },
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
additionalProperties: false,
|
|
56
|
+
}, 'create');
|
|
57
|
+
model.setSchema({
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
providesSupport: { type: 'boolean' },
|
|
61
|
+
responseTimeHours: { type: 'number', exclusiveMinimum: 0 },
|
|
62
|
+
timeZone: { type: 'string', minLength: 1 },
|
|
63
|
+
supportDays: supportDaysSchema,
|
|
64
|
+
},
|
|
65
|
+
required: ['providesSupport', 'responseTimeHours', 'timeZone', 'supportDays'],
|
|
66
|
+
allOf: [
|
|
67
|
+
{
|
|
68
|
+
if: {
|
|
69
|
+
properties: {
|
|
70
|
+
providesSupport: { const: true },
|
|
71
|
+
},
|
|
72
|
+
required: ['providesSupport'],
|
|
73
|
+
},
|
|
74
|
+
then: {
|
|
75
|
+
properties: {
|
|
76
|
+
supportDays: { type: 'array', minItems: 1 },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
additionalProperties: false,
|
|
82
|
+
}, 'change');
|
|
83
|
+
export default model;
|
|
84
|
+
//# sourceMappingURL=sla.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sla.model.js","sourceRoot":"","sources":["../../../src/models/sla.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,10 +23,23 @@ declare class MeService extends Immutable<Me> {
|
|
|
23
23
|
* if company is given, get all project permissions
|
|
24
24
|
*/
|
|
25
25
|
getPermissions(user: string, company?: string, project?: string): Promise<import("bson").Document[]>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
/**
|
|
27
|
+
* JIT-creates the `me` document on a user's first authenticated request.
|
|
28
|
+
*
|
|
29
|
+
* Reads the profile straight off the already-verified access token. This used to call the Auth0
|
|
30
|
+
* Management API, because Auth0 access tokens carry no profile claims — Keycloak's do, provided the
|
|
31
|
+
* client requests the `profile` and `email` scopes. That removed the last Auth0 dependency in the
|
|
32
|
+
* request path along with AUTH_URL / AUTH_CLIENT_ID / AUTH_CLIENT_SECRET.
|
|
33
|
+
*
|
|
34
|
+
* Names are truncated to 20 characters because me.model's create schema caps them there; an
|
|
35
|
+
* over-long name from the IdP would otherwise fail validation and leave the user with no `me` doc
|
|
36
|
+
* (which surfaces as USER_NOT_FOUND and an immediate logout).
|
|
37
|
+
*/
|
|
38
|
+
addUser(auth: {
|
|
39
|
+
sub: string;
|
|
40
|
+
given_name?: string;
|
|
41
|
+
family_name?: string;
|
|
42
|
+
email?: string;
|
|
30
43
|
}): Promise<import("@lilaquadrat/interfaces").CreateResult<BasicData<Me>>>;
|
|
31
44
|
updateUser(user: string, data: Me & {
|
|
32
45
|
terms?: boolean;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { ManagementClient } from 'auth0';
|
|
2
1
|
import CustomersService from '../services/customers.service.js';
|
|
3
2
|
import MeModel from '../models/me.model.js';
|
|
4
3
|
import PermissionsModel from '../models/permissions.model.js';
|
|
5
4
|
import SettingsModel from '../models/settings.model.js';
|
|
6
5
|
import Immutable from '../Immutable.class.js';
|
|
7
|
-
import {
|
|
6
|
+
import { tokenRoles } from '../helpers/tokenRoles.js';
|
|
8
7
|
class MeService extends Immutable {
|
|
9
8
|
constructor() {
|
|
10
9
|
super(...arguments);
|
|
@@ -151,20 +150,30 @@ class MeService extends Immutable {
|
|
|
151
150
|
}
|
|
152
151
|
return PermissionsModel.db.aggregate(aggregation).toArray();
|
|
153
152
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
153
|
+
/**
|
|
154
|
+
* JIT-creates the `me` document on a user's first authenticated request.
|
|
155
|
+
*
|
|
156
|
+
* Reads the profile straight off the already-verified access token. This used to call the Auth0
|
|
157
|
+
* Management API, because Auth0 access tokens carry no profile claims — Keycloak's do, provided the
|
|
158
|
+
* client requests the `profile` and `email` scopes. That removed the last Auth0 dependency in the
|
|
159
|
+
* request path along with AUTH_URL / AUTH_CLIENT_ID / AUTH_CLIENT_SECRET.
|
|
160
|
+
*
|
|
161
|
+
* Names are truncated to 20 characters because me.model's create schema caps them there; an
|
|
162
|
+
* over-long name from the IdP would otherwise fail validation and leave the user with no `me` doc
|
|
163
|
+
* (which surfaces as USER_NOT_FOUND and an immediate logout).
|
|
164
|
+
*/
|
|
165
|
+
addUser(auth) {
|
|
166
|
+
const newUser = { id: auth.sub };
|
|
167
|
+
const prename = auth.given_name?.trim();
|
|
168
|
+
const lastname = auth.family_name?.trim();
|
|
169
|
+
const email = auth.email?.trim().toLowerCase();
|
|
170
|
+
if (prename)
|
|
171
|
+
newUser.prename = prename.slice(0, 20);
|
|
172
|
+
if (lastname)
|
|
173
|
+
newUser.lastname = lastname.slice(0, 20);
|
|
174
|
+
if (email)
|
|
175
|
+
newUser.email = email;
|
|
176
|
+
return this.create(newUser, 'system', 'system');
|
|
168
177
|
}
|
|
169
178
|
updateUser(user, data) {
|
|
170
179
|
let updateObject = { ...data };
|
|
@@ -246,18 +255,25 @@ class MeService extends Immutable {
|
|
|
246
255
|
*/
|
|
247
256
|
static checkStorageScope(action) {
|
|
248
257
|
return async (request, reply) => {
|
|
249
|
-
let scope;
|
|
250
258
|
if (!request.auth) {
|
|
251
259
|
return reply.code(401).send();
|
|
252
260
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
+
// The entitlement is the UNION of what the token grants and what the database grants.
|
|
262
|
+
//
|
|
263
|
+
// This used to branch on isM2M(): machine tokens took their scope from a `permissions` claim,
|
|
264
|
+
// users from the permissions collection. Classifying the caller was never the security
|
|
265
|
+
// question — the question is whether this token may perform this operation. A service account
|
|
266
|
+
// carries Keycloak realm roles named exactly like the scope strings; a user carries rows in
|
|
267
|
+
// `permissions`. Whoever holds the entitlement passes, and neither can borrow the other's path.
|
|
268
|
+
//
|
|
269
|
+
// No collision risk: Keycloak's default roles (default-roles-*, offline_access,
|
|
270
|
+
// uma_authorization) do not match the `<app>:<action>` shape these checks use.
|
|
271
|
+
const roles = tokenRoles(request.auth);
|
|
272
|
+
const permission = request.auth.sub
|
|
273
|
+
? await MeService.getSinglePermission(request.auth.sub, request.params.company, request.params.project)
|
|
274
|
+
: undefined;
|
|
275
|
+
const scope = [...new Set([...roles, ...(permission?.scope ?? [])])];
|
|
276
|
+
if (!scope.length) {
|
|
261
277
|
return reply.code(403).send();
|
|
262
278
|
}
|
|
263
279
|
const singlePermission = `${request.params.app}:storage${action.charAt(0).toUpperCase() + action.slice(1)}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"me.service.js","sourceRoot":"","sources":["../../../src/services/me.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"me.service.js","sourceRoot":"","sources":["../../../src/services/me.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Sla, UserApp } from '@lilaquadrat/interfaces';
|
|
2
|
+
import Immutable from '../Immutable.class.js';
|
|
3
|
+
declare class SlaService extends Immutable<Sla> {
|
|
4
|
+
model: import("../classes/modelv2.class.js").default<Sla, string>;
|
|
5
|
+
single(company: string): Promise<import("mongodb").WithId<Sla> | null>;
|
|
6
|
+
/** Convert business response hours into one absolute UTC deadline. */
|
|
7
|
+
calculateEndAt(startedAt: string, configuration: Sla): string | undefined;
|
|
8
|
+
createConfiguration(company: string, data: Omit<Sla, 'company'>, options: Required<UserApp>): Promise<import("@lilaquadrat/interfaces").CreateResult<import("@lilaquadrat/interfaces").BasicData<Sla>>>;
|
|
9
|
+
upsert(company: string, data: Omit<Sla, 'company'>, options: Required<UserApp>): Promise<import("@lilaquadrat/interfaces").CreateResult<import("@lilaquadrat/interfaces").BasicData<Sla>> | (import("mongodb").UpdateResult<import("bson").Document> & {
|
|
10
|
+
_id: import("bson").ObjectId;
|
|
11
|
+
})>;
|
|
12
|
+
remove(company: string, options: Required<UserApp>): Promise<import("mongodb").DeleteResult | undefined>;
|
|
13
|
+
private validateConfiguration;
|
|
14
|
+
/** Advance by a local calendar day so DST changes do not shift business opening times. */
|
|
15
|
+
private nextLocalDay;
|
|
16
|
+
}
|
|
17
|
+
declare const _default: SlaService;
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
import utc from 'dayjs/plugin/utc.js';
|
|
3
|
+
import timezone from 'dayjs/plugin/timezone.js';
|
|
4
|
+
import Immutable from '../Immutable.class.js';
|
|
5
|
+
import SlaModel from '../models/sla.model.js';
|
|
6
|
+
dayjs.extend(utc);
|
|
7
|
+
dayjs.extend(timezone);
|
|
8
|
+
const MILLISECONDS_PER_HOUR = 60 * 60 * 1000;
|
|
9
|
+
const DAY_NAMES = [
|
|
10
|
+
'sunday',
|
|
11
|
+
'monday',
|
|
12
|
+
'tuesday',
|
|
13
|
+
'wednesday',
|
|
14
|
+
'thursday',
|
|
15
|
+
'friday',
|
|
16
|
+
'saturday',
|
|
17
|
+
];
|
|
18
|
+
class SlaService extends Immutable {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(...arguments);
|
|
21
|
+
this.model = SlaModel;
|
|
22
|
+
}
|
|
23
|
+
single(company) {
|
|
24
|
+
return this.model.db.findOne({ company });
|
|
25
|
+
}
|
|
26
|
+
/** Convert business response hours into one absolute UTC deadline. */
|
|
27
|
+
calculateEndAt(startedAt, configuration) {
|
|
28
|
+
if (!configuration.providesSupport)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (!configuration.supportDays.length)
|
|
31
|
+
throw new Error('SLA_SUPPORT_DAYS_EMPTY');
|
|
32
|
+
if (!Number.isFinite(configuration.responseTimeHours) || configuration.responseTimeHours <= 0) {
|
|
33
|
+
throw new Error('SLA_RESPONSE_TIME_INVALID');
|
|
34
|
+
}
|
|
35
|
+
const start = dayjs(startedAt);
|
|
36
|
+
if (!start.isValid())
|
|
37
|
+
throw new Error('SLA_START_TIME_INVALID');
|
|
38
|
+
let cursor = start.tz(configuration.timeZone);
|
|
39
|
+
let remainingMilliseconds = configuration.responseTimeHours * MILLISECONDS_PER_HOUR;
|
|
40
|
+
while (remainingMilliseconds > 0) {
|
|
41
|
+
const localDate = cursor.format('YYYY-MM-DD');
|
|
42
|
+
const dayName = DAY_NAMES[cursor.day()];
|
|
43
|
+
const supportDay = configuration.supportDays.find((single) => single.day === dayName);
|
|
44
|
+
if (!supportDay) {
|
|
45
|
+
cursor = this.nextLocalDay(localDate, configuration.timeZone);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const opening = dayjs.tz(`${localDate}T${supportDay.startTime}:00`, configuration.timeZone);
|
|
49
|
+
const closing = dayjs.tz(`${localDate}T${supportDay.endTime}:00`, configuration.timeZone);
|
|
50
|
+
if (cursor.valueOf() < opening.valueOf())
|
|
51
|
+
cursor = opening;
|
|
52
|
+
if (cursor.valueOf() >= closing.valueOf()) {
|
|
53
|
+
cursor = this.nextLocalDay(localDate, configuration.timeZone);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const availableMilliseconds = closing.valueOf() - cursor.valueOf();
|
|
57
|
+
if (remainingMilliseconds <= availableMilliseconds) {
|
|
58
|
+
return dayjs(cursor.valueOf() + remainingMilliseconds).toISOString();
|
|
59
|
+
}
|
|
60
|
+
remainingMilliseconds -= availableMilliseconds;
|
|
61
|
+
cursor = this.nextLocalDay(localDate, configuration.timeZone);
|
|
62
|
+
}
|
|
63
|
+
throw new Error('SLA_END_TIME_NOT_CALCULATED');
|
|
64
|
+
}
|
|
65
|
+
createConfiguration(company, data, options) {
|
|
66
|
+
this.validateConfiguration(data);
|
|
67
|
+
return this.create({ ...data, company }, options.user, options.app);
|
|
68
|
+
}
|
|
69
|
+
upsert(company, data, options) {
|
|
70
|
+
this.validateConfiguration(data);
|
|
71
|
+
return this.immutableUpsert({ company }, { ...data, company }, options.user, 'change', options.app);
|
|
72
|
+
}
|
|
73
|
+
async remove(company, options) {
|
|
74
|
+
const sla = await this.model.db.findOne({ company }, { projection: { _id: 1 } });
|
|
75
|
+
if (!sla?._id)
|
|
76
|
+
return;
|
|
77
|
+
return this.delete(sla._id, options.user, options.app);
|
|
78
|
+
}
|
|
79
|
+
validateConfiguration(data) {
|
|
80
|
+
if (typeof data.timeZone === 'string') {
|
|
81
|
+
try {
|
|
82
|
+
new Intl.DateTimeFormat('en', { timeZone: data.timeZone }).format();
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
throw new Error('SLA_TIME_ZONE_INVALID');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (!Array.isArray(data.supportDays))
|
|
89
|
+
return;
|
|
90
|
+
const days = new Set();
|
|
91
|
+
data.supportDays.forEach((supportDay) => {
|
|
92
|
+
if (days.has(supportDay.day))
|
|
93
|
+
throw new Error('SLA_SUPPORT_DAY_DUPLICATE');
|
|
94
|
+
if (supportDay.endTime <= supportDay.startTime)
|
|
95
|
+
throw new Error('SLA_SUPPORT_DAY_INVALID_TIME_RANGE');
|
|
96
|
+
days.add(supportDay.day);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/** Advance by a local calendar day so DST changes do not shift business opening times. */
|
|
100
|
+
nextLocalDay(localDate, timeZone) {
|
|
101
|
+
const nextDate = dayjs.utc(localDate).add(1, 'day').format('YYYY-MM-DD');
|
|
102
|
+
return dayjs.tz(`${nextDate}T00:00:00`, timeZone);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export default new SlaService();
|
|
106
|
+
//# sourceMappingURL=sla.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sla.service.js","sourceRoot":"","sources":["../../../src/services/sla.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { describe, expect, it } from '@jest/globals';
|
|
2
|
+
import { CompanyScope } from '../src/models/permissions.model';
|
|
3
|
+
describe('PermissionsModel', () => {
|
|
4
|
+
it('defines the company SLA permissions', () => {
|
|
5
|
+
expect(CompanyScope.sla).toEqual(['read', 'create', 'edit', 'remove']);
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=permissionsModel.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionsModel.spec.js","sourceRoot":"","sources":["../../tests/permissionsModel.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAEhC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAE7C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzE,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { describe, expect, it } from '@jest/globals';
|
|
2
|
+
import Models from '../src/classes/models.class';
|
|
3
|
+
import SlaModel from '../src/models/sla.model';
|
|
4
|
+
const models = new Models();
|
|
5
|
+
models.register('sla', SlaModel);
|
|
6
|
+
const validSla = {
|
|
7
|
+
company: 'company',
|
|
8
|
+
providesSupport: true,
|
|
9
|
+
responseTimeHours: 8,
|
|
10
|
+
timeZone: 'Europe/Berlin',
|
|
11
|
+
supportDays: [
|
|
12
|
+
{
|
|
13
|
+
day: 'monday',
|
|
14
|
+
startTime: '09:00',
|
|
15
|
+
endTime: '17:00',
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
describe('SlaModel', () => {
|
|
20
|
+
it('accepts a valid SLA configuration', () => {
|
|
21
|
+
expect(SlaModel.validate(validSla, 'create')).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
it('accepts no support days when support is disabled', () => {
|
|
24
|
+
expect(SlaModel.validate({
|
|
25
|
+
...validSla,
|
|
26
|
+
providesSupport: false,
|
|
27
|
+
supportDays: [],
|
|
28
|
+
}, 'create')).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('requires a support day when support is enabled', () => {
|
|
31
|
+
expect(SlaModel.validate({
|
|
32
|
+
...validSla,
|
|
33
|
+
supportDays: [],
|
|
34
|
+
}, 'create')).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
it('rejects invalid response times and support-day times', () => {
|
|
37
|
+
expect(SlaModel.validate({
|
|
38
|
+
...validSla,
|
|
39
|
+
responseTimeHours: 0,
|
|
40
|
+
supportDays: [{
|
|
41
|
+
day: 'monday',
|
|
42
|
+
startTime: '9:00',
|
|
43
|
+
endTime: '25:00',
|
|
44
|
+
}],
|
|
45
|
+
}, 'create')).toBe(false);
|
|
46
|
+
});
|
|
47
|
+
it('does not allow the company to be changed', () => {
|
|
48
|
+
expect(SlaModel.validate(validSla, 'change')).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
it('defines one SLA document per company', () => {
|
|
51
|
+
expect(SlaModel.indexes).toContainEqual(expect.objectContaining({
|
|
52
|
+
key: { company: 1 },
|
|
53
|
+
unique: true,
|
|
54
|
+
name: 'company_unique-v1',
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=slaModel.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slaModel.spec.js","sourceRoot":"","sources":["../../tests/slaModel.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAC5B,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEjC,MAAM,QAAQ,GAAQ;IACpB,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,CAAC;IACpB,QAAQ,EAAE,eAAe;IACzB,WAAW,EAAE;QACX;YACE,GAAG,EAAE,QAAQ;YACb,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IAExB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAE3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAE1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,GAAG,QAAQ;YACX,eAAe,EAAE,KAAK;YACtB,WAAW,EAAE,EAAE;SAChB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAExD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,GAAG,QAAQ;YACX,WAAW,EAAE,EAAE;SAChB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAE9D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,GAAG,QAAQ;YACX,iBAAiB,EAAE,CAAC;YACpB,WAAW,EAAE,CAAC;oBACZ,GAAG,EAAE,QAAQ;oBACb,SAAS,EAAE,MAAM;oBACjB,OAAO,EAAE,OAAO;iBACjB,CAAC;SACH,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAElD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAE9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC9D,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;YACnB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC,CAAC;IAEN,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, jest } from '@jest/globals';
|
|
2
|
+
import { ObjectId } from 'mongodb';
|
|
3
|
+
import SlaModel from '../src/models/sla.model';
|
|
4
|
+
import SlaService from '../src/services/sla.service';
|
|
5
|
+
const options = {
|
|
6
|
+
user: 'user',
|
|
7
|
+
app: 'app',
|
|
8
|
+
};
|
|
9
|
+
const validSla = {
|
|
10
|
+
providesSupport: true,
|
|
11
|
+
responseTimeHours: 8,
|
|
12
|
+
timeZone: 'Europe/Berlin',
|
|
13
|
+
supportDays: [
|
|
14
|
+
{
|
|
15
|
+
day: 'monday',
|
|
16
|
+
startTime: '09:00',
|
|
17
|
+
endTime: '17:00',
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
describe('SlaService', () => {
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
jest.restoreAllMocks();
|
|
24
|
+
});
|
|
25
|
+
it('gets the SLA by company', async () => {
|
|
26
|
+
const findOne = jest.fn().mockResolvedValue(null);
|
|
27
|
+
jest.spyOn(SlaModel, 'db', 'get').mockReturnValue({ findOne });
|
|
28
|
+
await SlaService.single('company');
|
|
29
|
+
expect(findOne).toHaveBeenCalledWith({ company: 'company' });
|
|
30
|
+
});
|
|
31
|
+
it('calculates an SLA deadline across closed days', () => {
|
|
32
|
+
const configuration = {
|
|
33
|
+
...validSla,
|
|
34
|
+
responseTimeHours: 4,
|
|
35
|
+
supportDays: [
|
|
36
|
+
{ day: 'monday', startTime: '09:00', endTime: '17:00' },
|
|
37
|
+
{ day: 'friday', startTime: '09:00', endTime: '17:00' },
|
|
38
|
+
],
|
|
39
|
+
company: 'company',
|
|
40
|
+
};
|
|
41
|
+
expect(SlaService.calculateEndAt('2026-08-21T14:00:00.000Z', configuration))
|
|
42
|
+
.toBe('2026-08-24T10:00:00.000Z');
|
|
43
|
+
});
|
|
44
|
+
it('starts the SLA at the next business opening', () => {
|
|
45
|
+
expect(SlaService.calculateEndAt('2026-08-17T05:00:00.000Z', {
|
|
46
|
+
...validSla,
|
|
47
|
+
responseTimeHours: 4,
|
|
48
|
+
company: 'company',
|
|
49
|
+
})).toBe('2026-08-17T11:00:00.000Z');
|
|
50
|
+
});
|
|
51
|
+
it('preserves local business hours across daylight-saving changes', () => {
|
|
52
|
+
expect(SlaService.calculateEndAt('2026-03-27T15:00:00.000Z', {
|
|
53
|
+
...validSla,
|
|
54
|
+
responseTimeHours: 2,
|
|
55
|
+
supportDays: [
|
|
56
|
+
{ day: 'monday', startTime: '09:00', endTime: '17:00' },
|
|
57
|
+
{ day: 'friday', startTime: '09:00', endTime: '17:00' },
|
|
58
|
+
],
|
|
59
|
+
company: 'company',
|
|
60
|
+
})).toBe('2026-03-30T08:00:00.000Z');
|
|
61
|
+
});
|
|
62
|
+
it('does not calculate a deadline when support is disabled', () => {
|
|
63
|
+
expect(SlaService.calculateEndAt('2026-08-17T05:00:00.000Z', {
|
|
64
|
+
...validSla,
|
|
65
|
+
providesSupport: false,
|
|
66
|
+
supportDays: [],
|
|
67
|
+
company: 'company',
|
|
68
|
+
})).toBeUndefined();
|
|
69
|
+
});
|
|
70
|
+
it('upserts a company-scoped SLA', async () => {
|
|
71
|
+
const immutableUpsert = jest.spyOn(SlaService, 'immutableUpsert').mockResolvedValue({
|
|
72
|
+
_id: new ObjectId(),
|
|
73
|
+
acknowledged: true,
|
|
74
|
+
matchedCount: 1,
|
|
75
|
+
modifiedCount: 1,
|
|
76
|
+
upsertedCount: 0,
|
|
77
|
+
upsertedId: null,
|
|
78
|
+
});
|
|
79
|
+
await SlaService.upsert('company', validSla, options);
|
|
80
|
+
expect(immutableUpsert).toHaveBeenCalledWith({ company: 'company' }, { ...validSla, company: 'company' }, 'user', 'change', 'app');
|
|
81
|
+
});
|
|
82
|
+
it('creates a company-scoped SLA', async () => {
|
|
83
|
+
const create = jest.spyOn(SlaService, 'create').mockResolvedValue({
|
|
84
|
+
_id: new ObjectId(),
|
|
85
|
+
});
|
|
86
|
+
await SlaService.createConfiguration('company', validSla, options);
|
|
87
|
+
expect(create).toHaveBeenCalledWith({ ...validSla, company: 'company' }, 'user', 'app');
|
|
88
|
+
});
|
|
89
|
+
it('rejects duplicate support days', () => {
|
|
90
|
+
expect(() => SlaService.upsert('company', {
|
|
91
|
+
...validSla,
|
|
92
|
+
supportDays: [validSla.supportDays[0], validSla.supportDays[0]],
|
|
93
|
+
}, options)).toThrow('SLA_SUPPORT_DAY_DUPLICATE');
|
|
94
|
+
});
|
|
95
|
+
it('rejects invalid support-day ranges', () => {
|
|
96
|
+
expect(() => SlaService.upsert('company', {
|
|
97
|
+
...validSla,
|
|
98
|
+
supportDays: [{
|
|
99
|
+
day: 'monday',
|
|
100
|
+
startTime: '17:00',
|
|
101
|
+
endTime: '09:00',
|
|
102
|
+
}],
|
|
103
|
+
}, options)).toThrow('SLA_SUPPORT_DAY_INVALID_TIME_RANGE');
|
|
104
|
+
});
|
|
105
|
+
it('rejects invalid time zones', () => {
|
|
106
|
+
expect(() => SlaService.upsert('company', {
|
|
107
|
+
...validSla,
|
|
108
|
+
timeZone: 'not-a-time-zone',
|
|
109
|
+
}, options)).toThrow('SLA_TIME_ZONE_INVALID');
|
|
110
|
+
});
|
|
111
|
+
it('removes the company SLA through immutable history', async () => {
|
|
112
|
+
const _id = new ObjectId();
|
|
113
|
+
const findOne = jest.fn().mockResolvedValue({ _id });
|
|
114
|
+
jest.spyOn(SlaModel, 'db', 'get').mockReturnValue({ findOne });
|
|
115
|
+
const remove = jest.spyOn(SlaService, 'delete').mockResolvedValue({ acknowledged: true, deletedCount: 1 });
|
|
116
|
+
await SlaService.remove('company', options);
|
|
117
|
+
expect(findOne).toHaveBeenCalledWith({ company: 'company' }, { projection: { _id: 1 } });
|
|
118
|
+
expect(remove).toHaveBeenCalledWith(_id, 'user', 'app');
|
|
119
|
+
});
|
|
120
|
+
it('treats deleting a missing SLA as successful', async () => {
|
|
121
|
+
const findOne = jest.fn().mockResolvedValue(null);
|
|
122
|
+
jest.spyOn(SlaModel, 'db', 'get').mockReturnValue({ findOne });
|
|
123
|
+
const remove = jest.spyOn(SlaService, 'delete');
|
|
124
|
+
await expect(SlaService.remove('company', options)).resolves.toBeUndefined();
|
|
125
|
+
expect(remove).not.toHaveBeenCalled();
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=slaService.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slaService.spec.js","sourceRoot":"","sources":["../../tests/slaService.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lilaquadrat/studio",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.8.0",
|
|
4
4
|
"description": "classes and tools for STUDIO",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
},
|
|
124
124
|
"dependencies": {
|
|
125
125
|
"@google/genai": "^1.42.0",
|
|
126
|
-
"@lilaquadrat/interfaces": "^1.
|
|
126
|
+
"@lilaquadrat/interfaces": "^1.48.0",
|
|
127
127
|
"@lilaquadrat/storage-sdk": "^0.1.15",
|
|
128
128
|
"@nats-io/jetstream": "^3.2.0",
|
|
129
129
|
"@nats-io/transport-node": "^3.2.0",
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Is this an authenticated machine-to-machine (service) token?
|
|
3
|
-
*
|
|
4
|
-
* Two issuers mint M2M tokens during the Auth0 → Keycloak migration:
|
|
5
|
-
* - Auth0 marks a client_credentials token with `gty: 'client-credentials'`
|
|
6
|
-
* (end-user tokens never carry it).
|
|
7
|
-
* - Keycloak service accounts emit NO `gty`. Since end users stay on Auth0,
|
|
8
|
-
* any token issued by the configured Keycloak realm is by definition M2M,
|
|
9
|
-
* so we recognise it by its issuer.
|
|
10
|
-
*
|
|
11
|
-
* Both paths expect the caller's granted scopes in a `permissions` string[] claim
|
|
12
|
-
* (for Keycloak, add a client "permissions" protocol mapper so the existing
|
|
13
|
-
* scope-array logic keeps working unchanged).
|
|
14
|
-
*
|
|
15
|
-
* IMPORTANT: this helper must stay dependency-free. It is imported by
|
|
16
|
-
* me.service (reachable from non-Fastify NATS workers via the package barrel).
|
|
17
|
-
* It must NOT import authPlugin or anything that pulls in `fastify-plugin`, or
|
|
18
|
-
* those workers crash at import time with ERR_MODULE_NOT_FOUND.
|
|
19
|
-
*/
|
|
20
|
-
export declare const isM2M: (auth: {
|
|
21
|
-
gty?: string;
|
|
22
|
-
iss?: string;
|
|
23
|
-
} | undefined) => boolean;
|
|
24
|
-
export default isM2M;
|
package/lib/src/helpers/isM2M.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Is this an authenticated machine-to-machine (service) token?
|
|
3
|
-
*
|
|
4
|
-
* Two issuers mint M2M tokens during the Auth0 → Keycloak migration:
|
|
5
|
-
* - Auth0 marks a client_credentials token with `gty: 'client-credentials'`
|
|
6
|
-
* (end-user tokens never carry it).
|
|
7
|
-
* - Keycloak service accounts emit NO `gty`. Since end users stay on Auth0,
|
|
8
|
-
* any token issued by the configured Keycloak realm is by definition M2M,
|
|
9
|
-
* so we recognise it by its issuer.
|
|
10
|
-
*
|
|
11
|
-
* Both paths expect the caller's granted scopes in a `permissions` string[] claim
|
|
12
|
-
* (for Keycloak, add a client "permissions" protocol mapper so the existing
|
|
13
|
-
* scope-array logic keeps working unchanged).
|
|
14
|
-
*
|
|
15
|
-
* IMPORTANT: this helper must stay dependency-free. It is imported by
|
|
16
|
-
* me.service (reachable from non-Fastify NATS workers via the package barrel).
|
|
17
|
-
* It must NOT import authPlugin or anything that pulls in `fastify-plugin`, or
|
|
18
|
-
* those workers crash at import time with ERR_MODULE_NOT_FOUND.
|
|
19
|
-
*/
|
|
20
|
-
export const isM2M = (auth) => {
|
|
21
|
-
if (!auth)
|
|
22
|
-
return false;
|
|
23
|
-
if (auth.gty === 'client-credentials')
|
|
24
|
-
return true;
|
|
25
|
-
if (process.env.KEYCLOAK_ISSUER && auth.iss === process.env.KEYCLOAK_ISSUER)
|
|
26
|
-
return true;
|
|
27
|
-
return false;
|
|
28
|
-
};
|
|
29
|
-
export default isM2M;
|
|
30
|
-
//# sourceMappingURL=isM2M.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isM2M.js","sourceRoot":"","sources":["../../../src/helpers/isM2M.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAgD,EAAW,EAAE;IAEjF,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,IAAI,IAAI,CAAC,GAAG,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAEnD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAEzF,OAAO,KAAK,CAAC;AAEf,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
|