@abyss-project/main 2.1.0 → 2.3.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.
Files changed (202) hide show
  1. package/dist/api/billing-account.admin.api.d.ts +11 -3
  2. package/dist/api/billing-account.admin.api.js +21 -5
  3. package/dist/api/billing-account.admin.api.js.map +1 -1
  4. package/dist/api/organization-billing.api.d.ts +11 -0
  5. package/dist/api/organization-billing.api.js +17 -1
  6. package/dist/api/organization-billing.api.js.map +1 -1
  7. package/dist/api/organization-external-identity.api.d.ts +7 -0
  8. package/dist/api/organization-external-identity.api.js +25 -0
  9. package/dist/api/organization-external-identity.api.js.map +1 -0
  10. package/dist/api/organization-member.admin.api.d.ts +2 -1
  11. package/dist/api/organization-member.admin.api.js +5 -1
  12. package/dist/api/organization-member.admin.api.js.map +1 -1
  13. package/dist/api/user-billing.api.d.ts +9 -0
  14. package/dist/api/user-billing.api.js +17 -1
  15. package/dist/api/user-billing.api.js.map +1 -1
  16. package/dist/constants/catalog-plan-quotas.constants.d.ts +2 -0
  17. package/dist/constants/catalog-plan-quotas.constants.js +70 -1
  18. package/dist/constants/catalog-plan-quotas.constants.js.map +1 -1
  19. package/dist/constants/index.d.ts +1 -0
  20. package/dist/constants/index.js +1 -0
  21. package/dist/constants/index.js.map +1 -1
  22. package/dist/constants/metric-price-scale.constants.d.ts +1 -0
  23. package/dist/constants/metric-price-scale.constants.js +12 -1
  24. package/dist/constants/metric-price-scale.constants.js.map +1 -1
  25. package/dist/constants/module-catalog.constants.d.ts +65 -0
  26. package/dist/constants/module-catalog.constants.js +336 -0
  27. package/dist/constants/module-catalog.constants.js.map +1 -0
  28. package/dist/constants/quota-metric-kind.constants.d.ts +2 -0
  29. package/dist/constants/quota-metric-kind.constants.js +12 -1
  30. package/dist/constants/quota-metric-kind.constants.js.map +1 -1
  31. package/dist/constants/tests/billing-catalog.constants.spec.d.ts +1 -0
  32. package/dist/constants/tests/billing-catalog.constants.spec.js +334 -0
  33. package/dist/constants/tests/billing-catalog.constants.spec.js.map +1 -0
  34. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.d.ts +1 -0
  35. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js +101 -0
  36. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js.map +1 -0
  37. package/dist/constants/tests/metric-price-scale.constants.spec.d.ts +1 -0
  38. package/dist/constants/tests/metric-price-scale.constants.spec.js +83 -0
  39. package/dist/constants/tests/metric-price-scale.constants.spec.js.map +1 -0
  40. package/dist/constants/tests/module-calibration.constants.spec.d.ts +1 -0
  41. package/dist/constants/tests/module-calibration.constants.spec.js +75 -0
  42. package/dist/constants/tests/module-calibration.constants.spec.js.map +1 -0
  43. package/dist/constants/tests/module-catalog.constants.spec.d.ts +1 -0
  44. package/dist/constants/tests/module-catalog.constants.spec.js +196 -0
  45. package/dist/constants/tests/module-catalog.constants.spec.js.map +1 -0
  46. package/dist/constants/tests/overage-pricing-single-source.spec.d.ts +1 -0
  47. package/dist/constants/tests/overage-pricing-single-source.spec.js +23 -0
  48. package/dist/constants/tests/overage-pricing-single-source.spec.js.map +1 -0
  49. package/dist/constants/tests/password-policy.constants.spec.d.ts +1 -0
  50. package/dist/constants/tests/password-policy.constants.spec.js +67 -0
  51. package/dist/constants/tests/password-policy.constants.spec.js.map +1 -0
  52. package/dist/index.d.ts +22 -0
  53. package/dist/index.js +22 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/server/tests/after-commit-emit.util.spec.d.ts +1 -0
  56. package/dist/server/tests/after-commit-emit.util.spec.js +99 -0
  57. package/dist/server/tests/after-commit-emit.util.spec.js.map +1 -0
  58. package/dist/server/tests/encrypt-secret.util.spec.d.ts +6 -0
  59. package/dist/server/tests/encrypt-secret.util.spec.js +148 -0
  60. package/dist/server/tests/encrypt-secret.util.spec.js.map +1 -0
  61. package/dist/types/enum/abyss-application-event.enum.d.ts +5 -1
  62. package/dist/types/enum/abyss-application-event.enum.js +5 -1
  63. package/dist/types/enum/abyss-application-event.enum.js.map +1 -1
  64. package/dist/types/enum/external-delivery.enum.d.ts +6 -0
  65. package/dist/types/enum/external-delivery.enum.js +11 -0
  66. package/dist/types/enum/external-delivery.enum.js.map +1 -0
  67. package/dist/types/enum/index.d.ts +2 -0
  68. package/dist/types/enum/index.js +2 -0
  69. package/dist/types/enum/index.js.map +1 -1
  70. package/dist/types/enum/organization-billing.enum.d.ts +15 -2
  71. package/dist/types/enum/organization-billing.enum.js +29 -2
  72. package/dist/types/enum/organization-billing.enum.js.map +1 -1
  73. package/dist/types/enum/organization-external-identity.enum.d.ts +17 -0
  74. package/dist/types/enum/organization-external-identity.enum.js +24 -0
  75. package/dist/types/enum/organization-external-identity.enum.js.map +1 -0
  76. package/dist/types/enum/slack-webhook.enum.d.ts +3 -1
  77. package/dist/types/enum/slack-webhook.enum.js +2 -0
  78. package/dist/types/enum/slack-webhook.enum.js.map +1 -1
  79. package/dist/types/enum/tests/billing-addon-status.enum.spec.d.ts +1 -0
  80. package/dist/types/enum/tests/billing-addon-status.enum.spec.js +66 -0
  81. package/dist/types/enum/tests/billing-addon-status.enum.spec.js.map +1 -0
  82. package/dist/types/enum/tests/report-notification-type.enum.spec.d.ts +1 -0
  83. package/dist/types/enum/tests/report-notification-type.enum.spec.js +18 -0
  84. package/dist/types/enum/tests/report-notification-type.enum.spec.js.map +1 -0
  85. package/dist/types/enum/tests/user-notification-content-type.enum.spec.d.ts +1 -0
  86. package/dist/types/enum/tests/user-notification-content-type.enum.spec.js +13 -0
  87. package/dist/types/enum/tests/user-notification-content-type.enum.spec.js.map +1 -0
  88. package/dist/types/enum/token-type.enum.d.ts +2 -1
  89. package/dist/types/enum/token-type.enum.js +1 -0
  90. package/dist/types/enum/token-type.enum.js.map +1 -1
  91. package/dist/types/enum/user-notification-category.enum.d.ts +7 -1
  92. package/dist/types/enum/user-notification-category.enum.js +19 -1
  93. package/dist/types/enum/user-notification-category.enum.js.map +1 -1
  94. package/dist/types/enum/user-notification-content-type.enum.d.ts +2 -0
  95. package/dist/types/enum/user-notification-content-type.enum.js.map +1 -1
  96. package/dist/types/interface/api/index.d.ts +9 -0
  97. package/dist/types/interface/api/index.js +9 -0
  98. package/dist/types/interface/api/index.js.map +1 -1
  99. package/dist/types/interface/api/requests/billing-account.admin.request.d.ts +23 -6
  100. package/dist/types/interface/api/requests/billing-module.request.d.ts +25 -0
  101. package/dist/types/interface/api/requests/billing-module.request.js +3 -0
  102. package/dist/types/interface/api/requests/billing-module.request.js.map +1 -0
  103. package/dist/types/interface/api/requests/billing-snapshot-admin.request.d.ts +7 -0
  104. package/dist/types/interface/api/requests/billing-snapshot-admin.request.js +3 -0
  105. package/dist/types/interface/api/requests/billing-snapshot-admin.request.js.map +1 -0
  106. package/dist/types/interface/api/requests/organization-external-identity.request.d.ts +28 -0
  107. package/dist/types/interface/api/requests/organization-external-identity.request.js +3 -0
  108. package/dist/types/interface/api/requests/organization-external-identity.request.js.map +1 -0
  109. package/dist/types/interface/api/requests/organization-integration-webhook.request.d.ts +17 -1
  110. package/dist/types/interface/api/requests/organization-member.request.d.ts +3 -0
  111. package/dist/types/interface/api/requests/quota-offer.request.d.ts +10 -0
  112. package/dist/types/interface/api/requests/quota-offer.request.js +3 -0
  113. package/dist/types/interface/api/requests/quota-offer.request.js.map +1 -0
  114. package/dist/types/interface/api/responses/billing-account.admin.response.d.ts +15 -13
  115. package/dist/types/interface/api/responses/billing-estimate.response.d.ts +18 -0
  116. package/dist/types/interface/api/responses/billing-estimate.response.js +3 -0
  117. package/dist/types/interface/api/responses/billing-estimate.response.js.map +1 -0
  118. package/dist/types/interface/api/responses/billing-module.response.d.ts +21 -0
  119. package/dist/types/interface/api/responses/billing-module.response.js +3 -0
  120. package/dist/types/interface/api/responses/billing-module.response.js.map +1 -0
  121. package/dist/types/interface/api/responses/billing-snapshot-admin.response.d.ts +9 -0
  122. package/dist/types/interface/api/responses/billing-snapshot-admin.response.js +3 -0
  123. package/dist/types/interface/api/responses/billing-snapshot-admin.response.js.map +1 -0
  124. package/dist/types/interface/api/responses/organization-external-identity.response.d.ts +22 -0
  125. package/dist/types/interface/api/responses/organization-external-identity.response.js +3 -0
  126. package/dist/types/interface/api/responses/organization-external-identity.response.js.map +1 -0
  127. package/dist/types/interface/api/responses/organization-member.response.d.ts +8 -0
  128. package/dist/types/interface/api/responses/quota-offer.response.d.ts +27 -0
  129. package/dist/types/interface/api/responses/quota-offer.response.js +3 -0
  130. package/dist/types/interface/api/responses/quota-offer.response.js.map +1 -0
  131. package/dist/types/interface/index.d.ts +3 -0
  132. package/dist/types/interface/index.js +3 -0
  133. package/dist/types/interface/index.js.map +1 -1
  134. package/dist/types/interface/models/billing-account-addon.model.d.ts +16 -0
  135. package/dist/types/interface/models/billing-account-addon.model.js +3 -0
  136. package/dist/types/interface/models/billing-account-addon.model.js.map +1 -0
  137. package/dist/types/interface/models/external-delivery.model.d.ts +22 -0
  138. package/dist/types/interface/models/external-delivery.model.js +3 -0
  139. package/dist/types/interface/models/external-delivery.model.js.map +1 -0
  140. package/dist/types/interface/models/index.d.ts +1 -0
  141. package/dist/types/interface/models/index.js +1 -0
  142. package/dist/types/interface/models/index.js.map +1 -1
  143. package/dist/types/interface/models/organization-external-identity.model.d.ts +20 -0
  144. package/dist/types/interface/models/organization-external-identity.model.js +3 -0
  145. package/dist/types/interface/models/organization-external-identity.model.js.map +1 -0
  146. package/dist/types/interface/models/organization-member.model.d.ts +1 -0
  147. package/dist/types/interface/models/organization-service-quota.model.d.ts +1 -0
  148. package/dist/types/session.d.ts +8 -1
  149. package/dist/utils/billing-deep-link.utils.d.ts +15 -0
  150. package/dist/utils/billing-deep-link.utils.js +23 -0
  151. package/dist/utils/billing-deep-link.utils.js.map +1 -0
  152. package/dist/utils/billing.utils.d.ts +0 -2
  153. package/dist/utils/billing.utils.js +1 -6
  154. package/dist/utils/billing.utils.js.map +1 -1
  155. package/dist/utils/index.d.ts +2 -0
  156. package/dist/utils/index.js +2 -0
  157. package/dist/utils/index.js.map +1 -1
  158. package/dist/utils/plan-capacity.utils.d.ts +21 -0
  159. package/dist/utils/plan-capacity.utils.js +43 -0
  160. package/dist/utils/plan-capacity.utils.js.map +1 -0
  161. package/dist/utils/pricing.utils.d.ts +22 -1
  162. package/dist/utils/pricing.utils.js +125 -4
  163. package/dist/utils/pricing.utils.js.map +1 -1
  164. package/dist/utils/tests/billing-deep-link.utils.spec.d.ts +1 -0
  165. package/dist/utils/tests/billing-deep-link.utils.spec.js +91 -0
  166. package/dist/utils/tests/billing-deep-link.utils.spec.js.map +1 -0
  167. package/dist/utils/tests/billing.utils.spec.d.ts +1 -0
  168. package/dist/utils/tests/billing.utils.spec.js +81 -0
  169. package/dist/utils/tests/billing.utils.spec.js.map +1 -0
  170. package/dist/utils/tests/invoice-amounts.utils.spec.d.ts +1 -0
  171. package/dist/utils/tests/invoice-amounts.utils.spec.js +97 -0
  172. package/dist/utils/tests/invoice-amounts.utils.spec.js.map +1 -0
  173. package/dist/utils/tests/module-lot-price.utils.spec.d.ts +1 -0
  174. package/dist/utils/tests/module-lot-price.utils.spec.js +56 -0
  175. package/dist/utils/tests/module-lot-price.utils.spec.js.map +1 -0
  176. package/dist/utils/tests/module-price.utils.spec.d.ts +1 -0
  177. package/dist/utils/tests/module-price.utils.spec.js +79 -0
  178. package/dist/utils/tests/module-price.utils.spec.js.map +1 -0
  179. package/dist/utils/tests/overage-negotiated-rate.utils.spec.d.ts +1 -0
  180. package/dist/utils/tests/overage-negotiated-rate.utils.spec.js +59 -0
  181. package/dist/utils/tests/overage-negotiated-rate.utils.spec.js.map +1 -0
  182. package/dist/utils/tests/plan-capacity.utils.spec.d.ts +1 -0
  183. package/dist/utils/tests/plan-capacity.utils.spec.js +81 -0
  184. package/dist/utils/tests/plan-capacity.utils.spec.js.map +1 -0
  185. package/dist/utils/tests/pricing.utils.spec.d.ts +1 -0
  186. package/dist/utils/tests/pricing.utils.spec.js +219 -0
  187. package/dist/utils/tests/pricing.utils.spec.js.map +1 -0
  188. package/dist/utils/tests/quota-ceiling.utils.spec.d.ts +1 -0
  189. package/dist/utils/tests/quota-ceiling.utils.spec.js +119 -0
  190. package/dist/utils/tests/quota-ceiling.utils.spec.js.map +1 -0
  191. package/dist/utils/tests/quote-overage-rate.spec.d.ts +1 -0
  192. package/dist/utils/tests/quote-overage-rate.spec.js +39 -0
  193. package/dist/utils/tests/quote-overage-rate.spec.js.map +1 -0
  194. package/dist/utils/tests/resolve-user.utils.spec.d.ts +1 -0
  195. package/dist/utils/tests/resolve-user.utils.spec.js +98 -0
  196. package/dist/utils/tests/resolve-user.utils.spec.js.map +1 -0
  197. package/dist/utils/tests/shifted-tiers.utils.spec.d.ts +1 -0
  198. package/dist/utils/tests/shifted-tiers.utils.spec.js +176 -0
  199. package/dist/utils/tests/shifted-tiers.utils.spec.js.map +1 -0
  200. package/package.json +2 -2
  201. package/tsconfig.build.json +4 -0
  202. package/tsconfig.json +35 -36
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const organization_billing_enum_1 = require("../../types/enum/organization-billing.enum");
4
+ const metric_price_scale_constants_1 = require("../metric-price-scale.constants");
5
+ const billing_catalog_constants_1 = require("../billing-catalog.constants");
6
+ const pricing_utils_1 = require("../../utils/pricing.utils");
7
+ describe('METRIC_PRICE_SCALE', () => {
8
+ it('prices storage on four decreasing tranches', () => {
9
+ const scale = metric_price_scale_constants_1.METRIC_PRICE_SCALE[organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB];
10
+ expect(scale).toBeDefined();
11
+ expect(scale).toHaveLength(4);
12
+ expect(scale?.map((t) => t.nanocentsPerUnit)).toEqual([
13
+ 1_500_000_000, 1_000_000_000, 600_000_000, 400_000_000,
14
+ ]);
15
+ expect(scale?.map((t) => t.upToQuantity)).toEqual([100, 1_000, 5_000, null]);
16
+ });
17
+ it('closes every scale with an open-ended tranche', () => {
18
+ for (const scale of Object.values(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
19
+ expect(scale.length).toBeGreaterThan(0);
20
+ expect(scale[scale.length - 1].upToQuantity).toBeNull();
21
+ expect(scale.slice(0, -1).every((t) => t.upToQuantity !== null)).toBe(true);
22
+ }
23
+ });
24
+ it('keeps every scale strictly increasing in bound and non-increasing in price', () => {
25
+ for (const scale of Object.values(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
26
+ let previousBound = 0;
27
+ let previousPrice = Number.POSITIVE_INFINITY;
28
+ for (const tranche of scale) {
29
+ const bound = tranche.upToQuantity ?? Number.POSITIVE_INFINITY;
30
+ expect(bound).toBeGreaterThan(previousBound);
31
+ expect(tranche.nanocentsPerUnit).toBeLessThanOrEqual(previousPrice);
32
+ expect(tranche.nanocentsPerUnit).toBeGreaterThan(0);
33
+ previousBound = bound;
34
+ previousPrice = tranche.nanocentsPerUnit;
35
+ }
36
+ }
37
+ });
38
+ it('exposes the money constants', () => {
39
+ expect(metric_price_scale_constants_1.NANOCENTS_PER_CENT).toBe(1_000_000_000);
40
+ expect(metric_price_scale_constants_1.OVERAGE_MULTIPLIER).toBe(2);
41
+ });
42
+ });
43
+ describe('METRIC_PRICE_SCALE — invariants de catalogue', () => {
44
+ it('keeps every rate an integer number of nanocents', () => {
45
+ for (const [metric, scale] of Object.entries(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
46
+ for (const tranche of scale) {
47
+ expect({ metric, rate: tranche.nanocentsPerUnit }).toEqual({
48
+ metric,
49
+ rate: Math.round(tranche.nanocentsPerUnit),
50
+ });
51
+ }
52
+ }
53
+ });
54
+ it('never prices a metric that cannot be overage-billed', () => {
55
+ for (const metric of Object.keys(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
56
+ expect(billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE.has(metric)).toBe(true);
57
+ }
58
+ });
59
+ it('never prices a configuration metric', () => {
60
+ for (const metric of Object.keys(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
61
+ expect(billing_catalog_constants_1.METRIC_IS_CONFIG.has(metric)).toBe(false);
62
+ }
63
+ });
64
+ it('leaves the not-yet-modular metrics unpriced on purpose', () => {
65
+ const eligibleWithoutScale = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE].filter((metric) => metric_price_scale_constants_1.METRIC_PRICE_SCALE[metric] === undefined);
66
+ expect(eligibleWithoutScale.length).toBeGreaterThan(0);
67
+ });
68
+ it('still resolves a rate for every overage-eligible metric', () => {
69
+ const unresolvable = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE].filter((metric) => (0, pricing_utils_1.resolveOverageNanocentsPerUnit)(metric) === null);
70
+ expect(unresolvable).toEqual([]);
71
+ });
72
+ it('keeps every fallback rate denominated per ONE unit', () => {
73
+ const perThousand = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE]
74
+ .filter((metric) => metric_price_scale_constants_1.METRIC_PRICE_SCALE[metric] === undefined)
75
+ .filter((metric) => billing_catalog_constants_1.DEFAULT_OVERAGE_BASE_RATES[metric]?.unit.startsWith('1k'));
76
+ expect(perThousand).toEqual([]);
77
+ });
78
+ it('bills a fallback metric at its flat catalog rate', () => {
79
+ expect((0, pricing_utils_1.resolveOverageNanocentsPerUnit)(organization_billing_enum_1.BillingMetric.TEAM_COUNT)).toBe(100 * 1_000_000_000);
80
+ expect((0, pricing_utils_1.overagePriceCents)(organization_billing_enum_1.BillingMetric.TEAM_COUNT, 2, 2)).toBe(200);
81
+ });
82
+ });
83
+ //# sourceMappingURL=metric-price-scale.constants.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-price-scale.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/metric-price-scale.constants.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const organization_billing_enum_1 = require("../../types/enum/organization-billing.enum");
4
+ const metric_price_scale_constants_1 = require("../metric-price-scale.constants");
5
+ const overage_base_rates_constants_1 = require("../overage-base-rates.constants");
6
+ const module_catalog_constants_1 = require("../module-catalog.constants");
7
+ const depuisEchelle = (metric) => {
8
+ const scale = metric_price_scale_constants_1.METRIC_PRICE_SCALE[metric];
9
+ return scale ? scale[0].nanocentsPerUnit * metric_price_scale_constants_1.OVERAGE_MULTIPLIER : null;
10
+ };
11
+ const depuisTarifPlat = (metric) => {
12
+ const plat = overage_base_rates_constants_1.DEFAULT_OVERAGE_BASE_RATES[metric];
13
+ return plat ? plat.rate * metric_price_scale_constants_1.NANOCENTS_PER_CENT : null;
14
+ };
15
+ const HAUSSES_CONNUES = [
16
+ { metric: organization_billing_enum_1.BillingMetric.MEMBERS_COUNT, rapport: 1.5 },
17
+ { metric: organization_billing_enum_1.BillingMetric.TOOLS_BOARD_COUNT, rapport: 2.32 },
18
+ { metric: organization_billing_enum_1.BillingMetric.TOOLS_ATLAS_COUNT, rapport: 2.32 },
19
+ { metric: organization_billing_enum_1.BillingMetric.TOOLS_DRAW_COUNT, rapport: 2.32 },
20
+ { metric: organization_billing_enum_1.BillingMetric.TOOLS_RETROSPECTIVE_COUNT, rapport: 2.32 },
21
+ { metric: organization_billing_enum_1.BillingMetric.BANKING_SELF_BANK_CONNECTIONS_COUNT, rapport: 1.73 },
22
+ ];
23
+ describe('le calibrage des modules', () => {
24
+ it('AUCUNE métrique ne fait monter le dépassement sans figurer dans la table', () => {
25
+ const connues = new Set(HAUSSES_CONNUES.map((h) => h.metric));
26
+ const surprises = [];
27
+ for (const metric of Object.keys(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
28
+ const echelle = depuisEchelle(metric);
29
+ const plat = depuisTarifPlat(metric);
30
+ if (echelle === null || plat === null || connues.has(metric)) {
31
+ continue;
32
+ }
33
+ if (echelle > plat) {
34
+ surprises.push(`${metric} : ${plat} → ${echelle} (×${(echelle / plat).toFixed(2)})`);
35
+ }
36
+ }
37
+ expect(surprises).toStrictEqual([]);
38
+ });
39
+ it('les hausses connues n’ont pas bougé', () => {
40
+ for (const { metric, rapport } of HAUSSES_CONNUES) {
41
+ const echelle = depuisEchelle(metric);
42
+ const plat = depuisTarifPlat(metric);
43
+ expect(echelle).not.toBeNull();
44
+ expect(plat).not.toBeNull();
45
+ expect(echelle / plat).toBeCloseTo(rapport, 2);
46
+ }
47
+ });
48
+ it('toute métrique tarifée par un module a une ÉCHELLE ou un tarif plat', () => {
49
+ const orphelines = [];
50
+ for (const module of module_catalog_constants_1.BILLING_MODULES) {
51
+ if (module.kind !== module_catalog_constants_1.BillingModuleKind.QUANTITY) {
52
+ continue;
53
+ }
54
+ for (const grant of module.lotGrants) {
55
+ if (!metric_price_scale_constants_1.METRIC_PRICE_SCALE[grant.metric] && !overage_base_rates_constants_1.DEFAULT_OVERAGE_BASE_RATES[grant.metric]) {
56
+ orphelines.push(`${module.id} → ${grant.metric}`);
57
+ }
58
+ }
59
+ }
60
+ expect(orphelines).toStrictEqual([]);
61
+ });
62
+ it('un lot de QUANTITÉ octroie toujours quelque chose sur sa propre échelle', () => {
63
+ for (const module of module_catalog_constants_1.BILLING_MODULES) {
64
+ if (module.kind !== module_catalog_constants_1.BillingModuleKind.QUANTITY) {
65
+ continue;
66
+ }
67
+ const surSonEchelle = module.lotGrants.some((g) => g.metric === module.scaleKey);
68
+ expect({ module: module.id, surSonEchelle }).toStrictEqual({
69
+ module: module.id,
70
+ surSonEchelle: true,
71
+ });
72
+ }
73
+ });
74
+ });
75
+ //# sourceMappingURL=module-calibration.constants.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-calibration.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/module-calibration.constants.spec.ts"],"names":[],"mappings":";;AAAA,0FAA2E;AAC3E,kFAIyC;AACzC,kFAA6E;AAC7E,0EAAiF;AA2BjF,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAC7D,MAAM,KAAK,GAAG,iDAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,iDAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC,CAAC;AAGF,MAAM,eAAe,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAC/D,MAAM,IAAI,GAAG,yDAA0B,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,iDAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC,CAAC;AAQF,MAAM,eAAe,GAA8D;IAEjF,EAAE,MAAM,EAAE,yCAAa,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE;IAGrD,EAAE,MAAM,EAAE,yCAAa,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1D,EAAE,MAAM,EAAE,yCAAa,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1D,EAAE,MAAM,EAAE,yCAAa,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;IACzD,EAAE,MAAM,EAAE,yCAAa,CAAC,yBAAyB,EAAE,OAAO,EAAE,IAAI,EAAE;IAElE,EAAE,MAAM,EAAE,yCAAa,CAAC,mCAAmC,EAAE,OAAO,EAAE,IAAI,EAAE;CAC7E,CAAC;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAIlF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,iDAAkB,CAAoB,EAAE,CAAC;YACxE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,SAAS;YACX,CAAC;YACD,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;gBACnB,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,IAAI,MAAM,OAAO,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAG7C,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,eAAe,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAE5B,MAAM,CAAE,OAAkB,GAAI,IAAe,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAG7E,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,MAAM,IAAI,0CAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,IAAI,KAAK,4CAAiB,CAAC,QAAQ,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,iDAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,yDAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnF,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAGjF,KAAK,MAAM,MAAM,IAAI,0CAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,IAAI,KAAK,4CAAiB,CAAC,QAAQ,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC;gBACzD,MAAM,EAAE,MAAM,CAAC,EAAE;gBACjB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const organization_billing_enum_1 = require("../../types/enum/organization-billing.enum");
4
+ const metric_price_scale_constants_1 = require("../metric-price-scale.constants");
5
+ const module_catalog_constants_1 = require("../module-catalog.constants");
6
+ describe('le catalogue des modules', () => {
7
+ it('porte dix-huit modules, tous d’identifiant distinct', () => {
8
+ expect(module_catalog_constants_1.BILLING_MODULES).toHaveLength(18);
9
+ const ids = module_catalog_constants_1.BILLING_MODULES.map((m) => m.id);
10
+ expect(new Set(ids).size).toStrictEqual(ids.length);
11
+ });
12
+ it('n’expose aucun identifiant d’énumération orphelin', () => {
13
+ const declares = Object.values(module_catalog_constants_1.BillingModuleId).sort();
14
+ const presents = module_catalog_constants_1.BILLING_MODULES.map((m) => m.id).sort();
15
+ expect(presents).toStrictEqual(declares);
16
+ });
17
+ it('vend un siège aux organisations et à personne d’autre', () => {
18
+ const seats = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.SEATS);
19
+ expect(seats?.scopes).toStrictEqual([organization_billing_enum_1.PlanAccountType.ORGANIZATION]);
20
+ });
21
+ it('déclare une échelle pour chaque module de quantité, et aucune pour un déblocage', () => {
22
+ for (const module of module_catalog_constants_1.BILLING_MODULES) {
23
+ if (module.kind === module_catalog_constants_1.BillingModuleKind.QUANTITY) {
24
+ expect(metric_price_scale_constants_1.METRIC_PRICE_SCALE[module.scaleKey]).toBeDefined();
25
+ }
26
+ else {
27
+ expect(module.flatPriceCents).toBeGreaterThan(0);
28
+ }
29
+ }
30
+ });
31
+ it('n’octroie que des métriques qui existent encore au catalogue', () => {
32
+ const connues = new Set(Object.values(organization_billing_enum_1.BillingMetric));
33
+ for (const module of module_catalog_constants_1.BILLING_MODULES) {
34
+ for (const grant of module.lotGrants) {
35
+ expect(connues.has(grant.metric)).toBe(true);
36
+ }
37
+ }
38
+ });
39
+ });
40
+ describe('les deux invariants de couverture', () => {
41
+ it('toute métrique TARIFÉE est vendue par au moins un module', () => {
42
+ expect((0, module_catalog_constants_1.pricedMetricsSoldByNoModule)()).toStrictEqual([]);
43
+ });
44
+ it('toute métrique octroyée EN QUANTITÉ a un tarif de dépassement', () => {
45
+ expect((0, module_catalog_constants_1.quantityGrantsWithoutOverageRate)()).toStrictEqual([]);
46
+ });
47
+ it('couvre les métriques annoncées', () => {
48
+ expect((0, module_catalog_constants_1.grantedMetrics)().size).toBeGreaterThanOrEqual(20);
49
+ });
50
+ });
51
+ describe('moduleGrants — un lot se multiplie, un déblocage NON', () => {
52
+ it('multiplie chaque octroi d’un module de quantité par le nombre de lots', () => {
53
+ const extract = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.EXTRACT);
54
+ expect(extract).toBeDefined();
55
+ expect((0, module_catalog_constants_1.moduleGrants)(extract, 3)).toStrictEqual([
56
+ { metric: organization_billing_enum_1.BillingMetric.TOOLS_EXTRACTION, quantity: 1500 },
57
+ { metric: organization_billing_enum_1.BillingMetric.TOOLS_EXTRACTION_OCR_PAGES, quantity: 6000 },
58
+ ]);
59
+ });
60
+ it('NE multiplie PAS un déblocage — le point du test', () => {
61
+ const retention = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION);
62
+ expect(retention).toBeDefined();
63
+ expect((0, module_catalog_constants_1.moduleGrants)(retention, 2)).toStrictEqual([
64
+ { metric: organization_billing_enum_1.BillingMetric.RETENTION_DAYS, quantity: 90 },
65
+ ]);
66
+ });
67
+ it('préserve l’illimité au lieu de le multiplier', () => {
68
+ const beam = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.UNLOCK_BEAM_EXPIRY);
69
+ expect(beam).toBeDefined();
70
+ expect((0, module_catalog_constants_1.moduleGrants)(beam, 1)).toStrictEqual([
71
+ { metric: organization_billing_enum_1.BillingMetric.TOOLS_BEAM_EXPIRY_MAX_DAYS, quantity: -1 },
72
+ ]);
73
+ });
74
+ it('rend une liste vide pour une quantité nulle ou négative', () => {
75
+ const storage = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.STORAGE);
76
+ expect(storage).toBeDefined();
77
+ expect((0, module_catalog_constants_1.moduleGrants)(storage, 0)).toStrictEqual([]);
78
+ expect((0, module_catalog_constants_1.moduleGrants)(storage, -5)).toStrictEqual([]);
79
+ });
80
+ it('tronque une quantité fractionnaire plutôt que d’octroyer un demi-lot', () => {
81
+ const storage = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.STORAGE);
82
+ expect((0, module_catalog_constants_1.moduleGrants)(storage, 2.9)).toStrictEqual([
83
+ { metric: organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, quantity: 2 },
84
+ { metric: organization_billing_enum_1.BillingMetric.FILES_COUNT, quantity: 200 },
85
+ ]);
86
+ });
87
+ });
88
+ describe('moduleById', () => {
89
+ it('trouve un module au catalogue', () => {
90
+ expect((0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.TOOLS)?.label).toStrictEqual('AbyssTools — atelier');
91
+ });
92
+ it('rend undefined pour un identifiant hors catalogue', () => {
93
+ expect((0, module_catalog_constants_1.moduleById)('module-qui-n-existe-pas')).toBeUndefined();
94
+ });
95
+ });
96
+ describe('isAddonGranting — quel état octroie de la capacité', () => {
97
+ it('octroie sur ACTIVE et sur PENDING_REMOVAL, jamais sur SUSPENDED_BY_PLAN', () => {
98
+ expect((0, module_catalog_constants_1.isAddonGranting)(organization_billing_enum_1.BillingAddonStatus.ACTIVE)).toBe(true);
99
+ expect((0, module_catalog_constants_1.isAddonGranting)(organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL)).toBe(true);
100
+ expect((0, module_catalog_constants_1.isAddonGranting)(organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN)).toBe(false);
101
+ });
102
+ it('couvre TOUS les états déclarés — un état ajouté sans décision fait tomber ce test', () => {
103
+ const decides = [
104
+ organization_billing_enum_1.BillingAddonStatus.ACTIVE,
105
+ organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL,
106
+ organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN,
107
+ ];
108
+ expect(Object.values(organization_billing_enum_1.BillingAddonStatus).sort()).toStrictEqual([...decides].sort());
109
+ });
110
+ });
111
+ describe('applyModuleGrantsToLimit — le repli des modules dans une limite', () => {
112
+ const ligne = (moduleId, quantity, status = organization_billing_enum_1.BillingAddonStatus.ACTIVE) => ({ moduleId, quantity, status });
113
+ it('additionne un module de QUANTITÉ à la limite du plan', () => {
114
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, [
115
+ ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800),
116
+ ])).toStrictEqual(1000);
117
+ });
118
+ it('ne retient, dans un lot de lignes, que celles qui touchent la métrique', () => {
119
+ const possede = [
120
+ ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800),
121
+ ligne(module_catalog_constants_1.BillingModuleId.CRYPT, 2),
122
+ ligne(module_catalog_constants_1.BillingModuleId.BEAM, 3),
123
+ ];
124
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, possede)).toStrictEqual(1000);
125
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.CRYPT_ENCRYPTIONS_MONTH, 0, possede)).toStrictEqual(10000);
126
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_BEAM_BANDWIDTH_MONTH, 0, possede)).toStrictEqual(600);
127
+ });
128
+ it('additionne bien deux lignes distinctes qui octroieraient la même métrique', () => {
129
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 0, [
130
+ ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 300),
131
+ ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 200),
132
+ ])).toStrictEqual(500);
133
+ });
134
+ it('prend le MAXIMUM pour un déblocage, au lieu de l’ajouter', () => {
135
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.RETENTION_DAYS, 30, [
136
+ ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION, 1),
137
+ ])).toStrictEqual(90);
138
+ });
139
+ it('ne BAISSE jamais une limite déjà supérieure au déblocage', () => {
140
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.RETENTION_DAYS, 180, [
141
+ ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION, 1),
142
+ ])).toStrictEqual(180);
143
+ });
144
+ it('laisse l’illimité illimité quand la BASE l’est déjà', () => {
145
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, -1, [
146
+ ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 500),
147
+ ])).toStrictEqual(-1);
148
+ });
149
+ it('rend illimité quand le DÉBLOCAGE l’est, quelle que soit la base', () => {
150
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_BEAM_EXPIRY_MAX_DAYS, 7, [
151
+ ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_BEAM_EXPIRY, 1),
152
+ ])).toStrictEqual(-1);
153
+ });
154
+ it('IGNORE une ligne suspendue — sinon la capacité devient gratuite', () => {
155
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.RETENTION_DAYS, 30, [
156
+ ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION, 1, organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN),
157
+ ])).toStrictEqual(30);
158
+ });
159
+ it('COMPTE une ligne en retrait programmé — elle est facturée jusqu’à l’échéance', () => {
160
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, [
161
+ ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800, organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL),
162
+ ])).toStrictEqual(1000);
163
+ });
164
+ it('ignore une ligne dont le module a quitté le catalogue, sans échouer', () => {
165
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, [
166
+ ligne('module-disparu', 5),
167
+ ])).toStrictEqual(200);
168
+ });
169
+ it('n’octroie rien pour une métrique qu’aucun module possédé ne touche', () => {
170
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.CRYPT_ENCRYPTIONS_MONTH, 500, [
171
+ ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800),
172
+ ])).toStrictEqual(500);
173
+ });
174
+ it('octroie TOUTES les métriques d’un lot, pas seulement celle qui le tarife', () => {
175
+ const lignes = [ligne(module_catalog_constants_1.BillingModuleId.TOOLS, 2)];
176
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_BOARD_COUNT, 0, lignes)).toStrictEqual(10);
177
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_ATLAS_COUNT, 0, lignes)).toStrictEqual(10);
178
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_SHORT_LINK_COUNT, 0, lignes)).toStrictEqual(40);
179
+ expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_SHORTLINK_RESOLUTIONS_MONTH, 0, lignes)).toStrictEqual(100000);
180
+ });
181
+ });
182
+ describe('l’invariant qui rend « somme ou maximum » décidable', () => {
183
+ it('aucune métrique n’est octroyée à la fois par un QUANTITY et par un UNLOCK', () => {
184
+ const parQuantite = new Set();
185
+ const parDeblocage = new Set();
186
+ for (const module of module_catalog_constants_1.BILLING_MODULES) {
187
+ const cible = module.kind === module_catalog_constants_1.BillingModuleKind.QUANTITY ? parQuantite : parDeblocage;
188
+ for (const grant of module.lotGrants) {
189
+ cible.add(grant.metric);
190
+ }
191
+ }
192
+ const communes = [...parQuantite].filter((m) => parDeblocage.has(m));
193
+ expect(communes).toStrictEqual([]);
194
+ });
195
+ });
196
+ //# sourceMappingURL=module-catalog.constants.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-catalog.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/module-catalog.constants.spec.ts"],"names":[],"mappings":";;AAAA,0FAIoD;AACpD,kFAAqE;AACrE,0EAYqC;AAWrC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,0CAAe,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,0CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAG3D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,0CAAe,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,0CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAG/D,MAAM,KAAK,GAAG,IAAA,qCAAU,EAAC,0CAAe,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,2CAAe,CAAC,YAAY,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,KAAK,MAAM,MAAM,IAAI,0CAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,IAAI,KAAK,4CAAiB,CAAC,QAAQ,EAAE,CAAC;gBAC/C,MAAM,CAAC,iDAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBAEN,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QAKtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,yCAAa,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,0CAAe,EAAE,CAAC;YACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAGlE,MAAM,CAAC,IAAA,sDAA2B,GAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QAGvE,MAAM,CAAC,IAAA,2DAAgC,GAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,IAAA,yCAAc,GAAE,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACpE,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,OAAO,GAAG,IAAA,qCAAU,EAAC,0CAAe,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAA,uCAAY,EAAC,OAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9C,EAAE,MAAM,EAAE,yCAAa,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC1D,EAAE,MAAM,EAAE,yCAAa,CAAC,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE;SACrE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAI1D,MAAM,SAAS,GAAG,IAAA,qCAAU,EAAC,0CAAe,CAAC,wBAAwB,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,CAAC,IAAA,uCAAY,EAAC,SAAU,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAChD,EAAE,MAAM,EAAE,yCAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE;SACvD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAGtD,MAAM,IAAI,GAAG,IAAA,qCAAU,EAAC,0CAAe,CAAC,kBAAkB,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAA,uCAAY,EAAC,IAAK,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC3C,EAAE,MAAM,EAAE,yCAAa,CAAC,0BAA0B,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE;SACnE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAGjE,MAAM,OAAO,GAAG,IAAA,qCAAU,EAAC,0CAAe,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAA,uCAAY,EAAC,OAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,IAAA,uCAAY,EAAC,OAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,OAAO,GAAG,IAAA,qCAAU,EAAC,0CAAe,CAAC,OAAO,CAAC,CAAC;QAIpD,MAAM,CAAC,IAAA,uCAAY,EAAC,OAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;YAChD,EAAE,MAAM,EAAE,yCAAa,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAAC,EAAE;YACzD,EAAE,MAAM,EAAE,yCAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE;SACrD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,IAAA,qCAAU,EAAC,0CAAe,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAG3D,MAAM,CAAC,IAAA,qCAAU,EAAC,yBAA4C,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAClE,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAIjF,MAAM,CAAC,IAAA,0CAAe,EAAC,8CAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAA,0CAAe,EAAC,8CAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,CAAC,IAAA,0CAAe,EAAC,8CAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,OAAO,GAAG;YACd,8CAAkB,CAAC,MAAM;YACzB,8CAAkB,CAAC,eAAe;YAClC,8CAAkB,CAAC,iBAAiB;SACrC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,8CAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC/E,MAAM,KAAK,GAAG,CACZ,QAAyB,EACzB,QAAgB,EAChB,SAA6B,8CAAkB,CAAC,MAAM,EACrC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvD,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAG9D,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC9D,KAAK,CAAC,0CAAe,CAAC,OAAO,EAAE,GAAG,CAAC;SACpC,CAAC,CACH,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAIhF,MAAM,OAAO,GAAG;YACd,KAAK,CAAC,0CAAe,CAAC,OAAO,EAAE,GAAG,CAAC;YACnC,KAAK,CAAC,0CAAe,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B,KAAK,CAAC,0CAAe,CAAC,IAAI,EAAE,CAAC,CAAC;SAC/B,CAAC;QACF,MAAM,CAAC,IAAA,mDAAwB,EAAC,yCAAa,CAAC,kBAAkB,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAC5F,IAAI,CACL,CAAC;QACF,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,uBAAuB,EAAE,CAAC,EAAE,OAAO,CAAC,CAC5E,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,0BAA0B,EAAE,CAAC,EAAE,OAAO,CAAC,CAC/E,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QAInF,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,kBAAkB,EAAE,CAAC,EAAE;YAC5D,KAAK,CAAC,0CAAe,CAAC,OAAO,EAAE,GAAG,CAAC;YACnC,KAAK,CAAC,0CAAe,CAAC,OAAO,EAAE,GAAG,CAAC;SACpC,CAAC,CACH,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAGlE,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,cAAc,EAAE,EAAE,EAAE;YACzD,KAAK,CAAC,0CAAe,CAAC,wBAAwB,EAAE,CAAC,CAAC;SACnD,CAAC,CACH,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAGlE,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,cAAc,EAAE,GAAG,EAAE;YAC1D,KAAK,CAAC,0CAAe,CAAC,wBAAwB,EAAE,CAAC,CAAC;SACnD,CAAC,CACH,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE;YAC7D,KAAK,CAAC,0CAAe,CAAC,OAAO,EAAE,GAAG,CAAC;SACpC,CAAC,CACH,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAGzE,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,0BAA0B,EAAE,CAAC,EAAE;YACpE,KAAK,CAAC,0CAAe,CAAC,kBAAkB,EAAE,CAAC,CAAC;SAC7C,CAAC,CACH,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAIzE,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,cAAc,EAAE,EAAE,EAAE;YACzD,KAAK,CAAC,0CAAe,CAAC,wBAAwB,EAAE,CAAC,EAAE,8CAAkB,CAAC,iBAAiB,CAAC;SACzF,CAAC,CACH,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QAItF,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC9D,KAAK,CAAC,0CAAe,CAAC,OAAO,EAAE,GAAG,EAAE,8CAAkB,CAAC,eAAe,CAAC;SACxE,CAAC,CACH,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAG7E,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC9D,KAAK,CAAC,gBAAmC,EAAE,CAAC,CAAC;SAC9C,CAAC,CACH,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACnE,KAAK,CAAC,0CAAe,CAAC,OAAO,EAAE,GAAG,CAAC;SACpC,CAAC,CACH,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAGlF,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,0CAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,IAAA,mDAAwB,EAAC,yCAAa,CAAC,iBAAiB,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAA,mDAAwB,EAAC,yCAAa,CAAC,iBAAiB,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAA,mDAAwB,EAAC,yCAAa,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAC7F,EAAE,CACH,CAAC;QACF,MAAM,CACJ,IAAA,mDAAwB,EAAC,yCAAa,CAAC,iCAAiC,EAAE,CAAC,EAAE,MAAM,CAAC,CACrF,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;IACnE,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QAInF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiB,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAiB,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,0CAAe,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,4CAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;YACtF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const organization_billing_enum_1 = require("../../types/enum/organization-billing.enum");
4
+ const billing_catalog_constants_1 = require("../billing-catalog.constants");
5
+ const pricing_utils_1 = require("../../utils/pricing.utils");
6
+ const annonceEnNanocents = (metric) => {
7
+ const [entry] = (0, billing_catalog_constants_1.buildCatalogOveragePricing)([{ service: organization_billing_enum_1.BillingService.ABYSS_PLATFORM, metric }]);
8
+ return entry ? entry.nanocentsPerUnit : null;
9
+ };
10
+ describe('le tarif de dépassement annoncé est celui qui est facturé', () => {
11
+ const metriques = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE].filter((m) => (0, pricing_utils_1.resolveOverageNanocentsPerUnit)(m) !== null);
12
+ it('couvre bien les métriques tarifées et éligibles', () => {
13
+ expect(metriques.length).toBeGreaterThan(0);
14
+ });
15
+ it.each(metriques)('%s : annoncé === facturé', (metric) => {
16
+ const annonce = annonceEnNanocents(metric);
17
+ const facture = (0, pricing_utils_1.resolveOverageNanocentsPerUnit)(metric);
18
+ expect(annonce).not.toBeNull();
19
+ expect(facture).not.toBeNull();
20
+ expect(annonce).toBe(facture);
21
+ });
22
+ });
23
+ //# sourceMappingURL=overage-pricing-single-source.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overage-pricing-single-source.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/overage-pricing-single-source.spec.ts"],"names":[],"mappings":";;AA4BA,0FAA2F;AAC3F,4EAGsC;AACtC,6DAA2E;AAQ3E,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAClE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,sDAA0B,EAAC,CAAC,EAAE,OAAO,EAAE,0CAAc,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACjG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC,CAAC;AAEF,QAAQ,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACzE,MAAM,SAAS,GAAG,CAAC,GAAG,sDAA0B,CAAC,CAAC,MAAM,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,8CAA8B,EAAC,CAAC,CAAC,KAAK,IAAI,CAClD,CAAC;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAA,8CAA8B,EAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("../../types");
4
+ const password_policy_constants_1 = require("../password-policy.constants");
5
+ describe('PASSWORD_POLICY', () => {
6
+ it('exposes the account floor and the legacy login floor separately', () => {
7
+ expect(password_policy_constants_1.PASSWORD_POLICY.minLength).toBe(10);
8
+ expect(password_policy_constants_1.PASSWORD_POLICY.maxLength).toBe(64);
9
+ expect(password_policy_constants_1.PASSWORD_POLICY.legacyLoginMinLength).toBe(6);
10
+ expect(password_policy_constants_1.PASSWORD_POLICY.legacyLoginMinLength).toBeLessThan(password_policy_constants_1.PASSWORD_POLICY.minLength);
11
+ });
12
+ });
13
+ describe('validateAccountPassword', () => {
14
+ it('accepts a passphrase at the floor', () => {
15
+ expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.minLength))).toBeNull();
16
+ });
17
+ it('rejects one character below the floor', () => {
18
+ expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.minLength - 1))).toBe(types_1.PasswordPolicyViolation.tooShort);
19
+ });
20
+ it('rejects one character above the ceiling', () => {
21
+ expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.maxLength + 1))).toBe(types_1.PasswordPolicyViolation.tooLong);
22
+ });
23
+ it('accepts exactly the ceiling', () => {
24
+ expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.maxLength))).toBeNull();
25
+ });
26
+ it('rejects a long-but-common password', () => {
27
+ expect((0, password_policy_constants_1.validateAccountPassword)('motdepasse123')).toBe(types_1.PasswordPolicyViolation.tooCommon);
28
+ });
29
+ it('imposes no composition rule — a plain long passphrase passes', () => {
30
+ expect((0, password_policy_constants_1.validateAccountPassword)('correcte agrafe batterie cheval')).toBeNull();
31
+ });
32
+ it('treats an empty password as too short, never as valid', () => {
33
+ expect((0, password_policy_constants_1.validateAccountPassword)('')).toBe(types_1.PasswordPolicyViolation.tooShort);
34
+ });
35
+ });
36
+ describe('isCommonPassword', () => {
37
+ it('matches regardless of case and surrounding whitespace', () => {
38
+ expect((0, password_policy_constants_1.isCommonPassword)(' MotDePasse123 ')).toBe(true);
39
+ });
40
+ it('does not match a passphrase that merely contains a common word', () => {
41
+ expect((0, password_policy_constants_1.isCommonPassword)('mon azerty préféré est bleu')).toBe(false);
42
+ });
43
+ });
44
+ describe('getPasswordStrength', () => {
45
+ it('scores a short password as very weak', () => {
46
+ expect((0, password_policy_constants_1.getPasswordStrength)('abc')).toBe(types_1.PasswordStrength.veryWeak);
47
+ });
48
+ it('scores a common password as very weak whatever its length', () => {
49
+ expect((0, password_policy_constants_1.getPasswordStrength)('motdepasse123')).toBe(types_1.PasswordStrength.veryWeak);
50
+ });
51
+ it('scores a long varied passphrase as excellent', () => {
52
+ expect((0, password_policy_constants_1.getPasswordStrength)('Yacht-Brumeux-42-Septembre')).toBe(types_1.PasswordStrength.excellent);
53
+ });
54
+ it('rewards length over composition', () => {
55
+ const longPlain = (0, password_policy_constants_1.getPasswordStrength)('agrafeuse bleue du lundi matin');
56
+ const shortComplex = (0, password_policy_constants_1.getPasswordStrength)('A1!bC2@d');
57
+ expect(longPlain).toBeGreaterThan(shortComplex);
58
+ });
59
+ it('never returns a value outside the enum range', () => {
60
+ for (const candidate of ['', 'a', 'a'.repeat(200), 'Xy9!'.repeat(30)]) {
61
+ const score = (0, password_policy_constants_1.getPasswordStrength)(candidate);
62
+ expect(score).toBeGreaterThanOrEqual(types_1.PasswordStrength.veryWeak);
63
+ expect(score).toBeLessThanOrEqual(types_1.PasswordStrength.excellent);
64
+ }
65
+ });
66
+ });
67
+ //# sourceMappingURL=password-policy.constants.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-policy.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/password-policy.constants.spec.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -37,6 +37,7 @@ import * as crashReportPublicApi from './api/crash-report.public.api';
37
37
  import * as organizationAdminApi from './api/organization.admin.api';
