@adobe/spacecat-shared-tier-client 1.3.15 → 1.4.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/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [@adobe/spacecat-shared-tier-client-v1.4.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-tier-client-v1.3.16...@adobe/spacecat-shared-tier-client-v1.4.0) (2026-04-01)
2
+
3
+ ### Features
4
+
5
+ * add PLG tier to entitlement model and bump mysticat types ([#1487](https://github.com/adobe/spacecat-shared/issues/1487)) ([7f9c6fc](https://github.com/adobe/spacecat-shared/commit/7f9c6fcb6d3672269081176ebf643151fb512e99))
6
+
7
+ ## [@adobe/spacecat-shared-tier-client-v1.3.16](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-tier-client-v1.3.15...@adobe/spacecat-shared-tier-client-v1.3.16) (2026-03-21)
8
+
9
+ ### Bug Fixes
10
+
11
+ * **deps:** update external fixes ([#1456](https://github.com/adobe/spacecat-shared/issues/1456)) ([b4654ec](https://github.com/adobe/spacecat-shared/commit/b4654ec88780f540f608fd8588182da805f2e6e2))
12
+
1
13
  ## [@adobe/spacecat-shared-tier-client-v1.3.15](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-tier-client-v1.3.14...@adobe/spacecat-shared-tier-client-v1.3.15) (2026-03-07)
2
14
 
3
15
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/spacecat-shared-tier-client",
3
- "version": "1.3.15",
3
+ "version": "1.4.0",
4
4
  "description": "Shared modules of the Spacecat Services - Tier Client",
5
5
  "type": "module",
6
6
  "engines": {
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@adobe/spacecat-shared-utils": "1.81.1",
39
- "@mysticat/data-service-types": "git+https://github.com/adobe/mysticat-data-service.git#types-ts-v1.11.1"
39
+ "@mysticat/data-service-types": "git+https://github.com/adobe/mysticat-data-service.git#types-ts-v1.42.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "c8": "10.1.3",
@@ -44,7 +44,7 @@
44
44
  "chai-as-promised": "8.0.2",
45
45
  "mocha": "11.7.5",
46
46
  "mocha-multi-reporters": "1.5.1",
47
- "sinon": "21.0.2",
47
+ "sinon": "21.0.3",
48
48
  "sinon-chai": "4.0.1",
49
49
  "typescript": "5.9.3"
50
50
  }
@@ -467,6 +467,70 @@ describe('TierClient', () => {
467
467
 
468
468
  await expect(tierClient.createEntitlement('FREE_TRIAL')).to.be.rejectedWith('Database error');
469
469
  });
470
+
471
+ it('should create entitlement with PLG tier when nothing exists', async () => {
472
+ const mockPlgEntitlement = { ...mockEntitlement, getTier: () => 'PLG' };
473
+ mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(null);
474
+ mockDataAccess.Entitlement.create.resolves(mockPlgEntitlement);
475
+ mockDataAccess.SiteEnrollment.create.resolves(mockSiteEnrollment);
476
+
477
+ const result = await tierClient.createEntitlement('PLG');
478
+
479
+ expect(result).to.deep.equal({
480
+ entitlement: mockPlgEntitlement,
481
+ siteEnrollment: mockSiteEnrollment,
482
+ });
483
+ expect(mockDataAccess.Entitlement.create).to.have.been.calledWith({
484
+ organizationId: orgId,
485
+ productCode,
486
+ tier: 'PLG',
487
+ quotas: { llmo_trial_prompts: 200, llmo_trial_prompts_consumed: 0 },
488
+ });
489
+ });
490
+
491
+ it('should upgrade PLG entitlement to FREE_TRIAL (PLG is not PAID, so tier updates)', async () => {
492
+ const mockPlgEntitlement = {
493
+ ...mockEntitlement,
494
+ getTier: () => 'PLG',
495
+ setTier: sandbox.stub().returnsThis(),
496
+ save: sandbox.stub().resolves(),
497
+ };
498
+
499
+ mockDataAccess.Entitlement
500
+ .findByOrganizationIdAndProductCode.resolves(mockPlgEntitlement);
501
+ mockDataAccess.SiteEnrollment.allBySiteId.resolves([mockSiteEnrollment]);
502
+
503
+ const result = await tierClient.createEntitlement('FREE_TRIAL');
504
+
505
+ expect(mockPlgEntitlement.setTier).to.have.been.calledWith('FREE_TRIAL');
506
+ expect(mockPlgEntitlement.save).to.have.been.called;
507
+ expect(result).to.deep.equal({
508
+ entitlement: mockPlgEntitlement,
509
+ siteEnrollment: mockSiteEnrollment,
510
+ });
511
+ });
512
+
513
+ it('should upgrade PLG entitlement to PAID (PLG is not PAID, so tier updates)', async () => {
514
+ const mockPlgEntitlement = {
515
+ ...mockEntitlement,
516
+ getTier: () => 'PLG',
517
+ setTier: sandbox.stub().returnsThis(),
518
+ save: sandbox.stub().resolves(),
519
+ };
520
+
521
+ mockDataAccess.Entitlement
522
+ .findByOrganizationIdAndProductCode.resolves(mockPlgEntitlement);
523
+ mockDataAccess.SiteEnrollment.allBySiteId.resolves([mockSiteEnrollment]);
524
+
525
+ const result = await tierClient.createEntitlement('PAID');
526
+
527
+ expect(mockPlgEntitlement.setTier).to.have.been.calledWith('PAID');
528
+ expect(mockPlgEntitlement.save).to.have.been.called;
529
+ expect(result).to.deep.equal({
530
+ entitlement: mockPlgEntitlement,
531
+ siteEnrollment: mockSiteEnrollment,
532
+ });
533
+ });
470
534
  });
471
535
 
472
536
  describe('Edge Cases', () => {
@@ -603,6 +667,22 @@ describe('TierClient', () => {
603
667
  expect(mockPaidEntitlement.remove).to.not.have.been.called;
604
668
  });
605
669
 
670
+ it('should successfully revoke PLG-tier entitlement (PLG is not PAID, revoke is allowed)', async () => {
671
+ const mockPlgEntitlement = {
672
+ ...mockEntitlement,
673
+ getTier: () => 'PLG',
674
+ remove: sandbox.stub().resolves(),
675
+ };
676
+
677
+ mockDataAccess.Entitlement
678
+ .findByOrganizationIdAndProductCode.resolves(mockPlgEntitlement);
679
+ mockDataAccess.SiteEnrollment.allBySiteId.resolves([]);
680
+
681
+ await tierClient.revokeEntitlement();
682
+
683
+ expect(mockPlgEntitlement.remove.calledOnce).to.be.true;
684
+ });
685
+
606
686
  it('should throw error when entitlement does not exist', async () => {
607
687
  mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(null);
608
688
  mockDataAccess.SiteEnrollment.allBySiteId.resolves([]);