grm-shared-library 1.1.200 → 1.1.201
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/kafka/billing-topics.js +83 -0
- package/dist/cjs/kafka/billing-topics.js.map +1 -0
- package/dist/cjs/kafka/index.js +1 -0
- package/dist/cjs/kafka/index.js.map +1 -1
- package/dist/cjs/modules/partner/constants/partner-defaults.const.js +4 -0
- package/dist/cjs/modules/partner/constants/partner-defaults.const.js.map +1 -1
- package/dist/cjs/modules/partner/constants/partner-kafka.const.js +18 -1
- package/dist/cjs/modules/partner/constants/partner-kafka.const.js.map +1 -1
- package/dist/cjs/modules/partner/dtos/create-partner-integration.dto.js +34 -0
- package/dist/cjs/modules/partner/dtos/create-partner-integration.dto.js.map +1 -1
- package/dist/cjs/modules/partner/dtos/partner-member-profile-lookup.dto.js +52 -0
- package/dist/cjs/modules/partner/dtos/partner-member-profile-lookup.dto.js.map +1 -0
- package/dist/cjs/modules/partner/dtos/partner-member-profile.dto.js +91 -0
- package/dist/cjs/modules/partner/dtos/partner-member-profile.dto.js.map +1 -0
- package/dist/cjs/modules/partner/dtos/partner-membership-query.dto.js +75 -0
- package/dist/cjs/modules/partner/dtos/partner-membership-query.dto.js.map +1 -0
- package/dist/cjs/modules/partner/dtos/sync-partner-membership.dto.js +149 -0
- package/dist/cjs/modules/partner/dtos/sync-partner-membership.dto.js.map +1 -0
- package/dist/cjs/modules/partner/dtos/update-partner-membership.dto.js +38 -0
- package/dist/cjs/modules/partner/dtos/update-partner-membership.dto.js.map +1 -0
- package/dist/cjs/modules/partner/enums/partner-adapter-operation.enum.js +6 -0
- package/dist/cjs/modules/partner/enums/partner-adapter-operation.enum.js.map +1 -1
- package/dist/cjs/modules/partner/enums/partner-member-document-type.enum.js +17 -0
- package/dist/cjs/modules/partner/enums/partner-member-document-type.enum.js.map +1 -0
- package/dist/cjs/modules/partner/enums/partner-member-gender.enum.js +19 -0
- package/dist/cjs/modules/partner/enums/partner-member-gender.enum.js.map +1 -0
- package/dist/cjs/modules/partner/enums/partner-member-profile-field.enum.js +23 -0
- package/dist/cjs/modules/partner/enums/partner-member-profile-field.enum.js.map +1 -0
- package/dist/cjs/modules/partner/enums/partner-member-state.enum.js +49 -0
- package/dist/cjs/modules/partner/enums/partner-member-state.enum.js.map +1 -0
- package/dist/cjs/modules/partner/enums/partner-membership-package-scope.enum.js +24 -0
- package/dist/cjs/modules/partner/enums/partner-membership-package-scope.enum.js.map +1 -0
- package/dist/cjs/modules/partner/enums/partner-membership-status.enum.js +65 -0
- package/dist/cjs/modules/partner/enums/partner-membership-status.enum.js.map +1 -0
- package/dist/cjs/modules/partner/enums/partner-membership-subject-type.enum.js +18 -0
- package/dist/cjs/modules/partner/enums/partner-membership-subject-type.enum.js.map +1 -0
- package/dist/cjs/modules/partner/index.js +16 -0
- package/dist/cjs/modules/partner/index.js.map +1 -1
- package/dist/cjs/modules/partner/interfaces/partner-member-profile.js +3 -0
- package/dist/cjs/modules/partner/interfaces/partner-member-profile.js.map +1 -0
- package/dist/cjs/modules/partner/interfaces/partner-membership-descriptor.js +3 -0
- package/dist/cjs/modules/partner/interfaces/partner-membership-descriptor.js.map +1 -0
- package/dist/cjs/modules/partner/interfaces/partner-membership.js +3 -0
- package/dist/cjs/modules/partner/interfaces/partner-membership.js.map +1 -0
- package/dist/cjs/modules/partner/utils/partner-membership.util.js +291 -0
- package/dist/cjs/modules/partner/utils/partner-membership.util.js.map +1 -0
- package/dist/cjs/modules/partner/utils/partner-payload.util.js +84 -2
- package/dist/cjs/modules/partner/utils/partner-payload.util.js.map +1 -1
- package/dist/cjs/modules/permission/data/permissions.data.js +3 -1
- package/dist/cjs/modules/permission/data/permissions.data.js.map +1 -1
- package/dist/cjs/modules/permission/enums/permission-actions.enum.js +7 -0
- package/dist/cjs/modules/permission/enums/permission-actions.enum.js.map +1 -1
- package/dist/cjs/modules/role/data/roles.data.js +8 -0
- package/dist/cjs/modules/role/data/roles.data.js.map +1 -1
- package/dist/esm/kafka/billing-topics.js +80 -0
- package/dist/esm/kafka/billing-topics.js.map +1 -0
- package/dist/esm/kafka/index.js +1 -0
- package/dist/esm/kafka/index.js.map +1 -1
- package/dist/esm/modules/partner/constants/partner-defaults.const.js +4 -0
- package/dist/esm/modules/partner/constants/partner-defaults.const.js.map +1 -1
- package/dist/esm/modules/partner/constants/partner-kafka.const.js +17 -0
- package/dist/esm/modules/partner/constants/partner-kafka.const.js.map +1 -1
- package/dist/esm/modules/partner/dtos/create-partner-integration.dto.js +34 -0
- package/dist/esm/modules/partner/dtos/create-partner-integration.dto.js.map +1 -1
- package/dist/esm/modules/partner/dtos/partner-member-profile-lookup.dto.js +48 -0
- package/dist/esm/modules/partner/dtos/partner-member-profile-lookup.dto.js.map +1 -0
- package/dist/esm/modules/partner/dtos/partner-member-profile.dto.js +87 -0
- package/dist/esm/modules/partner/dtos/partner-member-profile.dto.js.map +1 -0
- package/dist/esm/modules/partner/dtos/partner-membership-query.dto.js +71 -0
- package/dist/esm/modules/partner/dtos/partner-membership-query.dto.js.map +1 -0
- package/dist/esm/modules/partner/dtos/sync-partner-membership.dto.js +144 -0
- package/dist/esm/modules/partner/dtos/sync-partner-membership.dto.js.map +1 -0
- package/dist/esm/modules/partner/dtos/update-partner-membership.dto.js +34 -0
- package/dist/esm/modules/partner/dtos/update-partner-membership.dto.js.map +1 -0
- package/dist/esm/modules/partner/enums/partner-adapter-operation.enum.js +6 -0
- package/dist/esm/modules/partner/enums/partner-adapter-operation.enum.js.map +1 -1
- package/dist/esm/modules/partner/enums/partner-member-document-type.enum.js +14 -0
- package/dist/esm/modules/partner/enums/partner-member-document-type.enum.js.map +1 -0
- package/dist/esm/modules/partner/enums/partner-member-gender.enum.js +16 -0
- package/dist/esm/modules/partner/enums/partner-member-gender.enum.js.map +1 -0
- package/dist/esm/modules/partner/enums/partner-member-profile-field.enum.js +20 -0
- package/dist/esm/modules/partner/enums/partner-member-profile-field.enum.js.map +1 -0
- package/dist/esm/modules/partner/enums/partner-member-state.enum.js +46 -0
- package/dist/esm/modules/partner/enums/partner-member-state.enum.js.map +1 -0
- package/dist/esm/modules/partner/enums/partner-membership-package-scope.enum.js +21 -0
- package/dist/esm/modules/partner/enums/partner-membership-package-scope.enum.js.map +1 -0
- package/dist/esm/modules/partner/enums/partner-membership-status.enum.js +62 -0
- package/dist/esm/modules/partner/enums/partner-membership-status.enum.js.map +1 -0
- package/dist/esm/modules/partner/enums/partner-membership-subject-type.enum.js +15 -0
- package/dist/esm/modules/partner/enums/partner-membership-subject-type.enum.js.map +1 -0
- package/dist/esm/modules/partner/index.js +16 -0
- package/dist/esm/modules/partner/index.js.map +1 -1
- package/dist/esm/modules/partner/interfaces/partner-member-profile.js +2 -0
- package/dist/esm/modules/partner/interfaces/partner-member-profile.js.map +1 -0
- package/dist/esm/modules/partner/interfaces/partner-membership-descriptor.js +2 -0
- package/dist/esm/modules/partner/interfaces/partner-membership-descriptor.js.map +1 -0
- package/dist/esm/modules/partner/interfaces/partner-membership.js +2 -0
- package/dist/esm/modules/partner/interfaces/partner-membership.js.map +1 -0
- package/dist/esm/modules/partner/utils/partner-membership.util.js +277 -0
- package/dist/esm/modules/partner/utils/partner-membership.util.js.map +1 -0
- package/dist/esm/modules/partner/utils/partner-payload.util.js +83 -1
- package/dist/esm/modules/partner/utils/partner-payload.util.js.map +1 -1
- package/dist/esm/modules/permission/data/permissions.data.js +3 -1
- package/dist/esm/modules/permission/data/permissions.data.js.map +1 -1
- package/dist/esm/modules/permission/enums/permission-actions.enum.js +7 -0
- package/dist/esm/modules/permission/enums/permission-actions.enum.js.map +1 -1
- package/dist/esm/modules/role/data/roles.data.js +8 -0
- package/dist/esm/modules/role/data/roles.data.js.map +1 -1
- package/dist/types/kafka/billing-topics.d.ts +77 -0
- package/dist/types/kafka/index.d.ts +1 -0
- package/dist/types/modules/partner/constants/partner-defaults.const.d.ts +4 -0
- package/dist/types/modules/partner/constants/partner-kafka.const.d.ts +17 -0
- package/dist/types/modules/partner/dtos/create-partner-integration.dto.d.ts +4 -0
- package/dist/types/modules/partner/dtos/partner-member-profile-lookup.dto.d.ts +45 -0
- package/dist/types/modules/partner/dtos/partner-member-profile.dto.d.ts +28 -0
- package/dist/types/modules/partner/dtos/partner-membership-query.dto.d.ts +19 -0
- package/dist/types/modules/partner/dtos/sync-partner-membership.dto.d.ts +114 -0
- package/dist/types/modules/partner/dtos/update-partner-membership.dto.d.ts +18 -0
- package/dist/types/modules/partner/enums/partner-adapter-operation.enum.d.ts +7 -1
- package/dist/types/modules/partner/enums/partner-member-document-type.enum.d.ts +12 -0
- package/dist/types/modules/partner/enums/partner-member-gender.enum.d.ts +14 -0
- package/dist/types/modules/partner/enums/partner-member-profile-field.enum.d.ts +18 -0
- package/dist/types/modules/partner/enums/partner-member-state.enum.d.ts +39 -0
- package/dist/types/modules/partner/enums/partner-membership-package-scope.enum.d.ts +19 -0
- package/dist/types/modules/partner/enums/partner-membership-status.enum.d.ts +53 -0
- package/dist/types/modules/partner/enums/partner-membership-subject-type.enum.d.ts +13 -0
- package/dist/types/modules/partner/index.d.ts +16 -0
- package/dist/types/modules/partner/interfaces/partner-integration.d.ts +22 -0
- package/dist/types/modules/partner/interfaces/partner-member-profile.d.ts +65 -0
- package/dist/types/modules/partner/interfaces/partner-membership-descriptor.d.ts +108 -0
- package/dist/types/modules/partner/interfaces/partner-membership.d.ts +149 -0
- package/dist/types/modules/partner/interfaces/partner-provider-descriptor.d.ts +16 -0
- package/dist/types/modules/partner/utils/partner-membership.util.d.ts +156 -0
- package/dist/types/modules/partner/utils/partner-payload.util.d.ts +27 -0
- package/dist/types/modules/permission/enums/permission-actions.enum.d.ts +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildMembershipSubjectReference = buildMembershipSubjectReference;
|
|
4
|
+
exports.findMissingMemberProfileFields = findMissingMemberProfileFields;
|
|
5
|
+
exports.findUnsatisfiedMemberProfileFields = findUnsatisfiedMemberProfileFields;
|
|
6
|
+
exports.membershipRequired = membershipRequired;
|
|
7
|
+
exports.isMemberProfileFieldPresent = isMemberProfileFieldPresent;
|
|
8
|
+
exports.isCalendarDate = isCalendarDate;
|
|
9
|
+
exports.toPartnerCalendarDate = toPartnerCalendarDate;
|
|
10
|
+
exports.resolveMemberSeatCount = resolveMemberSeatCount;
|
|
11
|
+
exports.buildMemberFullName = buildMemberFullName;
|
|
12
|
+
exports.maskMemberDocumentNumber = maskMemberDocumentNumber;
|
|
13
|
+
exports.isUsableMembership = isUsableMembership;
|
|
14
|
+
exports.isMembershipCoverActive = isMembershipCoverActive;
|
|
15
|
+
const partner_defaults_const_1 = require("../constants/partner-defaults.const");
|
|
16
|
+
const partner_member_profile_field_enum_1 = require("../enums/partner-member-profile-field.enum");
|
|
17
|
+
const partner_membership_status_enum_1 = require("../enums/partner-membership-status.enum");
|
|
18
|
+
const partner_membership_subject_type_enum_1 = require("../enums/partner-membership-subject-type.enum");
|
|
19
|
+
const partner_membership_package_scope_enum_1 = require("../enums/partner-membership-package-scope.enum");
|
|
20
|
+
/** `YYYY-MM-DD`, with a plausible month and day. Calendar validity is checked separately. */
|
|
21
|
+
const ISO_DATE_PATTERN = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
|
|
22
|
+
/**
|
|
23
|
+
* Clarion's stable handle for a membership subject.
|
|
24
|
+
*
|
|
25
|
+
* Keyed on the PERSON wherever there is one, not on the subscription that paid
|
|
26
|
+
* for them. A partner registers a human being: an employee covered by their
|
|
27
|
+
* company who also buys personal cover is one member with one member id, and
|
|
28
|
+
* keying on the billing relationship would register them twice - two member ids
|
|
29
|
+
* for one person, two seats consumed, double-billed at the partner, and an
|
|
30
|
+
* emergency quoting whichever of the two the database happened to return first.
|
|
31
|
+
*
|
|
32
|
+
* Only a corporate member never linked to a platform login falls back to the
|
|
33
|
+
* relationship key, because for them there is no person key to use.
|
|
34
|
+
*
|
|
35
|
+
* Prefixed by kind so the two spaces can never collide on a bare numeric id.
|
|
36
|
+
* This is what the unique index on (integrationId, subjectReference) relies on
|
|
37
|
+
* to stop one person acquiring two memberships when an activation event is
|
|
38
|
+
* redelivered.
|
|
39
|
+
*/
|
|
40
|
+
function buildMembershipSubjectReference(subject) {
|
|
41
|
+
if (subject.userId)
|
|
42
|
+
return `user:${subject.userId}`;
|
|
43
|
+
// Exhaustive on purpose. An `else` here would silently file a future
|
|
44
|
+
// subject type (a household, say) under 'individual-client', where it would
|
|
45
|
+
// collide with a real person on the unique index and overwrite their
|
|
46
|
+
// membership - with no compile error to warn anyone.
|
|
47
|
+
switch (subject.subjectType) {
|
|
48
|
+
case partner_membership_subject_type_enum_1.PartnerMembershipSubjectType.CORPORATE_MEMBER:
|
|
49
|
+
return `corporate-member:${subject.subjectId}`;
|
|
50
|
+
case partner_membership_subject_type_enum_1.PartnerMembershipSubjectType.INDIVIDUAL_SUBSCRIBER:
|
|
51
|
+
return `individual-client:${subject.subjectId}`;
|
|
52
|
+
default: {
|
|
53
|
+
const unreachable = subject.subjectType;
|
|
54
|
+
throw new Error(`Unsupported partner membership subject type: ${String(unreachable)}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Which of a partner's REQUIRED profile fields this profile cannot satisfy.
|
|
60
|
+
*
|
|
61
|
+
* Generic over the descriptor rather than per-partner, so a partner that starts
|
|
62
|
+
* insisting on a national id needs a one-line descriptor change and no new
|
|
63
|
+
* validation code. An empty result means the profile is ready to send.
|
|
64
|
+
*/
|
|
65
|
+
function findMissingMemberProfileFields(profile, descriptor) {
|
|
66
|
+
return findUnsatisfiedMemberProfileFields(profile, descriptor).map((entry) => entry.field);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* What stops this profile being sent, and WHY.
|
|
70
|
+
*
|
|
71
|
+
* "Missing" and "malformed" are different problems with different remedies:
|
|
72
|
+
* one needs the fact collected, the other needs it corrected. Reporting a
|
|
73
|
+
* mistyped date of birth as missing leaves an operator staring at a field that
|
|
74
|
+
* is plainly filled in, with nothing to do - and reporting nothing at all
|
|
75
|
+
* leaves the membership in FAILED with an empty list.
|
|
76
|
+
*
|
|
77
|
+
* Also checks any partner-declared `profileFields` marked required, whose
|
|
78
|
+
* values live in `attributes` - so a partner asking for a policy number gets
|
|
79
|
+
* the same treatment as one asking for a date of birth.
|
|
80
|
+
*/
|
|
81
|
+
function findUnsatisfiedMemberProfileFields(profile, descriptor) {
|
|
82
|
+
var _a, _b;
|
|
83
|
+
const source = profile !== null && profile !== void 0 ? profile : {};
|
|
84
|
+
const results = [];
|
|
85
|
+
for (const field of descriptor.requiredProfileFields) {
|
|
86
|
+
const raw = source[field];
|
|
87
|
+
const present = raw !== null && raw !== undefined && String(raw).trim() !== '';
|
|
88
|
+
if (!present) {
|
|
89
|
+
results.push({ field, reason: 'MISSING' });
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (!isMemberProfileFieldPresent(source, field)) {
|
|
93
|
+
results.push({
|
|
94
|
+
field,
|
|
95
|
+
reason: 'MALFORMED',
|
|
96
|
+
detail: field === partner_member_profile_field_enum_1.PartnerMemberProfileField.DATE_OF_BIRTH
|
|
97
|
+
? 'Not a calendar date in YYYY-MM-DD form.'
|
|
98
|
+
: undefined,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const attributes = (_a = source.attributes) !== null && _a !== void 0 ? _a : {};
|
|
103
|
+
const wellKnown = new Set(Object.values(partner_member_profile_field_enum_1.PartnerMemberProfileField));
|
|
104
|
+
for (const declared of (_b = descriptor.profileFields) !== null && _b !== void 0 ? _b : []) {
|
|
105
|
+
if (!declared.required || wellKnown.has(declared.key))
|
|
106
|
+
continue;
|
|
107
|
+
const value = attributes[declared.key];
|
|
108
|
+
if (value === undefined || value === null || String(value).trim() === '') {
|
|
109
|
+
results.push({ field: declared.key, reason: 'MISSING' });
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (declared.pattern && !new RegExp(declared.pattern).test(String(value))) {
|
|
113
|
+
results.push({
|
|
114
|
+
field: declared.key,
|
|
115
|
+
reason: 'MALFORMED',
|
|
116
|
+
detail: `Does not match the format ${declared.label} requires.`,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return results;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Whether a partnership should register the subscribers of one package.
|
|
124
|
+
*
|
|
125
|
+
* The single expression of membership eligibility, used by every trigger so
|
|
126
|
+
* they cannot disagree. Deliberately NOT derived from coverage rules: those
|
|
127
|
+
* answer "where does THIS EMERGENCY go", which is an incident-shaped question
|
|
128
|
+
* that a package cannot be asked - a partnership whose only rule matches on
|
|
129
|
+
* emergency type would evaluate as covering nobody, and one whose package names
|
|
130
|
+
* no incident types at all (which this platform reads as "covers everything")
|
|
131
|
+
* would buy a paid membership for every free subscriber.
|
|
132
|
+
*/
|
|
133
|
+
function membershipRequired(integration, packageId) {
|
|
134
|
+
var _a, _b;
|
|
135
|
+
if (integration.enabled === false)
|
|
136
|
+
return false;
|
|
137
|
+
if (!integration.membershipEnabled)
|
|
138
|
+
return false;
|
|
139
|
+
const scope = (_a = integration.membershipPackageScope) !== null && _a !== void 0 ? _a : partner_membership_package_scope_enum_1.PartnerMembershipPackageScope.ALL;
|
|
140
|
+
if (scope === partner_membership_package_scope_enum_1.PartnerMembershipPackageScope.ALL)
|
|
141
|
+
return true;
|
|
142
|
+
if (packageId === null || packageId === undefined)
|
|
143
|
+
return false;
|
|
144
|
+
return ((_b = integration.membershipPackageIds) !== null && _b !== void 0 ? _b : []).includes(packageId);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Whether one profile field carries a usable value.
|
|
148
|
+
*
|
|
149
|
+
* A date of birth is checked for SHAPE as well as presence: an unparseable one
|
|
150
|
+
* is worse than an absent one, because it is sent, refused by the partner, and
|
|
151
|
+
* retried forever against a value that will never become valid.
|
|
152
|
+
*/
|
|
153
|
+
function isMemberProfileFieldPresent(profile, field) {
|
|
154
|
+
const value = profile[field];
|
|
155
|
+
if (value === null || value === undefined)
|
|
156
|
+
return false;
|
|
157
|
+
if (typeof value !== 'string')
|
|
158
|
+
return true;
|
|
159
|
+
const trimmed = value.trim();
|
|
160
|
+
if (trimmed === '')
|
|
161
|
+
return false;
|
|
162
|
+
if (field === partner_member_profile_field_enum_1.PartnerMemberProfileField.DATE_OF_BIRTH) {
|
|
163
|
+
return isCalendarDate(trimmed);
|
|
164
|
+
}
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
/** A real `YYYY-MM-DD` date, not merely one shaped like it (rejects 2026-02-30). */
|
|
168
|
+
function isCalendarDate(value) {
|
|
169
|
+
if (!ISO_DATE_PATTERN.test(value))
|
|
170
|
+
return false;
|
|
171
|
+
const parsed = new Date(`${value}T00:00:00.000Z`);
|
|
172
|
+
if (Number.isNaN(parsed.getTime()))
|
|
173
|
+
return false;
|
|
174
|
+
return parsed.toISOString().slice(0, 10) === value;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* A date of birth reduced to the calendar date partners want.
|
|
178
|
+
*
|
|
179
|
+
* Accepts what the platform actually stores - a `Date`, a timestamp string, a
|
|
180
|
+
* bare date - and returns UTC, never local. Reading a stored instant in the
|
|
181
|
+
* server's zone is how a birthday drifts a day when a pod moves region.
|
|
182
|
+
*/
|
|
183
|
+
function toPartnerCalendarDate(value) {
|
|
184
|
+
if (value === null || value === undefined)
|
|
185
|
+
return undefined;
|
|
186
|
+
if (value instanceof Date) {
|
|
187
|
+
return Number.isNaN(value.getTime()) ? undefined : value.toISOString().slice(0, 10);
|
|
188
|
+
}
|
|
189
|
+
const trimmed = String(value).trim();
|
|
190
|
+
if (trimmed === '')
|
|
191
|
+
return undefined;
|
|
192
|
+
if (ISO_DATE_PATTERN.test(trimmed))
|
|
193
|
+
return isCalendarDate(trimmed) ? trimmed : undefined;
|
|
194
|
+
const parsed = new Date(trimmed);
|
|
195
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed.toISOString().slice(0, 10);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Seats to buy for a member and their dependents.
|
|
199
|
+
*
|
|
200
|
+
* Always at least one - the member's own - and never more than the partner
|
|
201
|
+
* allows, so a subscription with more beneficiaries than a partner's ceiling
|
|
202
|
+
* buys the maximum rather than being refused outright.
|
|
203
|
+
*/
|
|
204
|
+
function resolveMemberSeatCount(dependentCount, maxDependents) {
|
|
205
|
+
const dependents = Number.isFinite(dependentCount) ? Math.max(0, Math.trunc(dependentCount)) : 0;
|
|
206
|
+
const capped = maxDependents === null || maxDependents === undefined
|
|
207
|
+
? dependents
|
|
208
|
+
: Math.min(dependents, Math.max(0, maxDependents));
|
|
209
|
+
return capped + 1;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* A person's name as a partner should record it, from whatever parts exist.
|
|
213
|
+
*
|
|
214
|
+
* Returns undefined rather than an empty or half-formed name: a member called
|
|
215
|
+
* " " is worse than a membership that is honestly reported as incomplete.
|
|
216
|
+
*/
|
|
217
|
+
function buildMemberFullName(parts) {
|
|
218
|
+
var _a;
|
|
219
|
+
const direct = (_a = parts.name) === null || _a === void 0 ? void 0 : _a.trim();
|
|
220
|
+
if (direct)
|
|
221
|
+
return clampName(direct);
|
|
222
|
+
const joined = [parts.firstName, parts.lastName]
|
|
223
|
+
.map((part) => part === null || part === void 0 ? void 0 : part.trim())
|
|
224
|
+
.filter((part) => !!part)
|
|
225
|
+
.join(' ');
|
|
226
|
+
return joined ? clampName(joined) : undefined;
|
|
227
|
+
}
|
|
228
|
+
function clampName(value) {
|
|
229
|
+
return value.length > partner_defaults_const_1.PARTNER_FIELD_LIMITS.MEMBER_NAME_MAX_LENGTH
|
|
230
|
+
? value.slice(0, partner_defaults_const_1.PARTNER_FIELD_LIMITS.MEMBER_NAME_MAX_LENGTH).trimEnd()
|
|
231
|
+
: value;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Mask a document number for logs.
|
|
235
|
+
*
|
|
236
|
+
* A national id identifies a person as surely as their name and outlives any
|
|
237
|
+
* credential rotation, so it is treated more carefully than one: the last two
|
|
238
|
+
* characters are enough to match a support query against a record, and the mask
|
|
239
|
+
* is fixed width so the length of the original is not disclosed either.
|
|
240
|
+
*/
|
|
241
|
+
function maskMemberDocumentNumber(value) {
|
|
242
|
+
if (!value)
|
|
243
|
+
return '';
|
|
244
|
+
const trimmed = value.trim();
|
|
245
|
+
if (trimmed.length <= 2)
|
|
246
|
+
return '***';
|
|
247
|
+
// Fixed width: a variable-length mask leaks how many digits the number has,
|
|
248
|
+
// which for a national id narrows it considerably.
|
|
249
|
+
return `***${trimmed.slice(-2)}`;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Whether a membership may be quoted on an emergency right now.
|
|
253
|
+
*
|
|
254
|
+
* Deliberately does NOT require the partner's cover to have started. A member
|
|
255
|
+
* inside a waiting period is still that person's real member id, and telling
|
|
256
|
+
* the partner who is calling is accurate and useful whatever their cover state.
|
|
257
|
+
* What is excluded is a membership the partner has finished with: quoting an
|
|
258
|
+
* id past its term risks an outright rejection of the SOS, which costs an
|
|
259
|
+
* ambulance to add a field that was optional anyway.
|
|
260
|
+
*/
|
|
261
|
+
function isUsableMembership(membership, now = new Date()) {
|
|
262
|
+
var _a;
|
|
263
|
+
if (membership.status !== partner_membership_status_enum_1.PartnerMembershipStatus.ACTIVE)
|
|
264
|
+
return false;
|
|
265
|
+
if (!((_a = membership.partnerMemberId) === null || _a === void 0 ? void 0 : _a.trim()))
|
|
266
|
+
return false;
|
|
267
|
+
const endsAt = toDate(membership.coverageEndsAt);
|
|
268
|
+
return !endsAt || endsAt.getTime() > now.getTime();
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Whether the PARTNER's cover has actually begun.
|
|
272
|
+
*
|
|
273
|
+
* Separate from {@link isUsableMembership} because the two answer different
|
|
274
|
+
* questions and conflating them misleads a human. Rescue.co returns a new
|
|
275
|
+
* member as `waitingPeriod`: they exist, they are quotable, and they are not
|
|
276
|
+
* yet covered. An admin screen that renders a green "Active" chip the day
|
|
277
|
+
* somebody paid will have told them they are covered when they are not.
|
|
278
|
+
*/
|
|
279
|
+
function isMembershipCoverActive(membership, now = new Date()) {
|
|
280
|
+
if (!isUsableMembership(membership, now))
|
|
281
|
+
return false;
|
|
282
|
+
const startsAt = toDate(membership.coverageStartsAt);
|
|
283
|
+
return !startsAt || startsAt.getTime() <= now.getTime();
|
|
284
|
+
}
|
|
285
|
+
function toDate(value) {
|
|
286
|
+
if (!value)
|
|
287
|
+
return null;
|
|
288
|
+
const parsed = value instanceof Date ? value : new Date(value);
|
|
289
|
+
return Number.isNaN(parsed.getTime()) ? null : parsed;
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=partner-membership.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner-membership.util.js","sourceRoot":"","sources":["../../../../../src/modules/partner/utils/partner-membership.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SECRET_KEY_FRAGMENTS = void 0;
|
|
3
|
+
exports.REDACTED_PERSONAL_KEY_FRAGMENTS = exports.BIRTH_DATE_KEY_FRAGMENTS = exports.IDENTITY_DOCUMENT_KEY_FRAGMENTS = exports.SECRET_KEY_FRAGMENTS = void 0;
|
|
4
4
|
exports.truncateForPartner = truncateForPartner;
|
|
5
5
|
exports.buildPartnerIssueText = buildPartnerIssueText;
|
|
6
6
|
exports.maskPartnerIdentifier = maskPartnerIdentifier;
|
|
@@ -77,7 +77,21 @@ function sanitizePartnerPayload(value, depth = 0) {
|
|
|
77
77
|
return value;
|
|
78
78
|
const result = {};
|
|
79
79
|
for (const [key, entry] of Object.entries(value)) {
|
|
80
|
-
|
|
80
|
+
if (isSecretKey(key)) {
|
|
81
|
+
result[key] = '[REDACTED]';
|
|
82
|
+
}
|
|
83
|
+
else if (isIdentityDocumentKey(key) && typeof entry === 'string') {
|
|
84
|
+
result[key] = maskIdentityDocument(entry);
|
|
85
|
+
}
|
|
86
|
+
else if (isBirthDateKey(key) && typeof entry === 'string') {
|
|
87
|
+
result[key] = maskBirthDate(entry);
|
|
88
|
+
}
|
|
89
|
+
else if (isRedactedPersonalKey(key)) {
|
|
90
|
+
result[key] = '[REDACTED]';
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
result[key] = sanitizePartnerPayload(entry, depth + 1);
|
|
94
|
+
}
|
|
81
95
|
}
|
|
82
96
|
return result;
|
|
83
97
|
}
|
|
@@ -110,6 +124,74 @@ function isSecretKey(key) {
|
|
|
110
124
|
const normalized = key.toLowerCase();
|
|
111
125
|
return exports.SECRET_KEY_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
112
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Key substrings that mark a value as a government identity document number.
|
|
129
|
+
*
|
|
130
|
+
* These are NOT credentials - they cannot be rotated, and unlike an API key,
|
|
131
|
+
* losing one harms the PERSON rather than the platform. That asymmetry is why
|
|
132
|
+
* they are masked rather than redacted: an operator investigating "the partner
|
|
133
|
+
* rejected this member" still needs to tell one document from another, and
|
|
134
|
+
* blanking the field entirely would make the audit trail useless while a full
|
|
135
|
+
* value would put a national id in a table many people can read.
|
|
136
|
+
*/
|
|
137
|
+
exports.IDENTITY_DOCUMENT_KEY_FRAGMENTS = [
|
|
138
|
+
'documentnumber',
|
|
139
|
+
'document_number',
|
|
140
|
+
'nationalid',
|
|
141
|
+
'national_id',
|
|
142
|
+
'idnumber',
|
|
143
|
+
'id_number',
|
|
144
|
+
'passportnumber',
|
|
145
|
+
'passport_number',
|
|
146
|
+
];
|
|
147
|
+
function isIdentityDocumentKey(key) {
|
|
148
|
+
const normalized = key.toLowerCase();
|
|
149
|
+
return exports.IDENTITY_DOCUMENT_KEY_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Keeps the last two characters and nothing else - not even the length.
|
|
153
|
+
*
|
|
154
|
+
* A variable-length mask leaks how many digits the number has, which for a
|
|
155
|
+
* national id narrows it considerably. Fixed width says only "there was one".
|
|
156
|
+
*/
|
|
157
|
+
function maskIdentityDocument(value) {
|
|
158
|
+
const trimmed = value.trim();
|
|
159
|
+
if (trimmed === '')
|
|
160
|
+
return trimmed;
|
|
161
|
+
if (trimmed.length <= 2)
|
|
162
|
+
return '***';
|
|
163
|
+
return `***${trimmed.slice(-2)}`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Key substrings that mark a value as a date of birth.
|
|
167
|
+
*
|
|
168
|
+
* A full date of birth beside a name is close to uniquely identifying, and an
|
|
169
|
+
* audit record is read by far more people than the member screen is. The year
|
|
170
|
+
* survives, because "the partner rejected a member born in 1988" is the kind of
|
|
171
|
+
* thing somebody actually has to debug.
|
|
172
|
+
*/
|
|
173
|
+
exports.BIRTH_DATE_KEY_FRAGMENTS = ['dateofbirth', 'date_of_birth', 'birthdate', 'dob'];
|
|
174
|
+
function isBirthDateKey(key) {
|
|
175
|
+
const normalized = key.toLowerCase();
|
|
176
|
+
return exports.BIRTH_DATE_KEY_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
177
|
+
}
|
|
178
|
+
/** `1988-04-12` becomes `1988-**-**`; anything unrecognised is blanked. */
|
|
179
|
+
function maskBirthDate(value) {
|
|
180
|
+
const trimmed = value.trim();
|
|
181
|
+
const match = /^(\d{4})-\d{2}-\d{2}/.exec(trimmed);
|
|
182
|
+
return match ? `${match[1]}-**-**` : '[REDACTED]';
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Personal attributes that carry no diagnostic value at all in an audit record.
|
|
186
|
+
*
|
|
187
|
+
* Unlike a date of birth, knowing somebody's gender never helps explain why a
|
|
188
|
+
* partner refused a request, so there is nothing to trade against keeping it.
|
|
189
|
+
*/
|
|
190
|
+
exports.REDACTED_PERSONAL_KEY_FRAGMENTS = ['gender'];
|
|
191
|
+
function isRedactedPersonalKey(key) {
|
|
192
|
+
const normalized = key.toLowerCase();
|
|
193
|
+
return exports.REDACTED_PERSONAL_KEY_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
194
|
+
}
|
|
113
195
|
/**
|
|
114
196
|
* A URL safe to store on an attempt record: origin and path only, with any
|
|
115
197
|
* query string replaced.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partner-payload.util.js","sourceRoot":"","sources":["../../../../../src/modules/partner/utils/partner-payload.util.ts"],"names":[],"mappings":";;;AASA,gDAKC;AASD,sDAeC;AAUD,sDAMC;AAYD,
|
|
1
|
+
{"version":3,"file":"partner-payload.util.js","sourceRoot":"","sources":["../../../../../src/modules/partner/utils/partner-payload.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,9 @@ exports.PERMISSIONS_DATA = [
|
|
|
24
24
|
permission_actions_enum_1.PermissionActions.APPROVE_PARTNER_DISPATCH,
|
|
25
25
|
permission_actions_enum_1.PermissionActions.UPDATE_PARTNER_DISPATCH,
|
|
26
26
|
permission_actions_enum_1.PermissionActions.CANCEL_PARTNER_DISPATCH,
|
|
27
|
-
permission_actions_enum_1.PermissionActions.RESEND_PARTNER_DISPATCH
|
|
27
|
+
permission_actions_enum_1.PermissionActions.RESEND_PARTNER_DISPATCH,
|
|
28
|
+
permission_actions_enum_1.PermissionActions.READ_PARTNER_MEMBERSHIP,
|
|
29
|
+
permission_actions_enum_1.PermissionActions.MANAGE_PARTNER_MEMBERSHIP
|
|
28
30
|
]
|
|
29
31
|
},
|
|
30
32
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.data.js","sourceRoot":"","sources":["../../../../../src/modules/permission/data/permissions.data.ts"],"names":[],"mappings":";;;AAAA,8EAAqE;AACrE,8EAAqE;AAGxD,QAAA,gBAAgB,GAAiB;IAC1C;QACI,MAAM,EAAE,2CAAiB,CAAC,YAAY;QACtC,OAAO,EAAE;YACL,2CAAiB,CAAC,mBAAmB;YACrC,2CAAiB,CAAC,iBAAiB;YACnC,2CAAiB,CAAC,mBAAmB;YACrC,2CAAiB,CAAC,mBAAmB;SACxC;KACJ;IACD;QACI,MAAM,EAAE,2CAAiB,CAAC,OAAO;QACjC,OAAO,EAAE;YACL,2CAAiB,CAAC,cAAc;YAChC,2CAAiB,CAAC,YAAY;YAC9B,2CAAiB,CAAC,cAAc;YAChC,2CAAiB,CAAC,cAAc;YAChC,2CAAiB,CAAC,qBAAqB;YACvC,2CAAiB,CAAC,wBAAwB;YAC1C,2CAAiB,CAAC,uBAAuB;YACzC,2CAAiB,CAAC,uBAAuB;YACzC,2CAAiB,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"permissions.data.js","sourceRoot":"","sources":["../../../../../src/modules/permission/data/permissions.data.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,13 @@ var PermissionActions;
|
|
|
28
28
|
PermissionActions["UPDATE_PARTNER_DISPATCH"] = "update:partner-dispatch";
|
|
29
29
|
PermissionActions["CANCEL_PARTNER_DISPATCH"] = "cancel:partner-dispatch";
|
|
30
30
|
PermissionActions["RESEND_PARTNER_DISPATCH"] = "resend:partner-dispatch";
|
|
31
|
+
// Partner MEMBERSHIPS - registering a subscriber with a partner ahead of an
|
|
32
|
+
// emergency. Kept apart from the partnership CRUD actions because a
|
|
33
|
+
// membership record carries a person's date of birth and identity document,
|
|
34
|
+
// which is a materially different thing to be allowed to read than a base
|
|
35
|
+
// URL and a coverage rule.
|
|
36
|
+
PermissionActions["READ_PARTNER_MEMBERSHIP"] = "read:partner-membership";
|
|
37
|
+
PermissionActions["MANAGE_PARTNER_MEMBERSHIP"] = "manage:partner-membership";
|
|
31
38
|
// Module: ControlCentre
|
|
32
39
|
PermissionActions["CREATE_CONTROL_CENTRE"] = "create:control-centre";
|
|
33
40
|
PermissionActions["READ_CONTROL_CENTRE"] = "read:control-centre";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,
|
|
1
|
+
{"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,9 @@ exports.ROLES_DATA = [
|
|
|
28
28
|
permission_1.PermissionActions.UPDATE_PARTNER_DISPATCH,
|
|
29
29
|
permission_1.PermissionActions.CANCEL_PARTNER_DISPATCH,
|
|
30
30
|
permission_1.PermissionActions.RESEND_PARTNER_DISPATCH,
|
|
31
|
+
//Partner membership
|
|
32
|
+
permission_1.PermissionActions.READ_PARTNER_MEMBERSHIP,
|
|
33
|
+
permission_1.PermissionActions.MANAGE_PARTNER_MEMBERSHIP,
|
|
31
34
|
//control centre
|
|
32
35
|
permission_1.PermissionActions.CREATE_CONTROL_CENTRE,
|
|
33
36
|
permission_1.PermissionActions.READ_CONTROL_CENTRE,
|
|
@@ -80,6 +83,9 @@ exports.ROLES_DATA = [
|
|
|
80
83
|
permission_1.PermissionActions.UPDATE_PARTNER_DISPATCH,
|
|
81
84
|
permission_1.PermissionActions.CANCEL_PARTNER_DISPATCH,
|
|
82
85
|
permission_1.PermissionActions.RESEND_PARTNER_DISPATCH,
|
|
86
|
+
//Partner membership
|
|
87
|
+
permission_1.PermissionActions.READ_PARTNER_MEMBERSHIP,
|
|
88
|
+
permission_1.PermissionActions.MANAGE_PARTNER_MEMBERSHIP,
|
|
83
89
|
//control centre
|
|
84
90
|
permission_1.PermissionActions.CREATE_CONTROL_CENTRE,
|
|
85
91
|
permission_1.PermissionActions.READ_CONTROL_CENTRE,
|
|
@@ -154,6 +160,8 @@ exports.ROLES_DATA = [
|
|
|
154
160
|
permission_1.PermissionActions.UPDATE_PARTNER_DISPATCH,
|
|
155
161
|
permission_1.PermissionActions.CANCEL_PARTNER_DISPATCH,
|
|
156
162
|
permission_1.PermissionActions.RESEND_PARTNER_DISPATCH,
|
|
163
|
+
//Partner membership
|
|
164
|
+
permission_1.PermissionActions.READ_PARTNER_MEMBERSHIP,
|
|
157
165
|
//Control Centre
|
|
158
166
|
permission_1.PermissionActions.READ_CONTROL_CENTRE,
|
|
159
167
|
permission_1.PermissionActions.UPDATE_CONTROL_CENTRE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.data.js","sourceRoot":"","sources":["../../../../../src/modules/role/data/roles.data.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"roles.data.js","sourceRoot":"","sources":["../../../../../src/modules/role/data/roles.data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topics owned by clarion-billing.
|
|
3
|
+
*
|
|
4
|
+
* Promoted here from the service itself because they now have consumers in
|
|
5
|
+
* other services (clarion-notification for renewals, clarion-partner-services
|
|
6
|
+
* for membership provisioning). A topic name that lives in the producer's own
|
|
7
|
+
* source is a string a consumer has to copy, and a copied string is one that
|
|
8
|
+
* drifts silently: the consumer keeps subscribing to a topic nobody publishes
|
|
9
|
+
* any more, and nothing fails - it just quietly stops working.
|
|
10
|
+
*
|
|
11
|
+
* clarion-billing re-exports this as `BILLING_KAFKA_TOPICS` so its own call
|
|
12
|
+
* sites are unchanged.
|
|
13
|
+
*/
|
|
14
|
+
export const BILLING_KAFKA_TOPICS = {
|
|
15
|
+
PACKAGE_CREATED: 'billing.package.created',
|
|
16
|
+
PACKAGE_UPDATED: 'billing.package.updated',
|
|
17
|
+
SUBSCRIPTION_CREATED: 'billing.subscription.created',
|
|
18
|
+
SUBSCRIPTION_PENDING_PAYMENT: 'billing.subscription.pending_payment',
|
|
19
|
+
SUBSCRIPTION_ACTIVATED: 'billing.subscription.activated',
|
|
20
|
+
SUBSCRIPTION_RENEWED: 'billing.subscription.renewed',
|
|
21
|
+
SUBSCRIPTION_EXPIRED: 'billing.subscription.expired',
|
|
22
|
+
SUBSCRIPTION_CANCELLED: 'billing.subscription.cancelled',
|
|
23
|
+
SUBSCRIPTION_SUSPENDED: 'billing.subscription.suspended',
|
|
24
|
+
SUBSCRIPTION_MANUAL_RENEWAL_REQUIRED: 'billing.subscription.manual_renewal_required',
|
|
25
|
+
SUBSCRIPTION_RENEWAL_REMINDER: 'billing.subscription.renewal_reminder',
|
|
26
|
+
PAYMENT_INITIATED: 'billing.payment.initiated',
|
|
27
|
+
PAYMENT_SUCCEEDED: 'billing.payment.succeeded',
|
|
28
|
+
PAYMENT_FAILED: 'billing.payment.failed',
|
|
29
|
+
INVOICE_GENERATED: 'billing.invoice.generated',
|
|
30
|
+
INVOICE_PAID: 'billing.invoice.paid',
|
|
31
|
+
RECEIPT_GENERATED: 'billing.receipt.generated',
|
|
32
|
+
ENTITLEMENT_CHANGED: 'billing.entitlement.changed',
|
|
33
|
+
TRIAL_STARTED: 'billing.trial.started',
|
|
34
|
+
TRIAL_ALERT_CONSUMED: 'billing.trial.alert_consumed',
|
|
35
|
+
TRIAL_EXHAUSTED: 'billing.trial.exhausted',
|
|
36
|
+
TRIAL_EXPIRED: 'billing.trial.expired',
|
|
37
|
+
TRIAL_GRANTED: 'billing.trial.granted',
|
|
38
|
+
TRIAL_REVOKED: 'billing.trial.revoked',
|
|
39
|
+
CORPORATE_CLIENT_CREATED: 'billing.corporate_client.created',
|
|
40
|
+
CORPORATE_MEMBER_ADDED: 'billing.corporate_member.added',
|
|
41
|
+
CORPORATE_MEMBER_REMOVED: 'billing.corporate_member.removed',
|
|
42
|
+
SETTLEMENT_GENERATED: 'billing.settlement.generated',
|
|
43
|
+
SETTLEMENT_PAID: 'billing.settlement.paid',
|
|
44
|
+
BENEFICIARY_CREATED: 'billing.beneficiary.created',
|
|
45
|
+
BENEFICIARY_PENDING_PAYMENT: 'billing.beneficiary.pending_payment',
|
|
46
|
+
BENEFICIARY_ACTIVATED: 'billing.beneficiary.activated',
|
|
47
|
+
BENEFICIARY_REMOVED: 'billing.beneficiary.removed',
|
|
48
|
+
BENEFICIARY_EXPIRED: 'billing.beneficiary.expired',
|
|
49
|
+
BENEFICIARY_SUSPENDED: 'billing.beneficiary.suspended',
|
|
50
|
+
BENEFICIARY_PAYMENT_REQUIRED: 'billing.beneficiary.payment_required',
|
|
51
|
+
BENEFICIARY_PAYMENT_SUCCEEDED: 'billing.beneficiary.payment_succeeded',
|
|
52
|
+
BENEFICIARY_PAYMENT_FAILED: 'billing.beneficiary.payment_failed',
|
|
53
|
+
/**
|
|
54
|
+
* The complete current state of one subscriber's partner-relevant cover.
|
|
55
|
+
*
|
|
56
|
+
* A STATE topic, not a change topic, and the only one
|
|
57
|
+
* clarion-partner-services consumes. Every other billing topic here is a
|
|
58
|
+
* change notification on its own topic, and Kafka guarantees no ordering
|
|
59
|
+
* across topics - so `subscription.activated` and `subscription.expired`
|
|
60
|
+
* for one person arrive in an arbitrary order, as do a beneficiary being
|
|
61
|
+
* added and the subscription that owns them. Applying those as deltas to a
|
|
62
|
+
* partner that will not let a dependent be withdrawn until the end of the
|
|
63
|
+
* term produces duplicate members and permanently burns seats.
|
|
64
|
+
*
|
|
65
|
+
* One topic carrying the full picture, fenced by a monotonic sequence,
|
|
66
|
+
* converges from any order of arrival.
|
|
67
|
+
*/
|
|
68
|
+
PARTNER_MEMBERSHIP_SYNC: 'billing.partner_membership.sync',
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* The billing topics clarion-partner-services listens to.
|
|
72
|
+
*
|
|
73
|
+
* Exactly ONE, on purpose. Subscribing to the six lifecycle topics that DRIVE
|
|
74
|
+
* this state would mean reassembling a subscriber's picture from six unordered
|
|
75
|
+
* streams; billing already holds that picture whole, so it publishes it whole.
|
|
76
|
+
*/
|
|
77
|
+
export const BILLING_TOPICS_FOR_PARTNER_MEMBERSHIP = [
|
|
78
|
+
BILLING_KAFKA_TOPICS.PARTNER_MEMBERSHIP_SYNC,
|
|
79
|
+
];
|
|
80
|
+
//# sourceMappingURL=billing-topics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing-topics.js","sourceRoot":"","sources":["../../../src/kafka/billing-topics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,eAAe,EAAE,yBAAyB;IAC1C,eAAe,EAAE,yBAAyB;IAE1C,oBAAoB,EAAE,8BAA8B;IACpD,4BAA4B,EAAE,sCAAsC;IACpE,sBAAsB,EAAE,gCAAgC;IACxD,oBAAoB,EAAE,8BAA8B;IACpD,oBAAoB,EAAE,8BAA8B;IACpD,sBAAsB,EAAE,gCAAgC;IACxD,sBAAsB,EAAE,gCAAgC;IACxD,oCAAoC,EAAE,8CAA8C;IACpF,6BAA6B,EAAE,uCAAuC;IAEtE,iBAAiB,EAAE,2BAA2B;IAC9C,iBAAiB,EAAE,2BAA2B;IAC9C,cAAc,EAAE,wBAAwB;IAExC,iBAAiB,EAAE,2BAA2B;IAC9C,YAAY,EAAE,sBAAsB;IACpC,iBAAiB,EAAE,2BAA2B;IAE9C,mBAAmB,EAAE,6BAA6B;IAElD,aAAa,EAAE,uBAAuB;IACtC,oBAAoB,EAAE,8BAA8B;IACpD,eAAe,EAAE,yBAAyB;IAC1C,aAAa,EAAE,uBAAuB;IACtC,aAAa,EAAE,uBAAuB;IACtC,aAAa,EAAE,uBAAuB;IAEtC,wBAAwB,EAAE,kCAAkC;IAC5D,sBAAsB,EAAE,gCAAgC;IACxD,wBAAwB,EAAE,kCAAkC;IAE5D,oBAAoB,EAAE,8BAA8B;IACpD,eAAe,EAAE,yBAAyB;IAE1C,mBAAmB,EAAE,6BAA6B;IAClD,2BAA2B,EAAE,qCAAqC;IAClE,qBAAqB,EAAE,+BAA+B;IACtD,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,6BAA6B;IAClD,qBAAqB,EAAE,+BAA+B;IACtD,4BAA4B,EAAE,sCAAsC;IACpE,6BAA6B,EAAE,uCAAuC;IACtE,0BAA0B,EAAE,oCAAoC;IAEhE;;;;;;;;;;;;;;OAcG;IACH,uBAAuB,EAAE,iCAAiC;CACpD,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAsB;IACpE,oBAAoB,CAAC,uBAAuB;CAC/C,CAAC"}
|
package/dist/esm/kafka/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kafka/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8DAA8D,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kafka/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8DAA8D,CAAC"}
|