@opencrvs/toolkit 2.0.0-rc.fdc585a → 2.0.0-rc.ff04b30
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/create-countryconfig/index.js +73 -0
- package/create-countryconfig/package.json +11 -0
- package/dist/application-config/index.js +27 -28
- package/dist/cli.js +392 -128
- package/dist/commons/api/router.d.ts +3301 -247
- package/dist/commons/conditionals/validate.d.ts +1 -0
- package/dist/commons/events/ActionInput.d.ts +108 -0
- package/dist/commons/events/Draft.d.ts +3 -0
- package/dist/commons/events/EventIndex.d.ts +0 -3
- package/dist/commons/events/EventMetadata.d.ts +0 -7
- package/dist/commons/events/WorkqueueConfig.d.ts +146 -146
- package/dist/commons/events/locations.d.ts +21 -0
- package/dist/commons/events/mocks.test.utils.d.ts +19 -0
- package/dist/commons/events/scopes.d.ts +24 -1
- package/dist/commons/events/state/index.d.ts +0 -4
- package/dist/commons/events/state/utils.d.ts +0 -2
- package/dist/commons/events/utils.d.ts +1 -1
- package/dist/conditionals/index.js +3 -1
- package/dist/events/index.js +109 -76
- package/dist/migrations/v2.0/checkout-upstream-files.d.ts +1 -1
- package/dist/migrations/v2.0/checkout-upstream-files.d.ts.map +1 -1
- package/dist/migrations/v2.0/checkout-upstream-files.js +1 -2
- package/dist/migrations/v2.0/delete-infrastructure-directory.d.ts +9 -1
- package/dist/migrations/v2.0/delete-infrastructure-directory.d.ts.map +1 -1
- package/dist/migrations/v2.0/delete-infrastructure-directory.js +66 -20
- package/dist/migrations/v2.0/fix-accept-requested-registration-function-type.d.ts +3 -0
- package/dist/migrations/v2.0/fix-accept-requested-registration-function-type.d.ts.map +1 -0
- package/dist/migrations/v2.0/fix-accept-requested-registration-function-type.js +110 -0
- package/dist/migrations/v2.0/index.d.ts +5 -3
- package/dist/migrations/v2.0/index.d.ts.map +1 -1
- package/dist/migrations/v2.0/index.js +390 -126
- package/dist/migrations/v2.0/merge-infrastructure-directory.d.ts +11 -1
- package/dist/migrations/v2.0/merge-infrastructure-directory.d.ts.map +1 -1
- package/dist/migrations/v2.0/merge-infrastructure-directory.js +17 -16
- package/dist/migrations/v2.0/migrate-scopes.d.ts.map +1 -1
- package/dist/migrations/v2.0/migrate-scopes.js +54 -30
- package/dist/migrations/v2.0/migrate-workqueue-configs.d.ts.map +1 -1
- package/dist/migrations/v2.0/migrate-workqueue-configs.js +140 -59
- package/dist/notification/index.js +41 -46
- package/dist/scopes/index.js +3 -1
- package/opencrvs-toolkit-2.0.0-rc.ff04b30.tgz +0 -0
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/opencrvs-toolkit-2.0.0-rc.fdc585a.tgz +0 -0
package/dist/events/index.js
CHANGED
|
@@ -302,12 +302,13 @@ __export(events_exports, {
|
|
|
302
302
|
getActionConfig: () => getActionConfig,
|
|
303
303
|
getActionReview: () => getActionReview,
|
|
304
304
|
getActionReviewFields: () => getActionReviewFields,
|
|
305
|
+
getAdministrativeAreaHierarchy: () => getAdministrativeAreaHierarchy,
|
|
305
306
|
getAllUniqueFields: () => getAllUniqueFields,
|
|
306
307
|
getAnnotationFromDrafts: () => getAnnotationFromDrafts,
|
|
307
308
|
getAssignedUserFromActions: () => getAssignedUserFromActions,
|
|
308
|
-
getAssignedUserSignatureFromActions: () => getAssignedUserSignatureFromActions,
|
|
309
309
|
getAssignmentStatus: () => getAssignmentStatus,
|
|
310
310
|
getAvailableActionsForEvent: () => getAvailableActionsForEvent,
|
|
311
|
+
getAvailableRolesForUserUpdatePayload: () => getAvailableRolesForUserUpdatePayload,
|
|
311
312
|
getCompleteActionAnnotation: () => getCompleteActionAnnotation,
|
|
312
313
|
getCompleteActionDeclaration: () => getCompleteActionDeclaration,
|
|
313
314
|
getCurrentEventState: () => getCurrentEventState,
|
|
@@ -318,6 +319,7 @@ __export(events_exports, {
|
|
|
318
319
|
getDeclarationPages: () => getDeclarationPages,
|
|
319
320
|
getEventConfigById: () => getEventConfigById,
|
|
320
321
|
getFilePathsFromEvent: () => getFilePathsFromEvent,
|
|
322
|
+
getLocationHierarchy: () => getLocationHierarchy,
|
|
321
323
|
getMixedPath: () => getMixedPath,
|
|
322
324
|
getPendingAction: () => getPendingAction,
|
|
323
325
|
getPrintCertificatePages: () => getPrintCertificatePages,
|
|
@@ -702,7 +704,9 @@ var decodeScope = (query) => {
|
|
|
702
704
|
};
|
|
703
705
|
var DEFAULT_SCOPE_OPTIONS = {
|
|
704
706
|
placeOfEvent: JurisdictionFilter.enum.all,
|
|
705
|
-
accessLevel: JurisdictionFilter.enum.all
|
|
707
|
+
accessLevel: JurisdictionFilter.enum.all,
|
|
708
|
+
registeredIn: JurisdictionFilter.enum.all,
|
|
709
|
+
declaredIn: JurisdictionFilter.enum.all
|
|
706
710
|
};
|
|
707
711
|
function getAcceptedScopesByType({
|
|
708
712
|
acceptedScopes,
|
|
@@ -1075,7 +1079,10 @@ var ActionConditional = z7.discriminatedUnion("type", [
|
|
|
1075
1079
|
ShowConditional,
|
|
1076
1080
|
// Action can be shown to the user in the list but as disabled
|
|
1077
1081
|
EnableConditional
|
|
1078
|
-
])
|
|
1082
|
+
]).meta({
|
|
1083
|
+
description: "Action conditional configuration",
|
|
1084
|
+
id: "ActionConditional"
|
|
1085
|
+
});
|
|
1079
1086
|
var DisplayOnReviewConditional = z7.object({
|
|
1080
1087
|
type: z7.literal(ConditionalType.DISPLAY_ON_REVIEW),
|
|
1081
1088
|
conditional: Conditional
|
|
@@ -1411,28 +1418,20 @@ function schemaPriority(schema) {
|
|
|
1411
1418
|
return idx === -1 ? 9999 : idx;
|
|
1412
1419
|
}
|
|
1413
1420
|
function safeUnion(schemas) {
|
|
1421
|
+
const sortedSchemas = [...schemas].sort(
|
|
1422
|
+
(a, b) => schemaPriority(a) - schemaPriority(b)
|
|
1423
|
+
);
|
|
1414
1424
|
return z12.any().superRefine((val, ctx) => {
|
|
1415
|
-
const
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
if (successful.length === 0) {
|
|
1420
|
-
ctx.addIssue({
|
|
1421
|
-
code: "invalid_type",
|
|
1422
|
-
expected: "custom",
|
|
1423
|
-
message: "Value does not match any schema"
|
|
1424
|
-
});
|
|
1425
|
-
return;
|
|
1426
|
-
}
|
|
1427
|
-
successful.sort((a, b) => schemaPriority(a) - schemaPriority(b));
|
|
1428
|
-
const best = successful[0];
|
|
1429
|
-
if (!best.safeParse(val).success) {
|
|
1430
|
-
ctx.addIssue({
|
|
1431
|
-
expected: "custom",
|
|
1432
|
-
code: "invalid_type",
|
|
1433
|
-
message: "Value did not match the best schema"
|
|
1434
|
-
});
|
|
1425
|
+
for (const schema of sortedSchemas) {
|
|
1426
|
+
if (schema.safeParse(val).success) {
|
|
1427
|
+
return;
|
|
1428
|
+
}
|
|
1435
1429
|
}
|
|
1430
|
+
ctx.addIssue({
|
|
1431
|
+
code: "invalid_type",
|
|
1432
|
+
expected: "custom",
|
|
1433
|
+
message: "Value does not match any schema"
|
|
1434
|
+
});
|
|
1436
1435
|
}).meta({
|
|
1437
1436
|
description: "Value that matches exactly one of the possible schema types (TextValue, DateValue, DateRangeFieldValue). The best matching schema is chosen by priority."
|
|
1438
1437
|
});
|
|
@@ -1742,6 +1741,9 @@ var FlagConfig = z15.object({
|
|
|
1742
1741
|
"Indicates if this flag expects an action to be performed to be cleared."
|
|
1743
1742
|
),
|
|
1744
1743
|
label: TranslationConfig.describe("Human readable label of the flag.")
|
|
1744
|
+
}).meta({
|
|
1745
|
+
description: "Flag configuration",
|
|
1746
|
+
id: "FlagConfig"
|
|
1745
1747
|
});
|
|
1746
1748
|
var ActionFlagConfig = z15.object({
|
|
1747
1749
|
id: Flag,
|
|
@@ -1749,6 +1751,9 @@ var ActionFlagConfig = z15.object({
|
|
|
1749
1751
|
conditional: Conditional.optional().describe(
|
|
1750
1752
|
"When conditional is met, the operation is performed on the flag. If not provided, the operation is performed unconditionally."
|
|
1751
1753
|
)
|
|
1754
|
+
}).meta({
|
|
1755
|
+
description: "Action flag configuration",
|
|
1756
|
+
id: "ActionFlagConfig"
|
|
1752
1757
|
});
|
|
1753
1758
|
|
|
1754
1759
|
// ../commons/src/events/EventMetadata.ts
|
|
@@ -1770,8 +1775,7 @@ var ActionCreationMetadata = z16.object({
|
|
|
1770
1775
|
),
|
|
1771
1776
|
createdByUserType: z16.enum(["user", "system"]).nullish().describe("Whether the user is a normal user or a system."),
|
|
1772
1777
|
acceptedAt: z16.iso.datetime().describe("Timestamp when the action request was accepted."),
|
|
1773
|
-
createdByRole: z16.string().optional().describe("Role of the user at the time of action request creation.")
|
|
1774
|
-
createdBySignature: z16.string().nullish().describe("Signature of the user who created the action request.")
|
|
1778
|
+
createdByRole: z16.string().optional().describe("Role of the user at the time of action request creation.")
|
|
1775
1779
|
});
|
|
1776
1780
|
var RegistrationCreationMetadata = ActionCreationMetadata.extend({
|
|
1777
1781
|
registrationNumber: z16.string().describe(
|
|
@@ -1799,9 +1803,6 @@ var EventMetadata = z16.object({
|
|
|
1799
1803
|
createdAtLocation: UUID.nullish().describe(
|
|
1800
1804
|
"Location of the user who created the event."
|
|
1801
1805
|
),
|
|
1802
|
-
createdBySignature: DocumentPath.nullish().describe(
|
|
1803
|
-
"Signature of the user who created the event."
|
|
1804
|
-
),
|
|
1805
1806
|
updatedAtLocation: UUID.nullish().describe(
|
|
1806
1807
|
"Location of the user who last changed the status."
|
|
1807
1808
|
),
|
|
@@ -2176,7 +2177,7 @@ var FieldId = import_v43.default.string().superRefine((val, ctx) => {
|
|
|
2176
2177
|
}
|
|
2177
2178
|
}).describe("Unique identifier for the field");
|
|
2178
2179
|
var FieldReference = import_v43.default.object({
|
|
2179
|
-
$$field: FieldId,
|
|
2180
|
+
$$field: FieldId.describe("Id of the field to reference"),
|
|
2180
2181
|
$$subfield: import_v43.default.array(import_v43.default.string()).optional().default([]).describe(
|
|
2181
2182
|
'If the FieldValue is an object, subfield can be used to refer to e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`'
|
|
2182
2183
|
)
|
|
@@ -2889,10 +2890,10 @@ var VerificationPageConfig = FormPageConfig.extend({
|
|
|
2889
2890
|
type: z21.literal(PageTypes.enum.VERIFICATION),
|
|
2890
2891
|
actions: VerificationActionConfig
|
|
2891
2892
|
});
|
|
2892
|
-
var PageConfig = z21.discriminatedUnion("type", [
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2893
|
+
var PageConfig = z21.discriminatedUnion("type", [FormPageConfig, VerificationPageConfig]).meta({
|
|
2894
|
+
description: "Page configuration",
|
|
2895
|
+
id: "PageConfig"
|
|
2896
|
+
});
|
|
2896
2897
|
|
|
2897
2898
|
// ../commons/src/events/FormConfig.ts
|
|
2898
2899
|
var DeclarationFormConfig = z22.object({
|
|
@@ -3801,6 +3802,9 @@ function precompileActionSchemas(eventConfigurations) {
|
|
|
3801
3802
|
function isAgeValue(value) {
|
|
3802
3803
|
return typeof value === "object" && value !== null && "age" in value && typeof value.age === "number";
|
|
3803
3804
|
}
|
|
3805
|
+
function mergeWithBaseFormState(values, context) {
|
|
3806
|
+
return { ...context.baseFormState, ...values };
|
|
3807
|
+
}
|
|
3804
3808
|
function validate(schema, data) {
|
|
3805
3809
|
const validator = ajv.getSchema(schema.$id) || ajv.compile(schema);
|
|
3806
3810
|
if ("$form" in data) {
|
|
@@ -3839,7 +3843,7 @@ function isOnline() {
|
|
|
3839
3843
|
}
|
|
3840
3844
|
function isConditionMet(conditional, values, context, eventIndex) {
|
|
3841
3845
|
return validate(conditional, {
|
|
3842
|
-
$form: values,
|
|
3846
|
+
$form: mergeWithBaseFormState(values, context),
|
|
3843
3847
|
$now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" }),
|
|
3844
3848
|
$online: isOnline(),
|
|
3845
3849
|
$user: context.user,
|
|
@@ -3868,7 +3872,7 @@ function isFieldConditionMet(field3, form, conditionalType, context) {
|
|
|
3868
3872
|
return true;
|
|
3869
3873
|
}
|
|
3870
3874
|
const validConditionals = getConditionalActionsForField(field3, {
|
|
3871
|
-
$form: form,
|
|
3875
|
+
$form: mergeWithBaseFormState(form, context),
|
|
3872
3876
|
$now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" }),
|
|
3873
3877
|
$online: isOnline(),
|
|
3874
3878
|
$user: context.user,
|
|
@@ -4060,7 +4064,7 @@ function runFieldValidations({
|
|
|
4060
4064
|
return [];
|
|
4061
4065
|
}
|
|
4062
4066
|
const conditionalParameters = {
|
|
4063
|
-
$form: form,
|
|
4067
|
+
$form: mergeWithBaseFormState(form, context),
|
|
4064
4068
|
$now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" }),
|
|
4065
4069
|
/**
|
|
4066
4070
|
* In real use cases, there can be hundreds of thousands of locations.
|
|
@@ -4304,17 +4308,16 @@ function isPageVisible(page, formValues, context) {
|
|
|
4304
4308
|
}
|
|
4305
4309
|
return isConditionMet(page.conditional, formValues, context);
|
|
4306
4310
|
}
|
|
4307
|
-
function omitHiddenFields(fields, formValues, validatorContext, includeHiddenFieldsWithNullValues = false
|
|
4311
|
+
function omitHiddenFields(fields, formValues, validatorContext, includeHiddenFieldsWithNullValues = false) {
|
|
4308
4312
|
const base = (0, import_lodash.cloneDeep)(formValues);
|
|
4309
4313
|
function fn(prevVisibilityContext) {
|
|
4310
|
-
const visibilityForm = declarationContext ? { ...declarationContext, ...prevVisibilityContext } : prevVisibilityContext;
|
|
4311
4314
|
const cleaned = (0, import_lodash.omitBy)(base, (value, fieldId) => {
|
|
4312
4315
|
const fieldConfig = fields.filter((f) => f.id === fieldId);
|
|
4313
4316
|
if (!fieldConfig.length) {
|
|
4314
4317
|
return false;
|
|
4315
4318
|
}
|
|
4316
4319
|
const isHidden = fieldConfig.every(
|
|
4317
|
-
(f) => !isFieldVisible(f,
|
|
4320
|
+
(f) => !isFieldVisible(f, prevVisibilityContext, validatorContext)
|
|
4318
4321
|
);
|
|
4319
4322
|
if (!isHidden) {
|
|
4320
4323
|
return false;
|
|
@@ -4332,7 +4335,7 @@ function omitHiddenPaginatedFields(formConfig, values, validatorContext, include
|
|
|
4332
4335
|
const visibleFields = formConfig.pages.filter((p) => isPageVisible(p, values, validatorContext)).flatMap((p) => p.fields);
|
|
4333
4336
|
const hiddenFields = formConfig.pages.filter((p) => !isPageVisible(p, values, validatorContext)).flatMap((p) => p.fields);
|
|
4334
4337
|
const valuesExceptHiddenPage = (0, import_lodash.omitBy)(values, (_2, fieldId) => {
|
|
4335
|
-
return hiddenFields.some((f) => f.id === fieldId);
|
|
4338
|
+
return hiddenFields.some((f) => f.id === fieldId) && !visibleFields.some((f) => f.id === fieldId);
|
|
4336
4339
|
});
|
|
4337
4340
|
return omitHiddenFields(
|
|
4338
4341
|
visibleFields,
|
|
@@ -4379,13 +4382,10 @@ function getVisibleVerificationPageIds(pages, annotation, context) {
|
|
|
4379
4382
|
}
|
|
4380
4383
|
function omitHiddenAnnotationFields(actionConfig, declaration, annotation, context) {
|
|
4381
4384
|
const annotationFields = getActionAnnotationFields(actionConfig);
|
|
4382
|
-
return omitHiddenFields(
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
false,
|
|
4387
|
-
declaration
|
|
4388
|
-
);
|
|
4385
|
+
return omitHiddenFields(annotationFields, annotation, {
|
|
4386
|
+
...context,
|
|
4387
|
+
baseFormState: declaration
|
|
4388
|
+
});
|
|
4389
4389
|
}
|
|
4390
4390
|
function deepMerge(currentDocument, actionDocument) {
|
|
4391
4391
|
const currentDocumentClone = (0, import_lodash.cloneDeep)(currentDocument);
|
|
@@ -5374,7 +5374,7 @@ var _EventConfigBase = z33.object({
|
|
|
5374
5374
|
),
|
|
5375
5375
|
label: TranslationConfig.describe("Human-readable label for the event type."),
|
|
5376
5376
|
actions: z33.array(ActionConfig).describe(
|
|
5377
|
-
"Configuration of
|
|
5377
|
+
"Configuration of core and custom actions associated with the event."
|
|
5378
5378
|
),
|
|
5379
5379
|
actionOrder: z33.array(z33.string()).optional().describe(
|
|
5380
5380
|
"Order of actions in the action menu. Use either the action type for core actions or the customActionType for custom actions."
|
|
@@ -5386,7 +5386,7 @@ var _EventConfigBase = z33.object({
|
|
|
5386
5386
|
"Configuration of fields available in the advanced search feature."
|
|
5387
5387
|
),
|
|
5388
5388
|
flags: z33.array(FlagConfig).optional().default([]).describe(
|
|
5389
|
-
"Configuration of flags associated with the actions of this event type."
|
|
5389
|
+
"Configuration of custom flags associated with the actions of this event type."
|
|
5390
5390
|
),
|
|
5391
5391
|
analytics: z33.boolean().optional().default(true).describe(
|
|
5392
5392
|
"Indicates whether the records of this event type are included in analytics"
|
|
@@ -5825,18 +5825,11 @@ var WorkqueueConfigWithoutQuery = WorkqueueConfig.omit({
|
|
|
5825
5825
|
query: true,
|
|
5826
5826
|
columns: true
|
|
5827
5827
|
});
|
|
5828
|
-
var WorkqueueConfigInput =
|
|
5829
|
-
|
|
5830
|
-
|
|
5831
|
-
|
|
5832
|
-
|
|
5833
|
-
query: CountryConfigQueryInputType,
|
|
5834
|
-
action: z37.object({ type: WorkqueueActionType }).optional().describe(
|
|
5835
|
-
"Workqueue call-to-action button configuration. This determines the quick action button shown on each event card and the action taken when the button is clicked."
|
|
5836
|
-
),
|
|
5837
|
-
columns: z37.array(WorkqueueColumn).default(mandatoryColumns),
|
|
5838
|
-
icon: AvailableIcons,
|
|
5839
|
-
emptyMessage: TranslationConfig.optional()
|
|
5828
|
+
var WorkqueueConfigInput = WorkqueueConfig.extend({
|
|
5829
|
+
query: CountryConfigQueryInputType
|
|
5830
|
+
}).meta({
|
|
5831
|
+
description: "Workqueue configuration",
|
|
5832
|
+
id: "WorkqueueConfig"
|
|
5840
5833
|
});
|
|
5841
5834
|
function defineWorkqueue(workqueueInput) {
|
|
5842
5835
|
const queryInput = workqueueInput.query;
|
|
@@ -5897,6 +5890,9 @@ var BaseActionInput = z38.object({
|
|
|
5897
5890
|
originalActionId: UUID.optional(),
|
|
5898
5891
|
// should not be part of base action.
|
|
5899
5892
|
keepAssignment: z38.boolean().optional(),
|
|
5893
|
+
keepAssignmentIfAccepted: z38.boolean().optional(),
|
|
5894
|
+
keepAssignmentIfRejected: z38.boolean().optional(),
|
|
5895
|
+
waitFor: z38.boolean().optional(),
|
|
5900
5896
|
// For normal users, the createdAtLocation is resolved on the backend from the user's primaryOfficeId.
|
|
5901
5897
|
// @TODO: createdAtLocation should be limited to actions that system users can perform. For normal users, it should not be part of the base action.
|
|
5902
5898
|
createdAtLocation: UUID.nullish().describe(
|
|
@@ -6150,7 +6146,6 @@ function getDeclarationActionCreationMetadata(actionType, actions) {
|
|
|
6150
6146
|
createdAtLocation: requestAction?.createdAtLocation ?? acceptAction.createdAtLocation,
|
|
6151
6147
|
acceptedAt: acceptAction.createdAt,
|
|
6152
6148
|
createdByRole: requestAction?.createdByRole ?? acceptAction.createdByRole,
|
|
6153
|
-
createdBySignature: requestAction?.createdBySignature ?? acceptAction.createdBySignature,
|
|
6154
6149
|
registrationNumber
|
|
6155
6150
|
};
|
|
6156
6151
|
}
|
|
@@ -6364,17 +6359,6 @@ function getAssignedUserFromActions(actions) {
|
|
|
6364
6359
|
return user2;
|
|
6365
6360
|
}, null);
|
|
6366
6361
|
}
|
|
6367
|
-
function getAssignedUserSignatureFromActions(actions) {
|
|
6368
|
-
return actions.reduce((signature, action) => {
|
|
6369
|
-
if (action.type === ActionType.ASSIGN) {
|
|
6370
|
-
return action.createdBySignature || null;
|
|
6371
|
-
}
|
|
6372
|
-
if (action.type === ActionType.UNASSIGN) {
|
|
6373
|
-
return null;
|
|
6374
|
-
}
|
|
6375
|
-
return signature;
|
|
6376
|
-
}, null);
|
|
6377
|
-
}
|
|
6378
6362
|
function deepDropNulls(obj) {
|
|
6379
6363
|
if (Array.isArray(obj)) {
|
|
6380
6364
|
return obj.map(deepDropNulls);
|
|
@@ -6470,10 +6454,8 @@ function getCurrentEventState(event2, config) {
|
|
|
6470
6454
|
createdBy: creationAction.createdBy,
|
|
6471
6455
|
createdByUserType: creationAction.createdByUserType,
|
|
6472
6456
|
createdAtLocation: creationAction.createdAtLocation,
|
|
6473
|
-
createdBySignature: creationAction.createdBySignature,
|
|
6474
6457
|
updatedAt: acceptedActionMetadata.createdAt,
|
|
6475
6458
|
assignedTo: getAssignedUserFromActions(acceptedActions),
|
|
6476
|
-
assignedToSignature: getAssignedUserSignatureFromActions(acceptedActions),
|
|
6477
6459
|
updatedBy: requestActionMetadata.createdBy,
|
|
6478
6460
|
updatedAtLocation: requestActionMetadata.createdAtLocation,
|
|
6479
6461
|
declaration,
|
|
@@ -9732,7 +9714,6 @@ var eventQueryDataGenerator = (overrides = {}, seed = 1) => {
|
|
|
9732
9714
|
createdBy: overrides.createdBy ?? generateUuid(rng),
|
|
9733
9715
|
createdAtLocation: overrides.createdAtLocation ?? generateUuid(rng),
|
|
9734
9716
|
updatedAtLocation: overrides.updatedAtLocation ?? generateUuid(rng),
|
|
9735
|
-
createdBySignature: overrides.createdBySignature ?? generateRandomSignature(rng),
|
|
9736
9717
|
updatedAt: overrides.updatedAt ?? (0, import_date_fns4.addDays)(new Date(createdAt), 1).toISOString(),
|
|
9737
9718
|
assignedTo: overrides.assignedTo ?? null,
|
|
9738
9719
|
updatedBy: overrides.updatedBy ?? generateUuid(rng),
|
|
@@ -10003,6 +9984,39 @@ function userCanAccessEventWithScopes(event2, scopes, user2, customActionType) {
|
|
|
10003
9984
|
(scope) => canAccessEventWithScope(event2, scope, user2, customActionType)
|
|
10004
9985
|
);
|
|
10005
9986
|
}
|
|
9987
|
+
function getAdministrativeAreaHierarchy(administrativeAreaId, administrativeAreas) {
|
|
9988
|
+
const collectedLocations = [];
|
|
9989
|
+
const parsedAdministrativeAreaId = administrativeAreaId && UUID.safeParse(administrativeAreaId).data;
|
|
9990
|
+
let current = parsedAdministrativeAreaId ? administrativeAreas.get(parsedAdministrativeAreaId) : null;
|
|
9991
|
+
while (current) {
|
|
9992
|
+
collectedLocations.push(current);
|
|
9993
|
+
if (!current.parentId) {
|
|
9994
|
+
break;
|
|
9995
|
+
}
|
|
9996
|
+
const parentId = current.parentId;
|
|
9997
|
+
current = administrativeAreas.get(parentId);
|
|
9998
|
+
}
|
|
9999
|
+
return collectedLocations;
|
|
10000
|
+
}
|
|
10001
|
+
function getLocationHierarchy(selectedId, context) {
|
|
10002
|
+
const { administrativeAreas, locations } = context;
|
|
10003
|
+
const loc = locations.get(selectedId);
|
|
10004
|
+
if (loc) {
|
|
10005
|
+
if (loc.administrativeAreaId) {
|
|
10006
|
+
const hierarchy2 = getAdministrativeAreaHierarchy(
|
|
10007
|
+
loc.administrativeAreaId,
|
|
10008
|
+
administrativeAreas
|
|
10009
|
+
);
|
|
10010
|
+
return [...hierarchy2.reverse().map((area) => area.id), loc.id];
|
|
10011
|
+
}
|
|
10012
|
+
return [loc.id];
|
|
10013
|
+
}
|
|
10014
|
+
const hierarchy = getAdministrativeAreaHierarchy(
|
|
10015
|
+
selectedId,
|
|
10016
|
+
administrativeAreas
|
|
10017
|
+
);
|
|
10018
|
+
return hierarchy.reverse().map((area) => area.id);
|
|
10019
|
+
}
|
|
10006
10020
|
|
|
10007
10021
|
// ../commons/src/events/scopes.ts
|
|
10008
10022
|
var ACTION_SCOPE_MAP = {
|
|
@@ -10077,6 +10091,25 @@ function isActionInScope({
|
|
|
10077
10091
|
);
|
|
10078
10092
|
return canAccess;
|
|
10079
10093
|
}
|
|
10094
|
+
function getAvailableRolesForUserUpdatePayload({
|
|
10095
|
+
allRoles,
|
|
10096
|
+
userLocation,
|
|
10097
|
+
acceptedScopes,
|
|
10098
|
+
userRequesting
|
|
10099
|
+
}) {
|
|
10100
|
+
const availableRoles = allRoles.filter((role) => {
|
|
10101
|
+
const canAccess = canAccessOtherUserWithScopes({
|
|
10102
|
+
userToAccess: {
|
|
10103
|
+
...userLocation,
|
|
10104
|
+
role
|
|
10105
|
+
},
|
|
10106
|
+
user: userRequesting,
|
|
10107
|
+
scopes: acceptedScopes
|
|
10108
|
+
});
|
|
10109
|
+
return canAccess;
|
|
10110
|
+
});
|
|
10111
|
+
return availableRoles;
|
|
10112
|
+
}
|
|
10080
10113
|
|
|
10081
10114
|
// ../commons/src/events/serializers/user/deserializer.ts
|
|
10082
10115
|
function userDeserializer(serializedUserField, user2) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const UPSTREAM_URL = "https://github.com/opencrvs/opencrvs-countryconfig.git";
|
|
2
|
-
export declare const UPSTREAM_BRANCH = "
|
|
2
|
+
export declare const UPSTREAM_BRANCH = "release-v2.0.0";
|
|
3
3
|
/**
|
|
4
4
|
* Runs a git command in the country config working directory.
|
|
5
5
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout-upstream-files.d.ts","sourceRoot":"","sources":["../../../src/migrations/v2.0/checkout-upstream-files.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,YAAY,2DACiC,CAAA;
|
|
1
|
+
{"version":3,"file":"checkout-upstream-files.d.ts","sourceRoot":"","sources":["../../../src/migrations/v2.0/checkout-upstream-files.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,YAAY,2DACiC,CAAA;AAE1D,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAc/C;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,MAAc,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5C,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAO9C;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAID,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDnC;AAED,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
|
@@ -59,8 +59,7 @@ exports.main = main;
|
|
|
59
59
|
*/
|
|
60
60
|
const child_process_1 = require("child_process");
|
|
61
61
|
exports.UPSTREAM_URL = 'https://github.com/opencrvs/opencrvs-countryconfig.git';
|
|
62
|
-
|
|
63
|
-
exports.UPSTREAM_BRANCH = 'develop';
|
|
62
|
+
exports.UPSTREAM_BRANCH = 'release-v2.0.0';
|
|
64
63
|
// Remote name used only for the duration of this codemod. Prefixed to avoid
|
|
65
64
|
// clashing with remotes the user may have (origin, upstream, etc.).
|
|
66
65
|
const TEMP_REMOTE = 'opencrvs-upgrade-v19-v20-codemod';
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
interface DeleteInfrastructureOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Top-level entries directly under `infrastructure/` to preserve. Names
|
|
4
|
+
* match against the basename of each entry (file or directory). When
|
|
5
|
+
* empty (the default), the whole `infrastructure/` directory is deleted.
|
|
6
|
+
*/
|
|
7
|
+
keep?: string[];
|
|
8
|
+
}
|
|
9
|
+
declare function main({ keep }?: DeleteInfrastructureOptions): Promise<void>;
|
|
2
10
|
export { main };
|
|
3
11
|
//# sourceMappingURL=delete-infrastructure-directory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-infrastructure-directory.d.ts","sourceRoot":"","sources":["../../../src/migrations/v2.0/delete-infrastructure-directory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delete-infrastructure-directory.d.ts","sourceRoot":"","sources":["../../../src/migrations/v2.0/delete-infrastructure-directory.ts"],"names":[],"mappings":"AAoDA,UAAU,2BAA2B;IACnC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,iBAAe,IAAI,CAAC,EAClB,IAAS,EACV,GAAE,2BAAgC,GAAG,OAAO,CAAC,IAAI,CAAC,CA4FlD;AAED,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
|
@@ -27,20 +27,28 @@ exports.main = main;
|
|
|
27
27
|
* via Docker Swarm. In that case the `infrastructure/` directory shipped
|
|
28
28
|
* with opencrvs-countryconfig is no longer needed and can be removed.
|
|
29
29
|
*
|
|
30
|
+
* Some non-Swarm deployments still need a small subset of
|
|
31
|
+
* `infrastructure/` (e.g. `postgres/` and `metabase/`). Pass `keep` to
|
|
32
|
+
* preserve those top-level subdirectories — everything else under
|
|
33
|
+
* `infrastructure/` is deleted, and the kept subdirectories can then be
|
|
34
|
+
* refreshed from upstream by `merge-infrastructure-directory.ts` with the
|
|
35
|
+
* matching `subdirs` option.
|
|
36
|
+
*
|
|
30
37
|
* Usage:
|
|
31
38
|
* ts-node -r tsconfig-paths/register src/migrations/v2.0/delete-infrastructure-directory.ts
|
|
32
39
|
*
|
|
33
40
|
* What it does:
|
|
34
41
|
* 1. Stages deletion of all tracked files under `infrastructure/` via
|
|
35
|
-
* `git rm -rf --ignore-unmatch --
|
|
36
|
-
*
|
|
42
|
+
* `git rm -rf --ignore-unmatch -- <path>`. This both removes the
|
|
43
|
+
* files from the working tree and records the deletion in the
|
|
37
44
|
* index, so it shows up in the upgrade commit alongside the other
|
|
38
|
-
* codemod changes.
|
|
45
|
+
* codemod changes. When `keep` is provided, deletion is scoped to
|
|
46
|
+
* the top-level entries that are NOT in `keep`.
|
|
39
47
|
* 2. Cleans up any untracked files / empty directory that `git rm` left
|
|
40
|
-
* behind, so the
|
|
48
|
+
* behind, so the deleted paths are fully gone from the working tree.
|
|
41
49
|
*
|
|
42
50
|
* Caveats:
|
|
43
|
-
* - Destructive: any local edits to
|
|
51
|
+
* - Destructive: any local edits to deleted paths are lost. Run on a
|
|
44
52
|
* clean working tree (or after committing your local changes).
|
|
45
53
|
* - If `infrastructure/` doesn't exist, this codemod is a no-op.
|
|
46
54
|
* - Requires git to be installed and the country config working directory
|
|
@@ -51,27 +59,65 @@ const path_1 = require("path");
|
|
|
51
59
|
const checkout_upstream_files_1 = require("./checkout-upstream-files");
|
|
52
60
|
const INFRASTRUCTURE_DIR = 'infrastructure';
|
|
53
61
|
function main() {
|
|
54
|
-
return __awaiter(this,
|
|
62
|
+
return __awaiter(this, arguments, void 0, function* ({ keep = [] } = {}) {
|
|
55
63
|
const fullPath = (0, path_1.join)(process.cwd(), INFRASTRUCTURE_DIR);
|
|
56
64
|
if (!(0, fs_1.existsSync)(fullPath)) {
|
|
57
65
|
console.log(`'${INFRASTRUCTURE_DIR}/' not found in ${process.cwd()} — nothing to delete.`);
|
|
58
66
|
return;
|
|
59
67
|
}
|
|
60
|
-
console.log(`Deleting '${INFRASTRUCTURE_DIR}/'...\n`);
|
|
61
68
|
(0, checkout_upstream_files_1.assertIsGitRepo)();
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
// ─── Whole-directory delete (legacy behavior) ────────────────────────
|
|
70
|
+
if (keep.length === 0) {
|
|
71
|
+
console.log(`Deleting '${INFRASTRUCTURE_DIR}/'...\n`);
|
|
72
|
+
// `git rm -rf --ignore-unmatch` removes tracked files (working tree +
|
|
73
|
+
// index) and is a no-op for paths with no tracked entries, so it's
|
|
74
|
+
// safe to run even when `infrastructure/` exists only as untracked
|
|
75
|
+
// files.
|
|
76
|
+
(0, checkout_upstream_files_1.runGit)(['rm', '-rf', '--ignore-unmatch', '--', `${INFRASTRUCTURE_DIR}/`], {
|
|
77
|
+
silent: true
|
|
78
|
+
});
|
|
79
|
+
console.log(` Staged deletion of tracked files under '${INFRASTRUCTURE_DIR}/'.`);
|
|
80
|
+
// `git rm` leaves untracked files (and any now-empty directory) on
|
|
81
|
+
// disk; remove whatever's left so the path is fully gone.
|
|
82
|
+
if ((0, fs_1.existsSync)(fullPath)) {
|
|
83
|
+
(0, fs_1.rmSync)(fullPath, { recursive: true, force: true });
|
|
84
|
+
console.log(` Removed remaining untracked files under '${INFRASTRUCTURE_DIR}/'.`);
|
|
85
|
+
}
|
|
86
|
+
console.log(`\n Done. Review the staged deletion with: git diff --cached -- '${INFRASTRUCTURE_DIR}/'`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// ─── Selective delete: keep listed top-level entries ─────────────────
|
|
90
|
+
const keepSet = new Set(keep);
|
|
91
|
+
console.log(`Deleting contents of '${INFRASTRUCTURE_DIR}/' except: ${[...keepSet]
|
|
92
|
+
.map((name) => `'${name}'`)
|
|
93
|
+
.join(', ')}\n`);
|
|
94
|
+
const topLevelEntries = (0, fs_1.readdirSync)(fullPath, { withFileTypes: true });
|
|
95
|
+
let deleted = 0;
|
|
96
|
+
for (const entry of topLevelEntries) {
|
|
97
|
+
if (keepSet.has(entry.name)) {
|
|
98
|
+
console.log(` Keeping '${INFRASTRUCTURE_DIR}/${entry.name}'.`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// Append a trailing slash for directories so git treats it as a tree
|
|
102
|
+
// pathspec (matches the recursive behavior of `git rm -rf`).
|
|
103
|
+
const relPath = `${INFRASTRUCTURE_DIR}/${entry.name}${entry.isDirectory() ? '/' : ''}`;
|
|
104
|
+
(0, checkout_upstream_files_1.runGit)(['rm', '-rf', '--ignore-unmatch', '--', relPath], { silent: true });
|
|
105
|
+
const fullEntryPath = (0, path_1.join)(fullPath, entry.name);
|
|
106
|
+
if ((0, fs_1.existsSync)(fullEntryPath)) {
|
|
107
|
+
(0, fs_1.rmSync)(fullEntryPath, { recursive: true, force: true });
|
|
108
|
+
}
|
|
109
|
+
console.log(` Deleted '${relPath}'.`);
|
|
110
|
+
deleted++;
|
|
111
|
+
}
|
|
112
|
+
// Note any requested keeps that weren't actually present, so the dev
|
|
113
|
+
// notices typos / missing directories.
|
|
114
|
+
const presentNames = new Set(topLevelEntries.map((e) => e.name));
|
|
115
|
+
const missingKeeps = [...keepSet].filter((name) => !presentNames.has(name));
|
|
116
|
+
if (missingKeeps.length > 0) {
|
|
117
|
+
console.warn(` [warn] Requested to keep ${missingKeeps
|
|
118
|
+
.map((n) => `'${n}'`)
|
|
119
|
+
.join(', ')} but they don't exist under '${INFRASTRUCTURE_DIR}/'.`);
|
|
74
120
|
}
|
|
75
|
-
console.log(`\n Done. Review the staged
|
|
121
|
+
console.log(`\n Done. Deleted ${deleted} top-level entr${deleted === 1 ? 'y' : 'ies'}. Review the staged deletions with: git diff --cached -- '${INFRASTRUCTURE_DIR}/'`);
|
|
76
122
|
});
|
|
77
123
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-accept-requested-registration-function-type.d.ts","sourceRoot":"","sources":["../../../src/migrations/v2.0/fix-accept-requested-registration-function-type.ts"],"names":[],"mappings":"AAuFA,iBAAe,IAAI,kBA6ClB;AAED,OAAO,EAAE,IAAI,EAAE,CAAA"}
|