@abyss-project/main 2.3.0 → 3.0.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 (81) hide show
  1. package/dist/types/enum/email-type.enum.d.ts +1 -0
  2. package/dist/types/enum/email-type.enum.js +1 -0
  3. package/dist/types/enum/email-type.enum.js.map +1 -1
  4. package/dist/types/enum/user-notification-category.enum.js +1 -0
  5. package/dist/types/enum/user-notification-category.enum.js.map +1 -1
  6. package/dist/types/enum/user-notification-content-type.enum.d.ts +14 -1
  7. package/dist/types/enum/user-notification-content-type.enum.js +2 -1
  8. package/dist/types/enum/user-notification-content-type.enum.js.map +1 -1
  9. package/package.json +15 -11
  10. package/dist/constants/tests/billing-catalog.constants.spec.d.ts +0 -1
  11. package/dist/constants/tests/billing-catalog.constants.spec.js +0 -334
  12. package/dist/constants/tests/billing-catalog.constants.spec.js.map +0 -1
  13. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.d.ts +0 -1
  14. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js +0 -101
  15. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js.map +0 -1
  16. package/dist/constants/tests/metric-price-scale.constants.spec.d.ts +0 -1
  17. package/dist/constants/tests/metric-price-scale.constants.spec.js +0 -83
  18. package/dist/constants/tests/metric-price-scale.constants.spec.js.map +0 -1
  19. package/dist/constants/tests/module-calibration.constants.spec.d.ts +0 -1
  20. package/dist/constants/tests/module-calibration.constants.spec.js +0 -75
  21. package/dist/constants/tests/module-calibration.constants.spec.js.map +0 -1
  22. package/dist/constants/tests/module-catalog.constants.spec.d.ts +0 -1
  23. package/dist/constants/tests/module-catalog.constants.spec.js +0 -196
  24. package/dist/constants/tests/module-catalog.constants.spec.js.map +0 -1
  25. package/dist/constants/tests/overage-pricing-single-source.spec.d.ts +0 -1
  26. package/dist/constants/tests/overage-pricing-single-source.spec.js +0 -23
  27. package/dist/constants/tests/overage-pricing-single-source.spec.js.map +0 -1
  28. package/dist/constants/tests/password-policy.constants.spec.d.ts +0 -1
  29. package/dist/constants/tests/password-policy.constants.spec.js +0 -67
  30. package/dist/constants/tests/password-policy.constants.spec.js.map +0 -1
  31. package/dist/server/tests/after-commit-emit.util.spec.d.ts +0 -1
  32. package/dist/server/tests/after-commit-emit.util.spec.js +0 -99
  33. package/dist/server/tests/after-commit-emit.util.spec.js.map +0 -1
  34. package/dist/server/tests/encrypt-secret.util.spec.d.ts +0 -6
  35. package/dist/server/tests/encrypt-secret.util.spec.js +0 -148
  36. package/dist/server/tests/encrypt-secret.util.spec.js.map +0 -1
  37. package/dist/types/enum/tests/billing-addon-status.enum.spec.d.ts +0 -1
  38. package/dist/types/enum/tests/billing-addon-status.enum.spec.js +0 -66
  39. package/dist/types/enum/tests/billing-addon-status.enum.spec.js.map +0 -1
  40. package/dist/types/enum/tests/report-notification-type.enum.spec.d.ts +0 -1
  41. package/dist/types/enum/tests/report-notification-type.enum.spec.js +0 -18
  42. package/dist/types/enum/tests/report-notification-type.enum.spec.js.map +0 -1
  43. package/dist/types/enum/tests/user-notification-content-type.enum.spec.d.ts +0 -1
  44. package/dist/types/enum/tests/user-notification-content-type.enum.spec.js +0 -13
  45. package/dist/types/enum/tests/user-notification-content-type.enum.spec.js.map +0 -1
  46. package/dist/utils/tests/billing-deep-link.utils.spec.d.ts +0 -1
  47. package/dist/utils/tests/billing-deep-link.utils.spec.js +0 -91
  48. package/dist/utils/tests/billing-deep-link.utils.spec.js.map +0 -1
  49. package/dist/utils/tests/billing.utils.spec.d.ts +0 -1
  50. package/dist/utils/tests/billing.utils.spec.js +0 -81
  51. package/dist/utils/tests/billing.utils.spec.js.map +0 -1
  52. package/dist/utils/tests/invoice-amounts.utils.spec.d.ts +0 -1
  53. package/dist/utils/tests/invoice-amounts.utils.spec.js +0 -97
  54. package/dist/utils/tests/invoice-amounts.utils.spec.js.map +0 -1
  55. package/dist/utils/tests/module-lot-price.utils.spec.d.ts +0 -1
  56. package/dist/utils/tests/module-lot-price.utils.spec.js +0 -56
  57. package/dist/utils/tests/module-lot-price.utils.spec.js.map +0 -1
  58. package/dist/utils/tests/module-price.utils.spec.d.ts +0 -1
  59. package/dist/utils/tests/module-price.utils.spec.js +0 -79
  60. package/dist/utils/tests/module-price.utils.spec.js.map +0 -1
  61. package/dist/utils/tests/overage-negotiated-rate.utils.spec.d.ts +0 -1
  62. package/dist/utils/tests/overage-negotiated-rate.utils.spec.js +0 -59
  63. package/dist/utils/tests/overage-negotiated-rate.utils.spec.js.map +0 -1
  64. package/dist/utils/tests/plan-capacity.utils.spec.d.ts +0 -1
  65. package/dist/utils/tests/plan-capacity.utils.spec.js +0 -81
  66. package/dist/utils/tests/plan-capacity.utils.spec.js.map +0 -1
  67. package/dist/utils/tests/pricing.utils.spec.d.ts +0 -1
  68. package/dist/utils/tests/pricing.utils.spec.js +0 -219
  69. package/dist/utils/tests/pricing.utils.spec.js.map +0 -1
  70. package/dist/utils/tests/quota-ceiling.utils.spec.d.ts +0 -1
  71. package/dist/utils/tests/quota-ceiling.utils.spec.js +0 -119
  72. package/dist/utils/tests/quota-ceiling.utils.spec.js.map +0 -1
  73. package/dist/utils/tests/quote-overage-rate.spec.d.ts +0 -1
  74. package/dist/utils/tests/quote-overage-rate.spec.js +0 -39
  75. package/dist/utils/tests/quote-overage-rate.spec.js.map +0 -1
  76. package/dist/utils/tests/resolve-user.utils.spec.d.ts +0 -1
  77. package/dist/utils/tests/resolve-user.utils.spec.js +0 -98
  78. package/dist/utils/tests/resolve-user.utils.spec.js.map +0 -1
  79. package/dist/utils/tests/shifted-tiers.utils.spec.d.ts +0 -1
  80. package/dist/utils/tests/shifted-tiers.utils.spec.js +0 -176
  81. package/dist/utils/tests/shifted-tiers.utils.spec.js.map +0 -1