38
38
  import * as organizationApi from './api/organization.api';
39
39
  import * as organizationMemberApi from './api/organization-member.api';
40
+ import * as organizationExternalIdentityApi from './api/organization-external-identity.api';
40
41
  import * as organizationMemberAdminApi from './api/organization-member.admin.api';
41
42
  import * as organizationBillingApi from './api/organization-billing.api';
42
43
  import * as billingPlanApi from './api/billing-plan.api';
@@ -446,6 +447,13 @@ type AbyssCoreSDK = {
446
447
  activateService: typeof organizationAdminApi.activateServiceOrganizationAdmin;
447
448
  };
448
449
  };
450
+ organizationExternalIdentity: {
451
+ getConnectUrl: typeof organizationExternalIdentityApi.getConnectUrlOrganizationExternalIdentity;
452
+ bind: typeof organizationExternalIdentityApi.bindOrganizationExternalIdentity;
453
+ listPending: typeof organizationExternalIdentityApi.listPendingOrganizationExternalIdentity;
454
+ nameCandidate: typeof organizationExternalIdentityApi.nameCandidateOrganizationExternalIdentity;
455
+ dismissCandidate: typeof organizationExternalIdentityApi.dismissCandidateOrganizationExternalIdentity;
456
+ };
449
457
  organizationMember: {
450
458
  list: typeof organizationMemberApi.listOrganizationMembers;
451
459
  update: typeof organizationMemberApi.updateOrganizationMember;
@@ -456,6 +464,7 @@ type AbyssCoreSDK = {
456
464
  resolvePermissions: typeof organizationMemberAdminApi.resolvePermissionsOrganizationMemberAdmin;
457
465
  resolveOrgPermissions: typeof organizationMemberAdminApi.resolveOrgPermissionsOrganizationMemberAdmin;
458
466
  listUserIdsByPermission: typeof organizationMemberAdminApi.listUserIdsByPermissionOrganizationMemberAdmin;
467
+ listMembers: typeof organizationMemberAdminApi.listMembersOrganizationMemberAdmin;
459
468
  };
460
469
  };
