@lilaquadrat/studio 11.4.1 → 11.5.2

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/services.d.ts CHANGED
@@ -38,4 +38,5 @@ import slaService from './src/services/sla.service.js';
38
38
  import participantsService, { ParticipantsService } from './src/services/participants.service.js';
39
39
  import memoryCache from './src/services/memory-cache.service.js';
40
40
  import supportAccessService from './src/services/support-access.service.js';
41
- 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, participantsService, ParticipantsService, memoryCache as MemoryCache, supportAccessService as SupportAccessService, };
41
+ import licenseService from './src/services/license.service.js';
42
+ 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, participantsService, ParticipantsService, memoryCache as MemoryCache, supportAccessService as SupportAccessService, licenseService as LicenseService, };
package/lib/services.js CHANGED
@@ -38,5 +38,6 @@ import slaService from './src/services/sla.service.js';
38
38
  import participantsService, { ParticipantsService } from './src/services/participants.service.js';
39
39
  import memoryCache from './src/services/memory-cache.service.js';
40
40
  import supportAccessService from './src/services/support-access.service.js';
41
- 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, participantsService, ParticipantsService, memoryCache as MemoryCache, supportAccessService as SupportAccessService, };
41
+ import licenseService from './src/services/license.service.js';
42
+ 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, participantsService, ParticipantsService, memoryCache as MemoryCache, supportAccessService as SupportAccessService, licenseService as LicenseService, };
42
43
  //# sourceMappingURL=services.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../services.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../services.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,7 @@
1
1
  import Modelv2 from '../classes/modelv2.class.js';
2
2
  const model = new Modelv2('license', 'licenses');