@@ -1 +0,0 @@
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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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const after_commit_emit_util_1 = require("../after-commit-emit.util");
4
- class FakeTransaction {
5
- constructor(commitFails = false) {
6
- this.commitFails = commitFails;
7
- this.hooks = [];
8
- }
9
- afterCommit(callback) {
10
- this.hooks.push(callback);
11
- }
12
- async commit() {
13
- try {
14
- if (this.commitFails) {
15
- throw new Error('COMMIT refusé par la base');
16
- }
17
- }
18
- finally {
19
- for (const hook of this.hooks) {
20
- hook();
21
- }
22
- }
23
- }
24
- }
25
- describe('afterCommitEmit', () => {
26
- it('exécute l’effet quand le commit réussit', async () => {
27
- const transaction = new FakeTransaction();
28
- const effect = jest.fn();
29
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, effect);
30
- expect(effect).not.toHaveBeenCalled();
31
- await transaction.commit();
32
- expect(effect).toHaveBeenCalledTimes(1);
33
- });
34
- it('n’exécute RIEN quand le COMMIT échoue', async () => {
35
- const transaction = new FakeTransaction(true);
36
- const effect = jest.fn();
37
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, effect);
38
- await expect(transaction.commit()).rejects.toThrow('COMMIT refusé par la base');
39
- expect(effect).not.toHaveBeenCalled();
40
- });
41
- it('n’exécute rien tant que le commit n’a pas eu lieu', async () => {
42
- const transaction = new FakeTransaction();
43
- const effect = jest.fn();
44
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, effect);
45
- expect(effect).not.toHaveBeenCalled();
46
- });
47
- it('exécute tous les effets d’une même transaction, dans l’ordre', async () => {
48
- const transaction = new FakeTransaction();
49
- const order = [];
50
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => order.push(1));
51
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => order.push(2));
52
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => order.push(3));
53
- await transaction.commit();
54
- expect(order).toEqual([1, 2, 3]);
55
- });
56
- it('jette TOUS les effets quand le commit échoue, pas seulement le premier', async () => {
57
- const transaction = new FakeTransaction(true);
58
- const first = jest.fn();
59
- const second = jest.fn();
60
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, first);
61
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, second);
62
- await expect(transaction.commit()).rejects.toThrow();
63
- expect(first).not.toHaveBeenCalled();
64
- expect(second).not.toHaveBeenCalled();
65
- });
66
- it('exécute immédiatement quand il n’y a pas de transaction', () => {
67
- const effect = jest.fn();
68
- (0, after_commit_emit_util_1.afterCommitEmit)(null, effect);
69
- expect(effect).toHaveBeenCalledTimes(1);
70
- });
71
- it('signale une erreur de l’effet sans la propager', async () => {
72
- const transaction = new FakeTransaction();
73
- const onError = jest.fn();
74
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => {
75
- throw new Error('émission ratée');
76
- }, onError);
77
- await expect(transaction.commit()).resolves.toBeUndefined();
78
- expect(onError).toHaveBeenCalledTimes(1);
79
- });
80
- it('signale un rejet asynchrone de l’effet sans le propager', async () => {
81
- const transaction = new FakeTransaction();
82
- const onError = jest.fn();
83
- (0, after_commit_emit_util_1.afterCommitEmit)(transaction, async () => Promise.reject(new Error('réseau')), onError);
84
- await transaction.commit();
85
- await new Promise((resolve) => setImmediate(resolve));
86
- expect(onError).toHaveBeenCalledTimes(1);
87
- });
88
- it('reste compatible avec un objet sans `commit` observable', async () => {
89
- const hooks = [];
90
- const partial = {
91
- afterCommit: (callback) => hooks.push(callback),
92
- };
93
- const effect = jest.fn();
94
- (0, after_commit_emit_util_1.afterCommitEmit)(partial, effect);
95
- hooks.forEach((hook) => hook());
96
- expect(effect).toHaveBeenCalledTimes(1);
97
- });
98
- });
99
- //# sourceMappingURL=after-commit-emit.util.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"after-commit-emit.util.spec.js","sourceRoot":"","sources":["../../../src/server/tests/after-commit-emit.util.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- declare const VALID_KEY = "XUY5cvb7nmC/1mJPYaxLXR3K14anIKaN3AitJx3Ux/s=";
2
- type EncryptModule = typeof import('../encrypt-secret.util');
3
- declare const loadModule: (key: string | undefined) => EncryptModule;
4
- declare const tamperCiphertext: (payload: string) => string;
5
- declare const tamperTag: (payload: string) => string;
6
- declare const callWithKey: (key: string | undefined, fn: (mod: EncryptModule) => void) => void;
@@ -1,148 +0,0 @@
1
- "use strict";
2
- const VALID_KEY = 'XUY5cvb7nmC/1mJPYaxLXR3K14anIKaN3AitJx3Ux/s=';
3
- const loadModule = (key) => {
4
- const previous = process.env.ABYSS_SECRET_ENCRYPTION_KEY;
5
- if (key === undefined) {
6
- delete process.env.ABYSS_SECRET_ENCRYPTION_KEY;
7
- }
8
- else {
9
- process.env.ABYSS_SECRET_ENCRYPTION_KEY = key;
10
- }
11
- let mod;
12
- try {
13
- jest.isolateModules(() => {
14
- mod = require('../encrypt-secret.util');
15
- });
16
- }
17
- finally {
18
- if (previous === undefined) {
19
- delete process.env.ABYSS_SECRET_ENCRYPTION_KEY;
20
- }
21
- else {
22
- process.env.ABYSS_SECRET_ENCRYPTION_KEY = previous;
23
- }
24
- }
25
- if (!mod) {
26
- throw new Error('module failed to load');
27
- }
28
- return mod;
29
- };
30
- const tamperCiphertext = (payload) => {
31
- const [version, body] = payload.split(':');
32
- const [iv, tag, ct] = body.split('.');
33
- const bytes = Buffer.from(ct, 'base64');
34
- bytes[0] = bytes[0] ^ 0xff;
35
- return `${version}:${iv}.${tag}.${bytes.toString('base64')}`;
36
- };
37
- const tamperTag = (payload) => {
38
- const [version, body] = payload.split(':');
39
- const [iv, tag, ct] = body.split('.');
40
- const bytes = Buffer.from(tag, 'base64');
41
- bytes[0] = bytes[0] ^ 0xff;
42
- return `${version}:${iv}.${bytes.toString('base64')}.${ct}`;
43
- };
44
- const callWithKey = (key, fn) => {
45
- const previous = process.env.ABYSS_SECRET_ENCRYPTION_KEY;
46
- if (key === undefined) {
47
- delete process.env.ABYSS_SECRET_ENCRYPTION_KEY;
48
- }
49
- else {
50
- process.env.ABYSS_SECRET_ENCRYPTION_KEY = key;
51
- }
52
- try {
53
- let mod;
54
- jest.isolateModules(() => {
55
- mod = require('../encrypt-secret.util');
56
- });
57
- if (!mod) {
58
- throw new Error('module failed to load');
59
- }
60
- fn(mod);
61
- }
62
- finally {
63
- if (previous === undefined) {
64
- delete process.env.ABYSS_SECRET_ENCRYPTION_KEY;
65
- }
66
- else {
67
- process.env.ABYSS_SECRET_ENCRYPTION_KEY = previous;
68
- }
69
- }
70
- };
71
- describe('encrypt-secret util — master key loading (lazy, boot-safe)', () => {
72
- it('does NOT throw at module load when the env key is missing', () => {
73
- expect(() => loadModule(undefined)).not.toThrow();
74
- });
75
- it('throws on first use when the env key is missing', () => {
76
- callWithKey(undefined, (mod) => {
77
- expect(() => mod.encryptSecret('x')).toThrow(/ABYSS_SECRET_ENCRYPTION_KEY is not set/);
78
- });
79
- });
80
- it('throws on first use when the env key does not decode to 32 bytes', () => {
81
- callWithKey(Buffer.from('short').toString('base64'), (mod) => {
82
- expect(() => mod.encryptSecret('x')).toThrow(/32 bytes/);
83
- });
84
- });
85
- it('encrypts when the env key decodes to exactly 32 bytes', () => {
86
- callWithKey(VALID_KEY, (mod) => {
87
- expect(() => mod.encryptSecret('x')).not.toThrow();
88
- });
89
- });
90
- });
91
- describe('encrypt-secret util — encrypt / decrypt', () => {
92
- it('round-trips a plaintext', () => {
93
- callWithKey(VALID_KEY, ({ encryptSecret, decryptSecret }) => {
94
- const plaintext = 'abyk_super-secret-value-123';
95
- expect(decryptSecret(encryptSecret(plaintext))).toBe(plaintext);
96
- });
97
- });
98
- it('produces a version-prefixed envelope', () => {
99
- callWithKey(VALID_KEY, ({ encryptSecret }) => {
100
- const payload = encryptSecret('hello');
101
- expect(payload.startsWith('v1:')).toBe(true);
102
- expect(payload.split(':')[1].split('.')).toHaveLength(3);
103
- });
104
- });
105
- it('yields a different ciphertext for the same plaintext (random IV)', () => {
106
- callWithKey(VALID_KEY, ({ encryptSecret }) => {
107
- expect(encryptSecret('same-input')).not.toBe(encryptSecret('same-input'));
108
- });
109
- });
110
- it('throws when the ciphertext is tampered', () => {
111
- callWithKey(VALID_KEY, ({ encryptSecret, decryptSecret }) => {
112
- const tampered = tamperCiphertext(encryptSecret('secret'));
113
- expect(() => decryptSecret(tampered)).toThrow();
114
- });
115
- });
116
- it('throws when the auth tag is tampered', () => {
117
- callWithKey(VALID_KEY, ({ encryptSecret, decryptSecret }) => {
118
- const tampered = tamperTag(encryptSecret('secret'));
119
- expect(() => decryptSecret(tampered)).toThrow();
120
- });
121
- });
122
- it('throws on an unknown version prefix', () => {
123
- callWithKey(VALID_KEY, ({ encryptSecret, decryptSecret }) => {
124
- const payload = encryptSecret('secret').replace(/^v1:/, 'v2:');
125
- expect(() => decryptSecret(payload)).toThrow(/Unsupported secret payload version/);
126
- });
127
- });
128
- it('throws on a malformed payload', () => {
129
- callWithKey(VALID_KEY, ({ decryptSecret }) => {
130
- expect(() => decryptSecret('v1:only-one-segment')).toThrow();
131
- });
132
- });
133
- });
134
- describe('encrypt-secret util — sha256Hex', () => {
135
- it('returns a deterministic 64-char hex digest', () => {
136
- callWithKey(VALID_KEY, ({ sha256Hex }) => {
137
- const a = sha256Hex('abyk_key');
138
- expect(a).toBe(sha256Hex('abyk_key'));
139
- expect(a).toMatch(/^[0-9a-f]{64}$/);
140
- });
141
- });
142
- it('differs for different inputs', () => {
143
- callWithKey(VALID_KEY, ({ sha256Hex }) => {
144
- expect(sha256Hex('a')).not.toBe(sha256Hex('b'));
145
- });
146
- });
147
- });
148
- //# sourceMappingURL=encrypt-secret.util.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encrypt-secret.util.spec.js","sourceRoot":"","sources":["../../../src/server/tests/encrypt-secret.util.spec.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const organization_billing_enum_1 = require("../organization-billing.enum");
4
- const TOUTES_LES_PAIRES = Object.values(organization_billing_enum_1.BillingAddonStatus).flatMap((from) => Object.values(organization_billing_enum_1.BillingAddonAction).map((action) => [from, action]));
5
- const PAIRES_LEGALES = [
6
- [
7
- organization_billing_enum_1.BillingAddonStatus.ACTIVE,
8
- organization_billing_enum_1.BillingAddonAction.SUSPEND_AS_INCLUDED,
9
- organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN,
10
- ],
11
- [
12
- organization_billing_enum_1.BillingAddonStatus.ACTIVE,
13
- organization_billing_enum_1.BillingAddonAction.SCHEDULE_REMOVAL,
14
- organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL,
15
- ],
16
- [
17
- organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN,
18
- organization_billing_enum_1.BillingAddonAction.RESUME_AS_UNCOVERED,
19
- organization_billing_enum_1.BillingAddonStatus.ACTIVE,
20
- ],
21
- [
22
- organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL,
23
- organization_billing_enum_1.BillingAddonAction.CANCEL_REMOVAL,
24
- organization_billing_enum_1.BillingAddonStatus.ACTIVE,
25
- ],
26
- ];
27
- const estLegale = (from, action) => PAIRES_LEGALES.some(([f, a]) => f === from && a === action);
28
- describe('BillingAddonStatus — les transitions autorisées', () => {
29
- it.each(PAIRES_LEGALES)('%s + %s → %s', (from, action, attendu) => {
30
- expect((0, organization_billing_enum_1.nextAddonStatus)(from, action)).toBe(attendu);
31
- });
32
- it('les quatre moves légaux sont les SEULS que la table porte', () => {
33
- const depuisLaTable = Object.entries(organization_billing_enum_1.VALID_ADDON_TRANSITIONS).flatMap(([from, moves]) => Object.entries(moves).map(([action, to]) => `${from}+${action}=${to}`));
34
- const tenusALaMain = PAIRES_LEGALES.map(([f, a, t]) => `${f}+${a}=${t}`);
35
- expect(depuisLaTable.sort()).toStrictEqual(tenusALaMain.sort());
36
- });
37
- });
38
- describe('BillingAddonStatus — les transitions refusées', () => {
39
- const interdites = TOUTES_LES_PAIRES.filter(([from, action]) => !estLegale(from, action));
40
- it('il y en a huit sur douze — la table refuse plus qu’elle n’autorise', () => {
41
- expect(TOUTES_LES_PAIRES).toHaveLength(12);
42
- expect(interdites).toHaveLength(8);
43
- });
44
- it.each(interdites)('%s + %s est refusé', (from, action) => {
45
- expect((0, organization_billing_enum_1.nextAddonStatus)(from, action)).toBeNull();
46
- });
47
- it('SUSPENDED_BY_PLAN ne peut PAS passer en retrait programmé', () => {
48
- expect((0, organization_billing_enum_1.nextAddonStatus)(organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN, organization_billing_enum_1.BillingAddonAction.SCHEDULE_REMOVAL)).toBeNull();
49
- });
50
- it('PENDING_REMOVAL ne peut PAS être suspendu — le refus le plus facile à croire inoffensif', () => {
51
- expect((0, organization_billing_enum_1.nextAddonStatus)(organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL, organization_billing_enum_1.BillingAddonAction.SUSPEND_AS_INCLUDED)).toBeNull();
52
- });
53
- it('aucun état ne boucle sur lui-même', () => {
54
- for (const [from, moves] of Object.entries(organization_billing_enum_1.VALID_ADDON_TRANSITIONS)) {
55
- for (const to of Object.values(moves)) {
56
- expect(to).not.toBe(from);
57
- }
58
- }
59
- });
60
- });
61
- describe('BillingAccountStatus — une seule valeur, et c’est voulu', () => {
62
- it('ne porte plus que ACTIVE', () => {
63
- expect(Object.values(organization_billing_enum_1.BillingAccountStatus)).toStrictEqual(['ACTIVE']);
64
- });
65
- });
66
- //# sourceMappingURL=billing-addon-status.enum.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"billing-addon-status.enum.spec.js","sourceRoot":"","sources":["../../../../src/types/enum/tests/billing-addon-status.enum.spec.ts"],"names":[],"mappings":";;AAAA,4EAMsC;AAetC,MAAM,iBAAiB,GAAoD,MAAM,CAAC,MAAM,CACtF,8CAAkB,CACnB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,MAAM,CAAC,MAAM,CAAC,8CAAkB,CAAC,CAAC,GAAG,CACnC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAA6C,CACvE,CACF,CAAC;AAGF,MAAM,cAAc,GAAwE;IAC1F;QACE,8CAAkB,CAAC,MAAM;QACzB,8CAAkB,CAAC,mBAAmB;QACtC,8CAAkB,CAAC,iBAAiB;KACrC;IACD;QACE,8CAAkB,CAAC,MAAM;QACzB,8CAAkB,CAAC,gBAAgB;QACnC,8CAAkB,CAAC,eAAe;KACnC;IACD;QACE,8CAAkB,CAAC,iBAAiB;QACpC,8CAAkB,CAAC,mBAAmB;QACtC,8CAAkB,CAAC,MAAM;KAC1B;IACD;QACE,8CAAkB,CAAC,eAAe;QAClC,8CAAkB,CAAC,cAAc;QACjC,8CAAkB,CAAC,MAAM;KAC1B;CACF,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAwB,EAAE,MAA0B,EAAW,EAAE,CAClF,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;AAE9D,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,CAAC,IAAA,2CAAe,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QAInE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,mDAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CACtF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC,CACvE,CAAC;QACF,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1F,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QACzD,MAAM,CAAC,IAAA,2CAAe,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QAInE,MAAM,CACJ,IAAA,2CAAe,EAAC,8CAAkB,CAAC,iBAAiB,EAAE,8CAAkB,CAAC,gBAAgB,CAAC,CAC3F,CAAC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;QAIjG,MAAM,CACJ,IAAA,2CAAe,EAAC,8CAAkB,CAAC,eAAe,EAAE,8CAAkB,CAAC,mBAAmB,CAAC,CAC5F,CAAC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAM3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mDAAuB,CAAC,EAAE,CAAC;YACpE,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACvE,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAKlC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gDAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const report_notification_type_enum_1 = require("../report-notification-type.enum");
4
- const report_notification_audience_mode_enum_1 = require("../report-notification-audience-mode.enum");
5
- describe('ReportNotificationType', () => {
6
- it('has the expected values', () => {
7
- expect(report_notification_type_enum_1.ReportNotificationType.DAILY_DIGEST).toBe('daily_digest');
8
- expect(report_notification_type_enum_1.ReportNotificationType.MONTHLY_DIGEST).toBe('monthly_digest');
9
- expect(report_notification_type_enum_1.ReportNotificationType.RETROSPECTIVE).toBe('retrospective');
10
- });
11
- });
12
- describe('ReportAudienceMode', () => {
13
- it('has the expected values', () => {
14
- expect(report_notification_audience_mode_enum_1.ReportAudienceMode.ALL_WITH_ACCESS).toBe('all_with_access');
15
- expect(report_notification_audience_mode_enum_1.ReportAudienceMode.MEMBER_LIST).toBe('member_list');
16
- });
17
- });
18
- //# sourceMappingURL=report-notification-type.enum.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report-notification-type.enum.spec.js","sourceRoot":"","sources":["../../../../src/types/enum/tests/report-notification-type.enum.spec.ts"],"names":[],"mappings":";;AAAA,oFAA0E;AAC1E,sGAA+E;AAE/E,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,sDAAsB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,MAAM,CAAC,sDAAsB,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrE,MAAM,CAAC,sDAAsB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,2DAAkB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,2DAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const user_notification_content_type_enum_1 = require("../user-notification-content-type.enum");
4
- const user_notification_category_enum_1 = require("../user-notification-category.enum");
5
- describe('BEAM_EXPIRING notification content type', () => {
6
- it('exists with the beam-expiring value', () => {
7
- expect(user_notification_content_type_enum_1.UserNotificationContentType.BEAM_EXPIRING).toBe('beam-expiring');
8
- });
9
- it('is classified OPERATIONAL (mirrors BEAM_DOWNLOADED)', () => {
10
- expect(user_notification_category_enum_1.USER_NOTIFICATION_CONTENT_TYPE_CATEGORY[user_notification_content_type_enum_1.UserNotificationContentType.BEAM_EXPIRING]).toBe(user_notification_category_enum_1.UserNotificationCategory.OPERATIONAL);
11
- });
12
- });
13
- //# sourceMappingURL=user-notification-content-type.enum.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-notification-content-type.enum.spec.js","sourceRoot":"","sources":["../../../../src/types/enum/tests/user-notification-content-type.enum.spec.ts"],"names":[],"mappings":";;AAAA,gGAAqF;AACrF,wFAG4C;AAE5C,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,iEAA2B,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,yEAAuC,CAAC,iEAA2B,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAC7F,0DAAwB,CAAC,WAAW,CACrC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,91 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const billing_deep_link_utils_1 = require("../billing-deep-link.utils");
4
- const BASE = 'https://app.abyss.dev';
5
- describe('le lien profond de facturation', () => {
6
- it('porte la métrique, l’action et le retour', () => {
7
- const url = new URL((0, billing_deep_link_utils_1.buildBillingDeepLink)({
8
- billingBaseUrl: BASE,
9
- service: 'ABYSS_STORAGE',
10
- metric: 'ACCOUNT_STORAGE_GB',
11
- action: billing_deep_link_utils_1.BillingDeepLinkAction.EXTENSION,
12
- returnUrl: 'https://storage.abyss.dev/files',
13
- }));
14
- expect(url.pathname).toStrictEqual('/dashboard/account/billing/consumption');
15
- expect(url.searchParams.get('metric')).toStrictEqual('ACCOUNT_STORAGE_GB');
16
- expect(url.searchParams.get('action')).toStrictEqual('extension');
17
- expect(url.searchParams.get('return')).toStrictEqual('https://storage.abyss.dev/files');
18
- });
19
- it('ENCODE une URL de retour qui porte ses propres paramètres', () => {
20
- const retour = 'https://storage.abyss.dev/files?folder=42&sort=name';
21
- const url = new URL((0, billing_deep_link_utils_1.buildBillingDeepLink)({
22
- billingBaseUrl: BASE,
23
- service: 'ABYSS_STORAGE',
24
- metric: 'FILES_COUNT',
25
- action: billing_deep_link_utils_1.BillingDeepLinkAction.CEILING,
26
- returnUrl: retour,
27
- }));
28
- expect(url.searchParams.get('return')).toStrictEqual(retour);
29
- expect(url.searchParams.get('folder')).toBeNull();
30
- expect(url.searchParams.get('sort')).toBeNull();
31
- expect(url.searchParams.get('action')).toStrictEqual('ceiling');
32
- });
33
- it('omet `return` quand il n’y a nulle part où revenir', () => {
34
- const url = new URL((0, billing_deep_link_utils_1.buildBillingDeepLink)({
35
- billingBaseUrl: BASE,
36
- service: 'ABYSS_STORAGE',
37
- metric: 'MEMBERS_COUNT',
38
- action: billing_deep_link_utils_1.BillingDeepLinkAction.THRESHOLD,
39
- }));
40
- expect(url.searchParams.has('return')).toBe(false);
41
- });
42
- it('NORMALISE la barre finale, quel que soit le satellite qui appelle', () => {
43
- const avec = (0, billing_deep_link_utils_1.buildBillingDeepLink)({
44
- billingBaseUrl: 'https://app.abyss.dev/',
45
- service: 'ABYSS_STORAGE',
46
- metric: 'M',
47
- action: billing_deep_link_utils_1.BillingDeepLinkAction.OVERAGE,
48
- });
49
- const sans = (0, billing_deep_link_utils_1.buildBillingDeepLink)({
50
- billingBaseUrl: 'https://app.abyss.dev',
51
- service: 'ABYSS_STORAGE',
52
- metric: 'M',
53
- action: billing_deep_link_utils_1.BillingDeepLinkAction.OVERAGE,
54
- });
55
- expect(avec).toStrictEqual(sans);
56
- expect(avec).not.toContain('//dashboard');
57
- });
58
- it('CHAQUE action du contrat produit un lien', () => {
59
- for (const action of Object.values(billing_deep_link_utils_1.BillingDeepLinkAction)) {
60
- const url = new URL((0, billing_deep_link_utils_1.buildBillingDeepLink)({
61
- billingBaseUrl: BASE,
62
- service: 'ABYSS_STORAGE',
63
- metric: 'M',
64
- action,
65
- }));
66
- expect(url.searchParams.get('action')).toStrictEqual(action);
67
- }
68
- });
69
- it('ROUTE VERS L’ORGANISATION quand le quota est celui d’une organisation', () => {
70
- const url = new URL((0, billing_deep_link_utils_1.buildBillingDeepLink)({
71
- billingBaseUrl: BASE,
72
- service: 'ABYSS_STORAGE',
73
- metric: 'MEMBERS_COUNT',
74
- action: billing_deep_link_utils_1.BillingDeepLinkAction.EXTENSION,
75
- organizationId: 'org-42',
76
- }));
77
- expect(url.pathname).toStrictEqual('/org/org-42/billing/consumption');
78
- expect(url.searchParams.get('metric')).toStrictEqual('MEMBERS_COUNT');
79
- });
80
- it('ENCODE l’identifiant d’organisation dans le chemin', () => {
81
- const url = new URL((0, billing_deep_link_utils_1.buildBillingDeepLink)({
82
- billingBaseUrl: BASE,
83
- service: 'ABYSS_STORAGE',
84
- metric: 'M',
85
- action: billing_deep_link_utils_1.BillingDeepLinkAction.CEILING,
86
- organizationId: 'a/b',
87
- }));
88
- expect(url.pathname).toStrictEqual('/org/a%2Fb/billing/consumption');
89
- });
90
- });
91
- //# sourceMappingURL=billing-deep-link.utils.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"billing-deep-link.utils.spec.js","sourceRoot":"","sources":["../../../src/utils/tests/billing-deep-link.utils.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const billing_utils_1 = require("../billing.utils");
4
- describe('parseQuotaUnit', () => {
5
- it('splits a "Nk" block unit into multiplier + base unit', () => {
6
- expect((0, billing_utils_1.parseQuotaUnit)('1k encryptions')).toEqual({
7
- multiplier: 1_000,
8
- baseUnit: 'encryptions',
9
- });
10
- expect((0, billing_utils_1.parseQuotaUnit)('10k clicks')).toEqual({
11
- multiplier: 10_000,
12
- baseUnit: 'clicks',
13
- });
14
- });
15
- it('parses space-grouped thousands (localized units)', () => {
16
- expect((0, billing_utils_1.parseQuotaUnit)('1 000 chiffrements')).toEqual({
17
- multiplier: 1_000,
18
- baseUnit: 'chiffrements',
19
- });
20
- expect((0, billing_utils_1.parseQuotaUnit)('10 000 clics')).toEqual({
21
- multiplier: 10_000,
22
- baseUnit: 'clics',
23
- });
24
- });
25
- it('parses a "million" prefix, with or without a leading factor', () => {
26
- expect((0, billing_utils_1.parseQuotaUnit)('million events')).toEqual({
27
- multiplier: 1_000_000,
28
- baseUnit: 'events',
29
- });
30
- expect((0, billing_utils_1.parseQuotaUnit)('2 million events')).toEqual({
31
- multiplier: 2_000_000,
32
- baseUnit: 'events',
33
- });
34
- });
35
- it('leaves a plain unit untouched (multiplier 1)', () => {
36
- expect((0, billing_utils_1.parseQuotaUnit)('GB')).toEqual({ multiplier: 1, baseUnit: 'GB' });
37
- expect((0, billing_utils_1.parseQuotaUnit)('submissions/day')).toEqual({
38
- multiplier: 1,
39
- baseUnit: 'submissions/day',
40
- });
41
- expect((0, billing_utils_1.parseQuotaUnit)('MB')).toEqual({ multiplier: 1, baseUnit: 'MB' });
42
- expect((0, billing_utils_1.parseQuotaUnit)('OCR pages')).toEqual({
43
- multiplier: 1,
44
- baseUnit: 'OCR pages',
45
- });
46
- });
47
- it('handles empty / nullish units', () => {
48
- expect((0, billing_utils_1.parseQuotaUnit)('')).toEqual({ multiplier: 1, baseUnit: '' });
49
- expect((0, billing_utils_1.parseQuotaUnit)(null)).toEqual({ multiplier: 1, baseUnit: '' });
50
- expect((0, billing_utils_1.parseQuotaUnit)(undefined)).toEqual({ multiplier: 1, baseUnit: '' });
51
- });
52
- });
53
- describe('resolveQuotaAmount', () => {
54
- it('scales a raw limit by the unit multiplier', () => {
55
- expect((0, billing_utils_1.resolveQuotaAmount)(100, '1k encryptions')).toEqual({
56
- amount: 100_000,
57
- baseUnit: 'encryptions',
58
- unlimited: false,
59
- });
60
- expect((0, billing_utils_1.resolveQuotaAmount)(5, '10k clicks')).toEqual({
61
- amount: 50_000,
62
- baseUnit: 'clicks',
63
- unlimited: false,
64
- });
65
- });
66
- it('passes plain-unit limits through unchanged', () => {
67
- expect((0, billing_utils_1.resolveQuotaAmount)(50, 'GB')).toEqual({
68
- amount: 50,
69
- baseUnit: 'GB',
70
- unlimited: false,
71
- });
72
- });
73
- it('preserves the -1 unlimited sentinel', () => {
74
- expect((0, billing_utils_1.resolveQuotaAmount)(-1, '1k encryptions')).toEqual({
75
- amount: -1,
76
- baseUnit: 'encryptions',
77
- unlimited: true,
78
- });
79
- });
80
- });
81
- //# sourceMappingURL=billing.utils.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"billing.utils.spec.js","sourceRoot":"","sources":["../../../src/utils/tests/billing.utils.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};