461
470
  config: {
@@ -532,9 +541,14 @@ type AbyssCoreSDK = {
532
541
  list: typeof billingAccountAdminApi.listAdminBillingAccounts;
533
542
  get: typeof billingAccountAdminApi.getAdminBillingAccount;
534
543
  getQuotaState: typeof billingAccountAdminApi.getAdminBillingQuotaState;
544
+ listModules: typeof billingAccountAdminApi.listAdminBillingModules;
545
+ listSnapshots: typeof billingAccountAdminApi.listAdminBillingSnapshots;
546
+ setModuleQuantity: typeof billingAccountAdminApi.setAdminBillingModuleQuantity;
535
547
  editCustomPlan: typeof billingAccountAdminApi.editAdminBillingCustomPlan;
536
548
  update: typeof billingAccountAdminApi.updateAdminBillingAccount;
537
549
  setQuotaCeiling: typeof billingAccountAdminApi.setAdminBillingQuotaCeiling;
550
+ setOverageRate: typeof billingAccountAdminApi.setAdminBillingOverageRate;
551
+ setAlertThresholds: typeof billingAccountAdminApi.setAdminBillingAlertThresholds;
538
552
  overrideQuota: typeof billingAccountAdminApi.overrideAdminBillingQuota;
539
553
  removeQuotaOverride: typeof billingAccountAdminApi.removeAdminBillingQuotaOverride;
540
554
  adjustCredit: typeof billingAccountAdminApi.adjustAdminBillingCredit;
@@ -600,6 +614,10 @@ type AbyssCoreSDK = {
600
614
  addQuotaCap: typeof organizationBillingApi.addOrgQuotaCap;
601
615
  removeQuotaCap: typeof organizationBillingApi.removeOrgQuotaCap;
602
616
  getStorageBreakdown: typeof organizationBillingApi.getOrgStorageBreakdown;
617
+ getQuotaOffer: typeof organizationBillingApi.getOrgQuotaOffer;
618
+ listModules: typeof organizationBillingApi.listOrgBillingModules;
619
+ setModuleQuantity: typeof organizationBillingApi.setOrgBillingModuleQuantity;
620
+ getBillingEstimate: typeof organizationBillingApi.getOrgBillingEstimate;
603
621
  getDailySnapshot: typeof organizationBillingApi.getOrgDailySnapshot;
604
622
  listDailySnapshots: typeof organizationBillingApi.listOrgDailySnapshots;
605
623
  cancelScheduledDowngrade: typeof organizationBillingApi.cancelOrganizationScheduledDowngrade;
@@ -639,6 +657,10 @@ type AbyssCoreSDK = {
639
657
  addQuotaCap: typeof userBillingApi.addUserQuotaCap;
640
658
  removeQuotaCap: typeof userBillingApi.removeUserQuotaCap;
641
659
  getStorageBreakdown: typeof userBillingApi.getUserStorageBreakdown;
660
+ getQuotaOffer: typeof userBillingApi.getUserQuotaOffer;
661
+ listModules: typeof userBillingApi.listUserBillingModules;
662
+ setModuleQuantity: typeof userBillingApi.setUserBillingModuleQuantity;
663
+ getBillingEstimate: typeof userBillingApi.getUserBillingEstimate;
642
664
  getDailySnapshot: typeof userBillingApi.getUserDailySnapshot;
643
665
  listDailySnapshots: typeof userBillingApi.listUserDailySnapshots;
644
666
  getFamilyBonus: typeof userBillingApi.getFamilyBonusUser;