3
- model.removeWhenEmpty = [
4
- 'description',
5
- 'oneTimeCost',
6
- 'supportSla',
7
- 'includedApps',
8
- 'limits',
9
- ];
3
+ model.immutable = ['id'];
4
+ model.removeWhenEmpty = ['description'];
10
5
  model.addIndex({
11
6
  key: {
12
7
  id: 1,
@@ -26,7 +21,7 @@ model.setSchema({
26
21
  cancellationPeriodDays: { type: 'number', minimum: 0 },
27
22
  includesSupport: { type: 'boolean' },
28
23
  supportSla: { type: 'string', maxLength: 100 },
29
- active: { type: 'boolean' },
24
+ available: { type: 'boolean' },
30
25
  autoExtend: { type: 'boolean' },
31
26
  includedApps: {
32
27
  type: 'array',
@@ -45,25 +40,10 @@ model.setSchema({
45
40
  model.setSchema({
46
41
  type: 'object',
47
42
  properties: {
48
- name: { type: 'string', minLength: 3, maxLength: 50 },
49
43
  description: { type: 'string', maxLength: 500 },
50
- monthlyCost: { type: 'number', minimum: 0 },
51
- oneTimeCost: { type: 'number', minimum: 0 },
52
- minimumContractMonths: { type: 'number', minimum: 0 },
53
- cancellationPeriodDays: { type: 'number', minimum: 0 },
54
- includesSupport: { type: 'boolean' },
55
- supportSla: { type: 'string', maxLength: 100 },
56
- active: { type: 'boolean' },
57
- autoExtend: { type: 'boolean' },
58
- includedApps: {
59
- type: 'array',
60
- contains: {
61
- type: 'string',
62
- },
63
- },
64
- limits: { type: 'object' },
44
+ available: { type: 'boolean' },
65
45
  },
66
- required: ['name'],
46
+ required: ['available'],
67
47
  additionalProperties: false,
68
48
  }, 'change');
69
49
  export default model;
@@ -1 +1 @@
1
- {"version":3,"file":"license.model.js","sourceRoot":"","sources":["../../../src/models/license.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"license.model.js","sourceRoot":"","sources":["../../../src/models/license.model.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAElD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAU,SAAS,EAAE,UAAU,CAAC,CAAC;AAE1D,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,KAAK,CAAC,eAAe,GAAG,CAAC,aAAa,CAAC,CAAC;AAExC,KAAK,CAAC,QAAQ,CACZ;IACE,GAAG,EAAE;QACH,EAAE,EAAE,CAAC;KACN;IACD,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,gBAAgB;CACvB,EACD,CAAC,CACF,CAAC;AAEF,KAAK,CAAC,SAAS,CACb;IACE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;QACtD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACrD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;QAC/C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QAC3C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QAC3C,qBAAqB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QACrD,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QACtD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;QAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC/B,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;aACf;SACF;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC3B;IACD,QAAQ,EAAE;QACR,IAAI;QACJ,MAAM;KACP;IACD,oBAAoB,EAAE,KAAK;CAC5B,EACD,QAAQ,CACT,CAAC;AAEF,KAAK,CAAC,SAAS,CACb;IACE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;QAC/C,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC/B;IACD,QAAQ,EAAE,CAAC,WAAW,CAAC;IACvB,oBAAoB,EAAE,KAAK;CAC5B,EACD,QAAQ,CACT,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -126,7 +126,8 @@ export class JetStreamService {
126
126
  catch (error) {
127
127
  logger.error(`jetstream.message.error.${options.streamName}.${options.consumerName}`, error);
128
128
  message.ack();
129
- return;
129
+ // skip only this message; leaving the loop would stop the consumer for the process lifetime
130
+ continue;
130
131
  }
131
132
  try {
132
133
  const messageWithDecoded = { data: decodedData, subject: message.subject };
@@ -1 +1 @@
1
- {"version":3,"file":"jetstream.service.js","sourceRoot":"","sources":["../../../src/services/jetstream.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jetstream.service.js","sourceRoot":"","sources":["../../../src/services/jetstream.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { License } from '@lilaquadrat/interfaces';
2
+ import Immutable from '../Immutable.class.js';
3
+ declare class LicenseService extends Immutable<License> {
4
+ model: import("../classes/modelv2.class.js").default<License, string>;
5
+ single(id: string): Promise<import("mongodb").WithId<License> | null>;
6
+ list(): Promise<import("mongodb").WithId<License>[]>;
7
+ change(id: string, data: Partial<License>, user: string, app: string): Promise<import("mongodb").UpdateResult<import("bson").Document>>;
8
+ remove(id: string, user: string, app: string): Promise<import("mongodb").DeleteResult>;
9
+ }
10
+ declare const _default: LicenseService;
11
+ export default _default;
@@ -0,0 +1,28 @@
1
+ import Immutable from '../Immutable.class.js';
2
+ import LicenseModel from '../models/license.model.js';
3
+ class LicenseService extends Immutable {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.model = LicenseModel;
7
+ }
8
+ single(id) {
9
+ return this.model.db.findOne({ id }, { projection: { history: 0 } });
10
+ }
11
+ list() {
12
+ return this.model.db.find().sort({ name: 1 }).toArray();
13
+ }
14
+ async change(id, data, user, app) {
15
+ const license = await this.single(id);
16
+ if (!license?._id)
17
+ throw new Error('LICENSE_NOT_FOUND');
18
+ return this.immutable(license._id, data, user, 'change', app);
19
+ }
20
+ async remove(id, user, app) {
21
+ const license = await this.single(id);
22
+ if (!license?._id)
23
+ throw new Error('LICENSE_NOT_FOUND');
24
+ return this.delete(license._id, user, app);
25
+ }
26
+ }
27
+ export default new LicenseService();
28
+ //# sourceMappingURL=license.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.service.js","sourceRoot":"","sources":["../../../src/services/license.service.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD,MAAM,cAAe,SAAQ,SAAkB;IAA/C;;QAEE,UAAK,GAAG,YAAY,CAAC;IAgCvB,CAAC;IA9BC,MAAM,CAAC,EAAU;QAEf,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEvE,CAAC;IAED,IAAI;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAE1D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAsB,EAAE,IAAY,EAAE,GAAW;QAExE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEhE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAY,EAAE,GAAW;QAEhD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAE7C,CAAC;CAEF;AAED,eAAe,IAAI,cAAc,EAAE,CAAC"}
@@ -19,7 +19,12 @@ declare class MemoryCache {
19
19
  static clearUsers(users: string[]): void;
20
20
  static upsert(cacheKey: string, data: unknown, lifetime?: number): void;
21
21
  static get(cacheKey: string): unknown;
22
- static use<T>(cacheKeyOptions: CacheKeyOptions, fetchFunction: Promise<T>): Promise<T>;
22
+ /**
23
+ * Pass a function: it only runs on a miss. The promise form is kept for older consumers, but
24
+ * that query has already started, so a hit does not save it — and its rejection must be
25
+ * observed here, or a database error on a hit becomes an unhandled rejection that ends the process.
26
+ */
27
+ static use<T>(cacheKeyOptions: CacheKeyOptions, fetchFunction: (() => Promise<T>) | Promise<T>): Promise<T>;
23
28
  static getCacheKey(options: CacheKeyOptions): string;
24
29
  }
25
30
  export default MemoryCache;
@@ -33,15 +33,22 @@ class MemoryCache {
33
33
  }
34
34
  return entry.data;
35
35
  }
36
+ /**
37
+ * Pass a function: it only runs on a miss. The promise form is kept for older consumers, but
38
+ * that query has already started, so a hit does not save it — and its rejection must be
39
+ * observed here, or a database error on a hit becomes an unhandled rejection that ends the process.
40
+ */
36
41
  static async use(cacheKeyOptions, fetchFunction) {
37
42
  const cacheKey = MemoryCache.getCacheKey(cacheKeyOptions);
38
43
  const cached = MemoryCache.get(cacheKey);
39
44
  if (cached) {
45
+ if (fetchFunction instanceof Promise)
46
+ fetchFunction.catch(() => undefined);
40
47
  logger.debug('cache.hit', { key: cacheKey });
41
48
  return cached;
42
49
  }
43
50
  logger.debug('cache.miss', { key: cacheKey });
44
- const fetchedData = await fetchFunction;
51
+ const fetchedData = await (typeof fetchFunction === 'function' ? fetchFunction() : fetchFunction);
45
52
  MemoryCache.upsert(cacheKey, fetchedData, cacheKeyOptions.lifetime);
46
53
  return fetchedData;
47
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory-cache.service.js","sourceRoot":"","sources":["../../../src/services/memory-cache.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-cache.service.js","sourceRoot":"","sources":["../../../src/services/memory-cache.service.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,18 @@ import supportAccess from './support-access.service.js';
9
9
  * so entries age out instead of holding revoked access forever.
10
10
  */
11
11
  const ACCESS_CACHE_LIFETIME_MS = 30000;
12
+ /**
13
+ * Which support scope grants a participant right. Mirrors studio-chat's supportAgentRights, which
14
+ * derives an agent's stored rights from the same scopes: `read` and `participants` map to
15
+ * themselves, every content right needs `write`, and rename/block are never agent rights.
16
+ */
17
+ function supportScopeAllows(right, scopes) {
18
+ if (right === 'read' || right === 'participants')
19
+ return scopes.has(right);
20
+ if (right === 'rename' || right === 'block')
21
+ return false;
22
+ return scopes.has('write');
23
+ }
12
24
  /**
13
25
  * participant collection and conversation access.
14
26
  *
@@ -109,8 +121,8 @@ export class ParticipantsService extends Immutable {
109
121
  const { conversationId, user } = settings;
110
122
  // Fetch both in parallel with distinct cache keys to avoid collisions
111
123
  const [conversation, participant] = await Promise.all([
112
- MemoryCache.use({ type: "conversation", id: conversationId, lifetime: ACCESS_CACHE_LIFETIME_MS }, ConversationModel.db.findOne({ _id: conversationId })),
113
- MemoryCache.use({ type: "participant", id: conversationId, user, lifetime: ACCESS_CACHE_LIFETIME_MS }, this.getByConversationAndUser(conversationId, user))
124
+ MemoryCache.use({ type: "conversation", id: conversationId, lifetime: ACCESS_CACHE_LIFETIME_MS }, () => ConversationModel.db.findOne({ _id: conversationId })),
125
+ MemoryCache.use({ type: "participant", id: conversationId, user, lifetime: ACCESS_CACHE_LIFETIME_MS }, () => this.getByConversationAndUser(conversationId, user))
114
126
  ]);
115
127
  if (!participant)
116
128
  return false;
@@ -128,9 +140,17 @@ export class ParticipantsService extends Immutable {
128
140
  * `role: 'agent'` is only ever set on support participants (participantsService
129
141
  * .markSupportAgents), so this touches nobody else — least of all a support agent's own
130
142
  * support conversation, where they are the customer and carry no role.
143
+ *
144
+ * The same goes for a *reduced* scope set: an agent's rights are written once, from the
145
+ * scopes they held when they joined, so the stored rights are capped by the current scopes.
131
146
  */
132
- if (conversation.operationMode === 'support' && participant.role === 'agent' && !await supportAccess.isStaff(user))
133
- return false;
147
+ let rights = participant.rights ?? [];
148
+ if (conversation.operationMode === 'support' && participant.role === 'agent') {
149
+ const scopes = await supportAccess.scopes(user);
150
+ if (!scopes.size)
151
+ return false;
152
+ rights = rights.filter((right) => supportScopeAllows(right, scopes));
153
+ }
134
154
  // Validate participant membership (cheap array includes)
135
155
  if (!conversation.participants?.includes(user) && !requiredAnyStatus.some((single) => ['left', 'removed'].includes(single)))
136
156
  return false;
@@ -138,7 +158,7 @@ export class ParticipantsService extends Immutable {
138
158
  if (!requiredAnyStatus.includes(participant.state))
139
159
  return false;
140
160
  // Rights check (all required must be present)
141
- if (requiredRights && !requiredRights.every(r => participant.rights?.includes(r)))
161
+ if (requiredRights && !requiredRights.every(r => rights.includes(r)))
142
162
  return false;
143
163
  return true;
144
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"participants.service.js","sourceRoot":"","sources":["../../../src/services/participants.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"participants.service.js","sourceRoot":"","sources":["../../../src/services/participants.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ import { describe, expect, it } from '@jest/globals';
2
+ import Models from '../src/classes/models.class';
3
+ import LicenseModel from '../src/models/license.model';
4
+ const models = new Models();
5
+ models.register('license', LicenseModel);
6
+ const validLicense = {
7
+ id: 'starter',
8
+ name: 'Starter',
9
+ };
10
+ describe('LicenseModel', () => {
11
+ it('accepts a license with only id and name', () => {
12
+ expect(LicenseModel.validate(validLicense, 'create')).toBe(true);
13
+ });
14
+ it('accepts availability on create', () => {
15
+ expect(LicenseModel.validate({ ...validLicense, available: true }, 'create')).toBe(true);
16
+ });
17
+ it('requires an id and name', () => {
18
+ expect(LicenseModel.validate({ name: 'Starter' }, 'create')).toBe(false);
19
+ expect(LicenseModel.validate({ id: 'starter' }, 'create')).toBe(false);
20
+ });
21
+ it('allows only availability and description to change', () => {
22
+ expect(LicenseModel.validate({ available: true, description: 'updated' }, 'change')).toBe(true);
23
+ });
24
+ it('requires availability on change', () => {
25
+ expect(LicenseModel.validate({ description: 'updated' }, 'change')).toBe(false);
26
+ });
27
+ it('rejects edits to immutable terms and the id', () => {
28
+ expect(LicenseModel.validate({ available: true, monthlyCost: 5 }, 'change')).toBe(false);
29
+ expect(LicenseModel.validate({ available: true, id: 'other' }, 'change')).toBe(false);
30
+ expect(LicenseModel.validate({ available: true, includedApps: ['editor'] }, 'change')).toBe(false);
31
+ });
32
+ it('marks the id as immutable', () => {
33
+ expect(LicenseModel.immutable).toContain('id');
34
+ });
35
+ it('defines a unique license id', () => {
36
+ expect(LicenseModel.indexes).toContainEqual(expect.objectContaining({
37
+ key: { id: 1 },
38
+ unique: true,
39
+ name: 'license_unique-v1',
40
+ }));
41
+ });
42
+ });
43
+ //# sourceMappingURL=licenseModel.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licenseModel.spec.js","sourceRoot":"","sources":["../../tests/licenseModel.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ import { afterEach, describe, expect, it, jest } from '@jest/globals';
2
+ import { ObjectId } from 'mongodb';
3
+ import LicenseModel from '../src/models/license.model';
4
+ import LicenseService from '../src/services/license.service';
5
+ describe('LicenseService', () => {
6
+ afterEach(() => {
7
+ jest.restoreAllMocks();
8
+ });
9
+ it('gets a license by its unique id', async () => {
10
+ const findOne = jest.fn().mockResolvedValue(null);
11
+ jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
12
+ await LicenseService.single('free');
13
+ expect(findOne).toHaveBeenCalledWith({ id: 'free' }, { projection: { history: 0 } });
14
+ });
15
+ it('lists licenses sorted by name', async () => {
16
+ const toArray = jest.fn().mockResolvedValue([]);
17
+ const sort = jest.fn().mockReturnValue({ toArray });
18
+ const find = jest.fn().mockReturnValue({ sort });
19
+ jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ find });
20
+ await LicenseService.list();
21
+ expect(find).toHaveBeenCalledWith();
22
+ expect(sort).toHaveBeenCalledWith({ name: 1 });
23
+ expect(toArray).toHaveBeenCalledWith();
24
+ });
25
+ it('changes a license by its unique id', async () => {
26
+ const _id = new ObjectId();
27
+ const findOne = jest.fn().mockResolvedValue({ _id });
28
+ jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
29
+ const immutable = jest.spyOn(LicenseService, 'immutable').mockResolvedValue({});
30
+ await LicenseService.change('free', { available: true }, 'user', 'app');
31
+ expect(immutable).toHaveBeenCalledWith(_id, { available: true }, 'user', 'change', 'app');
32
+ });
33
+ it('rejects changing a missing license', async () => {
34
+ const findOne = jest.fn().mockResolvedValue(null);
35
+ jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
36
+ await expect(LicenseService.change('free', { available: true }, 'user', 'app')).rejects.toThrow('LICENSE_NOT_FOUND');
37
+ });
38
+ it('removes a license by its unique id', async () => {
39
+ const _id = new ObjectId();
40
+ const findOne = jest.fn().mockResolvedValue({ _id });
41
+ jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
42
+ const remove = jest.spyOn(LicenseService, 'delete').mockResolvedValue({ acknowledged: true, deletedCount: 1 });
43
+ await LicenseService.remove('free', 'user', 'app');
44
+ expect(remove).toHaveBeenCalledWith(_id, 'user', 'app');
45
+ });
46
+ });
47
+ //# sourceMappingURL=licenseService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licenseService.spec.js","sourceRoot":"","sources":["../../tests/licenseService.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ import { jest, describe, it, expect, beforeEach } from '@jest/globals';
2
+ import MemoryCache from '../src/services/memory-cache.service';
3
+ describe('MemoryCache.use', () => {
4
+ beforeEach(() => MemoryCache.clear());
5
+ it('runs a fetch function only on a miss', async () => {
6
+ const fetch = jest.fn(async () => ({ name: 'conversation' }));
7
+ await MemoryCache.use({ type: 'conversation', id: 'a' }, fetch);
8
+ const cached = await MemoryCache.use({ type: 'conversation', id: 'a' }, fetch);
9
+ expect(cached).toEqual({ name: 'conversation' });
10
+ expect(fetch).toHaveBeenCalledTimes(1);
11
+ });
12
+ it('observes the rejection of a started promise on a hit', async () => {
13
+ await MemoryCache.use({ type: 'conversation', id: 'a' }, Promise.resolve({ name: 'conversation' }));
14
+ const unhandled = jest.fn();
15
+ process.on('unhandledRejection', unhandled);
16
+ const cached = await MemoryCache.use({ type: 'conversation', id: 'a' }, Promise.reject(new Error('database down')));
17
+ await new Promise((resolve) => setImmediate(resolve));
18
+ process.off('unhandledRejection', unhandled);
19
+ expect(cached).toEqual({ name: 'conversation' });
20
+ expect(unhandled).not.toHaveBeenCalled();
21
+ });
22
+ it('fetches again once the lifetime has passed', async () => {
23
+ const fetch = jest.fn(async () => ({ name: 'conversation' }));
24
+ const now = jest.spyOn(Date, 'now').mockReturnValue(1000);
25
+ await MemoryCache.use({ type: 'conversation', id: 'a', lifetime: 100 }, fetch);
26
+ now.mockReturnValue(1200);
27
+ await MemoryCache.use({ type: 'conversation', id: 'a', lifetime: 100 }, fetch);
28
+ now.mockRestore();
29
+ expect(fetch).toHaveBeenCalledTimes(2);
30
+ });
31
+ });
32
+ //# sourceMappingURL=memoryCache.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryCache.spec.js","sourceRoot":"","sources":["../../tests/memoryCache.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ import { jest, describe, it, expect, beforeEach, afterEach } from '@jest/globals';
2
+ import { ObjectId } from 'mongodb';
3
+ import participantsService from '../src/services/participants.service';
4
+ import supportAccess from '../src/services/support-access.service';
5
+ import MemoryCache from '../src/services/memory-cache.service';
6
+ const CONVERSATION_ID = new ObjectId('507f1f77bcf86cd799439011');
7
+ const AGENT = 'agent-1';
8
+ const agentParticipant = {
9
+ user: AGENT,
10
+ conversation: CONVERSATION_ID,
11
+ state: 'active',
12
+ role: 'agent',
13
+ rights: ['read', 'write', 'files', 'participants'],
14
+ };
15
+ describe('ParticipantsService.checkAccess for support agents', () => {
16
+ beforeEach(() => {
17
+ MemoryCache.clear();
18
+ MemoryCache.upsert(MemoryCache.getCacheKey({ type: 'conversation', id: CONVERSATION_ID }), { _id: CONVERSATION_ID, operationMode: 'support', participants: [AGENT, 'customer'] });
19
+ jest.spyOn(participantsService, 'getByConversationAndUser').mockResolvedValue(agentParticipant);
20
+ });
21
+ afterEach(() => {
22
+ jest.restoreAllMocks();
23
+ });
24
+ it('caps stored rights by the current scopes', async () => {
25
+ jest.spyOn(supportAccess, 'scopes').mockResolvedValue(new Set(['read']));
26
+ const settings = { conversationId: CONVERSATION_ID, user: AGENT };
27
+ await expect(participantsService.checkAccess(['active'], ['read'], settings)).resolves.toBe(true);
28
+ await expect(participantsService.checkAccess(['active'], ['write'], settings)).resolves.toBe(false);
29
+ await expect(participantsService.checkAccess(['active'], ['participants'], settings)).resolves.toBe(false);
30
+ });
31
+ it('keeps stored rights the scopes still grant', async () => {
32
+ jest.spyOn(supportAccess, 'scopes').mockResolvedValue(new Set(['read', 'write', 'participants']));
33
+ const settings = { conversationId: CONVERSATION_ID, user: AGENT };
34
+ await expect(participantsService.checkAccess(['active'], ['write'], settings)).resolves.toBe(true);
35
+ await expect(participantsService.checkAccess(['active'], ['participants'], settings)).resolves.toBe(true);
36
+ });
37
+ it('denies an agent without any support scope', async () => {
38
+ jest.spyOn(supportAccess, 'scopes').mockResolvedValue(new Set());
39
+ await expect(participantsService.checkAccess(['active'], undefined, { conversationId: CONVERSATION_ID, user: AGENT })).resolves.toBe(false);
40
+ });
41
+ });
42
+ //# sourceMappingURL=participantsCheckAccess.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"participantsCheckAccess.spec.js","sourceRoot":"","sources":["../../tests/participantsCheckAccess.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,mBAAmB,MAAM,sCAAsC,CAAC;AACvE,OAAO,aAAa,MAAM,wCAAwC,CAAC;AACnE,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAG/D,MAAM,eAAe,GAAG,IAAI,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AACjE,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,MAAM,gBAAgB,GAAG;IACvB,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,eAAe;IAC7B,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC;CACpC,CAAC;AAEjB,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAElE,UAAU,CAAC,GAAG,EAAE;QAEd,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,WAAW,CAAC,MAAM,CAChB,WAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EACtE,EAAE,GAAG,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CACtF,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,iBAAiB,CAAC,gBAAyB,CAAC,CAAC;IAE3G,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QAEb,IAAI,CAAC,eAAe,EAAE,CAAC;IAEzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAExD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAG,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAElE,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpG,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE7G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAE1D,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAElG,MAAM,QAAQ,GAAG,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAElE,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnG,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAEzD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAEjE,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE9I,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lilaquadrat/studio",
3
- "version": "11.4.1",
3
+ "version": "11.5.2",
4
4
  "description": "classes and tools for STUDIO",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -118,7 +118,7 @@
118
118
  },
119
119
  "dependencies": {
120
120
  "@google/genai": "^1.42.0",
121
- "@lilaquadrat/interfaces": "^1.50.1",
121
+ "@lilaquadrat/interfaces": "^1.51.1",
122
122
  "@lilaquadrat/storage-sdk": "^0.1.15",
123
123
  "@nats-io/jetstream": "^3.2.0",
124
124
  "@nats-io/transport-node": "^3.2.0",