diff --git a/docs/schema/ClientPullChangesRequest.schema.json b/docs/schema/ClientPullChangesRequest.schema.json
index 6784ad3..e112fa6 100644
--- a/docs/schema/ClientPullChangesRequest.schema.json
+++ b/docs/schema/ClientPullChangesRequest.schema.json
@@ -62,6 +62,9 @@
},
"usedTime": {
"type": "string"
+ },
+ "tasks": {
+ "type": "string"
}
},
"additionalProperties": false,
diff --git a/docs/schema/README.md b/docs/schema/README.md
index ed21a87..e5f4bf8 100644
--- a/docs/schema/README.md
+++ b/docs/schema/README.md
@@ -43,175 +43,188 @@
- [NewDeviceInfo](./createfamilybymailtokenrequest-properties-newdeviceinfo.md) – `https://timelimit.io/CreateFamilyByMailTokenRequest#/properties/parentDevice`
- [ParentPassword](./serializedparentaction-definitions-serializedadduseraction-properties-parentpassword.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedAddUserAction/properties/password`
- [ParentPassword](./createfamilybymailtokenrequest-definitions-parentpassword.md) – `https://timelimit.io/CreateFamilyByMailTokenRequest#/definitions/ParentPassword`
-- [ParentPassword](./serializedchildaction-definitions-serializedchildchangepasswordaction-properties-parentpassword.md) – `https://timelimit.io/SerializedChildAction#/definitions/SerializedChildChangePasswordAction/properties/password`
-- [ParentPassword](./serializedparentaction-definitions-serializedsetchildpasswordaction-properties-parentpassword.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetChildPasswordAction/properties/newPassword`
-- [ParentPassword](./serializedchildaction-definitions-serializedchildchangepasswordaction-properties-parentpassword.md) – `https://timelimit.io/SerializedChildAction#/definitions/SerializedChildChangePasswordAction/properties/password`
-- [ParentPassword](./serializedparentaction-definitions-parentpassword.md) – `https://timelimit.io/SerializedParentAction#/definitions/ParentPassword`
-- [ParentPassword](./recoverparentpasswordrequest-definitions-parentpassword.md) – `https://timelimit.io/RecoverParentPasswordRequest#/definitions/ParentPassword`
-- [ParentPassword](./createfamilybymailtokenrequest-properties-parentpassword.md) – `https://timelimit.io/CreateFamilyByMailTokenRequest#/properties/parentPassword`
-- [ParentPassword](./serializedchildaction-definitions-parentpassword.md) – `https://timelimit.io/SerializedChildAction#/definitions/ParentPassword`
- [ParentPassword](./recoverparentpasswordrequest-properties-parentpassword.md) – `https://timelimit.io/RecoverParentPasswordRequest#/properties/password`
+- [ParentPassword](./recoverparentpasswordrequest-definitions-parentpassword.md) – `https://timelimit.io/RecoverParentPasswordRequest#/definitions/ParentPassword`
+- [ParentPassword](./serializedparentaction-definitions-serializedsetchildpasswordaction-properties-parentpassword.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetChildPasswordAction/properties/newPassword`
+- [ParentPassword](./serializedparentaction-definitions-parentpassword.md) – `https://timelimit.io/SerializedParentAction#/definitions/ParentPassword`
+- [ParentPassword](./createfamilybymailtokenrequest-properties-parentpassword.md) – `https://timelimit.io/CreateFamilyByMailTokenRequest#/properties/parentPassword`
- [ParentPassword](./serializedparentaction-definitions-serializedsetchildpasswordaction-properties-parentpassword.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetChildPasswordAction/properties/newPassword`
- [ParentPassword](./serializedparentaction-definitions-serializedadduseraction-properties-parentpassword.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedAddUserAction/properties/password`
+- [ParentPassword](./serializedchildaction-definitions-parentpassword.md) – `https://timelimit.io/SerializedChildAction#/definitions/ParentPassword`
+- [ParentPassword](./serializedchildaction-definitions-serializedchildchangepasswordaction-properties-parentpassword.md) – `https://timelimit.io/SerializedChildAction#/definitions/SerializedChildChangePasswordAction/properties/password`
+- [ParentPassword](./serializedchildaction-definitions-serializedchildchangepasswordaction-properties-parentpassword.md) – `https://timelimit.io/SerializedChildAction#/definitions/SerializedChildChangePasswordAction/properties/password`
- [SerialiezdTriedDisablingDeviceAdminAction](./serializedapplogicaction-definitions-serialiezdtrieddisablingdeviceadminaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerialiezdTriedDisablingDeviceAdminAction`
-- [SerialiezdTriedDisablingDeviceAdminAction](./serializedapplogicaction-anyof-serialiezdtrieddisablingdeviceadminaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/6`
+- [SerialiezdTriedDisablingDeviceAdminAction](./serializedapplogicaction-anyof-serialiezdtrieddisablingdeviceadminaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/7`
+- [SerialiizedUpdateNetworkTimeVerificationAction](./serializedparentaction-anyof-serialiizedupdatenetworktimeverificationaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/41`
- [SerialiizedUpdateNetworkTimeVerificationAction](./serializedparentaction-definitions-serialiizedupdatenetworktimeverificationaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerialiizedUpdateNetworkTimeVerificationAction`
-- [SerialiizedUpdateNetworkTimeVerificationAction](./serializedparentaction-anyof-serialiizedupdatenetworktimeverificationaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/38`
-- [SerializeResetCategoryNetworkIdsAction](./serializedparentaction-anyof-serializeresetcategorynetworkidsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/13`
+- [SerializeResetCategoryNetworkIdsAction](./serializedparentaction-anyof-serializeresetcategorynetworkidsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/14`
- [SerializeResetCategoryNetworkIdsAction](./serializedparentaction-definitions-serializeresetcategorynetworkidsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializeResetCategoryNetworkIdsAction`
-- [SerializedAddCategoryAppsAction](./serializedparentaction-anyof-serializedaddcategoryappsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/0`
- [SerializedAddCategoryAppsAction](./serializedparentaction-definitions-serializedaddcategoryappsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedAddCategoryAppsAction`
-- [SerializedAddCategoryNetworkIdAction](./serializedparentaction-anyof-serializedaddcategorynetworkidaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/1`
+- [SerializedAddCategoryAppsAction](./serializedparentaction-anyof-serializedaddcategoryappsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/0`
- [SerializedAddCategoryNetworkIdAction](./serializedparentaction-definitions-serializedaddcategorynetworkidaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedAddCategoryNetworkIdAction`
+- [SerializedAddCategoryNetworkIdAction](./serializedparentaction-anyof-serializedaddcategorynetworkidaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/1`
- [SerializedAddInstalledAppsAction](./serializedapplogicaction-definitions-serializedaddinstalledappsaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddInstalledAppsAction`
- [SerializedAddInstalledAppsAction](./serializedapplogicaction-anyof-serializedaddinstalledappsaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/0`
-- [SerializedAddUsedTimeAction](./serializedapplogicaction-anyof-serializedaddusedtimeaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/1`
- [SerializedAddUsedTimeAction](./serializedapplogicaction-definitions-serializedaddusedtimeaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeAction`
-- [SerializedAddUsedTimeActionVersion2](./serializedapplogicaction-anyof-serializedaddusedtimeactionversion2.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/2`
+- [SerializedAddUsedTimeAction](./serializedapplogicaction-anyof-serializedaddusedtimeaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/1`
- [SerializedAddUsedTimeActionVersion2](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2`
-- [SerializedAddUserAction](./serializedparentaction-anyof-serializedadduseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/2`
+- [SerializedAddUsedTimeActionVersion2](./serializedapplogicaction-anyof-serializedaddusedtimeactionversion2.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/2`
- [SerializedAddUserAction](./serializedparentaction-definitions-serializedadduseraction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedAddUserAction`
+- [SerializedAddUserAction](./serializedparentaction-anyof-serializedadduseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/2`
- [SerializedAppActivityItem](./serverdatastatus-definitions-serverinstalledappsdata-properties-activities-serializedappactivityitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/activities/items`
+- [SerializedAppActivityItem](./serverdatastatus-definitions-serverinstalledappsdata-properties-activities-serializedappactivityitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/activities/items`
+- [SerializedAppActivityItem](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-updatedoradded-serializedappactivityitem.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/updatedOrAdded/items`
- [SerializedAppActivityItem](./serverdatastatus-definitions-serializedappactivityitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/SerializedAppActivityItem`
- [SerializedAppActivityItem](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-updatedoradded-serializedappactivityitem.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/updatedOrAdded/items`
- [SerializedAppActivityItem](./serializedapplogicaction-definitions-serializedappactivityitem.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAppActivityItem`
-- [SerializedAppActivityItem](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-updatedoradded-serializedappactivityitem.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/updatedOrAdded/items`
-- [SerializedAppActivityItem](./serverdatastatus-definitions-serverinstalledappsdata-properties-activities-serializedappactivityitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/activities/items`
- [SerializedChangeParentPasswordAction](./serializedparentaction-definitions-serializedchangeparentpasswordaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedChangeParentPasswordAction`
- [SerializedChangeParentPasswordAction](./serializedparentaction-anyof-serializedchangeparentpasswordaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/3`
- [SerializedChildChangePasswordAction](./serializedchildaction-definitions-serializedchildchangepasswordaction.md) – `https://timelimit.io/SerializedChildAction#/definitions/SerializedChildChangePasswordAction`
- [SerializedChildChangePasswordAction](./serializedchildaction-anyof-serializedchildchangepasswordaction.md) – `https://timelimit.io/SerializedChildAction#/anyOf/0`
- [SerializedChildSignInAction](./serializedchildaction-definitions-serializedchildsigninaction.md) – `https://timelimit.io/SerializedChildAction#/definitions/SerializedChildSignInAction`
- [SerializedChildSignInAction](./serializedchildaction-anyof-serializedchildsigninaction.md) – `https://timelimit.io/SerializedChildAction#/anyOf/1`
-- [SerializedCreateCategoryAction](./serializedparentaction-definitions-serializedcreatecategoryaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedCreateCategoryAction`
- [SerializedCreateCategoryAction](./serializedparentaction-anyof-serializedcreatecategoryaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/4`
+- [SerializedCreateCategoryAction](./serializedparentaction-definitions-serializedcreatecategoryaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedCreateCategoryAction`
- [SerializedCreateTimelimtRuleAction](./serializedparentaction-anyof-serializedcreatetimelimtruleaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/5`
- [SerializedCreateTimelimtRuleAction](./serializedparentaction-definitions-serializedcreatetimelimtruleaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedCreateTimelimtRuleAction`
- [SerializedDeleteCategoryAction](./serializedparentaction-anyof-serializeddeletecategoryaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/6`
- [SerializedDeleteCategoryAction](./serializedparentaction-definitions-serializeddeletecategoryaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteCategoryAction`
-- [SerializedDeleteTimeLimitRuleAction](./serializedparentaction-anyof-serializeddeletetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/7`
+- [SerializedDeleteChildTaskAction](./serializedparentaction-anyof-serializeddeletechildtaskaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/7`
+- [SerializedDeleteChildTaskAction](./serializedparentaction-definitions-serializeddeletechildtaskaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction`
+- [SerializedDeleteTimeLimitRuleAction](./serializedparentaction-anyof-serializeddeletetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/8`
- [SerializedDeleteTimeLimitRuleAction](./serializedparentaction-definitions-serializeddeletetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteTimeLimitRuleAction`
- [SerializedForceSyncAction](./serializedapplogicaction-definitions-serializedforcesyncaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedForceSyncAction`
- [SerializedForceSyncAction](./serializedapplogicaction-anyof-serializedforcesyncaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/3`
- [SerializedIgnoreManipulationAction](./serializedparentaction-definitions-serializedignoremanipulationaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction`
-- [SerializedIgnoreManipulationAction](./serializedparentaction-anyof-serializedignoremanipulationaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/8`
+- [SerializedIgnoreManipulationAction](./serializedparentaction-anyof-serializedignoremanipulationaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/9`
- [SerializedIncrementCategoryExtraTimeAction](./serializedparentaction-definitions-serializedincrementcategoryextratimeaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedIncrementCategoryExtraTimeAction`
-- [SerializedIncrementCategoryExtraTimeAction](./serializedparentaction-anyof-serializedincrementcategoryextratimeaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/9`
+- [SerializedIncrementCategoryExtraTimeAction](./serializedparentaction-anyof-serializedincrementcategoryextratimeaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/10`
+- [SerializedInstalledApp](./serializedapplogicaction-definitions-serializedaddinstalledappsaction-properties-apps-serializedinstalledapp.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddInstalledAppsAction/properties/apps/items`
- [SerializedInstalledApp](./serverdatastatus-definitions-serializedinstalledapp.md) – `https://timelimit.io/ServerDataStatus#/definitions/SerializedInstalledApp`
-- [SerializedInstalledApp](./serverdatastatus-definitions-serverinstalledappsdata-properties-apps-serializedinstalledapp.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/apps/items`
- [SerializedInstalledApp](./serializedapplogicaction-definitions-serializedaddinstalledappsaction-properties-apps-serializedinstalledapp.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddInstalledAppsAction/properties/apps/items`
+- [SerializedInstalledApp](./serverdatastatus-definitions-serverinstalledappsdata-properties-apps-serializedinstalledapp.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/apps/items`
+- [SerializedInstalledApp](./serverdatastatus-definitions-serverinstalledappsdata-properties-apps-serializedinstalledapp.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/apps/items`
- [SerializedInstalledApp](./serializedapplogicaction-definitions-serializedinstalledapp.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedInstalledApp`
-- [SerializedInstalledApp](./serverdatastatus-definitions-serverinstalledappsdata-properties-apps-serializedinstalledapp.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/apps/items`
-- [SerializedInstalledApp](./serializedapplogicaction-definitions-serializedaddinstalledappsaction-properties-apps-serializedinstalledapp.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddInstalledAppsAction/properties/apps/items`
-- [SerializedRemoveCategoryAppsAction](./serializedparentaction-anyof-serializedremovecategoryappsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/10`
+- [SerializedMarkTaskPendingAction](./serializedapplogicaction-anyof-serializedmarktaskpendingaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/4`
+- [SerializedMarkTaskPendingAction](./serializedapplogicaction-definitions-serializedmarktaskpendingaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction`
- [SerializedRemoveCategoryAppsAction](./serializedparentaction-definitions-serializedremovecategoryappsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedRemoveCategoryAppsAction`
+- [SerializedRemoveCategoryAppsAction](./serializedparentaction-anyof-serializedremovecategoryappsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/11`
+- [SerializedRemoveInstalledAppsAction](./serializedapplogicaction-anyof-serializedremoveinstalledappsaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/5`
- [SerializedRemoveInstalledAppsAction](./serializedapplogicaction-definitions-serializedremoveinstalledappsaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedRemoveInstalledAppsAction`
-- [SerializedRemoveInstalledAppsAction](./serializedapplogicaction-anyof-serializedremoveinstalledappsaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/4`
-- [SerializedRemoveUserAction](./serializedparentaction-anyof-serializedremoveuseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/11`
+- [SerializedRemoveUserAction](./serializedparentaction-anyof-serializedremoveuseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/12`
- [SerializedRemoveUserAction](./serializedparentaction-definitions-serializedremoveuseraction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedRemoveUserAction`
+- [SerializedRenameChildAction](./serializedparentaction-anyof-serializedrenamechildaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/13`
- [SerializedRenameChildAction](./serializedparentaction-definitions-serializedrenamechildaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedRenameChildAction`
-- [SerializedRenameChildAction](./serializedparentaction-anyof-serializedrenamechildaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/12`
-- [SerializedResetParentBlockedTimesAction](./serializedparentaction-anyof-serializedresetparentblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/14`
- [SerializedResetParentBlockedTimesAction](./serializedparentaction-definitions-serializedresetparentblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedResetParentBlockedTimesAction`
+- [SerializedResetParentBlockedTimesAction](./serializedparentaction-anyof-serializedresetparentblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/15`
+- [SerializedReviewChildTaskAction](./serializedparentaction-anyof-serializedreviewchildtaskaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/16`
+- [SerializedReviewChildTaskAction](./serializedparentaction-definitions-serializedreviewchildtaskaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction`
- [SerializedSetCategoryExtraTimeAction](./serializedparentaction-definitions-serializedsetcategoryextratimeaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryExtraTimeAction`
-- [SerializedSetCategoryExtraTimeAction](./serializedparentaction-anyof-serializedsetcategoryextratimeaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/15`
+- [SerializedSetCategoryExtraTimeAction](./serializedparentaction-anyof-serializedsetcategoryextratimeaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/17`
+- [SerializedSetCategoryForUnassignedAppsAction](./serializedparentaction-anyof-serializedsetcategoryforunassignedappsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/18`
- [SerializedSetCategoryForUnassignedAppsAction](./serializedparentaction-definitions-serializedsetcategoryforunassignedappsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryForUnassignedAppsAction`
-- [SerializedSetCategoryForUnassignedAppsAction](./serializedparentaction-anyof-serializedsetcategoryforunassignedappsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/16`
+- [SerializedSetChildPasswordAction](./serializedparentaction-anyof-serializedsetchildpasswordaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/19`
- [SerializedSetChildPasswordAction](./serializedparentaction-definitions-serializedsetchildpasswordaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetChildPasswordAction`
-- [SerializedSetChildPasswordAction](./serializedparentaction-anyof-serializedsetchildpasswordaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/17`
+- [SerializedSetConsiderRebootManipulationAction](./serializedparentaction-anyof-serializedsetconsiderrebootmanipulationaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/20`
- [SerializedSetConsiderRebootManipulationAction](./serializedparentaction-definitions-serializedsetconsiderrebootmanipulationaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetConsiderRebootManipulationAction`
-- [SerializedSetConsiderRebootManipulationAction](./serializedparentaction-anyof-serializedsetconsiderrebootmanipulationaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/18`
-- [SerializedSetDeviceDefaultUserAction](./serializedparentaction-anyof-serializedsetdevicedefaultuseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/19`
+- [SerializedSetDeviceDefaultUserAction](./serializedparentaction-anyof-serializedsetdevicedefaultuseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/21`
- [SerializedSetDeviceDefaultUserAction](./serializedparentaction-definitions-serializedsetdevicedefaultuseraction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetDeviceDefaultUserAction`
- [SerializedSetDeviceDefaultUserTimeoutAction](./serializedparentaction-definitions-serializedsetdevicedefaultusertimeoutaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetDeviceDefaultUserTimeoutAction`
-- [SerializedSetDeviceDefaultUserTimeoutAction](./serializedparentaction-anyof-serializedsetdevicedefaultusertimeoutaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/20`
+- [SerializedSetDeviceDefaultUserTimeoutAction](./serializedparentaction-anyof-serializedsetdevicedefaultusertimeoutaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/22`
+- [SerializedSetDeviceUserAction](./serializedparentaction-anyof-serializedsetdeviceuseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/23`
- [SerializedSetDeviceUserAction](./serializedparentaction-definitions-serializedsetdeviceuseraction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetDeviceUserAction`
-- [SerializedSetDeviceUserAction](./serializedparentaction-anyof-serializedsetdeviceuseraction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/21`
+- [SerializedSetKeepSignedInAction](./serializedparentaction-anyof-serializedsetkeepsignedinaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/24`
- [SerializedSetKeepSignedInAction](./serializedparentaction-definitions-serializedsetkeepsignedinaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetKeepSignedInAction`
-- [SerializedSetKeepSignedInAction](./serializedparentaction-anyof-serializedsetkeepsignedinaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/22`
-- [SerializedSetParentCategoryAction](./serializedparentaction-anyof-serializedsetparentcategoryaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/23`
+- [SerializedSetParentCategoryAction](./serializedparentaction-anyof-serializedsetparentcategoryaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/25`
- [SerializedSetParentCategoryAction](./serializedparentaction-definitions-serializedsetparentcategoryaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetParentCategoryAction`
-- [SerializedSetRelaxPrimaryDeviceAction](./serializedparentaction-anyof-serializedsetrelaxprimarydeviceaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/24`
+- [SerializedSetRelaxPrimaryDeviceAction](./serializedparentaction-anyof-serializedsetrelaxprimarydeviceaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/26`
- [SerializedSetRelaxPrimaryDeviceAction](./serializedparentaction-definitions-serializedsetrelaxprimarydeviceaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetRelaxPrimaryDeviceAction`
- [SerializedSetSendDeviceConnected](./serializedparentaction-definitions-serializedsetsenddeviceconnected.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetSendDeviceConnected`
-- [SerializedSetSendDeviceConnected](./serializedparentaction-anyof-serializedsetsenddeviceconnected.md) – `https://timelimit.io/SerializedParentAction#/anyOf/25`
+- [SerializedSetSendDeviceConnected](./serializedparentaction-anyof-serializedsetsenddeviceconnected.md) – `https://timelimit.io/SerializedParentAction#/anyOf/27`
- [SerializedSetUserDisableLimitsUntilAction](./serializedparentaction-definitions-serializedsetuserdisablelimitsuntilaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetUserDisableLimitsUntilAction`
-- [SerializedSetUserDisableLimitsUntilAction](./serializedparentaction-anyof-serializedsetuserdisablelimitsuntilaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/26`
+- [SerializedSetUserDisableLimitsUntilAction](./serializedparentaction-anyof-serializedsetuserdisablelimitsuntilaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/28`
+- [SerializedSetUserTimezoneAction](./serializedparentaction-anyof-serializedsetusertimezoneaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/29`
- [SerializedSetUserTimezoneAction](./serializedparentaction-definitions-serializedsetusertimezoneaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetUserTimezoneAction`
-- [SerializedSetUserTimezoneAction](./serializedparentaction-anyof-serializedsetusertimezoneaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/27`
+- [SerializedSignOutAtDeviceAction](./serializedapplogicaction-anyof-serializedsignoutatdeviceaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/6`
- [SerializedSignOutAtDeviceAction](./serializedapplogicaction-definitions-serializedsignoutatdeviceaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSignOutAtDeviceAction`
-- [SerializedSignOutAtDeviceAction](./serializedapplogicaction-anyof-serializedsignoutatdeviceaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/5`
-- [SerializedTimeLimitRule](./serializedparentaction-definitions-serializedcreatetimelimtruleaction-properties-serializedtimelimitrule.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedCreateTimelimtRuleAction/properties/rule`
-- [SerializedTimeLimitRule](./serializedparentaction-definitions-serializedcreatetimelimtruleaction-properties-serializedtimelimitrule.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedCreateTimelimtRuleAction/properties/rule`
- [SerializedTimeLimitRule](./serializedparentaction-definitions-serializedtimelimitrule.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule`
-- [SerializedUpdatCategoryDisableLimitsAction](./serializedparentaction-anyof-serializedupdatcategorydisablelimitsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/31`
+- [SerializedTimeLimitRule](./serializedparentaction-definitions-serializedcreatetimelimtruleaction-properties-serializedtimelimitrule.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedCreateTimelimtRuleAction/properties/rule`
+- [SerializedTimeLimitRule](./serializedparentaction-definitions-serializedcreatetimelimtruleaction-properties-serializedtimelimitrule.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedCreateTimelimtRuleAction/properties/rule`
- [SerializedUpdatCategoryDisableLimitsAction](./serializedparentaction-definitions-serializedupdatcategorydisablelimitsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdatCategoryDisableLimitsAction`
+- [SerializedUpdatCategoryDisableLimitsAction](./serializedparentaction-anyof-serializedupdatcategorydisablelimitsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/33`
- [SerializedUpdateAppActivitiesAction](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction`
-- [SerializedUpdateAppActivitiesAction](./serializedapplogicaction-anyof-serializedupdateappactivitiesaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/7`
+- [SerializedUpdateAppActivitiesAction](./serializedapplogicaction-anyof-serializedupdateappactivitiesaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/8`
- [SerializedUpdateCategoryBatteryLimitAction](./serializedparentaction-definitions-serializedupdatecategorybatterylimitaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategoryBatteryLimitAction`
-- [SerializedUpdateCategoryBatteryLimitAction](./serializedparentaction-anyof-serializedupdatecategorybatterylimitaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/28`
+- [SerializedUpdateCategoryBatteryLimitAction](./serializedparentaction-anyof-serializedupdatecategorybatterylimitaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/30`
- [SerializedUpdateCategoryBlockAllNotificationsAction](./serializedparentaction-definitions-serializedupdatecategoryblockallnotificationsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategoryBlockAllNotificationsAction`
-- [SerializedUpdateCategoryBlockAllNotificationsAction](./serializedparentaction-anyof-serializedupdatecategoryblockallnotificationsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/29`
-- [SerializedUpdateCategoryBlockedTimesAction](./serializedparentaction-anyof-serializedupdatecategoryblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/30`
+- [SerializedUpdateCategoryBlockAllNotificationsAction](./serializedparentaction-anyof-serializedupdatecategoryblockallnotificationsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/31`
- [SerializedUpdateCategoryBlockedTimesAction](./serializedparentaction-definitions-serializedupdatecategoryblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategoryBlockedTimesAction`
+- [SerializedUpdateCategoryBlockedTimesAction](./serializedparentaction-anyof-serializedupdatecategoryblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/32`
+- [SerializedUpdateCategorySortingAction](./serializedparentaction-anyof-serializedupdatecategorysortingaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/34`
- [SerializedUpdateCategorySortingAction](./serializedparentaction-definitions-serializedupdatecategorysortingaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategorySortingAction`
-- [SerializedUpdateCategorySortingAction](./serializedparentaction-anyof-serializedupdatecategorysortingaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/32`
+- [SerializedUpdateCategoryTemporarilyBlockedAction](./serializedparentaction-anyof-serializedupdatecategorytemporarilyblockedaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/35`
- [SerializedUpdateCategoryTemporarilyBlockedAction](./serializedparentaction-definitions-serializedupdatecategorytemporarilyblockedaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategoryTemporarilyBlockedAction`
-- [SerializedUpdateCategoryTemporarilyBlockedAction](./serializedparentaction-anyof-serializedupdatecategorytemporarilyblockedaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/33`
-- [SerializedUpdateCategoryTimeWarningsAction](./serializedparentaction-anyof-serializedupdatecategorytimewarningsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/34`
+- [SerializedUpdateCategoryTimeWarningsAction](./serializedparentaction-anyof-serializedupdatecategorytimewarningsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/36`
- [SerializedUpdateCategoryTimeWarningsAction](./serializedparentaction-definitions-serializedupdatecategorytimewarningsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategoryTimeWarningsAction`
+- [SerializedUpdateCategoryTitleAction](./serializedparentaction-anyof-serializedupdatecategorytitleaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/37`
- [SerializedUpdateCategoryTitleAction](./serializedparentaction-definitions-serializedupdatecategorytitleaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategoryTitleAction`
-- [SerializedUpdateCategoryTitleAction](./serializedparentaction-anyof-serializedupdatecategorytitleaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/35`
-- [SerializedUpdateDeviceNameAction](./serializedparentaction-anyof-serializedupdatedevicenameaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/36`
+- [SerializedUpdateChildTaskAction](./serializedparentaction-anyof-serializedupdatechildtaskaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/38`
+- [SerializedUpdateChildTaskAction](./serializedparentaction-definitions-serializedupdatechildtaskaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction`
+- [SerializedUpdateDeviceNameAction](./serializedparentaction-anyof-serializedupdatedevicenameaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/39`
- [SerializedUpdateDeviceNameAction](./serializedparentaction-definitions-serializedupdatedevicenameaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateDeviceNameAction`
+- [SerializedUpdateDeviceStatusAction](./serializedapplogicaction-anyof-serializedupdatedevicestatusaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/9`
- [SerializedUpdateDeviceStatusAction](./serializedapplogicaction-definitions-serializedupdatedevicestatusaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction`
-- [SerializedUpdateDeviceStatusAction](./serializedapplogicaction-anyof-serializedupdatedevicestatusaction.md) – `https://timelimit.io/SerializedAppLogicAction#/anyOf/8`
-- [SerializedUpdateEnableActivityLevelBlockingAction](./serializedparentaction-anyof-serializedupdateenableactivitylevelblockingaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/37`
+- [SerializedUpdateEnableActivityLevelBlockingAction](./serializedparentaction-anyof-serializedupdateenableactivitylevelblockingaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/40`
- [SerializedUpdateEnableActivityLevelBlockingAction](./serializedparentaction-definitions-serializedupdateenableactivitylevelblockingaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateEnableActivityLevelBlockingAction`
+- [SerializedUpdateParentBlockedTimesAction](./serializedparentaction-anyof-serializedupdateparentblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/42`
- [SerializedUpdateParentBlockedTimesAction](./serializedparentaction-definitions-serializedupdateparentblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateParentBlockedTimesAction`
-- [SerializedUpdateParentBlockedTimesAction](./serializedparentaction-anyof-serializedupdateparentblockedtimesaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/39`
-- [SerializedUpdateParentNotificationFlagsAction](./serializedparentaction-anyof-serializedupdateparentnotificationflagsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/40`
+- [SerializedUpdateParentNotificationFlagsAction](./serializedparentaction-anyof-serializedupdateparentnotificationflagsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/43`
- [SerializedUpdateParentNotificationFlagsAction](./serializedparentaction-definitions-serializedupdateparentnotificationflagsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateParentNotificationFlagsAction`
- [SerializedUpdateTimelimitRuleAction](./serializedparentaction-definitions-serializedupdatetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction`
-- [SerializedUpdateTimelimitRuleAction](./serializedparentaction-anyof-serializedupdatetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/41`
-- [SerializedUpdateUserFlagsAction](./serializedparentaction-anyof-serializedupdateuserflagsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/42`
+- [SerializedUpdateTimelimitRuleAction](./serializedparentaction-anyof-serializedupdatetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/44`
+- [SerializedUpdateUserFlagsAction](./serializedparentaction-anyof-serializedupdateuserflagsaction.md) – `https://timelimit.io/SerializedParentAction#/anyOf/45`
- [SerializedUpdateUserFlagsAction](./serializedparentaction-definitions-serializedupdateuserflagsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateUserFlagsAction`
+- [SerializedUpdateUserLimitLoginCategory](./serializedparentaction-anyof-serializedupdateuserlimitlogincategory.md) – `https://timelimit.io/SerializedParentAction#/anyOf/46`
- [SerializedUpdateUserLimitLoginCategory](./serializedparentaction-definitions-serializedupdateuserlimitlogincategory.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateUserLimitLoginCategory`
-- [SerializedUpdateUserLimitLoginCategory](./serializedparentaction-anyof-serializedupdateuserlimitlogincategory.md) – `https://timelimit.io/SerializedParentAction#/anyOf/43`
-- [ServerCategoryNetworkId](./serverdatastatus-definitions-serverupdatedcategorybasedata-properties-networks-servercategorynetworkid.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/networks/items`
-- [ServerCategoryNetworkId](./serverdatastatus-definitions-serverupdatedcategorybasedata-properties-networks-servercategorynetworkid.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/networks/items`
- [ServerCategoryNetworkId](./serverdatastatus-definitions-servercategorynetworkid.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerCategoryNetworkId`
-- [ServerDeviceData](./serverdatastatus-definitions-serverdevicelist-properties-data-serverdevicedata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList/properties/data/items`
+- [ServerCategoryNetworkId](./serverdatastatus-definitions-serverupdatedcategorybasedata-properties-networks-servercategorynetworkid.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/networks/items`
+- [ServerCategoryNetworkId](./serverdatastatus-definitions-serverupdatedcategorybasedata-properties-networks-servercategorynetworkid.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/networks/items`
- [ServerDeviceData](./serverdatastatus-definitions-serverdevicedata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData`
- [ServerDeviceData](./serverdatastatus-definitions-serverdevicelist-properties-data-serverdevicedata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList/properties/data/items`
+- [ServerDeviceData](./serverdatastatus-definitions-serverdevicelist-properties-data-serverdevicedata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList/properties/data/items`
- [ServerDeviceList](./serverdatastatus-properties-serverdevicelist.md) – `https://timelimit.io/ServerDataStatus#/properties/devices`
- [ServerDeviceList](./serverdatastatus-definitions-serverdevicelist.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList`
-- [ServerInstalledAppsData](./serverdatastatus-definitions-serverinstalledappsdata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData`
- [ServerInstalledAppsData](./serverdatastatus-properties-apps-serverinstalledappsdata.md) – `https://timelimit.io/ServerDataStatus#/properties/apps/items`
+- [ServerInstalledAppsData](./serverdatastatus-definitions-serverinstalledappsdata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData`
+- [ServerSessionDurationItem](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-sessiondurations-serversessiondurationitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/sessionDurations/items`
- [ServerSessionDurationItem](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-sessiondurations-serversessiondurationitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/sessionDurations/items`
- [ServerSessionDurationItem](./serverdatastatus-definitions-serversessiondurationitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerSessionDurationItem`
-- [ServerSessionDurationItem](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-sessiondurations-serversessiondurationitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/sessionDurations/items`
- [ServerTimeLimitRule](./serverdatastatus-definitions-serverupdatedtimelimitrules-properties-rules-servertimelimitrule.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/rules/items`
- [ServerTimeLimitRule](./serverdatastatus-definitions-servertimelimitrule.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule`
- [ServerTimeLimitRule](./serverdatastatus-definitions-serverupdatedtimelimitrules-properties-rules-servertimelimitrule.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/rules/items`
-- [ServerUpdatedCategoryAssignedApps](./serverdatastatus-definitions-serverupdatedcategoryassignedapps.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryAssignedApps`
- [ServerUpdatedCategoryAssignedApps](./serverdatastatus-properties-categoryapp-serverupdatedcategoryassignedapps.md) – `https://timelimit.io/ServerDataStatus#/properties/categoryApp/items`
-- [ServerUpdatedCategoryBaseData](./serverdatastatus-properties-categorybase-serverupdatedcategorybasedata.md) – `https://timelimit.io/ServerDataStatus#/properties/categoryBase/items`
+- [ServerUpdatedCategoryAssignedApps](./serverdatastatus-definitions-serverupdatedcategoryassignedapps.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryAssignedApps`
- [ServerUpdatedCategoryBaseData](./serverdatastatus-definitions-serverupdatedcategorybasedata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData`
+- [ServerUpdatedCategoryBaseData](./serverdatastatus-properties-categorybase-serverupdatedcategorybasedata.md) – `https://timelimit.io/ServerDataStatus#/properties/categoryBase/items`
+- [ServerUpdatedCategoryTask](./serverdatastatus-definitions-serverupdatedcategorytask.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask`
+- [ServerUpdatedCategoryTask](./serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks-serverupdatedcategorytask.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks/items`
+- [ServerUpdatedCategoryTask](./serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks-serverupdatedcategorytask.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks/items`
+- [ServerUpdatedCategoryTasks](./serverdatastatus-definitions-serverupdatedcategorytasks.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks`
+- [ServerUpdatedCategoryTasks](./serverdatastatus-properties-tasks-serverupdatedcategorytasks.md) – `https://timelimit.io/ServerDataStatus#/properties/tasks/items`
- [ServerUpdatedCategoryUsedTimes](./serverdatastatus-properties-usedtimes-serverupdatedcategoryusedtimes.md) – `https://timelimit.io/ServerDataStatus#/properties/usedTimes/items`
- [ServerUpdatedCategoryUsedTimes](./serverdatastatus-definitions-serverupdatedcategoryusedtimes.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes`
-- [ServerUpdatedTimeLimitRules](./serverdatastatus-properties-rules-serverupdatedtimelimitrules.md) – `https://timelimit.io/ServerDataStatus#/properties/rules/items`
- [ServerUpdatedTimeLimitRules](./serverdatastatus-definitions-serverupdatedtimelimitrules.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules`
+- [ServerUpdatedTimeLimitRules](./serverdatastatus-properties-rules-serverupdatedtimelimitrules.md) – `https://timelimit.io/ServerDataStatus#/properties/rules/items`
+- [ServerUsedTimeItem](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-times-serverusedtimeitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/times/items`
+- [ServerUsedTimeItem](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-times-serverusedtimeitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/times/items`
- [ServerUsedTimeItem](./serverdatastatus-definitions-serverusedtimeitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUsedTimeItem`
-- [ServerUsedTimeItem](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-times-serverusedtimeitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/times/items`
-- [ServerUsedTimeItem](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-times-serverusedtimeitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/times/items`
+- [ServerUserEntry](./serverdatastatus-definitions-serveruserlist-properties-data-serveruserentry.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data/items`
- [ServerUserEntry](./serverdatastatus-definitions-serveruserlist-properties-data-serveruserentry.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data/items`
- [ServerUserEntry](./serverdatastatus-definitions-serveruserentry.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserEntry`
-- [ServerUserEntry](./serverdatastatus-definitions-serveruserlist-properties-data-serveruserentry.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data/items`
-- [ServerUserList](./serverdatastatus-properties-serveruserlist.md) – `https://timelimit.io/ServerDataStatus#/properties/users`
- [ServerUserList](./serverdatastatus-definitions-serveruserlist.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList`
-- [Untitled object in ClientPullChangesRequest](./clientpullchangesrequest-definitions-clientdatastatus-properties-categories.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/categories`
+- [ServerUserList](./serverdatastatus-properties-serveruserlist.md) – `https://timelimit.io/ServerDataStatus#/properties/users`
- [Untitled object in ClientPullChangesRequest](./clientpullchangesrequest-definitions-clientdatastatus-properties-apps.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/apps`
+- [Untitled object in ClientPullChangesRequest](./clientpullchangesrequest-definitions-clientdatastatus-properties-categories.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/categories`
- [Untitled object in ClientPullChangesRequest](./clientpullchangesrequest-definitions-clientdatastatus-properties-apps.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/apps`
- [Untitled object in ClientPullChangesRequest](./clientpullchangesrequest-definitions-clientdatastatus-properties-categories.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/categories`
- [Untitled object in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items`
@@ -229,25 +242,25 @@
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-removed.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/removed`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-removed-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/removed/items`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-updatedoradded.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/updatedOrAdded`
-- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i`
+- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddinstalledappsaction-properties-apps.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddInstalledAppsAction/properties/apps`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items-properties-as.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items/properties/as`
-- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items-properties-as-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items/properties/as/items`
+- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items-properties-sdl.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items/properties/sdl`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items-properties-sdl-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items/properties/sdl/items`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedremoveinstalledappsaction-properties-packagenames.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedRemoveInstalledAppsAction/properties/packageNames`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-removed.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/removed`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-removed-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/removed/items`
- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-updatedoradded.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/updatedOrAdded`
-- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddinstalledappsaction-properties-apps.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddInstalledAppsAction/properties/apps`
+- [Untitled array in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items-properties-as-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items/properties/as/items`
- [Untitled array in SerializedParentAction](./serializedparentaction-definitions-serializedaddcategoryappsaction-properties-packagenames.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedAddCategoryAppsAction/properties/packageNames`
- [Untitled array in SerializedParentAction](./serializedparentaction-definitions-serializedremovecategoryappsaction-properties-packagenames.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedRemoveCategoryAppsAction/properties/packageNames`
- [Untitled array in SerializedParentAction](./serializedparentaction-definitions-serializedupdatecategorysortingaction-properties-categoryids.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategorySortingAction/properties/categoryIds`
- [Untitled array in SerializedParentAction](./serializedparentaction-definitions-serializedaddcategoryappsaction-properties-packagenames.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedAddCategoryAppsAction/properties/packageNames`
- [Untitled array in SerializedParentAction](./serializedparentaction-definitions-serializedremovecategoryappsaction-properties-packagenames.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedRemoveCategoryAppsAction/properties/packageNames`
- [Untitled array in SerializedParentAction](./serializedparentaction-definitions-serializedupdatecategorysortingaction-properties-categoryids.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateCategorySortingAction/properties/categoryIds`
-- [Untitled array in ServerDataStatus](./serverdatastatus-properties-rules.md) – `https://timelimit.io/ServerDataStatus#/properties/rules`
-- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverdevicelist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList/properties/data`
+- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serveruserlist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data`
+- [Untitled array in ServerDataStatus](./serverdatastatus-properties-apps.md) – `https://timelimit.io/ServerDataStatus#/properties/apps`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverinstalledappsdata-properties-apps.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/apps`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverinstalledappsdata-properties-activities.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/activities`
- [Untitled array in ServerDataStatus](./serverdatastatus-properties-rmcategories.md) – `https://timelimit.io/ServerDataStatus#/properties/rmCategories`
@@ -258,8 +271,10 @@
- [Untitled array in ServerDataStatus](./serverdatastatus-properties-usedtimes.md) – `https://timelimit.io/ServerDataStatus#/properties/usedTimes`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-times.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/times`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-sessiondurations.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/sessionDurations`
-- [Untitled array in ServerDataStatus](./serverdatastatus-properties-apps.md) – `https://timelimit.io/ServerDataStatus#/properties/apps`
+- [Untitled array in ServerDataStatus](./serverdatastatus-properties-rules.md) – `https://timelimit.io/ServerDataStatus#/properties/rules`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedtimelimitrules-properties-rules.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/rules`
+- [Untitled array in ServerDataStatus](./serverdatastatus-properties-tasks.md) – `https://timelimit.io/ServerDataStatus#/properties/tasks`
+- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serveruserlist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverdevicelist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList/properties/data`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverinstalledappsdata-properties-apps.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/apps`
@@ -269,7 +284,8 @@
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-times.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/times`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-sessiondurations.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/sessionDurations`
- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedtimelimitrules-properties-rules.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/rules`
-- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serveruserlist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data`
+- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks`
+- [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverdevicelist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList/properties/data`
## Version Note
diff --git a/docs/schema/SerializedAppLogicAction.schema.json b/docs/schema/SerializedAppLogicAction.schema.json
index dd29150..bcf390c 100644
--- a/docs/schema/SerializedAppLogicAction.schema.json
+++ b/docs/schema/SerializedAppLogicAction.schema.json
@@ -12,6 +12,9 @@
{
"$ref": "#/definitions/SerializedForceSyncAction"
},
+ {
+ "$ref": "#/definitions/SerializedMarkTaskPendingAction"
+ },
{
"$ref": "#/definitions/SerializedRemoveInstalledAppsAction"
},
@@ -243,6 +246,26 @@
],
"title": "SerializedForceSyncAction"
},
+ "SerializedMarkTaskPendingAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "MARK_TASK_PENDING"
+ ]
+ },
+ "taskId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "taskId",
+ "type"
+ ],
+ "title": "SerializedMarkTaskPendingAction"
+ },
"SerializedRemoveInstalledAppsAction": {
"type": "object",
"properties": {
diff --git a/docs/schema/SerializedParentAction.schema.json b/docs/schema/SerializedParentAction.schema.json
index d7aa786..536d614 100644
--- a/docs/schema/SerializedParentAction.schema.json
+++ b/docs/schema/SerializedParentAction.schema.json
@@ -21,6 +21,9 @@
{
"$ref": "#/definitions/SerializedDeleteCategoryAction"
},
+ {
+ "$ref": "#/definitions/SerializedDeleteChildTaskAction"
+ },
{
"$ref": "#/definitions/SerializedDeleteTimeLimitRuleAction"
},
@@ -45,6 +48,9 @@
{
"$ref": "#/definitions/SerializedResetParentBlockedTimesAction"
},
+ {
+ "$ref": "#/definitions/SerializedReviewChildTaskAction"
+ },
{
"$ref": "#/definitions/SerializedSetCategoryExtraTimeAction"
},
@@ -108,6 +114,9 @@
{
"$ref": "#/definitions/SerializedUpdateCategoryTitleAction"
},
+ {
+ "$ref": "#/definitions/SerializedUpdateChildTaskAction"
+ },
{
"$ref": "#/definitions/SerializedUpdateDeviceNameAction"
},
@@ -394,6 +403,26 @@
],
"title": "SerializedDeleteCategoryAction"
},
+ "SerializedDeleteChildTaskAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "DELETE_CHILD_TASK"
+ ]
+ },
+ "taskId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "taskId",
+ "type"
+ ],
+ "title": "SerializedDeleteChildTaskAction"
+ },
"SerializedDeleteTimeLimitRuleAction": {
"type": "object",
"properties": {
@@ -611,6 +640,34 @@
],
"title": "SerializedResetParentBlockedTimesAction"
},
+ "SerializedReviewChildTaskAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "REVIEW_CHILD_TASK"
+ ]
+ },
+ "taskId": {
+ "type": "string"
+ },
+ "ok": {
+ "type": "boolean"
+ },
+ "time": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ok",
+ "taskId",
+ "time",
+ "type"
+ ],
+ "title": "SerializedReviewChildTaskAction"
+ },
"SerializedSetCategoryExtraTimeAction": {
"type": "object",
"properties": {
@@ -1126,6 +1183,42 @@
],
"title": "SerializedUpdateCategoryTitleAction"
},
+ "SerializedUpdateChildTaskAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "UPDATE_CHILD_TASK"
+ ]
+ },
+ "isNew": {
+ "type": "boolean"
+ },
+ "taskId": {
+ "type": "string"
+ },
+ "categoryId": {
+ "type": "string"
+ },
+ "taskTitle": {
+ "type": "string"
+ },
+ "extraTimeDuration": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "categoryId",
+ "extraTimeDuration",
+ "isNew",
+ "taskId",
+ "taskTitle",
+ "type"
+ ],
+ "title": "SerializedUpdateChildTaskAction"
+ },
"SerializedUpdateDeviceNameAction": {
"type": "object",
"properties": {
diff --git a/docs/schema/ServerDataStatus.schema.json b/docs/schema/ServerDataStatus.schema.json
index e3af570..121ca43 100644
--- a/docs/schema/ServerDataStatus.schema.json
+++ b/docs/schema/ServerDataStatus.schema.json
@@ -40,6 +40,12 @@
"$ref": "#/definitions/ServerUpdatedTimeLimitRules"
}
},
+ "tasks": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ServerUpdatedCategoryTasks"
+ }
+ },
"users": {
"$ref": "#/definitions/ServerUserList"
},
@@ -604,6 +610,59 @@
],
"title": "ServerTimeLimitRule"
},
+ "ServerUpdatedCategoryTasks": {
+ "type": "object",
+ "properties": {
+ "categoryId": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "tasks": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ServerUpdatedCategoryTask"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "categoryId",
+ "tasks",
+ "version"
+ ],
+ "title": "ServerUpdatedCategoryTasks"
+ },
+ "ServerUpdatedCategoryTask": {
+ "type": "object",
+ "properties": {
+ "i": {
+ "type": "string"
+ },
+ "t": {
+ "type": "string"
+ },
+ "d": {
+ "type": "number"
+ },
+ "p": {
+ "type": "boolean"
+ },
+ "l": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "d",
+ "i",
+ "l",
+ "p",
+ "t"
+ ],
+ "title": "ServerUpdatedCategoryTask"
+ },
"ServerUserList": {
"type": "object",
"properties": {
diff --git a/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-tasks.md b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-tasks.md
new file mode 100644
index 0000000..b5d68c2
--- /dev/null
+++ b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-tasks.md
@@ -0,0 +1,16 @@
+# Untitled string in ClientPullChangesRequest Schema
+
+```txt
+https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/tasks
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ----------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ClientPullChangesRequest.schema.json\*](ClientPullChangesRequest.schema.json "open original schema") |
+
+## tasks Type
+
+`string`
diff --git a/docs/schema/clientpullchangesrequest-definitions-categorydatastatus.md b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus.md
index c9a62f2..5c47926 100644
--- a/docs/schema/clientpullchangesrequest-definitions-categorydatastatus.md
+++ b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus.md
@@ -23,6 +23,7 @@ https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus
| [apps](#apps) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-apps.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/apps") |
| [rules](#rules) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-rules.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/rules") |
| [usedTime](#usedTime) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-usedtime.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/usedTime") |
+| [tasks](#tasks) | `string` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-tasks.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/tasks") |
## base
@@ -87,3 +88,19 @@ https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus
### usedTime Type
`string`
+
+## tasks
+
+
+
+
+`tasks`
+
+- is optional
+- Type: `string`
+- cannot be null
+- defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-tasks.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/tasks")
+
+### tasks Type
+
+`string`
diff --git a/docs/schema/clientpullchangesrequest.md b/docs/schema/clientpullchangesrequest.md
index 1aafb55..d01003a 100644
--- a/docs/schema/clientpullchangesrequest.md
+++ b/docs/schema/clientpullchangesrequest.md
@@ -127,6 +127,7 @@ Reference this group by using
| [apps](#apps) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-apps.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/apps") |
| [rules](#rules) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-rules.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/rules") |
| [usedTime](#usedTime) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-usedtime.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/usedTime") |
+| [tasks](#tasks) | `string` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-tasks.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/tasks") |
### base
@@ -192,6 +193,22 @@ Reference this group by using
`string`
+### tasks
+
+
+
+
+`tasks`
+
+- is optional
+- Type: `string`
+- cannot be null
+- defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-categorydatastatus-properties-tasks.md "https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/tasks")
+
+#### tasks Type
+
+`string`
+
# ClientPullChangesRequest Properties
| Property | Type | Required | Nullable | Defined by |
diff --git a/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-taskid.md b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-taskid.md
new file mode 100644
index 0000000..414d346
--- /dev/null
+++ b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-taskid.md
@@ -0,0 +1,16 @@
+# Untitled string in SerializedAppLogicAction Schema
+
+```txt
+https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/taskId
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ----------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedAppLogicAction.schema.json\*](SerializedAppLogicAction.schema.json "open original schema") |
+
+## taskId Type
+
+`string`
diff --git a/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md
new file mode 100644
index 0000000..79c33fb
--- /dev/null
+++ b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md
@@ -0,0 +1,24 @@
+# Untitled string in SerializedAppLogicAction Schema
+
+```txt
+https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/type
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ----------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedAppLogicAction.schema.json\*](SerializedAppLogicAction.schema.json "open original schema") |
+
+## type Type
+
+`string`
+
+## type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"MARK_TASK_PENDING"` | |
diff --git a/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties.md b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties.md
new file mode 100644
index 0000000..1d87567
--- /dev/null
+++ b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties.md
@@ -0,0 +1,16 @@
+# Untitled undefined type in SerializedAppLogicAction Schema
+
+```txt
+https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ----------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedAppLogicAction.schema.json\*](SerializedAppLogicAction.schema.json "open original schema") |
+
+## properties Type
+
+unknown
diff --git a/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction.md b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction.md
new file mode 100644
index 0000000..6ddb8c1
--- /dev/null
+++ b/docs/schema/serializedapplogicaction-definitions-serializedmarktaskpendingaction.md
@@ -0,0 +1,63 @@
+# SerializedMarkTaskPendingAction Schema
+
+```txt
+https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ------------ | :---------------- | --------------------- | ------------------- | ----------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [SerializedAppLogicAction.schema.json\*](SerializedAppLogicAction.schema.json "open original schema") |
+
+## SerializedMarkTaskPendingAction Type
+
+`object` ([SerializedMarkTaskPendingAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction.md))
+
+# SerializedMarkTaskPendingAction Properties
+
+| Property | Type | Required | Nullable | Defined by |
+| :---------------- | -------- | -------- | -------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/type") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-taskid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/taskId") |
+
+## type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/type")
+
+### type Type
+
+`string`
+
+### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"MARK_TASK_PENDING"` | |
+
+## taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-taskid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/taskId")
+
+### taskId Type
+
+`string`
diff --git a/docs/schema/serializedapplogicaction.md b/docs/schema/serializedapplogicaction.md
index 8eb6c8b..816fa1b 100644
--- a/docs/schema/serializedapplogicaction.md
+++ b/docs/schema/serializedapplogicaction.md
@@ -21,6 +21,7 @@ any of
- [SerializedAddUsedTimeAction](serializedapplogicaction-definitions-serializedaddusedtimeaction.md "check type definition")
- [SerializedAddUsedTimeActionVersion2](serializedapplogicaction-definitions-serializedaddusedtimeactionversion2.md "check type definition")
- [SerializedForceSyncAction](serializedapplogicaction-definitions-serializedforcesyncaction.md "check type definition")
+- [SerializedMarkTaskPendingAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction.md "check type definition")
- [SerializedRemoveInstalledAppsAction](serializedapplogicaction-definitions-serializedremoveinstalledappsaction.md "check type definition")
- [SerializedSignOutAtDeviceAction](serializedapplogicaction-definitions-serializedsignoutatdeviceaction.md "check type definition")
- [SerialiezdTriedDisablingDeviceAdminAction](serializedapplogicaction-definitions-serialiezdtrieddisablingdeviceadminaction.md "check type definition")
@@ -409,6 +410,59 @@ Reference this group by using
| :------------- | ----------- |
| `"FORCE_SYNC"` | |
+## Definitions group SerializedMarkTaskPendingAction
+
+Reference this group by using
+
+```json
+{"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction"}
+```
+
+| Property | Type | Required | Nullable | Defined by |
+| :---------------- | -------- | -------- | -------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/type") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-taskid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/taskId") |
+
+### type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/type")
+
+#### type Type
+
+`string`
+
+#### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"MARK_TASK_PENDING"` | |
+
+### taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-taskid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/taskId")
+
+#### taskId Type
+
+`string`
+
## Definitions group SerializedRemoveInstalledAppsAction
Reference this group by using
diff --git a/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties-taskid.md b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties-taskid.md
new file mode 100644
index 0000000..7cd9a71
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties-taskid.md
@@ -0,0 +1,16 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/taskId
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## taskId Type
+
+`string`
diff --git a/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties-type.md b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties-type.md
new file mode 100644
index 0000000..8431abe
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties-type.md
@@ -0,0 +1,24 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/type
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## type Type
+
+`string`
+
+## type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"DELETE_CHILD_TASK"` | |
diff --git a/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties.md b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties.md
new file mode 100644
index 0000000..92a3d07
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction-properties.md
@@ -0,0 +1,16 @@
+# Untitled undefined type in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## properties Type
+
+unknown
diff --git a/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction.md b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction.md
new file mode 100644
index 0000000..12ff191
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializeddeletechildtaskaction.md
@@ -0,0 +1,63 @@
+# SerializedDeleteChildTaskAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ------------ | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## SerializedDeleteChildTaskAction Type
+
+`object` ([SerializedDeleteChildTaskAction](serializedparentaction-definitions-serializeddeletechildtaskaction.md))
+
+# SerializedDeleteChildTaskAction Properties
+
+| Property | Type | Required | Nullable | Defined by |
+| :---------------- | -------- | -------- | -------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/type") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/taskId") |
+
+## type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/type")
+
+### type Type
+
+`string`
+
+### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"DELETE_CHILD_TASK"` | |
+
+## taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/taskId")
+
+### taskId Type
+
+`string`
diff --git a/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md
new file mode 100644
index 0000000..485fffe
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md
@@ -0,0 +1,16 @@
+# Untitled boolean in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/ok
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## ok Type
+
+`boolean`
diff --git a/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md
new file mode 100644
index 0000000..fd0cbdf
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md
@@ -0,0 +1,16 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/taskId
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## taskId Type
+
+`string`
diff --git a/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md
new file mode 100644
index 0000000..096ba67
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md
@@ -0,0 +1,16 @@
+# Untitled number in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/time
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## time Type
+
+`number`
diff --git a/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-type.md b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-type.md
new file mode 100644
index 0000000..07ae30f
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties-type.md
@@ -0,0 +1,24 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/type
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## type Type
+
+`string`
+
+## type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"REVIEW_CHILD_TASK"` | |
diff --git a/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties.md b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties.md
new file mode 100644
index 0000000..99c5557
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction-properties.md
@@ -0,0 +1,16 @@
+# Untitled undefined type in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## properties Type
+
+unknown
diff --git a/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction.md b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction.md
new file mode 100644
index 0000000..ccf66f4
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedreviewchildtaskaction.md
@@ -0,0 +1,97 @@
+# SerializedReviewChildTaskAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ------------ | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## SerializedReviewChildTaskAction Type
+
+`object` ([SerializedReviewChildTaskAction](serializedparentaction-definitions-serializedreviewchildtaskaction.md))
+
+# SerializedReviewChildTaskAction Properties
+
+| Property | Type | Required | Nullable | Defined by |
+| :---------------- | --------- | -------- | -------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/type") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/taskId") |
+| [ok](#ok) | `boolean` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/ok") |
+| [time](#time) | `number` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/time") |
+
+## type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/type")
+
+### type Type
+
+`string`
+
+### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"REVIEW_CHILD_TASK"` | |
+
+## taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/taskId")
+
+### taskId Type
+
+`string`
+
+## ok
+
+
+
+
+`ok`
+
+- is required
+- Type: `boolean`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/ok")
+
+### ok Type
+
+`boolean`
+
+## time
+
+
+
+
+`time`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/time")
+
+### time Type
+
+`number`
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-categoryid.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-categoryid.md
new file mode 100644
index 0000000..5cbf1e9
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-categoryid.md
@@ -0,0 +1,16 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/categoryId
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## categoryId Type
+
+`string`
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-extratimeduration.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-extratimeduration.md
new file mode 100644
index 0000000..3501b78
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-extratimeduration.md
@@ -0,0 +1,16 @@
+# Untitled number in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/extraTimeDuration
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## extraTimeDuration Type
+
+`number`
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-isnew.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-isnew.md
new file mode 100644
index 0000000..721927a
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-isnew.md
@@ -0,0 +1,16 @@
+# Untitled boolean in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/isNew
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## isNew Type
+
+`boolean`
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-taskid.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-taskid.md
new file mode 100644
index 0000000..c400aa0
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-taskid.md
@@ -0,0 +1,16 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskId
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## taskId Type
+
+`string`
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-tasktitle.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-tasktitle.md
new file mode 100644
index 0000000..57a9f5d
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-tasktitle.md
@@ -0,0 +1,16 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskTitle
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## taskTitle Type
+
+`string`
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-type.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-type.md
new file mode 100644
index 0000000..e52c479
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties-type.md
@@ -0,0 +1,24 @@
+# Untitled string in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/type
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## type Type
+
+`string`
+
+## type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"UPDATE_CHILD_TASK"` | |
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties.md
new file mode 100644
index 0000000..145a758
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction-properties.md
@@ -0,0 +1,16 @@
+# Untitled undefined type in SerializedParentAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## properties Type
+
+unknown
diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction.md b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction.md
new file mode 100644
index 0000000..e4cb62d
--- /dev/null
+++ b/docs/schema/serializedparentaction-definitions-serializedupdatechildtaskaction.md
@@ -0,0 +1,131 @@
+# SerializedUpdateChildTaskAction Schema
+
+```txt
+https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ------------ | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
+
+## SerializedUpdateChildTaskAction Type
+
+`object` ([SerializedUpdateChildTaskAction](serializedparentaction-definitions-serializedupdatechildtaskaction.md))
+
+# SerializedUpdateChildTaskAction Properties
+
+| Property | Type | Required | Nullable | Defined by |
+| :-------------------------------------- | --------- | -------- | -------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/type") |
+| [isNew](#isNew) | `boolean` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-isnew.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/isNew") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskId") |
+| [categoryId](#categoryId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-categoryid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/categoryId") |
+| [taskTitle](#taskTitle) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-tasktitle.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskTitle") |
+| [extraTimeDuration](#extraTimeDuration) | `number` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-extratimeduration.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/extraTimeDuration") |
+
+## type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/type")
+
+### type Type
+
+`string`
+
+### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"UPDATE_CHILD_TASK"` | |
+
+## isNew
+
+
+
+
+`isNew`
+
+- is required
+- Type: `boolean`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-isnew.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/isNew")
+
+### isNew Type
+
+`boolean`
+
+## taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskId")
+
+### taskId Type
+
+`string`
+
+## categoryId
+
+
+
+
+`categoryId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-categoryid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/categoryId")
+
+### categoryId Type
+
+`string`
+
+## taskTitle
+
+
+
+
+`taskTitle`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-tasktitle.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskTitle")
+
+### taskTitle Type
+
+`string`
+
+## extraTimeDuration
+
+
+
+
+`extraTimeDuration`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-extratimeduration.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/extraTimeDuration")
+
+### extraTimeDuration Type
+
+`number`
diff --git a/docs/schema/serializedparentaction.md b/docs/schema/serializedparentaction.md
index d452496..1b52ae0 100644
--- a/docs/schema/serializedparentaction.md
+++ b/docs/schema/serializedparentaction.md
@@ -24,6 +24,7 @@ any of
- [SerializedCreateCategoryAction](serializedparentaction-definitions-serializedcreatecategoryaction.md "check type definition")
- [SerializedCreateTimelimtRuleAction](serializedparentaction-definitions-serializedcreatetimelimtruleaction.md "check type definition")
- [SerializedDeleteCategoryAction](serializedparentaction-definitions-serializeddeletecategoryaction.md "check type definition")
+- [SerializedDeleteChildTaskAction](serializedparentaction-definitions-serializeddeletechildtaskaction.md "check type definition")
- [SerializedDeleteTimeLimitRuleAction](serializedparentaction-definitions-serializeddeletetimelimitruleaction.md "check type definition")
- [SerializedIgnoreManipulationAction](serializedparentaction-definitions-serializedignoremanipulationaction.md "check type definition")
- [SerializedIncrementCategoryExtraTimeAction](serializedparentaction-definitions-serializedincrementcategoryextratimeaction.md "check type definition")
@@ -32,6 +33,7 @@ any of
- [SerializedRenameChildAction](serializedparentaction-definitions-serializedrenamechildaction.md "check type definition")
- [SerializeResetCategoryNetworkIdsAction](serializedparentaction-definitions-serializeresetcategorynetworkidsaction.md "check type definition")
- [SerializedResetParentBlockedTimesAction](serializedparentaction-definitions-serializedresetparentblockedtimesaction.md "check type definition")
+- [SerializedReviewChildTaskAction](serializedparentaction-definitions-serializedreviewchildtaskaction.md "check type definition")
- [SerializedSetCategoryExtraTimeAction](serializedparentaction-definitions-serializedsetcategoryextratimeaction.md "check type definition")
- [SerializedSetCategoryForUnassignedAppsAction](serializedparentaction-definitions-serializedsetcategoryforunassignedappsaction.md "check type definition")
- [SerializedSetChildPasswordAction](serializedparentaction-definitions-serializedsetchildpasswordaction.md "check type definition")
@@ -53,6 +55,7 @@ any of
- [SerializedUpdateCategoryTemporarilyBlockedAction](serializedparentaction-definitions-serializedupdatecategorytemporarilyblockedaction.md "check type definition")
- [SerializedUpdateCategoryTimeWarningsAction](serializedparentaction-definitions-serializedupdatecategorytimewarningsaction.md "check type definition")
- [SerializedUpdateCategoryTitleAction](serializedparentaction-definitions-serializedupdatecategorytitleaction.md "check type definition")
+- [SerializedUpdateChildTaskAction](serializedparentaction-definitions-serializedupdatechildtaskaction.md "check type definition")
- [SerializedUpdateDeviceNameAction](serializedparentaction-definitions-serializedupdatedevicenameaction.md "check type definition")
- [SerializedUpdateEnableActivityLevelBlockingAction](serializedparentaction-definitions-serializedupdateenableactivitylevelblockingaction.md "check type definition")
- [SerialiizedUpdateNetworkTimeVerificationAction](serializedparentaction-definitions-serialiizedupdatenetworktimeverificationaction.md "check type definition")
@@ -891,6 +894,59 @@ Reference this group by using
`string`
+## Definitions group SerializedDeleteChildTaskAction
+
+Reference this group by using
+
+```json
+{"$ref":"https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction"}
+```
+
+| Property | Type | Required | Nullable | Defined by |
+| :---------------- | -------- | -------- | -------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/type") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/taskId") |
+
+### type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/type")
+
+#### type Type
+
+`string`
+
+#### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"DELETE_CHILD_TASK"` | |
+
+### taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializeddeletechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteChildTaskAction/properties/taskId")
+
+#### taskId Type
+
+`string`
+
## Definitions group SerializedDeleteTimeLimitRuleAction
Reference this group by using
@@ -1570,6 +1626,93 @@ Reference this group by using
`string`
+## Definitions group SerializedReviewChildTaskAction
+
+Reference this group by using
+
+```json
+{"$ref":"https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction"}
+```
+
+| Property | Type | Required | Nullable | Defined by |
+| :---------------- | --------- | -------- | -------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/type") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/taskId") |
+| [ok](#ok) | `boolean` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/ok") |
+| [time](#time) | `number` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/time") |
+
+### type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/type")
+
+#### type Type
+
+`string`
+
+#### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"REVIEW_CHILD_TASK"` | |
+
+### taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/taskId")
+
+#### taskId Type
+
+`string`
+
+### ok
+
+
+
+
+`ok`
+
+- is required
+- Type: `boolean`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/ok")
+
+#### ok Type
+
+`boolean`
+
+### time
+
+
+
+
+`time`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/time")
+
+#### time Type
+
+`number`
+
## Definitions group SerializedSetCategoryExtraTimeAction
Reference this group by using
@@ -3091,6 +3234,127 @@ Reference this group by using
`string`
+## Definitions group SerializedUpdateChildTaskAction
+
+Reference this group by using
+
+```json
+{"$ref":"https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction"}
+```
+
+| Property | Type | Required | Nullable | Defined by |
+| :-------------------------------------- | --------- | -------- | -------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [type](#type) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/type") |
+| [isNew](#isNew) | `boolean` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-isnew.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/isNew") |
+| [taskId](#taskId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskId") |
+| [categoryId](#categoryId) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-categoryid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/categoryId") |
+| [taskTitle](#taskTitle) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-tasktitle.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskTitle") |
+| [extraTimeDuration](#extraTimeDuration) | `number` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-extratimeduration.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/extraTimeDuration") |
+
+### type
+
+
+
+
+`type`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/type")
+
+#### type Type
+
+`string`
+
+#### type Constraints
+
+**enum**: the value of this property must be equal to one of the following values:
+
+| Value | Explanation |
+| :-------------------- | ----------- |
+| `"UPDATE_CHILD_TASK"` | |
+
+### isNew
+
+
+
+
+`isNew`
+
+- is required
+- Type: `boolean`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-isnew.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/isNew")
+
+#### isNew Type
+
+`boolean`
+
+### taskId
+
+
+
+
+`taskId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskId")
+
+#### taskId Type
+
+`string`
+
+### categoryId
+
+
+
+
+`categoryId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-categoryid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/categoryId")
+
+#### categoryId Type
+
+`string`
+
+### taskTitle
+
+
+
+
+`taskTitle`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-tasktitle.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/taskTitle")
+
+#### taskTitle Type
+
+`string`
+
+### extraTimeDuration
+
+
+
+
+`extraTimeDuration`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatechildtaskaction-properties-extratimeduration.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateChildTaskAction/properties/extraTimeDuration")
+
+#### extraTimeDuration Type
+
+`number`
+
## Definitions group SerializedUpdateDeviceNameAction
Reference this group by using
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-d.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-d.md
new file mode 100644
index 0000000..96b263a
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-d.md
@@ -0,0 +1,16 @@
+# Untitled number in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/d
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## d Type
+
+`number`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-i.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-i.md
new file mode 100644
index 0000000..88a4bab
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-i.md
@@ -0,0 +1,16 @@
+# Untitled string in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/i
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## i Type
+
+`string`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-l.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-l.md
new file mode 100644
index 0000000..52d77d5
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-l.md
@@ -0,0 +1,16 @@
+# Untitled number in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/l
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## l Type
+
+`number`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-p.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-p.md
new file mode 100644
index 0000000..76e0d34
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-p.md
@@ -0,0 +1,16 @@
+# Untitled boolean in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/p
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## p Type
+
+`boolean`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-t.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-t.md
new file mode 100644
index 0000000..a86d3d4
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties-t.md
@@ -0,0 +1,16 @@
+# Untitled string in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/t
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## t Type
+
+`string`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties.md
new file mode 100644
index 0000000..7ffbf02
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask-properties.md
@@ -0,0 +1,16 @@
+# Untitled undefined type in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## properties Type
+
+unknown
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask.md
new file mode 100644
index 0000000..6a9e4d9
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytask.md
@@ -0,0 +1,106 @@
+# ServerUpdatedCategoryTask Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ------------ | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## ServerUpdatedCategoryTask Type
+
+`object` ([ServerUpdatedCategoryTask](serverdatastatus-definitions-serverupdatedcategorytask.md))
+
+# ServerUpdatedCategoryTask Properties
+
+| Property | Type | Required | Nullable | Defined by |
+| :------- | --------- | -------- | -------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [i](#i) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-i.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/i") |
+| [t](#t) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-t.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/t") |
+| [d](#d) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-d.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/d") |
+| [p](#p) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-p.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/p") |
+| [l](#l) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-l.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/l") |
+
+## i
+
+
+
+
+`i`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-i.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/i")
+
+### i Type
+
+`string`
+
+## t
+
+
+
+
+`t`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-t.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/t")
+
+### t Type
+
+`string`
+
+## d
+
+
+
+
+`d`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-d.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/d")
+
+### d Type
+
+`number`
+
+## p
+
+
+
+
+`p`
+
+- is required
+- Type: `boolean`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-p.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/p")
+
+### p Type
+
+`boolean`
+
+## l
+
+
+
+
+`l`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-l.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/l")
+
+### l Type
+
+`number`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md
new file mode 100644
index 0000000..46ba965
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md
@@ -0,0 +1,16 @@
+# Untitled string in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/categoryId
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## categoryId Type
+
+`string`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md
new file mode 100644
index 0000000..9838457
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md
@@ -0,0 +1,16 @@
+# Untitled array in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## tasks Type
+
+`object[]` ([ServerUpdatedCategoryTask](serverdatastatus-definitions-serverupdatedcategorytask.md))
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md
new file mode 100644
index 0000000..22ad525
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md
@@ -0,0 +1,16 @@
+# Untitled string in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/version
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## version Type
+
+`string`
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties.md
new file mode 100644
index 0000000..b6665f2
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks-properties.md
@@ -0,0 +1,16 @@
+# Untitled undefined type in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## properties Type
+
+unknown
diff --git a/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks.md b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks.md
new file mode 100644
index 0000000..9660bb4
--- /dev/null
+++ b/docs/schema/serverdatastatus-definitions-serverupdatedcategorytasks.md
@@ -0,0 +1,72 @@
+# ServerUpdatedCategoryTasks Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ------------ | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## ServerUpdatedCategoryTasks Type
+
+`object` ([ServerUpdatedCategoryTasks](serverdatastatus-definitions-serverupdatedcategorytasks.md))
+
+# ServerUpdatedCategoryTasks Properties
+
+| Property | Type | Required | Nullable | Defined by |
+| :------------------------ | -------- | -------- | -------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [categoryId](#categoryId) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/categoryId") |
+| [version](#version) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/version") |
+| [tasks](#tasks) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks") |
+
+## categoryId
+
+
+
+
+`categoryId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/categoryId")
+
+### categoryId Type
+
+`string`
+
+## version
+
+
+
+
+`version`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/version")
+
+### version Type
+
+`string`
+
+## tasks
+
+
+
+
+`tasks`
+
+- is required
+- Type: `object[]` ([ServerUpdatedCategoryTask](serverdatastatus-definitions-serverupdatedcategorytask.md))
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks")
+
+### tasks Type
+
+`object[]` ([ServerUpdatedCategoryTask](serverdatastatus-definitions-serverupdatedcategorytask.md))
diff --git a/docs/schema/serverdatastatus-properties-tasks.md b/docs/schema/serverdatastatus-properties-tasks.md
new file mode 100644
index 0000000..ba19d11
--- /dev/null
+++ b/docs/schema/serverdatastatus-properties-tasks.md
@@ -0,0 +1,16 @@
+# Untitled array in ServerDataStatus Schema
+
+```txt
+https://timelimit.io/ServerDataStatus#/properties/tasks
+```
+
+
+
+
+| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
+| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- |
+| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
+
+## tasks Type
+
+`object[]` ([ServerUpdatedCategoryTasks](serverdatastatus-definitions-serverupdatedcategorytasks.md))
diff --git a/docs/schema/serverdatastatus.md b/docs/schema/serverdatastatus.md
index 823060d..8751380 100644
--- a/docs/schema/serverdatastatus.md
+++ b/docs/schema/serverdatastatus.md
@@ -1838,6 +1838,164 @@ Reference this group by using
`number`
+## Definitions group ServerUpdatedCategoryTasks
+
+Reference this group by using
+
+```json
+{"$ref":"https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks"}
+```
+
+| Property | Type | Required | Nullable | Defined by |
+| :------------------------ | -------- | -------- | -------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [categoryId](#categoryId) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/categoryId") |
+| [version](#version) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/version") |
+| [tasks](#tasks) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks") |
+
+### categoryId
+
+
+
+
+`categoryId`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/categoryId")
+
+#### categoryId Type
+
+`string`
+
+### version
+
+
+
+
+`version`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/version")
+
+#### version Type
+
+`string`
+
+### tasks
+
+
+
+
+`tasks`
+
+- is required
+- Type: `object[]` ([ServerUpdatedCategoryTask](serverdatastatus-definitions-serverupdatedcategorytask.md))
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks")
+
+#### tasks Type
+
+`object[]` ([ServerUpdatedCategoryTask](serverdatastatus-definitions-serverupdatedcategorytask.md))
+
+## Definitions group ServerUpdatedCategoryTask
+
+Reference this group by using
+
+```json
+{"$ref":"https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask"}
+```
+
+| Property | Type | Required | Nullable | Defined by |
+| :------- | --------- | -------- | -------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [i](#i) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-i.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/i") |
+| [t](#t) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-t.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/t") |
+| [d](#d) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-d.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/d") |
+| [p](#p) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-p.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/p") |
+| [l](#l) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-l.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/l") |
+
+### i
+
+
+
+
+`i`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-i.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/i")
+
+#### i Type
+
+`string`
+
+### t
+
+
+
+
+`t`
+
+- is required
+- Type: `string`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-t.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/t")
+
+#### t Type
+
+`string`
+
+### d
+
+
+
+
+`d`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-d.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/d")
+
+#### d Type
+
+`number`
+
+### p
+
+
+
+
+`p`
+
+- is required
+- Type: `boolean`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-p.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/p")
+
+#### p Type
+
+`boolean`
+
+### l
+
+
+
+
+`l`
+
+- is required
+- Type: `number`
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytask-properties-l.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTask/properties/l")
+
+#### l Type
+
+`number`
+
## Definitions group ServerUserList
Reference this group by using
@@ -2169,6 +2327,7 @@ Reference this group by using
| [categoryApp](#categoryApp) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-categoryapp.md "https://timelimit.io/ServerDataStatus#/properties/categoryApp") |
| [usedTimes](#usedTimes) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-usedtimes.md "https://timelimit.io/ServerDataStatus#/properties/usedTimes") |
| [rules](#rules) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-rules.md "https://timelimit.io/ServerDataStatus#/properties/rules") |
+| [tasks](#tasks) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-tasks.md "https://timelimit.io/ServerDataStatus#/properties/tasks") |
| [users](#users) | `object` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serveruserlist.md "https://timelimit.io/ServerDataStatus#/properties/users") |
| [fullVersion](#fullVersion) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-properties-fullversion.md "https://timelimit.io/ServerDataStatus#/properties/fullVersion") |
| [message](#message) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-message.md "https://timelimit.io/ServerDataStatus#/properties/message") |
@@ -2285,6 +2444,22 @@ Reference this group by using
`object[]` ([ServerUpdatedTimeLimitRules](serverdatastatus-definitions-serverupdatedtimelimitrules.md))
+## tasks
+
+
+
+
+`tasks`
+
+- is optional
+- Type: `object[]` ([ServerUpdatedCategoryTasks](serverdatastatus-definitions-serverupdatedcategorytasks.md))
+- cannot be null
+- defined in: [ServerDataStatus](serverdatastatus-properties-tasks.md "https://timelimit.io/ServerDataStatus#/properties/tasks")
+
+### tasks Type
+
+`object[]` ([ServerUpdatedCategoryTasks](serverdatastatus-definitions-serverupdatedcategorytasks.md))
+
## users
diff --git a/src/action/deletechildtaskaction.ts b/src/action/deletechildtaskaction.ts
new file mode 100644
index 0000000..53741e0
--- /dev/null
+++ b/src/action/deletechildtaskaction.ts
@@ -0,0 +1,42 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { ParentAction } from './basetypes'
+import { assertIdWithinFamily } from './meta/util'
+
+const actionType = 'DeleteChildTaskAction'
+
+export class DeleteChildTaskAction extends ParentAction {
+ readonly taskId: string
+
+ constructor ({ taskId }: { taskId: string }) {
+ super()
+
+ assertIdWithinFamily({ actionType, field: 'taskId', value: taskId })
+
+ this.taskId = taskId
+ }
+
+ static parse = ({ taskId }: SerializedDeleteChildTaskAction) => (
+ new DeleteChildTaskAction({ taskId })
+ )
+}
+
+export interface SerializedDeleteChildTaskAction {
+ type: 'DELETE_CHILD_TASK'
+ taskId: string
+}
diff --git a/src/action/index.ts b/src/action/index.ts
index 84f6f56..b3003a8 100644
--- a/src/action/index.ts
+++ b/src/action/index.ts
@@ -72,3 +72,7 @@ export { UpdateParentNotificationFlagsAction } from './updateparentnotificationf
export { UpdateTimelimitRuleAction } from './updatetimelimitrule'
export { UpdateUserFlagsAction } from './updateuserflags'
export { UpdateUserLimitLoginCategory } from './updateuserlimitlogincategory'
+export { MarkTaskPendingAction } from './marktaskpendingaction'
+export { DeleteChildTaskAction } from './deletechildtaskaction'
+export { UpdateChildTaskAction } from './updatechildtaskaction'
+export { ReviewChildTaskAction } from './reviewchildtaskaction'
diff --git a/src/action/marktaskpendingaction.ts b/src/action/marktaskpendingaction.ts
new file mode 100644
index 0000000..570c5dc
--- /dev/null
+++ b/src/action/marktaskpendingaction.ts
@@ -0,0 +1,42 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { AppLogicAction } from './basetypes'
+import { assertIdWithinFamily } from './meta/util'
+
+const actionType = 'MarkTaskPendingAction'
+
+export class MarkTaskPendingAction extends AppLogicAction {
+ readonly taskId: string
+
+ constructor ({ taskId }: { taskId: string }) {
+ super()
+
+ assertIdWithinFamily({ actionType, field: 'taskId', value: taskId })
+
+ this.taskId = taskId
+ }
+
+ static parse = ({ taskId }: SerializedMarkTaskPendingAction) => (
+ new MarkTaskPendingAction({ taskId })
+ )
+}
+
+export interface SerializedMarkTaskPendingAction {
+ type: 'MARK_TASK_PENDING'
+ taskId: string
+}
diff --git a/src/action/reviewchildtaskaction.ts b/src/action/reviewchildtaskaction.ts
new file mode 100644
index 0000000..fc61d39
--- /dev/null
+++ b/src/action/reviewchildtaskaction.ts
@@ -0,0 +1,57 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { ParentAction } from './basetypes'
+import { assertIdWithinFamily, assertSafeInteger, throwOutOfRange } from './meta/util'
+
+const actionType = 'ReviewChildTaskAction'
+
+export class ReviewChildTaskAction extends ParentAction {
+ readonly taskId: string
+ readonly ok: boolean
+ readonly time: number
+
+ constructor ({ taskId, ok, time }: {
+ taskId: string
+ ok: boolean
+ time: number
+ }) {
+ super()
+
+ assertIdWithinFamily({ actionType, field: 'taskId', value: taskId })
+ assertSafeInteger({ actionType, field: 'time', value: time })
+
+ if (time <= 0) {
+ throwOutOfRange({ actionType, field: 'time', value: time })
+ }
+
+ this.taskId = taskId
+ this.ok = ok
+ this.time = time
+ }
+
+ static parse = ({ taskId, ok, time }: SerializedReviewChildTaskAction) => (
+ new ReviewChildTaskAction({ taskId, ok, time })
+ )
+}
+
+export interface SerializedReviewChildTaskAction {
+ type: 'REVIEW_CHILD_TASK'
+ taskId: string
+ ok: boolean
+ time: number
+}
diff --git a/src/action/serialization/applogicaction.ts b/src/action/serialization/applogicaction.ts
index b464af1..cef77f1 100644
--- a/src/action/serialization/applogicaction.ts
+++ b/src/action/serialization/applogicaction.ts
@@ -20,6 +20,7 @@ import { AddUsedTimeAction, SerializedAddUsedTimeAction } from '../addusedtime'
import { AddUsedTimeActionVersion2, SerializedAddUsedTimeActionVersion2 } from '../addusedtime2'
import { AppLogicAction } from '../basetypes'
import { ForceSyncAction, SerializedForceSyncAction } from '../forcesync'
+import { MarkTaskPendingAction, SerializedMarkTaskPendingAction } from '../marktaskpendingaction'
import { UnknownActionTypeException } from '../meta/exception'
import { RemoveInstalledAppsAction, SerializedRemoveInstalledAppsAction } from '../removeinstalledapps'
import { SerializedSignOutAtDeviceAction, SignOutAtDeviceAction } from '../signoutatdevice'
@@ -32,6 +33,7 @@ export type SerializedAppLogicAction =
SerializedAddUsedTimeAction |
SerializedAddUsedTimeActionVersion2 |
SerializedForceSyncAction |
+ SerializedMarkTaskPendingAction |
SerializedRemoveInstalledAppsAction |
SerializedSignOutAtDeviceAction |
SerialiezdTriedDisablingDeviceAdminAction |
@@ -47,6 +49,8 @@ export const parseAppLogicAction = (serialized: SerializedAppLogicAction): AppLo
return AddInstalledAppsAction.parse(serialized)
} else if (serialized.type === 'FORCE_SYNC') {
return ForceSyncAction.parse(serialized)
+ } else if (serialized.type === 'MARK_TASK_PENDING') {
+ return MarkTaskPendingAction.parse(serialized)
} else if (serialized.type === 'REMOVE_INSTALLED_APPS') {
return RemoveInstalledAppsAction.parse(serialized)
} else if (serialized.type === 'SIGN_OUT_AT_DEVICE') {
diff --git a/src/action/serialization/parentaction.ts b/src/action/serialization/parentaction.ts
index 2befbb1..b5ff43e 100644
--- a/src/action/serialization/parentaction.ts
+++ b/src/action/serialization/parentaction.ts
@@ -23,6 +23,7 @@ import { ChangeParentPasswordAction, SerializedChangeParentPasswordAction } from
import { CreateCategoryAction, SerializedCreateCategoryAction } from '../createcategory'
import { CreateTimeLimitRuleAction, SerializedCreateTimelimtRuleAction } from '../createtimelimitrule'
import { DeleteCategoryAction, SerializedDeleteCategoryAction } from '../deletecategory'
+import { DeleteChildTaskAction, SerializedDeleteChildTaskAction } from '../deletechildtaskaction'
import { DeleteTimeLimitRuleAction, SerializedDeleteTimeLimitRuleAction } from '../deletetimelimitrule'
import { IgnoreManipulationAction, SerializedIgnoreManipulationAction } from '../ignoremanipulation'
import { IncrementCategoryExtraTimeAction, SerializedIncrementCategoryExtraTimeAction } from '../incrementcategoryextratime'
@@ -32,6 +33,7 @@ import { RemoveUserAction, SerializedRemoveUserAction } from '../removeuser'
import { RenameChildAction, SerializedRenameChildAction } from '../renamechild'
import { ResetCategoryNetworkIdsAction, SerializeResetCategoryNetworkIdsAction } from '../resetcategorynetworkids'
import { ResetParentBlockedTimesAction, SerializedResetParentBlockedTimesAction } from '../resetparentblockedtimes'
+import { ReviewChildTaskAction, SerializedReviewChildTaskAction } from '../reviewchildtaskaction'
import { SerializedSetCategoryExtraTimeAction, SetCategoryExtraTimeAction } from '../setcategoryextratime'
import { SerializedSetCategoryForUnassignedAppsAction, SetCategoryForUnassignedAppsAction } from '../setcategoryforunassignedapps'
import { SerializedSetChildPasswordAction, SetChildPasswordAction } from '../setchildpassword'
@@ -53,6 +55,7 @@ import { SerializedUpdateCategorySortingAction, UpdateCategorySortingAction } fr
import { SerializedUpdateCategoryTemporarilyBlockedAction, UpdateCategoryTemporarilyBlockedAction } from '../updatecategorytemporarilyblocked'
import { SerializedUpdateCategoryTimeWarningsAction, UpdateCategoryTimeWarningsAction } from '../updatecategorytimewarnings'
import { SerializedUpdateCategoryTitleAction, UpdateCategoryTitleAction } from '../updatecategorytitle'
+import { SerializedUpdateChildTaskAction, UpdateChildTaskAction } from '../updatechildtaskaction'
import { SerializedUpdateDeviceNameAction, UpdateDeviceNameAction } from '../updatedevicename'
import { SerializedUpdateEnableActivityLevelBlockingAction, UpdateEnableActivityLevelBlockingAction } from '../updateenableactivitylevelblocking'
import { SerialiizedUpdateNetworkTimeVerificationAction, UpdateNetworkTimeVerificationAction } from '../updatenetworktimeverification'
@@ -70,6 +73,7 @@ export type SerializedParentAction =
SerializedCreateCategoryAction |
SerializedCreateTimelimtRuleAction |
SerializedDeleteCategoryAction |
+ SerializedDeleteChildTaskAction |
SerializedDeleteTimeLimitRuleAction |
SerializedIgnoreManipulationAction |
SerializedIncrementCategoryExtraTimeAction |
@@ -78,6 +82,7 @@ export type SerializedParentAction =
SerializedRenameChildAction |
SerializeResetCategoryNetworkIdsAction |
SerializedResetParentBlockedTimesAction |
+ SerializedReviewChildTaskAction |
SerializedSetCategoryForUnassignedAppsAction |
SerializedSetChildPasswordAction |
SerializedSetConsiderRebootManipulationAction |
@@ -99,6 +104,7 @@ export type SerializedParentAction =
SerializedUpdateCategoryTemporarilyBlockedAction |
SerializedUpdateCategoryTimeWarningsAction |
SerializedUpdateCategoryTitleAction |
+ SerializedUpdateChildTaskAction |
SerializedUpdateDeviceNameAction |
SerializedUpdateEnableActivityLevelBlockingAction |
SerialiizedUpdateNetworkTimeVerificationAction |
@@ -123,6 +129,8 @@ export const parseParentAction = (action: SerializedParentAction): ParentAction
return CreateTimeLimitRuleAction.parse(action)
} else if (action.type === 'DELETE_CATEGORY') {
return DeleteCategoryAction.parse(action)
+ } else if (action.type === 'DELETE_CHILD_TASK') {
+ return DeleteChildTaskAction.parse(action)
} else if (action.type === 'DELETE_TIMELIMIT_RULE') {
return DeleteTimeLimitRuleAction.parse(action)
} else if (action.type === 'IGNORE_MANIPULATION') {
@@ -139,6 +147,8 @@ export const parseParentAction = (action: SerializedParentAction): ParentAction
return ResetCategoryNetworkIdsAction.parse(action)
} else if (action.type === 'RESET_PARENT_BLOCKED_TIMES') {
return ResetParentBlockedTimesAction.parse(action)
+ } else if (action.type === 'REVIEW_CHILD_TASK') {
+ return ReviewChildTaskAction.parse(action)
} else if (action.type === 'SET_CATEGORY_EXTRA_TIME') {
return SetCategoryExtraTimeAction.parse(action)
} else if (action.type === 'SET_CATEGORY_FOR_UNASSIGNED_APPS') {
@@ -179,6 +189,8 @@ export const parseParentAction = (action: SerializedParentAction): ParentAction
return UpdateCategoryTimeWarningsAction.parse(action)
} else if (action.type === 'UPDATE_CATEGORY_TITLE') {
return UpdateCategoryTitleAction.parse(action)
+ } else if (action.type === 'UPDATE_CHILD_TASK') {
+ return UpdateChildTaskAction.parse(action)
} else if (action.type === 'UPDATE_CATEGORY_TEMPORARILY_BLOCKED') {
return UpdateCategoryTemporarilyBlockedAction.parse(action)
} else if (action.type === 'UPDATE_DEVICE_NAME') {
diff --git a/src/action/updatechildtaskaction.ts b/src/action/updatechildtaskaction.ts
new file mode 100644
index 0000000..50f1511
--- /dev/null
+++ b/src/action/updatechildtaskaction.ts
@@ -0,0 +1,72 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { maxExtraTime, maxTitleLength } from '../database/childtask'
+import { ParentAction } from './basetypes'
+import { InvalidActionParameterException } from './meta/exception'
+import { assertIdWithinFamily, assertSafeInteger, throwOutOfRange } from './meta/util'
+
+const actionType = 'UpdateChildTaskAction'
+
+export class UpdateChildTaskAction extends ParentAction {
+ readonly isNew: boolean
+ readonly taskId: string
+ readonly categoryId: string
+ readonly taskTitle: string
+ readonly extraTimeDuration: number
+
+ constructor ({ isNew, taskId, categoryId, taskTitle, extraTimeDuration }: {
+ isNew: boolean
+ taskId: string
+ categoryId: string
+ taskTitle: string
+ extraTimeDuration: number
+ }) {
+ super()
+
+ assertIdWithinFamily({ actionType, field: 'taskId', value: taskId })
+ assertIdWithinFamily({ actionType, field: 'categoryId', value: categoryId })
+ assertSafeInteger({ actionType, field: 'extraTimeDuration', value: extraTimeDuration })
+
+ if (taskTitle === '' || taskTitle.length > maxTitleLength) {
+ throw new InvalidActionParameterException({ actionType, staticMessage: 'invalid title' })
+ }
+
+ if (extraTimeDuration <= 0 || extraTimeDuration > maxExtraTime) {
+ throwOutOfRange({ actionType, field: 'extraTimeDuration', value: extraTimeDuration })
+ }
+
+ this.isNew = isNew
+ this.taskId = taskId
+ this.categoryId = categoryId
+ this.taskTitle = taskTitle
+ this.extraTimeDuration = extraTimeDuration
+ }
+
+ static parse = ({ isNew, taskId, categoryId, taskTitle, extraTimeDuration }: SerializedUpdateChildTaskAction) => (
+ new UpdateChildTaskAction({ isNew, taskId, categoryId, taskTitle, extraTimeDuration })
+ )
+}
+
+export interface SerializedUpdateChildTaskAction {
+ type: 'UPDATE_CHILD_TASK'
+ isNew: boolean
+ taskId: string
+ categoryId: string
+ taskTitle: string
+ extraTimeDuration: number
+}
diff --git a/src/api/validator.ts b/src/api/validator.ts
index d394737..ee22472 100644
--- a/src/api/validator.ts
+++ b/src/api/validator.ts
@@ -84,6 +84,9 @@ const definitions = {
},
"usedTime": {
"type": "string"
+ },
+ "tasks": {
+ "type": "string"
}
},
"additionalProperties": false,
@@ -357,6 +360,25 @@ const definitions = {
"type"
]
},
+ "SerializedDeleteChildTaskAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "DELETE_CHILD_TASK"
+ ]
+ },
+ "taskId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "taskId",
+ "type"
+ ]
+ },
"SerializedDeleteTimeLimitRuleAction": {
"type": "object",
"properties": {
@@ -566,6 +588,33 @@ const definitions = {
"type"
]
},
+ "SerializedReviewChildTaskAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "REVIEW_CHILD_TASK"
+ ]
+ },
+ "taskId": {
+ "type": "string"
+ },
+ "ok": {
+ "type": "boolean"
+ },
+ "time": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ok",
+ "taskId",
+ "time",
+ "type"
+ ]
+ },
"SerializedSetCategoryExtraTimeAction": {
"type": "object",
"properties": {
@@ -1060,6 +1109,41 @@ const definitions = {
"type"
]
},
+ "SerializedUpdateChildTaskAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "UPDATE_CHILD_TASK"
+ ]
+ },
+ "isNew": {
+ "type": "boolean"
+ },
+ "taskId": {
+ "type": "string"
+ },
+ "categoryId": {
+ "type": "string"
+ },
+ "taskTitle": {
+ "type": "string"
+ },
+ "extraTimeDuration": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "categoryId",
+ "extraTimeDuration",
+ "isNew",
+ "taskId",
+ "taskTitle",
+ "type"
+ ]
+ },
"SerializedUpdateDeviceNameAction": {
"type": "object",
"properties": {
@@ -1484,6 +1568,25 @@ const definitions = {
"type"
]
},
+ "SerializedMarkTaskPendingAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "MARK_TASK_PENDING"
+ ]
+ },
+ "taskId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "taskId",
+ "type"
+ ]
+ },
"SerializedRemoveInstalledAppsAction": {
"type": "object",
"properties": {
@@ -2178,6 +2281,57 @@ const definitions = {
"start"
]
},
+ "ServerUpdatedCategoryTasks": {
+ "type": "object",
+ "properties": {
+ "categoryId": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "tasks": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ServerUpdatedCategoryTask"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "categoryId",
+ "tasks",
+ "version"
+ ]
+ },
+ "ServerUpdatedCategoryTask": {
+ "type": "object",
+ "properties": {
+ "i": {
+ "type": "string"
+ },
+ "t": {
+ "type": "string"
+ },
+ "d": {
+ "type": "number"
+ },
+ "p": {
+ "type": "boolean"
+ },
+ "l": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "d",
+ "i",
+ "l",
+ "p",
+ "t"
+ ]
+ },
"ServerUserList": {
"type": "object",
"properties": {
@@ -2460,6 +2614,9 @@ export const isSerializedParentAction: (value: object) => value is SerializedPar
{
"$ref": "#/definitions/SerializedDeleteCategoryAction"
},
+ {
+ "$ref": "#/definitions/SerializedDeleteChildTaskAction"
+ },
{
"$ref": "#/definitions/SerializedDeleteTimeLimitRuleAction"
},
@@ -2484,6 +2641,9 @@ export const isSerializedParentAction: (value: object) => value is SerializedPar
{
"$ref": "#/definitions/SerializedResetParentBlockedTimesAction"
},
+ {
+ "$ref": "#/definitions/SerializedReviewChildTaskAction"
+ },
{
"$ref": "#/definitions/SerializedSetCategoryExtraTimeAction"
},
@@ -2547,6 +2707,9 @@ export const isSerializedParentAction: (value: object) => value is SerializedPar
{
"$ref": "#/definitions/SerializedUpdateCategoryTitleAction"
},
+ {
+ "$ref": "#/definitions/SerializedUpdateChildTaskAction"
+ },
{
"$ref": "#/definitions/SerializedUpdateDeviceNameAction"
},
@@ -2589,6 +2752,9 @@ export const isSerializedAppLogicAction: (value: object) => value is SerializedA
{
"$ref": "#/definitions/SerializedForceSyncAction"
},
+ {
+ "$ref": "#/definitions/SerializedMarkTaskPendingAction"
+ },
{
"$ref": "#/definitions/SerializedRemoveInstalledAppsAction"
},
diff --git a/src/database/category.ts b/src/database/category.ts
index f4c699d..1233077 100644
--- a/src/database/category.ts
+++ b/src/database/category.ts
@@ -69,10 +69,14 @@ export interface CategoryAttributesVersion9 {
disableLimitsUntil: string
}
+export interface CategoryAttributesVersion10 {
+ taskListVersion: string
+}
+
export type CategoryAttributes = CategoryAttributesVersion1 & CategoryAttributesVersion2 &
CategoryAttributesVersion3 & CategoryAttributesVersion4 & CategoryAttributesVersion5 &
CategoryAttributesVersion6 & CategoryAttributesVersion7 & CategoryAttributesVersion8 &
- CategoryAttributesVersion9
+ CategoryAttributesVersion9 & CategoryAttributesVersion10
export type CategoryModel = Sequelize.Model & CategoryAttributes
export type CategoryModelStatic = typeof Sequelize.Model & {
@@ -199,6 +203,13 @@ export const attributesVersion9: SequelizeAttributes
}
}
+export const attributesVersion10: SequelizeAttributes = {
+ taskListVersion: {
+ ...versionColumn,
+ defaultValue: 'abcd'
+ }
+}
+
export const attributes: SequelizeAttributes = {
...attributesVersion1,
...attributesVersion2,
@@ -208,7 +219,8 @@ export const attributes: SequelizeAttributes = {
...attributesVersion6,
...attributesVersion7,
...attributesVersion8,
- ...attributesVersion9
+ ...attributesVersion9,
+ ...attributesVersion10
}
export const createCategoryModel = (sequelize: Sequelize.Sequelize): CategoryModelStatic => sequelize.define('Category', attributes) as CategoryModelStatic
diff --git a/src/database/childtask.ts b/src/database/childtask.ts
new file mode 100644
index 0000000..8fb9fde
--- /dev/null
+++ b/src/database/childtask.ts
@@ -0,0 +1,67 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import * as Sequelize from 'sequelize'
+import { familyIdColumn, idWithinFamilyColumn, timestampColumn } from './columns'
+import { SequelizeAttributes } from './types'
+
+export interface ChildTaskAttributes {
+ familyId: string
+ taskId: string
+ // end of primary key
+ categoryId: string
+ taskTitle: string
+ extraTimeDuration: number
+ pendingRequest: number
+ lastGrantTimestamp: string
+}
+
+export const maxExtraTime = 1000 * 60 * 60 * 24
+export const maxTitleLength = 50
+
+export type ChildTaskModel = Sequelize.Model & ChildTaskAttributes
+export type ChildTaskModelStatic = typeof Sequelize.Model & {
+ new (values?: object, options?: Sequelize.BuildOptions): ChildTaskModel;
+}
+
+export const attributes: SequelizeAttributes = {
+ familyId: {
+ ...familyIdColumn,
+ primaryKey: true
+ },
+ taskId: {
+ ...idWithinFamilyColumn,
+ primaryKey: true
+ },
+ categoryId: { ...idWithinFamilyColumn },
+ taskTitle: {
+ type: Sequelize.STRING(maxTitleLength),
+ allowNull: false
+ },
+ extraTimeDuration: {
+ type: Sequelize.INTEGER,
+ allowNull: false,
+ validate: { min: 1, max: maxExtraTime }
+ },
+ pendingRequest: {
+ type: Sequelize.INTEGER,
+ allowNull: false
+ },
+ lastGrantTimestamp: { ...timestampColumn }
+}
+
+export const createChildTaskModel = (sequelize: Sequelize.Sequelize): ChildTaskModelStatic => sequelize.define('ChildTask', attributes) as ChildTaskModelStatic
diff --git a/src/database/index.ts b/src/database/index.ts
index fdddd9d..fd9c6f0 100644
--- a/src/database/index.ts
+++ b/src/database/index.ts
@@ -25,6 +25,7 @@ import { AuthTokenModelStatic, createAuthtokenModel } from './authtoken'
import { CategoryModelStatic, createCategoryModel } from './category'
import { CategoryAppModelStatic, createCategoryAppModel } from './categoryapp'
import { CategoryNetworkIdModelStatic, createCategoryNetworkIdModel } from './categorynetworkid'
+import { ChildTaskModelStatic, createChildTaskModel } from './childtask'
import { configItemIds, ConfigModelStatic, createConfigModel } from './config'
import { createDeviceModel, DeviceModelStatic } from './device'
import { createFamilyModel, FamilyModelStatic } from './family'
@@ -48,6 +49,7 @@ export interface Database {
category: CategoryModelStatic
categoryApp: CategoryAppModelStatic
categoryNetworkId: CategoryNetworkIdModelStatic
+ childTask: ChildTaskModelStatic
config: ConfigModelStatic
device: DeviceModelStatic
family: FamilyModelStatic
@@ -70,6 +72,7 @@ const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({
appActivity: createAppActivityModel(sequelize),
category: createCategoryModel(sequelize),
categoryApp: createCategoryAppModel(sequelize),
+ childTask: createChildTaskModel(sequelize),
categoryNetworkId: createCategoryNetworkIdModel(sequelize),
config: createConfigModel(sequelize),
device: createDeviceModel(sequelize),
diff --git a/src/database/migration/migrations/20201116-add-child-tasks.ts b/src/database/migration/migrations/20201116-add-child-tasks.ts
new file mode 100644
index 0000000..bcf4223
--- /dev/null
+++ b/src/database/migration/migrations/20201116-add-child-tasks.ts
@@ -0,0 +1,53 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { QueryInterface, Sequelize, Transaction } from 'sequelize'
+import { attributesVersion10 as categoryAttributes } from '../../category'
+
+export async function up (queryInterface: QueryInterface, sequelize: Sequelize) {
+ await sequelize.transaction({
+ type: Transaction.TYPES.EXCLUSIVE
+ }, async (transaction) => {
+ await sequelize.query(
+ 'CREATE TABLE `ChildTasks` (' +
+ '`familyId` VARCHAR(10) NOT NULL, `taskId` VARCHAR(6) NOT NULL,' +
+ '`categoryId` VARCHAR(6) NOT NULL, `taskTitle` VARCHAR(50) NOT NULL,' +
+ '`extraTimeDuration` INTEGER NOT NULL, `pendingRequest` INTEGER NOT NULL,' +
+ '`lastGrantTimestamp` LONG NOT NULL,' +
+ 'PRIMARY KEY(`familyId`, `taskId`),' +
+ 'FOREIGN KEY(`familyId`, `categoryId`) REFERENCES `Categories`(`familyId`, `categoryId`) ' +
+ 'ON UPDATE CASCADE ON DELETE CASCADE' +
+ ')',
+ { transaction }
+ )
+
+ await queryInterface.addColumn('Categories', 'taskListVersion', {
+ ...categoryAttributes.taskListVersion
+ }, {
+ transaction
+ })
+ })
+}
+
+export async function down (queryInterface: QueryInterface, sequelize: Sequelize) {
+ await sequelize.transaction({
+ type: Transaction.TYPES.EXCLUSIVE
+ }, async (transaction) => {
+ await queryInterface.dropTable('ChildTasks', { transaction })
+ await queryInterface.removeColumn('Categories', 'taskListVersion', { transaction })
+ })
+}
diff --git a/src/function/sync/apply-actions/cache.ts b/src/function/sync/apply-actions/cache.ts
index 3fc5a22..8d47299 100644
--- a/src/function/sync/apply-actions/cache.ts
+++ b/src/function/sync/apply-actions/cache.ts
@@ -37,6 +37,7 @@ export class Cache {
categoriesWithModifiedBaseData = new Set()
categoriesWithModifiedTimeLimitRules = new Set()
categoriesWithModifiedUsedTimes = new Set()
+ categoriesWithModifiedTasks = new Set()
devicesWithModifiedInstalledApps = new Set()
devicesWithModifiedShowDeviceConnected = new Map()
@@ -209,6 +210,22 @@ export class Cache {
this.categoriesWithModifiedUsedTimes.clear()
}
+ if (this.categoriesWithModifiedTasks.size > 0) {
+ await database.category.update({
+ taskListVersion: generateVersionId()
+ }, {
+ where: {
+ familyId,
+ categoryId: {
+ [Sequelize.Op.in]: setToList(this.categoriesWithModifiedTasks)
+ }
+ },
+ transaction
+ })
+
+ this.categoriesWithModifiedUsedTimes.clear()
+ }
+
if (this.devicesWithModifiedInstalledApps.size > 0) {
await database.device.update({
installedAppsVersion: generateVersionId()
diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/index.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/index.ts
index eaed2d6..ebef50c 100644
--- a/src/function/sync/apply-actions/dispatch-app-logic-action/index.ts
+++ b/src/function/sync/apply-actions/dispatch-app-logic-action/index.ts
@@ -21,6 +21,7 @@ import {
AddUsedTimeActionVersion2,
AppLogicAction,
ForceSyncAction,
+ MarkTaskPendingAction,
RemoveInstalledAppsAction,
SignOutAtDeviceAction,
TriedDisablingDeviceAdminAction,
@@ -34,6 +35,7 @@ import { dispatchAddInstalledApps } from './addinstalledapps'
import { dispatchAddUsedTime } from './addusedtime'
import { dispatchAddUsedTimeVersion2 } from './addusedtime2'
import { dispatchForceSyncAction } from './forcesync'
+import { dispatchMarkTaskPendingAction } from './marktaskpendingaction'
import { dispatchRemoveInstalledApps } from './removeinstalledapps'
import { dispatchSignOutAtDevice } from './signoutatdevice'
import { dispatchTriedDisablingDeviceAdmin } from './trieddisablingdeviceadmin'
@@ -54,6 +56,8 @@ export const dispatchAppLogicAction = async ({ action, deviceId, cache, eventHan
await dispatchAddUsedTimeVersion2({ deviceId, action, cache, eventHandler })
} else if (action instanceof ForceSyncAction) {
await dispatchForceSyncAction({ deviceId, action, cache })
+ } else if (action instanceof MarkTaskPendingAction) {
+ await dispatchMarkTaskPendingAction({ deviceId, action, cache })
} else if (action instanceof RemoveInstalledAppsAction) {
await dispatchRemoveInstalledApps({ deviceId, action, cache })
} else if (action instanceof SignOutAtDeviceAction) {
diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/marktaskpendingaction.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/marktaskpendingaction.ts
new file mode 100644
index 0000000..cd6e334
--- /dev/null
+++ b/src/function/sync/apply-actions/dispatch-app-logic-action/marktaskpendingaction.ts
@@ -0,0 +1,87 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { MarkTaskPendingAction } from '../../../../action'
+import { Cache } from '../cache'
+import { IllegalStateException, SourceDeviceNotFoundException } from '../exception/illegal-state'
+import { MissingTaskException } from '../exception/missing-item'
+
+export async function dispatchMarkTaskPendingAction ({ action, cache, deviceId }: {
+ deviceId: string
+ action: MarkTaskPendingAction
+ cache: Cache
+}) {
+ const taskInfoUnsafe = await cache.database.childTask.findOne({
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction,
+ attributes: ['categoryId', 'pendingRequest']
+ })
+
+ if (taskInfoUnsafe === null) throw new MissingTaskException()
+
+ const taskInfo = {
+ categoryId: taskInfoUnsafe.categoryId,
+ pendingRequest: taskInfoUnsafe.pendingRequest
+ }
+
+ if (taskInfo.pendingRequest !== 0) return // review already requested
+
+ const categoryInfoUnsafe = await cache.database.category.findOne({
+ where: {
+ familyId: cache.familyId,
+ categoryId: taskInfo.categoryId
+ },
+ attributes: ['childId'],
+ transaction: cache.transaction
+ })
+
+ if (categoryInfoUnsafe === null) {
+ throw new IllegalStateException({ staticMessage: 'category referenced from task not found' })
+ }
+
+ const categoryInfo = { childId: categoryInfoUnsafe.childId }
+
+ const deviceInfoUnsafe = await cache.database.device.findOne({
+ where: {
+ familyId: cache.familyId,
+ deviceId
+ },
+ attributes: ['currentUserId'],
+ transaction: cache.transaction
+ })
+
+ if (deviceInfoUnsafe === null) throw new SourceDeviceNotFoundException()
+
+ const deviceInfo = { currentUserId: deviceInfoUnsafe.currentUserId }
+
+ if (categoryInfo.childId !== deviceInfo.currentUserId) {
+ throw new IllegalStateException({ staticMessage: 'Can not mark task pending for other user than the current user' })
+ }
+
+ await cache.database.childTask.update({ pendingRequest: true }, {
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction
+ })
+
+ cache.categoriesWithModifiedTasks.add(taskInfo.categoryId)
+}
diff --git a/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts b/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts
index 2cd656b..9e573ea 100644
--- a/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts
+++ b/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts
@@ -76,7 +76,8 @@ export async function dispatchCreateCategory ({ action, cache, fromChildSelfLimi
blockAllNotifications: false,
timeWarningFlags: 0,
sort,
- disableLimitsUntil: 0
+ disableLimitsUntil: 0,
+ taskListVersion: generateVersionId()
}, { transaction: cache.transaction })
// update the cache
diff --git a/src/function/sync/apply-actions/dispatch-parent-action/deletechildtaskaction.ts b/src/function/sync/apply-actions/dispatch-parent-action/deletechildtaskaction.ts
new file mode 100644
index 0000000..0ec5f38
--- /dev/null
+++ b/src/function/sync/apply-actions/dispatch-parent-action/deletechildtaskaction.ts
@@ -0,0 +1,48 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { DeleteChildTaskAction } from '../../../../action'
+import { Cache } from '../cache'
+import { MissingTaskException } from '../exception/missing-item'
+
+export async function dispatchDeleteChildTaskAction ({ action, cache }: {
+ action: DeleteChildTaskAction
+ cache: Cache
+}) {
+ const taskInfoUnsafe = await cache.database.childTask.findOne({
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction,
+ attributes: ['categoryId']
+ })
+
+ if (taskInfoUnsafe === null) throw new MissingTaskException()
+
+ const taskInfo = { categoryId: taskInfoUnsafe.categoryId }
+
+ await cache.database.childTask.destroy({
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction
+ })
+
+ cache.categoriesWithModifiedTasks.add(taskInfo.categoryId)
+}
diff --git a/src/function/sync/apply-actions/dispatch-parent-action/index.ts b/src/function/sync/apply-actions/dispatch-parent-action/index.ts
index 12ce13a..593a36b 100644
--- a/src/function/sync/apply-actions/dispatch-parent-action/index.ts
+++ b/src/function/sync/apply-actions/dispatch-parent-action/index.ts
@@ -23,6 +23,7 @@ import {
CreateCategoryAction,
CreateTimeLimitRuleAction,
DeleteCategoryAction,
+ DeleteChildTaskAction,
DeleteTimeLimitRuleAction,
IgnoreManipulationAction,
IncrementCategoryExtraTimeAction,
@@ -32,6 +33,7 @@ import {
RenameChildAction,
ResetCategoryNetworkIdsAction,
ResetParentBlockedTimesAction,
+ ReviewChildTaskAction,
SetCategoryExtraTimeAction,
SetCategoryForUnassignedAppsAction,
SetChildPasswordAction,
@@ -53,6 +55,7 @@ import {
UpdateCategoryTemporarilyBlockedAction,
UpdateCategoryTimeWarningsAction,
UpdateCategoryTitleAction,
+ UpdateChildTaskAction,
UpdateDeviceNameAction,
UpdateEnableActivityLevelBlockingAction,
UpdateNetworkTimeVerificationAction,
@@ -72,6 +75,7 @@ import { dispatchChangeParentPassword } from './changeparentpassword'
import { dispatchCreateCategory } from './createcategory'
import { dispatchCreateTimeLimitRule } from './createtimelimitrule'
import { dispatchDeleteCategory } from './deletecategory'
+import { dispatchDeleteChildTaskAction } from './deletechildtaskaction'
import { dispatchDeleteTimeLimitRule } from './deletetimelimitrule'
import { dispatchIgnoreManipulation } from './ignoremanipulation'
import { dispatchIncrementCategoryExtraTime } from './incrementcategoryextratime'
@@ -80,6 +84,7 @@ import { dispatchRemoveUser } from './removeuser'
import { dispatchRenameChild } from './renamechild'
import { dispatchResetCategoryNetworkIds } from './resetcategorynetworkids'
import { dispatchResetParentBlockedTimes } from './resetparentblockedtimes'
+import { dispatchReviewChildTaskAction } from './reviewchildtaskaction'
import { dispatchSetCategoryExtraTime } from './setcategoryextratime'
import { dispatchSetCategoryForUnassignedApps } from './setcategoryforunassignedapps'
import { dispatchSetChildPassword } from './setchildpassword'
@@ -101,6 +106,7 @@ import { dispatchUpdateCategorySorting } from './updatecategorysorting'
import { dispatchUpdateCategoryTemporarilyBlocked } from './updatecategorytemporarilyblocked'
import { dispatchUpdateCategoryTimeWarnings } from './updatecategorytimewarnings'
import { dispatchUpdateCategoryTitle } from './updatecategorytitle'
+import { dispatchUpdateChildTaskAction } from './updatechildtaskaction'
import { dispatchUpdateDeviceName } from './updatedevicename'
import { dispatchUpdateEnableActivityLevelBlocking } from './updateenableactivitylevelblocking'
import { dispatchUpdateNetworkTimeVerification } from './updatenetworktimeverification'
@@ -210,6 +216,12 @@ export const dispatchParentAction = async ({ action, cache, parentUserId, source
return dispatchUpdateUserFlagsAction({ action, cache })
} else if (action instanceof UpdateUserLimitLoginCategory) {
return dispatchUpdateUserLimitLoginCategoryAction({ action, cache, parentUserId })
+ } else if (action instanceof DeleteChildTaskAction) {
+ await dispatchDeleteChildTaskAction({ action, cache })
+ } else if (action instanceof ReviewChildTaskAction) {
+ await dispatchReviewChildTaskAction({ action, cache })
+ } else if (action instanceof UpdateChildTaskAction) {
+ await dispatchUpdateChildTaskAction({ action, cache })
} else {
throw new ActionObjectTypeNotHandledException()
}
diff --git a/src/function/sync/apply-actions/dispatch-parent-action/reviewchildtaskaction.ts b/src/function/sync/apply-actions/dispatch-parent-action/reviewchildtaskaction.ts
new file mode 100644
index 0000000..448e369
--- /dev/null
+++ b/src/function/sync/apply-actions/dispatch-parent-action/reviewchildtaskaction.ts
@@ -0,0 +1,107 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { ReviewChildTaskAction } from '../../../../action'
+import { Cache } from '../cache'
+import { IllegalStateException } from '../exception/illegal-state'
+import { MissingTaskException } from '../exception/missing-item'
+
+export async function dispatchReviewChildTaskAction ({ action, cache }: {
+ action: ReviewChildTaskAction
+ cache: Cache
+}) {
+ const taskInfo = await cache.database.childTask.findOne({
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction
+ })
+
+ if (taskInfo === null) throw new MissingTaskException()
+
+ if (taskInfo.pendingRequest === 0) throw new IllegalStateException({ staticMessage: 'no task review pending' })
+
+ if (action.ok) {
+ const categoryInfoUnsafe = await cache.database.category.findOne({
+ where: {
+ familyId: cache.familyId,
+ categoryId: taskInfo.categoryId
+ },
+ attributes: ['extraTimeInMillis', 'extraTimeDay'],
+ transaction: cache.transaction
+ })
+
+ if (categoryInfoUnsafe === null) {
+ throw new IllegalStateException({ staticMessage: 'category referenced from task not found' })
+ }
+
+ const categoryInfo = {
+ extraTimeInMillis: categoryInfoUnsafe.extraTimeInMillis,
+ extraTimeDay: categoryInfoUnsafe.extraTimeDay
+ }
+
+ if (categoryInfo.extraTimeDay !== 0 && categoryInfo.extraTimeInMillis > 0) {
+ // if the current time is daily, then extend the daily time only
+ await cache.database.category.update({
+ extraTimeInMillis: categoryInfo.extraTimeInMillis + taskInfo.extraTimeDuration
+ }, {
+ where: {
+ familyId: cache.familyId,
+ categoryId: taskInfo.categoryId
+ },
+ transaction: cache.transaction
+ })
+ } else {
+ await cache.database.category.update({
+ extraTimeInMillis: categoryInfo.extraTimeInMillis + taskInfo.extraTimeDuration,
+ extraTimeDay: -1
+ }, {
+ where: {
+ familyId: cache.familyId,
+ categoryId: taskInfo.categoryId
+ },
+ transaction: cache.transaction
+ })
+ }
+
+ cache.categoriesWithModifiedBaseData.add(taskInfo.categoryId)
+
+ await cache.database.childTask.update({
+ pendingRequest: 0,
+ lastGrantTimestamp: action.time.toString(10)
+ }, {
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction
+ })
+ } else {
+ await cache.database.childTask.update({
+ pendingRequest: 0
+ }, {
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction
+ })
+ }
+
+ cache.categoriesWithModifiedTasks.add(taskInfo.categoryId)
+}
diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatechildtaskaction.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatechildtaskaction.ts
new file mode 100644
index 0000000..2b2a3d5
--- /dev/null
+++ b/src/function/sync/apply-actions/dispatch-parent-action/updatechildtaskaction.ts
@@ -0,0 +1,88 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { UpdateChildTaskAction } from '../../../../action'
+import { Cache } from '../cache'
+import { IllegalStateException } from '../exception/illegal-state'
+import { MissingCategoryException, MissingTaskException } from '../exception/missing-item'
+
+export async function dispatchUpdateChildTaskAction ({ action, cache }: {
+ action: UpdateChildTaskAction
+ cache: Cache
+}) {
+ const categoryInfoUnsafe = await cache.database.category.findOne({
+ where: {
+ familyId: cache.familyId,
+ categoryId: action.categoryId
+ },
+ attributes: ['childId'],
+ transaction: cache.transaction
+ })
+
+ if (categoryInfoUnsafe === null) throw new MissingCategoryException()
+
+ const taskInfo = await cache.database.childTask.findOne({
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction
+ })
+
+ const notFound = taskInfo === null
+
+ if (notFound !== action.isNew) {
+ if (action.isNew) {
+ throw new IllegalStateException({
+ staticMessage: 'can not create task which exists already'
+ })
+ } else {
+ throw new MissingTaskException()
+ }
+ }
+
+ if (taskInfo === null) {
+ await cache.database.childTask.create({
+ familyId: cache.familyId,
+ taskId: action.taskId,
+ categoryId: action.categoryId,
+ taskTitle: action.taskTitle,
+ extraTimeDuration: action.extraTimeDuration,
+ pendingRequest: 0,
+ lastGrantTimestamp: '0'
+ }, {
+ transaction: cache.transaction
+ })
+
+ cache.categoriesWithModifiedTasks.add(action.categoryId)
+ } else {
+ await cache.database.childTask.update({
+ taskTitle: action.taskTitle,
+ categoryId: action.categoryId,
+ extraTimeDuration: action.extraTimeDuration
+ }, {
+ where: {
+ familyId: cache.familyId,
+ taskId: action.taskId
+ },
+ transaction: cache.transaction
+ })
+
+ cache.categoriesWithModifiedTasks.add(taskInfo.categoryId)
+ cache.categoriesWithModifiedTasks.add(action.categoryId)
+ }
+}
diff --git a/src/function/sync/apply-actions/exception/missing-item.ts b/src/function/sync/apply-actions/exception/missing-item.ts
index ec6d975..3d16ed6 100644
--- a/src/function/sync/apply-actions/exception/missing-item.ts
+++ b/src/function/sync/apply-actions/exception/missing-item.ts
@@ -42,3 +42,9 @@ export class MissingDeviceException extends MissingItemException {
super({ staticMessage: 'referenced device which does not exist' })
}
}
+
+export class MissingTaskException extends MissingItemException {
+ constructor () {
+ super({ staticMessage: 'referenced task which does not exist' })
+ }
+}
diff --git a/src/function/sync/get-server-data-status/category/diff.ts b/src/function/sync/get-server-data-status/category/diff.ts
index b7ca6bb..ae3e17c 100644
--- a/src/function/sync/get-server-data-status/category/diff.ts
+++ b/src/function/sync/get-server-data-status/category/diff.ts
@@ -37,7 +37,8 @@ export async function getCategoryDataToSync ({ database, transaction, familyEntr
'baseVersion',
'assignedAppsVersion',
'timeLimitRulesVersion',
- 'usedTimesVersion'
+ 'usedTimesVersion',
+ 'taskListVersion'
],
transaction
})).map((item) => ({
@@ -45,7 +46,8 @@ export async function getCategoryDataToSync ({ database, transaction, familyEntr
baseVersion: item.baseVersion,
assignedAppsVersion: item.assignedAppsVersion,
timeLimitRulesVersion: item.timeLimitRulesVersion,
- usedTimesVersion: item.usedTimesVersion
+ usedTimesVersion: item.usedTimesVersion,
+ taskListVersion: item.taskListVersion
}))
const serverCategoryIds = serverCategoriesVersions.map((item) => item.categoryId)
@@ -60,6 +62,7 @@ export async function getCategoryDataToSync ({ database, transaction, familyEntr
const categoryIdsToSyncAssignedApps = [...addedCategoryIds]
const categoryIdsToSyncRules = [...addedCategoryIds]
const categoryIdsToSyncUsedTimes = [...addedCategoryIds]
+ const categoryIdsToSyncTasks = [...addedCategoryIds]
categoryIdsOfClientAndServer.forEach((categoryId) => {
const serverEntry = serverCategoriesVersions.find((item) => item.categoryId === categoryId)
@@ -84,6 +87,10 @@ export async function getCategoryDataToSync ({ database, transaction, familyEntr
if (serverEntry.usedTimesVersion !== clientEntry.usedTime) {
categoryIdsToSyncUsedTimes.push(categoryId)
}
+
+ if (serverEntry.taskListVersion !== clientEntry.tasks) {
+ categoryIdsToSyncTasks.push(categoryId)
+ }
})
const serverCategoriesVersionsMap = new Map()
@@ -96,6 +103,7 @@ export async function getCategoryDataToSync ({ database, transaction, familyEntr
categoryIdsToSyncAssignedApps,
categoryIdsToSyncRules,
categoryIdsToSyncUsedTimes,
+ categoryIdsToSyncTasks,
serverCategoriesVersions: {
list: serverCategoriesVersions,
requireByCategoryId: (categoryId) => {
@@ -117,6 +125,7 @@ export interface GetCategoryDataToSyncResult {
categoryIdsToSyncAssignedApps: Array
categoryIdsToSyncRules: Array
categoryIdsToSyncUsedTimes: Array
+ categoryIdsToSyncTasks: Array
serverCategoriesVersions: ServerCategoryVersions
}
@@ -131,4 +140,5 @@ export interface ServerCategoryVersion {
assignedAppsVersion: string
timeLimitRulesVersion: string
usedTimesVersion: string
+ taskListVersion: string
}
diff --git a/src/function/sync/get-server-data-status/category/index.ts b/src/function/sync/get-server-data-status/category/index.ts
index 991fc29..5f9b217 100644
--- a/src/function/sync/get-server-data-status/category/index.ts
+++ b/src/function/sync/get-server-data-status/category/index.ts
@@ -18,5 +18,6 @@
export { getCategoryDataToSync } from './diff'
export { getCategoryBaseDatas } from './base-data'
export { getRules } from './rules'
+export { getTasks } from './tasks'
export { getUsedTimes } from './used-times'
export { getCategoryAssignedApps } from './assigned-apps'
diff --git a/src/function/sync/get-server-data-status/category/tasks.ts b/src/function/sync/get-server-data-status/category/tasks.ts
new file mode 100644
index 0000000..f8cbd49
--- /dev/null
+++ b/src/function/sync/get-server-data-status/category/tasks.ts
@@ -0,0 +1,70 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 - 2020 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import * as Sequelize from 'sequelize'
+import { Database, Transaction } from '../../../../database'
+import { ServerUpdatedCategoryTask, ServerUpdatedCategoryTasks } from '../../../../object/serverdatastatus'
+import { FamilyEntry } from '../family-entry'
+import { ServerCategoryVersions } from './diff'
+
+export async function getTasks ({
+ database, transaction, categoryIdsToSyncTasks, familyEntry,
+ serverCategoriesVersions
+}: {
+ database: Database
+ transaction: Transaction
+ categoryIdsToSyncTasks: Array
+ familyEntry: FamilyEntry
+ serverCategoriesVersions: ServerCategoryVersions
+}): Promise> {
+ const dataToSync = (await database.childTask.findAll({
+ where: {
+ familyId: familyEntry.familyId,
+ categoryId: {
+ [Sequelize.Op.in]: categoryIdsToSyncTasks
+ }
+ },
+ attributes: [
+ 'taskId',
+ 'categoryId',
+ 'taskTitle',
+ 'extraTimeDuration',
+ 'pendingRequest',
+ 'lastGrantTimestamp'
+ ],
+ transaction
+ })).map((item) => ({
+ taskId: item.taskId,
+ categoryId: item.categoryId,
+ taskTitle: item.taskTitle,
+ extraTimeDuration: item.extraTimeDuration,
+ pendingRequest: item.pendingRequest,
+ lastGrantTimestamp: item.lastGrantTimestamp
+ }))
+
+ return categoryIdsToSyncTasks.map((categoryId) => ({
+ categoryId,
+ version: serverCategoriesVersions.requireByCategoryId(categoryId).taskListVersion,
+ tasks: dataToSync.filter((item) => item.categoryId === categoryId).map((item): ServerUpdatedCategoryTask => ({
+ i: item.taskId,
+ t: item.taskTitle,
+ d: item.extraTimeDuration,
+ p: item.pendingRequest !== 0,
+ l: parseInt(item.lastGrantTimestamp, 10)
+ }))
+ }))
+}
diff --git a/src/function/sync/get-server-data-status/index.ts b/src/function/sync/get-server-data-status/index.ts
index f7726a6..2e720a4 100644
--- a/src/function/sync/get-server-data-status/index.ts
+++ b/src/function/sync/get-server-data-status/index.ts
@@ -23,7 +23,8 @@ import { ClientDataStatus } from '../../../object/clientdatastatus'
import { ServerDataStatus } from '../../../object/serverdatastatus'
import { getAppList } from './app-list'
import {
- getCategoryAssignedApps, getCategoryBaseDatas, getCategoryDataToSync, getRules, getUsedTimes
+ getCategoryAssignedApps, getCategoryBaseDatas, getCategoryDataToSync,
+ getRules, getTasks, getUsedTimes
} from './category'
import { getDeviceList } from './device-list'
import { getFamilyEntry } from './family-entry'
@@ -36,6 +37,7 @@ export const generateServerDataStatus = async ({ database, clientStatus, familyI
transaction: Sequelize.Transaction
}): Promise => {
const familyEntry = await getFamilyEntry({ database, familyId, transaction })
+ const doesClientSupportTasks = clientStatus.clientLevel !== undefined && clientStatus.clientLevel >= 3
let result: ServerDataStatus = {
fullVersion: config.alwaysPro ? 1 : (
@@ -92,5 +94,13 @@ export const generateServerDataStatus = async ({ database, clientStatus, familyI
})
}
+ if (categoryDataToSync.categoryIdsToSyncTasks.length > 0 && doesClientSupportTasks) {
+ result.tasks = await getTasks({
+ database, transaction, familyEntry,
+ serverCategoriesVersions: categoryDataToSync.serverCategoriesVersions,
+ categoryIdsToSyncTasks: categoryDataToSync.categoryIdsToSyncTasks
+ })
+ }
+
return result
}
diff --git a/src/object/clientdatastatus.ts b/src/object/clientdatastatus.ts
index c9bc6fd..437db70 100644
--- a/src/object/clientdatastatus.ts
+++ b/src/object/clientdatastatus.ts
@@ -31,4 +31,5 @@ export interface CategoryDataStatus {
apps: string // assignedAppsVersion
rules: string // timeLimitRulesVersion
usedTime: string // usedTimeItemsVersion
+ tasks?: string // taskListVersion
}
diff --git a/src/object/serverdatastatus.ts b/src/object/serverdatastatus.ts
index 08803d3..8ddefc5 100644
--- a/src/object/serverdatastatus.ts
+++ b/src/object/serverdatastatus.ts
@@ -29,6 +29,7 @@ export interface ServerDataStatus {
categoryApp?: Array // newCategoryAssignedApps
usedTimes?: Array // newCategoryUsedTimes
rules?: Array // newOrUpdatedTimeLimitRules
+ tasks?: Array // newOrUpdatedTasks
users?: ServerUserList // newUserList
fullVersion: number // fullVersionUntil
message?: string
@@ -188,6 +189,20 @@ export interface ServerTimeLimitRule {
pause: number // session pause duration
}
+export interface ServerUpdatedCategoryTasks {
+ categoryId: string
+ version: string
+ tasks: Array
+}
+
+export interface ServerUpdatedCategoryTask {
+ i: string // taskId
+ t: string // taskTitle
+ d: number // extraTimeDuration
+ p: boolean // pendingRequest
+ l: number // lastGrantTimestamp
+}
+
export interface ServerInstalledAppsData {
deviceId: string
version: string