diff --git a/docs/schema/ClientPullChangesRequest.schema.json b/docs/schema/ClientPullChangesRequest.schema.json index e112fa6..c01277c 100644 --- a/docs/schema/ClientPullChangesRequest.schema.json +++ b/docs/schema/ClientPullChangesRequest.schema.json @@ -37,6 +37,18 @@ }, "clientLevel": { "type": "number" + }, + "devicesDetail": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DeviceDataStatus" + } + }, + "kri": { + "type": "number" + }, + "kr": { + "type": "number" } }, "additionalProperties": false, @@ -75,6 +87,19 @@ "usedTime" ], "title": "CategoryDataStatus" + }, + "DeviceDataStatus": { + "type": "object", + "properties": { + "appsB": { + "type": "string" + }, + "appsD": { + "type": "string" + } + }, + "additionalProperties": false, + "title": "DeviceDataStatus" } }, "$schema": "http://json-schema.org/draft-07/schema#", diff --git a/docs/schema/README.md b/docs/schema/README.md index 993ad77..9708c1c 100644 --- a/docs/schema/README.md +++ b/docs/schema/README.md @@ -54,6 +54,8 @@ * [ClientPushChangesRequestAction](./clientpushchangesrequest-definitions-clientpushchangesrequestaction.md) – `https://timelimit.io/ClientPushChangesRequest#/definitions/ClientPushChangesRequestAction` +* [DeviceDataStatus](./clientpullchangesrequest-definitions-devicedatastatus.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus` + * [NewDeviceInfo](./createfamilybymailtokenrequest-definitions-newdeviceinfo.md) – `https://timelimit.io/CreateFamilyByMailTokenRequest#/definitions/NewDeviceInfo` * [NewDeviceInfo](./registerchilddevicerequest-definitions-newdeviceinfo.md) – `https://timelimit.io/RegisterChildDeviceRequest#/definitions/NewDeviceInfo` @@ -106,6 +108,8 @@ * [SerializedDeleteTimeLimitRuleAction](./serializedparentaction-definitions-serializeddeletetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedDeleteTimeLimitRuleAction` +* [SerializedFinishKeyRequestAction](./serializedapplogicaction-definitions-serializedfinishkeyrequestaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction` + * [SerializedForceSyncAction](./serializedapplogicaction-definitions-serializedforcesyncaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedForceSyncAction` * [SerializedIgnoreManipulationAction](./serializedparentaction-definitions-serializedignoremanipulationaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction` @@ -126,8 +130,12 @@ * [SerializedRenameChildAction](./serializedparentaction-definitions-serializedrenamechildaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedRenameChildAction` +* [SerializedReplyToKeyRequestAction](./serializedapplogicaction-definitions-serializedreplytokeyrequestaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction` + * [SerializedReviewChildTaskAction](./serializedparentaction-definitions-serializedreviewchildtaskaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction` +* [SerializedSendKeyRequestAction](./serializedapplogicaction-definitions-serializedsendkeyrequestaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction` + * [SerializedSetCategoryExtraTimeAction](./serializedparentaction-definitions-serializedsetcategoryextratimeaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryExtraTimeAction` * [SerializedSetCategoryForUnassignedAppsAction](./serializedparentaction-definitions-serializedsetcategoryforunassignedappsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryForUnassignedAppsAction` @@ -186,6 +194,8 @@ * [SerializedUpdateEnableActivityLevelBlockingAction](./serializedparentaction-definitions-serializedupdateenableactivitylevelblockingaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateEnableActivityLevelBlockingAction` +* [SerializedUpdateInstalledAppsAction](./serializedapplogicaction-definitions-serializedupdateinstalledappsaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction` + * [SerializedUpdateParentNotificationFlagsAction](./serializedparentaction-definitions-serializedupdateparentnotificationflagsaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateParentNotificationFlagsAction` * [SerializedUpdateTimelimitRuleAction](./serializedparentaction-definitions-serializedupdatetimelimitruleaction.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction` @@ -196,14 +206,24 @@ * [SerializedUpdateUserLimitLoginPreBlockDuration](./serializedparentaction-definitions-serializedupdateuserlimitloginpreblockduration.md) – `https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateUserLimitLoginPreBlockDuration` +* [SerializedUploadDevicePublicKeyAction](./serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction` + * [ServerCategoryNetworkId](./serverdatastatus-definitions-servercategorynetworkid.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerCategoryNetworkId` +* [ServerCryptContainer](./serverdatastatus-definitions-servercryptcontainer.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer` + * [ServerDeviceData](./serverdatastatus-definitions-serverdevicedata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData` * [ServerDeviceList](./serverdatastatus-definitions-serverdevicelist.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList` +* [ServerExtendedDeviceData](./serverdatastatus-definitions-serverextendeddevicedata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData` + * [ServerInstalledAppsData](./serverdatastatus-definitions-serverinstalledappsdata.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData` +* [ServerKeyRequest](./serverdatastatus-definitions-serverkeyrequest.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest` + +* [ServerKeyResponse](./serverdatastatus-definitions-serverkeyresponse.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse` + * [ServerSessionDurationItem](./serverdatastatus-definitions-serversessiondurationitem.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerSessionDurationItem` * [ServerTimeLimitRule](./serverdatastatus-definitions-servertimelimitrule.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule` @@ -230,10 +250,14 @@ * [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-devicesdetail.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail` + * [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-devicesdetail.md) – `https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail` + * [Untitled object in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items` * [Untitled object in SerializedAppLogicAction](./serializedapplogicaction-definitions-serializedaddusedtimeactionversion2-properties-i-items.md) – `https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedAddUsedTimeActionVersion2/properties/i/items` @@ -296,6 +320,8 @@ * [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serverdevicelist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceList/properties/data` +* [Untitled array in ServerDataStatus](./serverdatastatus-properties-devices2.md) – `https://timelimit.io/ServerDataStatus#/properties/devices2` + * [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` @@ -330,6 +356,10 @@ * [Untitled array in ServerDataStatus](./serverdatastatus-definitions-serveruserlist-properties-data.md) – `https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data` +* [Untitled array in ServerDataStatus](./serverdatastatus-properties-krq.md) – `https://timelimit.io/ServerDataStatus#/properties/krq` + +* [Untitled array in ServerDataStatus](./serverdatastatus-properties-kr.md) – `https://timelimit.io/ServerDataStatus#/properties/kr` + * [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` diff --git a/docs/schema/SerializedAppLogicAction.schema.json b/docs/schema/SerializedAppLogicAction.schema.json index 663247a..34db597 100644 --- a/docs/schema/SerializedAppLogicAction.schema.json +++ b/docs/schema/SerializedAppLogicAction.schema.json @@ -9,15 +9,27 @@ { "$ref": "#/definitions/SerializedAddUsedTimeActionVersion2" }, + { + "$ref": "#/definitions/SerializedFinishKeyRequestAction" + }, { "$ref": "#/definitions/SerializedForceSyncAction" }, + { + "$ref": "#/definitions/SerializedReplyToKeyRequestAction" + }, { "$ref": "#/definitions/SerializedMarkTaskPendingAction" }, + { + "$ref": "#/definitions/SerializedUpdateInstalledAppsAction" + }, { "$ref": "#/definitions/SerializedRemoveInstalledAppsAction" }, + { + "$ref": "#/definitions/SerializedSendKeyRequestAction" + }, { "$ref": "#/definitions/SerializedSignOutAtDeviceAction" }, @@ -29,6 +41,9 @@ }, { "$ref": "#/definitions/SerializedUpdateDeviceStatusAction" + }, + { + "$ref": "#/definitions/SerializedUploadDevicePublicKeyAction" } ], "definitions": { @@ -206,6 +221,26 @@ ], "title": "SerializedAddUsedTimeActionVersion2" }, + "SerializedFinishKeyRequestAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "FINISH_KEY_REQUEST" + ] + }, + "dsn": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "dsn", + "type" + ], + "title": "SerializedFinishKeyRequestAction" + }, "SerializedForceSyncAction": { "type": "object", "properties": { @@ -222,6 +257,38 @@ ], "title": "SerializedForceSyncAction" }, + "SerializedReplyToKeyRequestAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "REPLY_TO_KEY_REQUEST" + ] + }, + "rsn": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "encryptedKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "encryptedKey", + "rsn", + "signature", + "tempKey", + "type" + ], + "title": "SerializedReplyToKeyRequestAction" + }, "SerializedMarkTaskPendingAction": { "type": "object", "properties": { @@ -242,6 +309,32 @@ ], "title": "SerializedMarkTaskPendingAction" }, + "SerializedUpdateInstalledAppsAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "UPDATE_INSTALLED_APPS" + ] + }, + "b": { + "type": "string" + }, + "d": { + "type": "string" + }, + "w": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "type", + "w" + ], + "title": "SerializedUpdateInstalledAppsAction" + }, "SerializedRemoveInstalledAppsAction": { "type": "object", "properties": { @@ -265,6 +358,44 @@ ], "title": "SerializedRemoveInstalledAppsAction" }, + "SerializedSendKeyRequestAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "SEND_KEY_REQUEST" + ] + }, + "dsn": { + "type": "number" + }, + "deviceId": { + "type": "string" + }, + "categoryId": { + "type": "string" + }, + "dataType": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "dataType", + "dsn", + "signature", + "tempKey", + "type" + ], + "title": "SerializedSendKeyRequestAction" + }, "SerializedSignOutAtDeviceAction": { "type": "object", "properties": { @@ -421,6 +552,26 @@ "type" ], "title": "SerializedUpdateDeviceStatusAction" + }, + "SerializedUploadDevicePublicKeyAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "UPLOAD_DEVICE_PUBLIC_KEY" + ] + }, + "key": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "key", + "type" + ], + "title": "SerializedUploadDevicePublicKeyAction" } }, "$schema": "http://json-schema.org/draft-07/schema#", diff --git a/docs/schema/ServerDataStatus.schema.json b/docs/schema/ServerDataStatus.schema.json index 4bd0e89..ffafea1 100644 --- a/docs/schema/ServerDataStatus.schema.json +++ b/docs/schema/ServerDataStatus.schema.json @@ -4,6 +4,12 @@ "devices": { "$ref": "#/definitions/ServerDeviceList" }, + "devices2": { + "type": "array", + "items": { + "$ref": "#/definitions/ServerExtendedDeviceData" + } + }, "apps": { "type": "array", "items": { @@ -49,6 +55,18 @@ "users": { "$ref": "#/definitions/ServerUserList" }, + "krq": { + "type": "array", + "items": { + "$ref": "#/definitions/ServerKeyRequest" + } + }, + "kr": { + "type": "array", + "items": { + "$ref": "#/definitions/ServerKeyResponse" + } + }, "fullVersion": { "type": "number" }, @@ -185,6 +203,9 @@ }, "mFlags": { "type": "number" + }, + "pk": { + "type": "string" } }, "additionalProperties": false, @@ -251,6 +272,42 @@ "type": "string", "title": "NewPermissionStatus" }, + "ServerExtendedDeviceData": { + "type": "object", + "properties": { + "deviceId": { + "type": "string" + }, + "appsBase": { + "$ref": "#/definitions/ServerCryptContainer" + }, + "appsDiff": { + "$ref": "#/definitions/ServerCryptContainer" + } + }, + "additionalProperties": false, + "required": [ + "deviceId" + ], + "title": "ServerExtendedDeviceData" + }, + "ServerCryptContainer": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "data": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "data", + "version" + ], + "title": "ServerCryptContainer" + }, "ServerInstalledAppsData": { "type": "object", "properties": { @@ -784,6 +841,78 @@ "type" ], "title": "ServerUserEntry" + }, + "ServerKeyRequest": { + "type": "object", + "properties": { + "srvSeq": { + "type": "number" + }, + "senId": { + "type": "string" + }, + "senSeq": { + "type": "number" + }, + "deviceId": { + "type": "string" + }, + "categoryId": { + "type": "string" + }, + "type": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "senId", + "senSeq", + "signature", + "srvSeq", + "tempKey", + "type" + ], + "title": "ServerKeyRequest" + }, + "ServerKeyResponse": { + "type": "object", + "properties": { + "srvSeq": { + "type": "number" + }, + "sender": { + "type": "string" + }, + "rqSeq": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "cryptKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "cryptKey", + "rqSeq", + "sender", + "signature", + "srvSeq", + "tempKey" + ], + "title": "ServerKeyResponse" } }, "$schema": "http://json-schema.org/draft-07/schema#", diff --git a/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-appsb.md b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-appsb.md new file mode 100644 index 0000000..a73d3e9 --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-appsb.md @@ -0,0 +1,15 @@ +# Untitled string in ClientPullChangesRequest Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/appsB +``` + + + +| 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") | + +## appsB Type + +`string` diff --git a/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-appsd.md b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-appsd.md new file mode 100644 index 0000000..b8b08ee --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-categorydatastatus-properties-appsd.md @@ -0,0 +1,15 @@ +# Untitled string in ClientPullChangesRequest Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/CategoryDataStatus/properties/appsD +``` + + + +| 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") | + +## appsD Type + +`string` diff --git a/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md new file mode 100644 index 0000000..a576f79 --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md @@ -0,0 +1,39 @@ +# Untitled object in ClientPullChangesRequest Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail +``` + + + +| 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") | + +## devicesDetail Type + +`object` ([Details](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md)) + +# devicesDetail Properties + +| Property | Type | Required | Nullable | Defined by | +| :-------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Additional Properties | `object` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail/additionalProperties") | + +## Additional Properties + +Additional properties are allowed, as long as they follow this schema: + + + +* is optional + +* Type: `object` ([DeviceDataStatus](clientpullchangesrequest-definitions-devicedatastatus.md)) + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail/additionalProperties") + +### additionalProperties Type + +`object` ([DeviceDataStatus](clientpullchangesrequest-definitions-devicedatastatus.md)) diff --git a/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-kr.md b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-kr.md new file mode 100644 index 0000000..d5f23ec --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-kr.md @@ -0,0 +1,15 @@ +# Untitled number in ClientPullChangesRequest Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kr +``` + + + +| 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") | + +## kr Type + +`number` diff --git a/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-kri.md b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-kri.md new file mode 100644 index 0000000..fccdfe0 --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus-properties-kri.md @@ -0,0 +1,15 @@ +# Untitled number in ClientPullChangesRequest Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kri +``` + + + +| 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") | + +## kri Type + +`number` diff --git a/docs/schema/clientpullchangesrequest-definitions-clientdatastatus.md b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus.md index ef53120..fb9f4d1 100644 --- a/docs/schema/clientpullchangesrequest-definitions-clientdatastatus.md +++ b/docs/schema/clientpullchangesrequest-definitions-clientdatastatus.md @@ -16,13 +16,16 @@ https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus # ClientDataStatus Properties -| Property | Type | Required | Nullable | Defined by | -| :-------------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [devices](#devices) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devices.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devices") | -| [apps](#apps) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-apps.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/apps") | -| [categories](#categories) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-categories.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/categories") | -| [users](#users) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-users.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/users") | -| [clientLevel](#clientlevel) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-clientlevel.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/clientLevel") | +| Property | Type | Required | Nullable | Defined by | +| :------------------------------ | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [devices](#devices) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devices.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devices") | +| [apps](#apps) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-apps.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/apps") | +| [categories](#categories) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-categories.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/categories") | +| [users](#users) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-users.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/users") | +| [clientLevel](#clientlevel) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-clientlevel.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/clientLevel") | +| [devicesDetail](#devicesdetail) | `object` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail") | +| [kri](#kri) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kri.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kri") | +| [kr](#kr) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kr.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kr") | ## devices @@ -113,3 +116,57 @@ https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus ### clientLevel Type `number` + +## devicesDetail + + + +`devicesDetail` + +* is optional + +* Type: `object` ([Details](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md)) + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail") + +### devicesDetail Type + +`object` ([Details](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md)) + +## kri + + + +`kri` + +* is optional + +* Type: `number` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kri.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kri") + +### kri Type + +`number` + +## kr + + + +`kr` + +* is optional + +* Type: `number` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kr.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kr") + +### kr Type + +`number` diff --git a/docs/schema/clientpullchangesrequest-definitions-devicedatastatus-properties-appsb.md b/docs/schema/clientpullchangesrequest-definitions-devicedatastatus-properties-appsb.md new file mode 100644 index 0000000..9cc4195 --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-devicedatastatus-properties-appsb.md @@ -0,0 +1,15 @@ +# Untitled string in ClientPullChangesRequest Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsB +``` + + + +| 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") | + +## appsB Type + +`string` diff --git a/docs/schema/clientpullchangesrequest-definitions-devicedatastatus-properties-appsd.md b/docs/schema/clientpullchangesrequest-definitions-devicedatastatus-properties-appsd.md new file mode 100644 index 0000000..1ebd930 --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-devicedatastatus-properties-appsd.md @@ -0,0 +1,15 @@ +# Untitled string in ClientPullChangesRequest Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsD +``` + + + +| 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") | + +## appsD Type + +`string` diff --git a/docs/schema/clientpullchangesrequest-definitions-devicedatastatus.md b/docs/schema/clientpullchangesrequest-definitions-devicedatastatus.md new file mode 100644 index 0000000..627ebf9 --- /dev/null +++ b/docs/schema/clientpullchangesrequest-definitions-devicedatastatus.md @@ -0,0 +1,58 @@ +# DeviceDataStatus Schema + +```txt +https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :----------- | :---------------- | :-------------------- | :------------------ | :---------------------------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [ClientPullChangesRequest.schema.json\*](ClientPullChangesRequest.schema.json "open original schema") | + +## DeviceDataStatus Type + +`object` ([DeviceDataStatus](clientpullchangesrequest-definitions-devicedatastatus.md)) + +# DeviceDataStatus Properties + +| Property | Type | Required | Nullable | Defined by | +| :-------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [appsB](#appsb) | `string` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsb.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsB") | +| [appsD](#appsd) | `string` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsd.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsD") | + +## appsB + + + +`appsB` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsb.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsB") + +### appsB Type + +`string` + +## appsD + + + +`appsD` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsd.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsD") + +### appsD Type + +`string` diff --git a/docs/schema/clientpullchangesrequest.md b/docs/schema/clientpullchangesrequest.md index 564e4a8..33020ac 100644 --- a/docs/schema/clientpullchangesrequest.md +++ b/docs/schema/clientpullchangesrequest.md @@ -67,13 +67,16 @@ Reference this group by using {"$ref":"https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus"} ``` -| Property | Type | Required | Nullable | Defined by | -| :-------------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [devices](#devices) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devices.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devices") | -| [apps](#apps) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-apps.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/apps") | -| [categories](#categories) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-categories.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/categories") | -| [users](#users) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-users.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/users") | -| [clientLevel](#clientlevel) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-clientlevel.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/clientLevel") | +| Property | Type | Required | Nullable | Defined by | +| :------------------------------ | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [devices](#devices) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devices.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devices") | +| [apps](#apps) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-apps.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/apps") | +| [categories](#categories) | `object` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-categories.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/categories") | +| [users](#users) | `string` | Required | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-users.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/users") | +| [clientLevel](#clientlevel) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-clientlevel.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/clientLevel") | +| [devicesDetail](#devicesdetail) | `object` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail") | +| [kri](#kri) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kri.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kri") | +| [kr](#kr) | `number` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kr.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kr") | ### devices @@ -165,6 +168,60 @@ Reference this group by using `number` +### devicesDetail + + + +`devicesDetail` + +* is optional + +* Type: `object` ([Details](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md)) + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/devicesDetail") + +#### devicesDetail Type + +`object` ([Details](clientpullchangesrequest-definitions-clientdatastatus-properties-devicesdetail.md)) + +### kri + + + +`kri` + +* is optional + +* Type: `number` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kri.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kri") + +#### kri Type + +`number` + +### kr + + + +`kr` + +* is optional + +* Type: `number` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-clientdatastatus-properties-kr.md "https://timelimit.io/ClientPullChangesRequest#/definitions/ClientDataStatus/properties/kr") + +#### kr Type + +`number` + ## Definitions group CategoryDataStatus Reference this group by using @@ -270,3 +327,52 @@ Reference this group by using #### tasks Type `string` + +## Definitions group DeviceDataStatus + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :-------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [appsB](#appsb) | `string` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsb.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsB") | +| [appsD](#appsd) | `string` | Optional | cannot be null | [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsd.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsD") | + +### appsB + + + +`appsB` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsb.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsB") + +#### appsB Type + +`string` + +### appsD + + + +`appsD` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ClientPullChangesRequest](clientpullchangesrequest-definitions-devicedatastatus-properties-appsd.md "https://timelimit.io/ClientPullChangesRequest#/definitions/DeviceDataStatus/properties/appsD") + +#### appsD Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-dsn.md b/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-dsn.md new file mode 100644 index 0000000..bf776c1 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-dsn.md @@ -0,0 +1,15 @@ +# Untitled number in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/dsn +``` + + + +| 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") | + +## dsn Type + +`number` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-type.md b/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-type.md new file mode 100644 index 0000000..d9efbce --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-type.md @@ -0,0 +1,23 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/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 | +| :--------------------- | :---------- | +| `"FINISH_KEY_REQUEST"` | | diff --git a/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction.md b/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction.md new file mode 100644 index 0000000..99b9978 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedfinishkeyrequestaction.md @@ -0,0 +1,66 @@ +# SerializedFinishKeyRequestAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction +``` + + + +| 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") | + +## SerializedFinishKeyRequestAction Type + +`object` ([SerializedFinishKeyRequestAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction.md)) + +# SerializedFinishKeyRequestAction Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------ | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/type") | +| [dsn](#dsn) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/dsn") | + +## type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/type") + +### type Type + +`string` + +### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :--------------------- | :---------- | +| `"FINISH_KEY_REQUEST"` | | + +## dsn + + + +`dsn` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/dsn") + +### dsn Type + +`number` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-encryptedkey.md b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-encryptedkey.md new file mode 100644 index 0000000..e53b16d --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-encryptedkey.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/encryptedKey +``` + + + +| 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") | + +## encryptedKey Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-rsn.md b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-rsn.md new file mode 100644 index 0000000..eb0016a --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-rsn.md @@ -0,0 +1,15 @@ +# Untitled number in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/rsn +``` + + + +| 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") | + +## rsn Type + +`number` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-signature.md b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-signature.md new file mode 100644 index 0000000..5527052 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-signature.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/signature +``` + + + +| 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") | + +## signature Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-tempkey.md b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-tempkey.md new file mode 100644 index 0000000..d1e89bd --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-tempkey.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/tempKey +``` + + + +| 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") | + +## tempKey Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-type.md b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-type.md new file mode 100644 index 0000000..288adf3 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-type.md @@ -0,0 +1,23 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/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 | +| :----------------------- | :---------- | +| `"REPLY_TO_KEY_REQUEST"` | | diff --git a/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction.md b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction.md new file mode 100644 index 0000000..a7af893 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedreplytokeyrequestaction.md @@ -0,0 +1,123 @@ +# SerializedReplyToKeyRequestAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction +``` + + + +| 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") | + +## SerializedReplyToKeyRequestAction Type + +`object` ([SerializedReplyToKeyRequestAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction.md)) + +# SerializedReplyToKeyRequestAction Properties + +| Property | Type | Required | Nullable | Defined by | +| :---------------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/type") | +| [rsn](#rsn) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-rsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/rsn") | +| [tempKey](#tempkey) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/tempKey") | +| [encryptedKey](#encryptedkey) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-encryptedkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/encryptedKey") | +| [signature](#signature) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/signature") | + +## type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/type") + +### type Type + +`string` + +### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :----------------------- | :---------- | +| `"REPLY_TO_KEY_REQUEST"` | | + +## rsn + + + +`rsn` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-rsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/rsn") + +### rsn Type + +`number` + +## tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/tempKey") + +### tempKey Type + +`string` + +## encryptedKey + + + +`encryptedKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-encryptedkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/encryptedKey") + +### encryptedKey Type + +`string` + +## signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/signature") + +### signature Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-categoryid.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-categoryid.md new file mode 100644 index 0000000..615c8b8 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-categoryid.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/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 | [SerializedAppLogicAction.schema.json\*](SerializedAppLogicAction.schema.json "open original schema") | + +## categoryId Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-datatype.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-datatype.md new file mode 100644 index 0000000..99e8674 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-datatype.md @@ -0,0 +1,15 @@ +# Untitled number in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dataType +``` + + + +| 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") | + +## dataType Type + +`number` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-deviceid.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-deviceid.md new file mode 100644 index 0000000..299b162 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-deviceid.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/deviceId +``` + + + +| 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") | + +## deviceId Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-dsn.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-dsn.md new file mode 100644 index 0000000..52cf564 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-dsn.md @@ -0,0 +1,15 @@ +# Untitled number in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dsn +``` + + + +| 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") | + +## dsn Type + +`number` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-signature.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-signature.md new file mode 100644 index 0000000..7668e27 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-signature.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/signature +``` + + + +| 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") | + +## signature Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-tempkey.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-tempkey.md new file mode 100644 index 0000000..d512ff1 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-tempkey.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/tempKey +``` + + + +| 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") | + +## tempKey Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-type.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-type.md new file mode 100644 index 0000000..18161b5 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-type.md @@ -0,0 +1,23 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/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 | +| :------------------- | :---------- | +| `"SEND_KEY_REQUEST"` | | diff --git a/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction.md b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction.md new file mode 100644 index 0000000..8e9e42f --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedsendkeyrequestaction.md @@ -0,0 +1,161 @@ +# SerializedSendKeyRequestAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction +``` + + + +| 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") | + +## SerializedSendKeyRequestAction Type + +`object` ([SerializedSendKeyRequestAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction.md)) + +# SerializedSendKeyRequestAction Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------------------ | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/type") | +| [dsn](#dsn) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dsn") | +| [deviceId](#deviceid) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-deviceid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/deviceId") | +| [categoryId](#categoryid) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-categoryid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/categoryId") | +| [dataType](#datatype) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-datatype.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dataType") | +| [tempKey](#tempkey) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/tempKey") | +| [signature](#signature) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/signature") | + +## type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/type") + +### type Type + +`string` + +### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :------------------- | :---------- | +| `"SEND_KEY_REQUEST"` | | + +## dsn + + + +`dsn` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dsn") + +### dsn Type + +`number` + +## deviceId + + + +`deviceId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-deviceid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/deviceId") + +### deviceId Type + +`string` + +## categoryId + + + +`categoryId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-categoryid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/categoryId") + +### categoryId Type + +`string` + +## dataType + + + +`dataType` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-datatype.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dataType") + +### dataType Type + +`number` + +## tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/tempKey") + +### tempKey Type + +`string` + +## signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/signature") + +### signature Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-b.md b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-b.md new file mode 100644 index 0000000..678a444 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-b.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/b +``` + + + +| 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") | + +## b Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-d.md b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-d.md new file mode 100644 index 0000000..1c3f537 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-d.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/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 | [SerializedAppLogicAction.schema.json\*](SerializedAppLogicAction.schema.json "open original schema") | + +## d Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-type.md b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-type.md new file mode 100644 index 0000000..cb90c75 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-type.md @@ -0,0 +1,23 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/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 | +| :------------------------ | :---------- | +| `"UPDATE_INSTALLED_APPS"` | | diff --git a/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-w.md b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-w.md new file mode 100644 index 0000000..2dd0e64 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-w.md @@ -0,0 +1,15 @@ +# Untitled boolean in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/w +``` + + + +| 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") | + +## w Type + +`boolean` diff --git a/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction.md b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction.md new file mode 100644 index 0000000..eedea95 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializedupdateinstalledappsaction.md @@ -0,0 +1,104 @@ +# SerializedUpdateInstalledAppsAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction +``` + + + +| 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") | + +## SerializedUpdateInstalledAppsAction Type + +`object` ([SerializedUpdateInstalledAppsAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction.md)) + +# SerializedUpdateInstalledAppsAction Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------ | :-------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/type") | +| [b](#b) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-b.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/b") | +| [d](#d) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-d.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/d") | +| [w](#w) | `boolean` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-w.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/w") | + +## type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/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_INSTALLED_APPS"` | | + +## b + + + +`b` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-b.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/b") + +### b Type + +`string` + +## d + + + +`d` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-d.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/d") + +### d Type + +`string` + +## w + + + +`w` + +* is required + +* Type: `boolean` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-w.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/w") + +### w Type + +`boolean` diff --git a/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-key.md b/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-key.md new file mode 100644 index 0000000..4249d87 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-key.md @@ -0,0 +1,15 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/key +``` + + + +| 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") | + +## key Type + +`string` diff --git a/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-type.md b/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-type.md new file mode 100644 index 0000000..9dff83c --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-type.md @@ -0,0 +1,23 @@ +# Untitled string in SerializedAppLogicAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/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 | +| :--------------------------- | :---------- | +| `"UPLOAD_DEVICE_PUBLIC_KEY"` | | diff --git a/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction.md b/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction.md new file mode 100644 index 0000000..d88ad89 --- /dev/null +++ b/docs/schema/serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction.md @@ -0,0 +1,66 @@ +# SerializedUploadDevicePublicKeyAction Schema + +```txt +https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction +``` + + + +| 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") | + +## SerializedUploadDevicePublicKeyAction Type + +`object` ([SerializedUploadDevicePublicKeyAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction.md)) + +# SerializedUploadDevicePublicKeyAction Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------ | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/type") | +| [key](#key) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-key.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/key") | + +## type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/type") + +### type Type + +`string` + +### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :--------------------------- | :---------- | +| `"UPLOAD_DEVICE_PUBLIC_KEY"` | | + +## key + + + +`key` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-key.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/key") + +### key Type + +`string` diff --git a/docs/schema/serializedapplogicaction.md b/docs/schema/serializedapplogicaction.md index 815aa66..3dd9ff2 100644 --- a/docs/schema/serializedapplogicaction.md +++ b/docs/schema/serializedapplogicaction.md @@ -22,12 +22,20 @@ any of * [SerializedAddUsedTimeActionVersion2](serializedapplogicaction-definitions-serializedaddusedtimeactionversion2.md "check type definition") +* [SerializedFinishKeyRequestAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction.md "check type definition") + * [SerializedForceSyncAction](serializedapplogicaction-definitions-serializedforcesyncaction.md "check type definition") +* [SerializedReplyToKeyRequestAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction.md "check type definition") + * [SerializedMarkTaskPendingAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction.md "check type definition") +* [SerializedUpdateInstalledAppsAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction.md "check type definition") + * [SerializedRemoveInstalledAppsAction](serializedapplogicaction-definitions-serializedremoveinstalledappsaction.md "check type definition") +* [SerializedSendKeyRequestAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction.md "check type definition") + * [SerializedSignOutAtDeviceAction](serializedapplogicaction-definitions-serializedsignoutatdeviceaction.md "check type definition") * [SerialiezdTriedDisablingDeviceAdminAction](serializedapplogicaction-definitions-serialiezdtrieddisablingdeviceadminaction.md "check type definition") @@ -36,6 +44,8 @@ any of * [SerializedUpdateDeviceStatusAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction.md "check type definition") +* [SerializedUploadDevicePublicKeyAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction.md "check type definition") + # SerializedAppLogicAction Definitions ## Definitions group SerializedAddInstalledAppsAction @@ -412,6 +422,63 @@ Reference this group by using `number` +## Definitions group SerializedFinishKeyRequestAction + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :-------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type-3) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/type") | +| [dsn](#dsn) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/dsn") | + +### type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/type") + +#### type Type + +`string` + +#### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :--------------------- | :---------- | +| `"FINISH_KEY_REQUEST"` | | + +### dsn + + + +`dsn` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedfinishkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedFinishKeyRequestAction/properties/dsn") + +#### dsn Type + +`number` + ## Definitions group SerializedForceSyncAction Reference this group by using @@ -422,7 +489,7 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :-------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type-3) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedforcesyncaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedForceSyncAction/properties/type") | +| [type](#type-4) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedforcesyncaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedForceSyncAction/properties/type") | ### type @@ -450,6 +517,120 @@ Reference this group by using | :------------- | :---------- | | `"FORCE_SYNC"` | | +## Definitions group SerializedReplyToKeyRequestAction + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :---------------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type-5) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/type") | +| [rsn](#rsn) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-rsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/rsn") | +| [tempKey](#tempkey) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/tempKey") | +| [encryptedKey](#encryptedkey) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-encryptedkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/encryptedKey") | +| [signature](#signature) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/signature") | + +### type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/type") + +#### type Type + +`string` + +#### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :----------------------- | :---------- | +| `"REPLY_TO_KEY_REQUEST"` | | + +### rsn + + + +`rsn` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-rsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/rsn") + +#### rsn Type + +`number` + +### tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/tempKey") + +#### tempKey Type + +`string` + +### encryptedKey + + + +`encryptedKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-encryptedkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/encryptedKey") + +#### encryptedKey Type + +`string` + +### signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedreplytokeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedReplyToKeyRequestAction/properties/signature") + +#### signature Type + +`string` + ## Definitions group SerializedMarkTaskPendingAction Reference this group by using @@ -460,7 +641,7 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :---------------- | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type-4) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedmarktaskpendingaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedMarkTaskPendingAction/properties/type") | +| [type](#type-6) | `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 @@ -507,6 +688,101 @@ Reference this group by using `string` +## Definitions group SerializedUpdateInstalledAppsAction + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :-------------- | :-------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type-7) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/type") | +| [b](#b) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-b.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/b") | +| [d](#d-1) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-d.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/d") | +| [w](#w) | `boolean` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-w.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/w") | + +### type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/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_INSTALLED_APPS"` | | + +### b + + + +`b` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-b.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/b") + +#### b Type + +`string` + +### d + + + +`d` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-d.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/d") + +#### d Type + +`string` + +### w + + + +`w` + +* is required + +* Type: `boolean` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateinstalledappsaction-properties-w.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateInstalledAppsAction/properties/w") + +#### w Type + +`boolean` + ## Definitions group SerializedRemoveInstalledAppsAction Reference this group by using @@ -517,7 +793,7 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :---------------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type-5) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedremoveinstalledappsaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedRemoveInstalledAppsAction/properties/type") | +| [type](#type-8) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedremoveinstalledappsaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedRemoveInstalledAppsAction/properties/type") | | [packageNames](#packagenames) | `array` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedremoveinstalledappsaction-properties-packagenames.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedRemoveInstalledAppsAction/properties/packageNames") | ### type @@ -564,6 +840,158 @@ Reference this group by using `string[]` +## Definitions group SerializedSendKeyRequestAction + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :-------------------------- | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type-9) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/type") | +| [dsn](#dsn-1) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dsn") | +| [deviceId](#deviceid) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-deviceid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/deviceId") | +| [categoryId](#categoryid-1) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-categoryid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/categoryId") | +| [dataType](#datatype) | `number` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-datatype.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dataType") | +| [tempKey](#tempkey-1) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/tempKey") | +| [signature](#signature-1) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/signature") | + +### type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/type") + +#### type Type + +`string` + +#### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :------------------- | :---------- | +| `"SEND_KEY_REQUEST"` | | + +### dsn + + + +`dsn` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-dsn.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dsn") + +#### dsn Type + +`number` + +### deviceId + + + +`deviceId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-deviceid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/deviceId") + +#### deviceId Type + +`string` + +### categoryId + + + +`categoryId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-categoryid.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/categoryId") + +#### categoryId Type + +`string` + +### dataType + + + +`dataType` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-datatype.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/dataType") + +#### dataType Type + +`number` + +### tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-tempkey.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/tempKey") + +#### tempKey Type + +`string` + +### signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsendkeyrequestaction-properties-signature.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSendKeyRequestAction/properties/signature") + +#### signature Type + +`string` + ## Definitions group SerializedSignOutAtDeviceAction Reference this group by using @@ -572,9 +1000,9 @@ Reference this group by using {"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSignOutAtDeviceAction"} ``` -| Property | Type | Required | Nullable | Defined by | -| :-------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type-6) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsignoutatdeviceaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSignOutAtDeviceAction/properties/type") | +| Property | Type | Required | Nullable | Defined by | +| :--------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type-10) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedsignoutatdeviceaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedSignOutAtDeviceAction/properties/type") | ### type @@ -610,9 +1038,9 @@ Reference this group by using {"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerialiezdTriedDisablingDeviceAdminAction"} ``` -| Property | Type | Required | Nullable | Defined by | -| :-------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type-7) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serialiezdtrieddisablingdeviceadminaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerialiezdTriedDisablingDeviceAdminAction/properties/type") | +| Property | Type | Required | Nullable | Defined by | +| :--------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type-11) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serialiezdtrieddisablingdeviceadminaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerialiezdTriedDisablingDeviceAdminAction/properties/type") | ### type @@ -650,7 +1078,7 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :-------------------------------- | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type-8) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/type") | +| [type](#type-12) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/type") | | [removed](#removed) | `array` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-removed.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/removed") | | [updatedOrAdded](#updatedoradded) | `array` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdateappactivitiesaction-properties-updatedoradded.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateAppActivitiesAction/properties/updatedOrAdded") | @@ -802,7 +1230,7 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :---------------------------------------------------------- | :-------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type-9) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/type") | +| [type](#type-13) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/type") | | [protectionLevel](#protectionlevel) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-protectionlevel.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/protectionLevel") | | [usageStats](#usagestats) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-usagestats.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/usageStats") | | [notificationAccess](#notificationaccess) | `string` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-notificationaccess.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/notificationAccess") | @@ -1041,3 +1469,60 @@ Reference this group by using #### addedManipulationFlags Type `number` + +## Definitions group SerializedUploadDevicePublicKeyAction + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :--------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type-14) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/type") | +| [key](#key) | `string` | Required | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-key.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/key") | + +### type + + + +`type` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-type.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/type") + +#### type Type + +`string` + +#### type Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :--------------------------- | :---------- | +| `"UPLOAD_DEVICE_PUBLIC_KEY"` | | + +### key + + + +`key` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializeduploaddevicepublickeyaction-properties-key.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUploadDevicePublicKeyAction/properties/key") + +#### key Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-servercryptcontainer-properties-data.md b/docs/schema/serverdatastatus-definitions-servercryptcontainer-properties-data.md new file mode 100644 index 0000000..d6da93d --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-servercryptcontainer-properties-data.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/data +``` + + + +| 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") | + +## data Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-servercryptcontainer-properties-version.md b/docs/schema/serverdatastatus-definitions-servercryptcontainer-properties-version.md new file mode 100644 index 0000000..cf72277 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-servercryptcontainer-properties-version.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/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-servercryptcontainer.md b/docs/schema/serverdatastatus-definitions-servercryptcontainer.md new file mode 100644 index 0000000..7327534 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-servercryptcontainer.md @@ -0,0 +1,58 @@ +# ServerCryptContainer Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer +``` + + + +| 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") | + +## ServerCryptContainer Type + +`object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +# ServerCryptContainer Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------------ | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [version](#version) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/version") | +| [data](#data) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-data.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/data") | + +## version + + + +`version` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/version") + +### version Type + +`string` + +## data + + + +`data` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-data.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/data") + +### data Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverdevicedata-properties-pk.md b/docs/schema/serverdatastatus-definitions-serverdevicedata-properties-pk.md new file mode 100644 index 0000000..9251376 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverdevicedata-properties-pk.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/pk +``` + + + +| 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") | + +## pk Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverdevicedata.md b/docs/schema/serverdatastatus-definitions-serverdevicedata.md index 6c31a1f..ca29b31 100644 --- a/docs/schema/serverdatastatus-definitions-serverdevicedata.md +++ b/docs/schema/serverdatastatus-definitions-serverdevicedata.md @@ -49,6 +49,7 @@ https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData | [activityLevelBlocking](#activitylevelblocking) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-activitylevelblocking.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/activityLevelBlocking") | | [qOrLater](#qorlater) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-qorlater.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/qOrLater") | | [mFlags](#mflags) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-mflags.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/mFlags") | +| [pk](#pk) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-pk.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/pk") | ## deviceId @@ -699,3 +700,21 @@ https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData ### mFlags Type `number` + +## pk + + + +`pk` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-pk.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/pk") + +### pk Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverextendeddevicedata-properties-deviceid.md b/docs/schema/serverdatastatus-definitions-serverextendeddevicedata-properties-deviceid.md new file mode 100644 index 0000000..f67c12c --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverextendeddevicedata-properties-deviceid.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/deviceId +``` + + + +| 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") | + +## deviceId Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverextendeddevicedata.md b/docs/schema/serverdatastatus-definitions-serverextendeddevicedata.md new file mode 100644 index 0000000..3a8b616 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverextendeddevicedata.md @@ -0,0 +1,77 @@ +# ServerExtendedDeviceData Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData +``` + + + +| 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") | + +## ServerExtendedDeviceData Type + +`object` ([ServerExtendedDeviceData](serverdatastatus-definitions-serverextendeddevicedata.md)) + +# ServerExtendedDeviceData Properties + +| Property | Type | Required | Nullable | Defined by | +| :-------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [deviceId](#deviceid) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverextendeddevicedata-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/deviceId") | +| [appsBase](#appsbase) | `object` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsBase") | +| [appsDiff](#appsdiff) | `object` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsDiff") | + +## deviceId + + + +`deviceId` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverextendeddevicedata-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/deviceId") + +### deviceId Type + +`string` + +## appsBase + + + +`appsBase` + +* is optional + +* Type: `object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsBase") + +### appsBase Type + +`object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +## appsDiff + + + +`appsDiff` + +* is optional + +* Type: `object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsDiff") + +### appsDiff Type + +`object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-categoryid.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-categoryid.md new file mode 100644 index 0000000..72821e1 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-categoryid.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/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-serverkeyrequest-properties-deviceid.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-deviceid.md new file mode 100644 index 0000000..e96e615 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-deviceid.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/deviceId +``` + + + +| 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") | + +## deviceId Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-senid.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-senid.md new file mode 100644 index 0000000..1433f86 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-senid.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senId +``` + + + +| 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") | + +## senId Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-senseq.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-senseq.md new file mode 100644 index 0000000..7ebccfe --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-senseq.md @@ -0,0 +1,15 @@ +# Untitled number in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senSeq +``` + + + +| 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") | + +## senSeq Type + +`number` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-signature.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-signature.md new file mode 100644 index 0000000..a5d17a7 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-signature.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/signature +``` + + + +| 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") | + +## signature Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-srvseq.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-srvseq.md new file mode 100644 index 0000000..60b082b --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-srvseq.md @@ -0,0 +1,15 @@ +# Untitled number in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/srvSeq +``` + + + +| 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") | + +## srvSeq Type + +`number` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-tempkey.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-tempkey.md new file mode 100644 index 0000000..dc69348 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-tempkey.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/tempKey +``` + + + +| 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") | + +## tempKey Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-type.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-type.md new file mode 100644 index 0000000..f6f0126 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest-properties-type.md @@ -0,0 +1,15 @@ +# Untitled number in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/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 | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") | + +## type Type + +`number` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyrequest.md b/docs/schema/serverdatastatus-definitions-serverkeyrequest.md new file mode 100644 index 0000000..05ef336 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyrequest.md @@ -0,0 +1,172 @@ +# ServerKeyRequest Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest +``` + + + +| 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") | + +## ServerKeyRequest Type + +`object` ([ServerKeyRequest](serverdatastatus-definitions-serverkeyrequest.md)) + +# ServerKeyRequest Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------------------ | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [srvSeq](#srvseq) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/srvSeq") | +| [senId](#senid) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senId") | +| [senSeq](#senseq) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senSeq") | +| [deviceId](#deviceid) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/deviceId") | +| [categoryId](#categoryid) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/categoryId") | +| [type](#type) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-type.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/type") | +| [tempKey](#tempkey) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/tempKey") | +| [signature](#signature) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/signature") | + +## srvSeq + + + +`srvSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/srvSeq") + +### srvSeq Type + +`number` + +## senId + + + +`senId` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senId") + +### senId Type + +`string` + +## senSeq + + + +`senSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senSeq") + +### senSeq Type + +`number` + +## deviceId + + + +`deviceId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/deviceId") + +### deviceId Type + +`string` + +## categoryId + + + +`categoryId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/categoryId") + +### categoryId Type + +`string` + +## type + + + +`type` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-type.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/type") + +### type Type + +`number` + +## tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/tempKey") + +### tempKey Type + +`string` + +## signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/signature") + +### signature Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-cryptkey.md b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-cryptkey.md new file mode 100644 index 0000000..d85a8f2 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-cryptkey.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/cryptKey +``` + + + +| 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") | + +## cryptKey Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-rqseq.md b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-rqseq.md new file mode 100644 index 0000000..7e2e8d3 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-rqseq.md @@ -0,0 +1,15 @@ +# Untitled number in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/rqSeq +``` + + + +| 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") | + +## rqSeq Type + +`number` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-sender.md b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-sender.md new file mode 100644 index 0000000..b06b27d --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-sender.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/sender +``` + + + +| 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") | + +## sender Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-signature.md b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-signature.md new file mode 100644 index 0000000..db892c4 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-signature.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/signature +``` + + + +| 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") | + +## signature Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-srvseq.md b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-srvseq.md new file mode 100644 index 0000000..86d8f37 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-srvseq.md @@ -0,0 +1,15 @@ +# Untitled number in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/srvSeq +``` + + + +| 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") | + +## srvSeq Type + +`number` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-tempkey.md b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-tempkey.md new file mode 100644 index 0000000..9cdafc7 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyresponse-properties-tempkey.md @@ -0,0 +1,15 @@ +# Untitled string in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/tempKey +``` + + + +| 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") | + +## tempKey Type + +`string` diff --git a/docs/schema/serverdatastatus-definitions-serverkeyresponse.md b/docs/schema/serverdatastatus-definitions-serverkeyresponse.md new file mode 100644 index 0000000..d79360f --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-serverkeyresponse.md @@ -0,0 +1,134 @@ +# ServerKeyResponse Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse +``` + + + +| 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") | + +## ServerKeyResponse Type + +`object` ([ServerKeyResponse](serverdatastatus-definitions-serverkeyresponse.md)) + +# ServerKeyResponse Properties + +| Property | Type | Required | Nullable | Defined by | +| :---------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [srvSeq](#srvseq) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/srvSeq") | +| [sender](#sender) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-sender.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/sender") | +| [rqSeq](#rqseq) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-rqseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/rqSeq") | +| [tempKey](#tempkey) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/tempKey") | +| [cryptKey](#cryptkey) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-cryptkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/cryptKey") | +| [signature](#signature) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/signature") | + +## srvSeq + + + +`srvSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/srvSeq") + +### srvSeq Type + +`number` + +## sender + + + +`sender` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-sender.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/sender") + +### sender Type + +`string` + +## rqSeq + + + +`rqSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-rqseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/rqSeq") + +### rqSeq Type + +`number` + +## tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/tempKey") + +### tempKey Type + +`string` + +## cryptKey + + + +`cryptKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-cryptkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/cryptKey") + +### cryptKey Type + +`string` + +## signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/signature") + +### signature Type + +`string` diff --git a/docs/schema/serverdatastatus-properties-devices2.md b/docs/schema/serverdatastatus-properties-devices2.md new file mode 100644 index 0000000..875c8d5 --- /dev/null +++ b/docs/schema/serverdatastatus-properties-devices2.md @@ -0,0 +1,15 @@ +# Untitled array in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/properties/devices2 +``` + + + +| 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") | + +## devices2 Type + +`object[]` ([ServerExtendedDeviceData](serverdatastatus-definitions-serverextendeddevicedata.md)) diff --git a/docs/schema/serverdatastatus-properties-kr.md b/docs/schema/serverdatastatus-properties-kr.md new file mode 100644 index 0000000..71d5ed8 --- /dev/null +++ b/docs/schema/serverdatastatus-properties-kr.md @@ -0,0 +1,15 @@ +# Untitled array in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/properties/kr +``` + + + +| 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") | + +## kr Type + +`object[]` ([ServerKeyResponse](serverdatastatus-definitions-serverkeyresponse.md)) diff --git a/docs/schema/serverdatastatus-properties-krq.md b/docs/schema/serverdatastatus-properties-krq.md new file mode 100644 index 0000000..da54815 --- /dev/null +++ b/docs/schema/serverdatastatus-properties-krq.md @@ -0,0 +1,15 @@ +# Untitled array in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/properties/krq +``` + + + +| 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") | + +## krq Type + +`object[]` ([ServerKeyRequest](serverdatastatus-definitions-serverkeyrequest.md)) diff --git a/docs/schema/serverdatastatus.md b/docs/schema/serverdatastatus.md index 9392111..3b2ede4 100644 --- a/docs/schema/serverdatastatus.md +++ b/docs/schema/serverdatastatus.md @@ -19,6 +19,7 @@ https://timelimit.io/ServerDataStatus | Property | Type | Required | Nullable | Defined by | | :---------------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------- | | [devices](#devices) | `object` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicelist.md "https://timelimit.io/ServerDataStatus#/properties/devices") | +| [devices2](#devices2) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-devices2.md "https://timelimit.io/ServerDataStatus#/properties/devices2") | | [apps](#apps) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-apps.md "https://timelimit.io/ServerDataStatus#/properties/apps") | | [rmCategories](#rmcategories) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-rmcategories.md "https://timelimit.io/ServerDataStatus#/properties/rmCategories") | | [categoryBase](#categorybase) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-categorybase.md "https://timelimit.io/ServerDataStatus#/properties/categoryBase") | @@ -27,6 +28,8 @@ https://timelimit.io/ServerDataStatus | [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") | +| [krq](#krq) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-krq.md "https://timelimit.io/ServerDataStatus#/properties/krq") | +| [kr](#kr) | `array` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-kr.md "https://timelimit.io/ServerDataStatus#/properties/kr") | | [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") | | [apiLevel](#apilevel) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-properties-apilevel.md "https://timelimit.io/ServerDataStatus#/properties/apiLevel") | @@ -49,6 +52,24 @@ https://timelimit.io/ServerDataStatus `object` ([ServerDeviceList](serverdatastatus-definitions-serverdevicelist.md)) +## devices2 + + + +`devices2` + +* is optional + +* Type: `object[]` ([ServerExtendedDeviceData](serverdatastatus-definitions-serverextendeddevicedata.md)) + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-properties-devices2.md "https://timelimit.io/ServerDataStatus#/properties/devices2") + +### devices2 Type + +`object[]` ([ServerExtendedDeviceData](serverdatastatus-definitions-serverextendeddevicedata.md)) + ## apps @@ -193,6 +214,42 @@ https://timelimit.io/ServerDataStatus `object` ([ServerUserList](serverdatastatus-definitions-serveruserlist.md)) +## krq + + + +`krq` + +* is optional + +* Type: `object[]` ([ServerKeyRequest](serverdatastatus-definitions-serverkeyrequest.md)) + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-properties-krq.md "https://timelimit.io/ServerDataStatus#/properties/krq") + +### krq Type + +`object[]` ([ServerKeyRequest](serverdatastatus-definitions-serverkeyrequest.md)) + +## kr + + + +`kr` + +* is optional + +* Type: `object[]` ([ServerKeyResponse](serverdatastatus-definitions-serverkeyresponse.md)) + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-properties-kr.md "https://timelimit.io/ServerDataStatus#/properties/kr") + +### kr Type + +`object[]` ([ServerKeyResponse](serverdatastatus-definitions-serverkeyresponse.md)) + ## fullVersion @@ -339,6 +396,7 @@ Reference this group by using | [activityLevelBlocking](#activitylevelblocking) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-activitylevelblocking.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/activityLevelBlocking") | | [qOrLater](#qorlater) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-qorlater.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/qOrLater") | | [mFlags](#mflags) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-mflags.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/mFlags") | +| [pk](#pk) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-pk.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/pk") | ### deviceId @@ -990,6 +1048,24 @@ Reference this group by using `number` +### pk + + + +`pk` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-pk.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/pk") + +#### pk Type + +`string` + ## Definitions group ProtectionLevel Reference this group by using @@ -1023,6 +1099,123 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :------- | :--- | :------- | :------- | :--------- | +## Definitions group ServerExtendedDeviceData + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :---------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [deviceId](#deviceid-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverextendeddevicedata-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/deviceId") | +| [appsBase](#appsbase) | `object` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsBase") | +| [appsDiff](#appsdiff) | `object` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsDiff") | + +### deviceId + + + +`deviceId` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverextendeddevicedata-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/deviceId") + +#### deviceId Type + +`string` + +### appsBase + + + +`appsBase` + +* is optional + +* Type: `object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsBase") + +#### appsBase Type + +`object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +### appsDiff + + + +`appsDiff` + +* is optional + +* Type: `object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer.md "https://timelimit.io/ServerDataStatus#/definitions/ServerExtendedDeviceData/properties/appsDiff") + +#### appsDiff Type + +`object` ([ServerCryptContainer](serverdatastatus-definitions-servercryptcontainer.md)) + +## Definitions group ServerCryptContainer + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :-------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [version](#version-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/version") | +| [data](#data-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-data.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/data") | + +### version + + + +`version` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/version") + +#### version Type + +`string` + +### data + + + +`data` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-servercryptcontainer-properties-data.md "https://timelimit.io/ServerDataStatus#/definitions/ServerCryptContainer/properties/data") + +#### data Type + +`string` + ## Definitions group ServerInstalledAppsData Reference this group by using @@ -1033,8 +1226,8 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :------------------------ | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [deviceId](#deviceid-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverinstalledappsdata-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/deviceId") | -| [version](#version-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverinstalledappsdata-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/version") | +| [deviceId](#deviceid-2) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverinstalledappsdata-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/deviceId") | +| [version](#version-2) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverinstalledappsdata-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/version") | | [apps](#apps-1) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverinstalledappsdata-properties-apps.md "https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/apps") | | [activities](#activities) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverinstalledappsdata-properties-activities.md "https://timelimit.io/ServerDataStatus#/definitions/ServerInstalledAppsData/properties/activities") | @@ -1304,7 +1497,7 @@ Reference this group by using | [extraTimeDay](#extratimeday) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-extratimeday.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/extraTimeDay") | | [tempBlocked](#tempblocked) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-tempblocked.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/tempBlocked") | | [tempBlockTime](#tempblocktime) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-tempblocktime.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/tempBlockTime") | -| [version](#version-2) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/version") | +| [version](#version-3) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/version") | | [parentCategoryId](#parentcategoryid) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-parentcategoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/parentCategoryId") | | [blockAllNotifications](#blockallnotifications) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-blockallnotifications.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/blockAllNotifications") | | [timeWarnings](#timewarnings) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorybasedata-properties-timewarnings.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryBaseData/properties/timeWarnings") | @@ -1738,7 +1931,7 @@ Reference this group by using | :-------------------------- | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [categoryId](#categoryid-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryassignedapps-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryAssignedApps/properties/categoryId") | | [apps](#apps-2) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryassignedapps-properties-apps.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryAssignedApps/properties/apps") | -| [version](#version-3) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryassignedapps-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryAssignedApps/properties/version") | +| [version](#version-4) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryassignedapps-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryAssignedApps/properties/version") | ### categoryId @@ -1807,7 +2000,7 @@ Reference this group by using | [categoryId](#categoryid-2) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/categoryId") | | [times](#times) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-times.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/times") | | [sessionDurations](#sessiondurations) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-sessiondurations.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/sessionDurations") | -| [version](#version-4) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/version") | +| [version](#version-5) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategoryusedtimes-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryUsedTimes/properties/version") | ### categoryId @@ -2106,7 +2299,7 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :-------------------------- | :------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [categoryId](#categoryid-3) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedtimelimitrules-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/categoryId") | -| [version](#version-5) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedtimelimitrules-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/version") | +| [version](#version-6) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedtimelimitrules-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/version") | | [rules](#rules-1) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedtimelimitrules-properties-rules.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedTimeLimitRules/properties/rules") | ### categoryId @@ -2356,7 +2549,7 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :-------------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [categoryId](#categoryid-4) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/categoryId") | -| [version](#version-6) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/version") | +| [version](#version-7) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/version") | | [tasks](#tasks-1) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverupdatedcategorytasks-properties-tasks.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUpdatedCategoryTasks/properties/tasks") | ### categoryId @@ -2529,8 +2722,8 @@ Reference this group by using | Property | Type | Required | Nullable | Defined by | | :-------------------- | :------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [version](#version-7) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serveruserlist-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/version") | -| [data](#data-1) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serveruserlist-properties-data.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data") | +| [version](#version-8) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serveruserlist-properties-version.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/version") | +| [data](#data-2) | `array` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serveruserlist-properties-data.md "https://timelimit.io/ServerDataStatus#/definitions/ServerUserList/properties/data") | ### version @@ -2891,3 +3084,291 @@ Reference this group by using #### pbd Type `number` + +## Definitions group ServerKeyRequest + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :-------------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [srvSeq](#srvseq) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/srvSeq") | +| [senId](#senid) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senId") | +| [senSeq](#senseq) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senSeq") | +| [deviceId](#deviceid-3) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/deviceId") | +| [categoryId](#categoryid-5) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/categoryId") | +| [type](#type-1) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-type.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/type") | +| [tempKey](#tempkey) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/tempKey") | +| [signature](#signature) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/signature") | + +### srvSeq + + + +`srvSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/srvSeq") + +#### srvSeq Type + +`number` + +### senId + + + +`senId` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senId") + +#### senId Type + +`string` + +### senSeq + + + +`senSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-senseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/senSeq") + +#### senSeq Type + +`number` + +### deviceId + + + +`deviceId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-deviceid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/deviceId") + +#### deviceId Type + +`string` + +### categoryId + + + +`categoryId` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-categoryid.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/categoryId") + +#### categoryId Type + +`string` + +### type + + + +`type` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-type.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/type") + +#### type Type + +`number` + +### tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/tempKey") + +#### tempKey Type + +`string` + +### signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyrequest-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyRequest/properties/signature") + +#### signature Type + +`string` + +## Definitions group ServerKeyResponse + +Reference this group by using + +```json +{"$ref":"https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :------------------------ | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [srvSeq](#srvseq-1) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/srvSeq") | +| [sender](#sender) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-sender.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/sender") | +| [rqSeq](#rqseq) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-rqseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/rqSeq") | +| [tempKey](#tempkey-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/tempKey") | +| [cryptKey](#cryptkey) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-cryptkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/cryptKey") | +| [signature](#signature-1) | `string` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/signature") | + +### srvSeq + + + +`srvSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-srvseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/srvSeq") + +#### srvSeq Type + +`number` + +### sender + + + +`sender` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-sender.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/sender") + +#### sender Type + +`string` + +### rqSeq + + + +`rqSeq` + +* is required + +* Type: `number` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-rqseq.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/rqSeq") + +#### rqSeq Type + +`number` + +### tempKey + + + +`tempKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-tempkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/tempKey") + +#### tempKey Type + +`string` + +### cryptKey + + + +`cryptKey` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-cryptkey.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/cryptKey") + +#### cryptKey Type + +`string` + +### signature + + + +`signature` + +* is required + +* Type: `string` + +* cannot be null + +* defined in: [ServerDataStatus](serverdatastatus-definitions-serverkeyresponse-properties-signature.md "https://timelimit.io/ServerDataStatus#/definitions/ServerKeyResponse/properties/signature") + +#### signature Type + +`string` diff --git a/src/action/finishkeyrequest.ts b/src/action/finishkeyrequest.ts new file mode 100644 index 0000000..2558eaa --- /dev/null +++ b/src/action/finishkeyrequest.ts @@ -0,0 +1,44 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { assertSafeInteger } from './meta/util' + +const actionType = 'FinishKeyRequestAction' + +export class FinishKeyRequestAction extends AppLogicAction { + readonly deviceSequenceNumber: number + + constructor ({ deviceSequenceNumber }: { deviceSequenceNumber: number }) { + super() + + assertSafeInteger({ value: deviceSequenceNumber, field: 'deviceSequenceNumber', actionType }) + + this.deviceSequenceNumber = deviceSequenceNumber + } + + static parse = ({ dsn }: SerializedFinishKeyRequestAction) => ( + new FinishKeyRequestAction({ + deviceSequenceNumber: dsn, + }) + ) +} + +export interface SerializedFinishKeyRequestAction { + type: 'FINISH_KEY_REQUEST' + dsn: number +} diff --git a/src/action/index.ts b/src/action/index.ts index 49663ca..d4fcb51 100644 --- a/src/action/index.ts +++ b/src/action/index.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 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 @@ -30,6 +30,7 @@ export { CreateCategoryAction } from './createcategory' export { CreateTimeLimitRuleAction } from './createtimelimitrule' export { DeleteCategoryAction } from './deletecategory' export { DeleteTimeLimitRuleAction } from './deletetimelimitrule' +export { FinishKeyRequestAction } from './finishkeyrequest' export { ForceSyncAction } from './forcesync' export { IgnoreManipulationAction } from './ignoremanipulation' export { IncrementCategoryExtraTimeAction } from './incrementcategoryextratime' @@ -38,6 +39,7 @@ export { RemoveInstalledAppsAction } from './removeinstalledapps' export { RemoveUserAction } from './removeuser' export { ResetCategoryNetworkIdsAction } from './resetcategorynetworkids' export { RenameChildAction } from './renamechild' +export { ReplyToKeyRequestAction } from './replytokeyrequest' export { SetCategoryExtraTimeAction } from './setcategoryextratime' export { SetCategoryForUnassignedAppsAction } from './setcategoryforunassignedapps' export { SetChildPasswordAction } from './setchildpassword' @@ -66,6 +68,7 @@ export { UpdateCategoryTitleAction } from './updatecategorytitle' export { UpdateDeviceNameAction } from './updatedevicename' export { UpdateDeviceStatusAction } from './updatedevicestatus' export { UpdateEnableActivityLevelBlockingAction } from './updateenableactivitylevelblocking' +export { UpdateInstalledAppsAction } from './updateinstalledapps' export { UpdateNetworkTimeVerificationAction } from './updatenetworktimeverification' export { UpdateParentNotificationFlagsAction } from './updateparentnotificationflags' export { UpdateTimelimitRuleAction } from './updatetimelimitrule' @@ -76,3 +79,5 @@ export { DeleteChildTaskAction } from './deletechildtaskaction' export { UpdateChildTaskAction } from './updatechildtaskaction' export { ReviewChildTaskAction } from './reviewchildtaskaction' export { UpdateUserLimitLoginPreBlockDuration } from './updateuserlimitloginpreblockduration' +export { UploadDevicePublicKeyAction } from './uploaddevicepublickey' +export { SendKeyRequestAction } from './sendkeyrequest' diff --git a/src/action/replytokeyrequest.ts b/src/action/replytokeyrequest.ts new file mode 100644 index 0000000..74cdd4d --- /dev/null +++ b/src/action/replytokeyrequest.ts @@ -0,0 +1,74 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { InvalidActionParameterException } from './meta/exception' +import { assertSafeInteger } from './meta/util' + +const actionType = 'ReplyToKeyRequestAction' + +export class ReplyToKeyRequestAction extends AppLogicAction { + readonly requestServerSequenceNumber: number + readonly tempKey: Buffer + readonly encryptedKey: Buffer + readonly signature: Buffer + + constructor ({ + requestServerSequenceNumber, + tempKey, + encryptedKey, + signature + }: { + requestServerSequenceNumber: number + tempKey: Buffer + encryptedKey: Buffer + signature: Buffer + }) { + super() + + assertSafeInteger({ value: requestServerSequenceNumber, field: 'requestServerSequenceNumber', actionType }) + + if (tempKey.length !== 32 || encryptedKey.length !== 16 || signature.length !== 64) { + throw new InvalidActionParameterException({ + actionType, + staticMessage: 'key/signature has wrong length' + }) + } + + this.requestServerSequenceNumber = requestServerSequenceNumber + this.tempKey = tempKey + this.encryptedKey = encryptedKey + this.signature = signature + } + + static parse = ({ rsn, tempKey, encryptedKey, signature }: SerializedReplyToKeyRequestAction) => ( + new ReplyToKeyRequestAction({ + requestServerSequenceNumber: rsn, + tempKey: Buffer.from(tempKey, 'base64'), + encryptedKey: Buffer.from(encryptedKey, 'base64'), + signature: Buffer.from(signature, 'base64') + }) + ) +} + +export interface SerializedReplyToKeyRequestAction { + type: 'REPLY_TO_KEY_REQUEST' + rsn: number + tempKey: string + encryptedKey: string + signature: string +} diff --git a/src/action/sendkeyrequest.ts b/src/action/sendkeyrequest.ts new file mode 100644 index 0000000..a4bbbec --- /dev/null +++ b/src/action/sendkeyrequest.ts @@ -0,0 +1,110 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { InvalidActionParameterException } from './meta/exception' +import { assertIdWithinFamily, assertSafeInteger } from './meta/util' +import { types } from '../database/keyrequest' + +const actionType = 'SendKeyRequestAction' + +export class SendKeyRequestAction extends AppLogicAction { + readonly deviceSequenceNumber: number + readonly deviceId?: string + readonly categoryId?: string + readonly type: number + readonly tempKey: Buffer + readonly signature: Buffer + + constructor ({ + deviceSequenceNumber, + deviceId, + categoryId, + type, + tempKey, + signature + }: { + deviceSequenceNumber: number + deviceId?: string + categoryId?: string + type: number + tempKey: Buffer + signature: Buffer + }) { + super() + + assertSafeInteger({ value: deviceSequenceNumber, field: 'deviceSequenceNumber', actionType }) + assertSafeInteger({ value: type, field: 'deviceSequenceNumber', actionType }) + + if (tempKey.length != 32 || signature.length != 64) { + throw new InvalidActionParameterException({ + actionType, + staticMessage: 'key/signature has wrong length' + }) + } + + if (deviceId !== undefined) { + assertIdWithinFamily({ value: deviceId, actionType, field: 'deviceId' }) + } + + if (categoryId !== undefined) { + assertIdWithinFamily({ value: categoryId, actionType, field: 'categoryId' }) + } + + if (deviceId !== undefined && categoryId !== undefined) { + throw new InvalidActionParameterException({ + actionType, + staticMessage: 'can not specify device and category at the same time' + }) + } + + if (types.all.indexOf(type) === -1) { + throw new InvalidActionParameterException({ + actionType, + staticMessage: 'invalid type' + }) + } + + this.deviceSequenceNumber = deviceSequenceNumber + this.deviceId = deviceId + this.categoryId = categoryId + this.type = type + this.tempKey = tempKey + this.signature = signature + } + + static parse = ({ dsn, deviceId, categoryId, dataType, tempKey, signature }: SerializedSendKeyRequestAction) => ( + new SendKeyRequestAction({ + deviceSequenceNumber: dsn, + deviceId, + categoryId, + type: dataType, + tempKey: Buffer.from(tempKey, 'base64'), + signature: Buffer.from(signature, 'base64') + }) + ) +} + +export interface SerializedSendKeyRequestAction { + type: 'SEND_KEY_REQUEST' + dsn: number + deviceId?: string + categoryId?: string + dataType: number + tempKey: string + signature: string +} diff --git a/src/action/serialization/applogicaction.ts b/src/action/serialization/applogicaction.ts index ab84d16..2aabcef 100644 --- a/src/action/serialization/applogicaction.ts +++ b/src/action/serialization/applogicaction.ts @@ -19,26 +19,36 @@ import { AddInstalledAppsAction, SerializedAddInstalledAppsAction } from '../add import { AddUsedTimeAction, SerializedAddUsedTimeAction } from '../addusedtime' import { AddUsedTimeActionVersion2, SerializedAddUsedTimeActionVersion2 } from '../addusedtime2' import { AppLogicAction } from '../basetypes' +import { FinishKeyRequestAction, SerializedFinishKeyRequestAction } from '../finishkeyrequest' import { ForceSyncAction, SerializedForceSyncAction } from '../forcesync' +import { ReplyToKeyRequestAction, SerializedReplyToKeyRequestAction } from '../replytokeyrequest' import { MarkTaskPendingAction, SerializedMarkTaskPendingAction } from '../marktaskpendingaction' import { UnknownActionTypeException } from '../meta/exception' +import { UpdateInstalledAppsAction, SerializedUpdateInstalledAppsAction } from '../updateinstalledapps' import { RemoveInstalledAppsAction, SerializedRemoveInstalledAppsAction } from '../removeinstalledapps' +import { SendKeyRequestAction, SerializedSendKeyRequestAction } from '../sendkeyrequest' import { SerializedSignOutAtDeviceAction, SignOutAtDeviceAction } from '../signoutatdevice' import { SerialiezdTriedDisablingDeviceAdminAction, TriedDisablingDeviceAdminAction } from '../trieddisablingdeviceadmin' import { SerializedUpdateAppActivitiesAction, UpdateAppActivitiesAction } from '../updateappactivities' import { SerializedUpdateDeviceStatusAction, UpdateDeviceStatusAction } from '../updatedevicestatus' +import { SerializedUploadDevicePublicKeyAction, UploadDevicePublicKeyAction } from '../uploaddevicepublickey' export type SerializedAppLogicAction = SerializedAddInstalledAppsAction | SerializedAddUsedTimeAction | SerializedAddUsedTimeActionVersion2 | + SerializedFinishKeyRequestAction | SerializedForceSyncAction | + SerializedReplyToKeyRequestAction | SerializedMarkTaskPendingAction | + SerializedUpdateInstalledAppsAction | SerializedRemoveInstalledAppsAction | + SerializedSendKeyRequestAction | SerializedSignOutAtDeviceAction | SerialiezdTriedDisablingDeviceAdminAction | SerializedUpdateAppActivitiesAction | - SerializedUpdateDeviceStatusAction + SerializedUpdateDeviceStatusAction | + SerializedUploadDevicePublicKeyAction export const parseAppLogicAction = (serialized: SerializedAppLogicAction): AppLogicAction => { if (serialized.type === 'ADD_USED_TIME') { @@ -47,12 +57,20 @@ export const parseAppLogicAction = (serialized: SerializedAppLogicAction): AppLo return AddUsedTimeActionVersion2.parse(serialized) } else if (serialized.type === 'ADD_INSTALLED_APPS') { return AddInstalledAppsAction.parse(serialized) + } else if (serialized.type === 'FINISH_KEY_REQUEST') { + return FinishKeyRequestAction.parse(serialized) } else if (serialized.type === 'FORCE_SYNC') { return ForceSyncAction.instance + } else if (serialized.type === 'REPLY_TO_KEY_REQUEST') { + return ReplyToKeyRequestAction.parse(serialized) } else if (serialized.type === 'MARK_TASK_PENDING') { return MarkTaskPendingAction.parse(serialized) + } else if (serialized.type === 'UPDATE_INSTALLED_APPS') { + return UpdateInstalledAppsAction.parse(serialized) } else if (serialized.type === 'REMOVE_INSTALLED_APPS') { return RemoveInstalledAppsAction.parse(serialized) + } else if (serialized.type === 'SEND_KEY_REQUEST') { + return SendKeyRequestAction.parse(serialized) } else if (serialized.type === 'SIGN_OUT_AT_DEVICE') { return SignOutAtDeviceAction.instance } else if (serialized.type === 'TRIED_DISABLING_DEVICE_ADMIN') { @@ -61,6 +79,8 @@ export const parseAppLogicAction = (serialized: SerializedAppLogicAction): AppLo return UpdateAppActivitiesAction.parse(serialized) } else if (serialized.type === 'UPDATE_DEVICE_STATUS') { return UpdateDeviceStatusAction.parse(serialized) + } else if (serialized.type === 'UPLOAD_DEVICE_PUBLIC_KEY') { + return UploadDevicePublicKeyAction.parse(serialized) } else { throw new UnknownActionTypeException({ group: 'app logic' }) } diff --git a/src/action/updateinstalledapps.ts b/src/action/updateinstalledapps.ts new file mode 100644 index 0000000..31fa979 --- /dev/null +++ b/src/action/updateinstalledapps.ts @@ -0,0 +1,69 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { InvalidActionParameterException } from './meta/exception' + +const actionType = 'UpdateInstalledAppsAction' +const SIZE_LIMIT = 1024 * 256 + +export class UpdateInstalledAppsAction extends AppLogicAction { + readonly base?: Buffer + readonly diff?: Buffer + readonly wipe: boolean + + constructor ({ base, diff, wipe }: { + base?: Buffer, + diff?: Buffer, + wipe: boolean + }) { + super() + + if (base && base.length > SIZE_LIMIT) { + throw new InvalidActionParameterException({ + actionType, + staticMessage: 'base data too big' + }) + } + + if (diff && diff.length > SIZE_LIMIT) { + throw new InvalidActionParameterException({ + actionType, + staticMessage: 'diff data too big' + }) + } + + this.base = base + this.diff = diff + this.wipe = wipe + } + + static parse = ({ b, d, w }: SerializedUpdateInstalledAppsAction) => ( + new UpdateInstalledAppsAction({ + base: b !== undefined ? Buffer.from(b, 'base64') : undefined, + diff: d !== undefined ? Buffer.from(d, 'base64') : undefined, + wipe: w + }) + ) +} + +export interface SerializedUpdateInstalledAppsAction { + type: 'UPDATE_INSTALLED_APPS' + b?: string + d?: string + w: boolean +} diff --git a/src/action/uploaddevicepublickey.ts b/src/action/uploaddevicepublickey.ts new file mode 100644 index 0000000..a136f6e --- /dev/null +++ b/src/action/uploaddevicepublickey.ts @@ -0,0 +1,49 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { InvalidActionParameterException } from './meta/exception' + +const actionType = 'UploadDevicePublicKeyAction' + +export class UploadDevicePublicKeyAction extends AppLogicAction { + readonly key: Buffer + + constructor ({ key }: { key: Buffer }) { + super() + + if (key.length !== 32) { + throw new InvalidActionParameterException({ + actionType, + staticMessage: 'key has wrong length' + }) + } + + this.key = key + } + + static parse = ({ key }: SerializedUploadDevicePublicKeyAction) => ( + new UploadDevicePublicKeyAction({ + key: Buffer.from(key, 'base64') + }) + ) +} + +export interface SerializedUploadDevicePublicKeyAction { + type: 'UPLOAD_DEVICE_PUBLIC_KEY' + key: string +} diff --git a/src/api/sync.ts b/src/api/sync.ts index 88c8755..224d892 100644 --- a/src/api/sync.ts +++ b/src/api/sync.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 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 @@ -90,7 +90,7 @@ export const createSyncRouter = ({ database, websocket, connectedDevicesManager, where: { deviceAuthToken: body.deviceAuthToken }, - attributes: ['familyId', 'lastConnectivity'], + attributes: ['familyId', 'deviceId', 'lastConnectivity'], transaction }) @@ -98,7 +98,7 @@ export const createSyncRouter = ({ database, websocket, connectedDevicesManager, throw new Unauthorized() } - const { familyId, lastConnectivity } = deviceEntryUnsafe + const { familyId, deviceId, lastConnectivity } = deviceEntryUnsafe const now = getRoundedTimestampForLastConnectivity() if (parseInt(lastConnectivity, 10) !== now) { @@ -115,6 +115,7 @@ export const createSyncRouter = ({ database, websocket, connectedDevicesManager, return generateServerDataStatus({ database, familyId, + deviceId, clientStatus: body.status, transaction }) diff --git a/src/api/validator.ts b/src/api/validator.ts index b59c7df..da15c92 100644 --- a/src/api/validator.ts +++ b/src/api/validator.ts @@ -60,6 +60,18 @@ const definitions = { }, "clientLevel": { "type": "number" + }, + "devicesDetail": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DeviceDataStatus" + } + }, + "kri": { + "type": "number" + }, + "kr": { + "type": "number" } }, "additionalProperties": false, @@ -97,6 +109,18 @@ const definitions = { "usedTime" ] }, + "DeviceDataStatus": { + "type": "object", + "properties": { + "appsB": { + "type": "string" + }, + "appsD": { + "type": "string" + } + }, + "additionalProperties": false + }, "ParentPassword": { "type": "object", "properties": { @@ -1555,6 +1579,25 @@ const definitions = { "type" ] }, + "SerializedFinishKeyRequestAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "FINISH_KEY_REQUEST" + ] + }, + "dsn": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "dsn", + "type" + ] + }, "SerializedForceSyncAction": { "type": "object", "properties": { @@ -1570,6 +1613,37 @@ const definitions = { "type" ] }, + "SerializedReplyToKeyRequestAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "REPLY_TO_KEY_REQUEST" + ] + }, + "rsn": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "encryptedKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "encryptedKey", + "rsn", + "signature", + "tempKey", + "type" + ] + }, "SerializedMarkTaskPendingAction": { "type": "object", "properties": { @@ -1589,6 +1663,31 @@ const definitions = { "type" ] }, + "SerializedUpdateInstalledAppsAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "UPDATE_INSTALLED_APPS" + ] + }, + "b": { + "type": "string" + }, + "d": { + "type": "string" + }, + "w": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "type", + "w" + ] + }, "SerializedRemoveInstalledAppsAction": { "type": "object", "properties": { @@ -1611,6 +1710,43 @@ const definitions = { "type" ] }, + "SerializedSendKeyRequestAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "SEND_KEY_REQUEST" + ] + }, + "dsn": { + "type": "number" + }, + "deviceId": { + "type": "string" + }, + "categoryId": { + "type": "string" + }, + "dataType": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "dataType", + "dsn", + "signature", + "tempKey", + "type" + ] + }, "SerializedSignOutAtDeviceAction": { "type": "object", "properties": { @@ -1763,6 +1899,25 @@ const definitions = { "type" ] }, + "SerializedUploadDevicePublicKeyAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "UPLOAD_DEVICE_PUBLIC_KEY" + ] + }, + "key": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "key", + "type" + ] + }, "SerializedChildChangePasswordAction": { "type": "object", "properties": { @@ -1916,6 +2071,9 @@ const definitions = { }, "mFlags": { "type": "number" + }, + "pk": { + "type": "string" } }, "additionalProperties": false, @@ -1978,6 +2136,40 @@ const definitions = { ], "type": "string" }, + "ServerExtendedDeviceData": { + "type": "object", + "properties": { + "deviceId": { + "type": "string" + }, + "appsBase": { + "$ref": "#/definitions/ServerCryptContainer" + }, + "appsDiff": { + "$ref": "#/definitions/ServerCryptContainer" + } + }, + "additionalProperties": false, + "required": [ + "deviceId" + ] + }, + "ServerCryptContainer": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "data": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "data", + "version" + ] + }, "ServerInstalledAppsData": { "type": "object", "properties": { @@ -2443,6 +2635,76 @@ const definitions = { "timeZone", "type" ] + }, + "ServerKeyRequest": { + "type": "object", + "properties": { + "srvSeq": { + "type": "number" + }, + "senId": { + "type": "string" + }, + "senSeq": { + "type": "number" + }, + "deviceId": { + "type": "string" + }, + "categoryId": { + "type": "string" + }, + "type": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "senId", + "senSeq", + "signature", + "srvSeq", + "tempKey", + "type" + ] + }, + "ServerKeyResponse": { + "type": "object", + "properties": { + "srvSeq": { + "type": "number" + }, + "sender": { + "type": "string" + }, + "rqSeq": { + "type": "number" + }, + "tempKey": { + "type": "string" + }, + "cryptKey": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "cryptKey", + "rqSeq", + "sender", + "signature", + "srvSeq", + "tempKey" + ] } } @@ -2753,15 +3015,27 @@ export const isSerializedAppLogicAction: (value: unknown) => value is Serialized { "$ref": "#/definitions/SerializedAddUsedTimeActionVersion2" }, + { + "$ref": "#/definitions/SerializedFinishKeyRequestAction" + }, { "$ref": "#/definitions/SerializedForceSyncAction" }, + { + "$ref": "#/definitions/SerializedReplyToKeyRequestAction" + }, { "$ref": "#/definitions/SerializedMarkTaskPendingAction" }, + { + "$ref": "#/definitions/SerializedUpdateInstalledAppsAction" + }, { "$ref": "#/definitions/SerializedRemoveInstalledAppsAction" }, + { + "$ref": "#/definitions/SerializedSendKeyRequestAction" + }, { "$ref": "#/definitions/SerializedSignOutAtDeviceAction" }, @@ -2773,6 +3047,9 @@ export const isSerializedAppLogicAction: (value: unknown) => value is Serialized }, { "$ref": "#/definitions/SerializedUpdateDeviceStatusAction" + }, + { + "$ref": "#/definitions/SerializedUploadDevicePublicKeyAction" } ], "definitions": definitions, diff --git a/src/database/device.ts b/src/database/device.ts index d74f551..9b9413c 100644 --- a/src/database/device.ts +++ b/src/database/device.ts @@ -111,11 +111,19 @@ export interface DeviceAttributesVersion12 { manipulationFlags: number } +export interface DeviceAttributesVersion13 { + publicKey: Buffer | null +} + +export interface DeviceAttributesVersion14 { + nextKeyReplySequenceNumber: string +} + export type DeviceAttributes = DeviceAttributesVersion1 & DeviceAttributesVersion2 & DeviceAttributesVersion3 & DeviceAttributesVersion4 & DeviceAttributesVersion5 & DeviceAttributesVersion6 & DeviceAttributesVersion7 & DeviceAttributesVersion8 & DeviceAttributesVersion9 & DeviceAttributesVersion10 & DeviceAttributesVersion11 & - DeviceAttributesVersion12 + DeviceAttributesVersion12 & DeviceAttributesVersion13 & DeviceAttributesVersion14 export type DeviceModel = Sequelize.Model & DeviceAttributes export type DeviceModelStatic = typeof Sequelize.Model & { @@ -281,6 +289,22 @@ export const attributesVersion12: SequelizeAttributes } } +export const attributesVersion13: SequelizeAttributes = { + publicKey: { + type: Sequelize.BLOB, + allowNull: true, + defaultValue: null + } +} + +export const attributesVersion14: SequelizeAttributes = { + nextKeyReplySequenceNumber: { + type: Sequelize.BIGINT, + allowNull: false, + defaultValue: 1 + } +} + export const attributes: SequelizeAttributes = { ...attributesVersion1, ...attributesVersion2, @@ -293,7 +317,9 @@ export const attributes: SequelizeAttributes = { ...attributesVersion9, ...attributesVersion10, ...attributesVersion11, - ...attributesVersion12 + ...attributesVersion12, + ...attributesVersion13, + ...attributesVersion14 } export const createDeviceModel = (sequelize: Sequelize.Sequelize): DeviceModelStatic => sequelize.define('Device', attributes) as DeviceModelStatic diff --git a/src/database/encryptedapplist.ts b/src/database/encryptedapplist.ts new file mode 100644 index 0000000..cd3f88c --- /dev/null +++ b/src/database/encryptedapplist.ts @@ -0,0 +1,66 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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, versionColumn } from './columns' +import { SequelizeAttributes } from './types' + +export interface EncryptedAppListAttributes { + familyId: string + deviceId: string + type: number + version: string + data: Buffer +} + +export const types = { + base: 1, + diff: 2 +} + +export type EncryptedAppListModel = Sequelize.Model & EncryptedAppListAttributes +export type EncryptedAppListModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): EncryptedAppListModel; +} + +export const attributes: SequelizeAttributes = { + familyId: { + ...familyIdColumn, + primaryKey: true + }, + deviceId: { + ...idWithinFamilyColumn, + primaryKey: true + }, + type: { + type: Sequelize.INTEGER, + primaryKey: true, + validate: { + min: 1, + max: 2 + } + }, + version: { + ...versionColumn + }, + data: { + type: Sequelize.BLOB, + allowNull: false + } +} + +export const createEncryptedAppListModel = (sequelize: Sequelize.Sequelize): EncryptedAppListModelStatic => sequelize.define('EncryptedAppList', attributes) as EncryptedAppListModelStatic diff --git a/src/database/family.ts b/src/database/family.ts index 00d3364..565c221 100644 --- a/src/database/family.ts +++ b/src/database/family.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 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 @@ -19,7 +19,7 @@ import * as Sequelize from 'sequelize' import { booleanColumn, familyIdColumn, optionalLabelColumn, timestampColumn, versionColumn } from './columns' import { SequelizeAttributes } from './types' -export interface FamilyAttributes { +export interface FamilyAttributesVersion1 { familyId: string name: string createdAt: string @@ -29,12 +29,18 @@ export interface FamilyAttributes { hasFullVersion: boolean } +export interface FamilyAttributesVersion2 { + nextServerKeyRequestSeq: string +} + +export type FamilyAttributes = FamilyAttributesVersion1 & FamilyAttributesVersion2 + export type FamilyModel = Sequelize.Model & FamilyAttributes export type FamilyModelStatic = typeof Sequelize.Model & { new (values?: object, options?: Sequelize.BuildOptions): FamilyModel; } -export const attributes: SequelizeAttributes = { +export const attributesVersion1: SequelizeAttributes = { familyId: { ...familyIdColumn, primaryKey: true @@ -47,4 +53,20 @@ export const attributes: SequelizeAttributes = { hasFullVersion: { ...booleanColumn } } +export const attributesVersion2: SequelizeAttributes = { + nextServerKeyRequestSeq: { + type: Sequelize.BIGINT, + allowNull: false, + defaultValue: 1, + validate: { + min: 1 + } + } +} + +export const attributes: SequelizeAttributes = { + ...attributesVersion1, + ...attributesVersion2 +} + export const createFamilyModel = (sequelize: Sequelize.Sequelize): FamilyModelStatic => sequelize.define('Family', attributes) as FamilyModelStatic diff --git a/src/database/keyrequest.ts b/src/database/keyrequest.ts new file mode 100644 index 0000000..70a068a --- /dev/null +++ b/src/database/keyrequest.ts @@ -0,0 +1,87 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 } from './columns' +import { SequelizeAttributes } from './types' + +export interface KeyRequestAttributes { + familyId: string + serverSequenceNumber: string + senderDeviceId: string + senderSequenceNumber: string + deviceId: string | null + categoryId: string | null + type: number + tempKey: Buffer + signature: Buffer +} + +export const types = { + appListBase: 1, + appListDiff: 2, + all: [1, 2] +} + +export type KeyRequestModel = Sequelize.Model & KeyRequestAttributes +export type KeyRequestModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): KeyRequestModel; +} + +export const attributes: SequelizeAttributes = { + familyId: { + ...familyIdColumn, + primaryKey: true + }, + serverSequenceNumber: { + type: Sequelize.BIGINT, + primaryKey: true, + allowNull: false + }, + senderDeviceId: { + ...idWithinFamilyColumn + }, + senderSequenceNumber: { + type: Sequelize.BIGINT, + allowNull: false + }, + deviceId: { + ...idWithinFamilyColumn, + allowNull: true + }, + categoryId: { + ...idWithinFamilyColumn, + allowNull: true + }, + type: { + type: Sequelize.INTEGER, + allowNull: false, + validate: { + isIn: [types.all] + } + }, + tempKey: { + type: Sequelize.BLOB, + allowNull: false + }, + signature: { + type: Sequelize.BLOB, + allowNull: false + } +} + +export const createKeyRequestModel = (sequelize: Sequelize.Sequelize): KeyRequestModelStatic => sequelize.define('KeyRequest', attributes) as KeyRequestModelStatic diff --git a/src/database/keyresponse.ts b/src/database/keyresponse.ts new file mode 100644 index 0000000..01edaed --- /dev/null +++ b/src/database/keyresponse.ts @@ -0,0 +1,77 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 } from './columns' +import { SequelizeAttributes } from './types' + +export interface KeyResponseAttributes { + familyId: string + receiverDeviceId: string + requestServerSequenceNumber: string // fk to request table with familyId + senderDeviceId: string // pk up to this + replyServerSequenceNumber: string // unique with familyId, receiverDeviceId + requestClientSequenceNumber: string + tempKey: Buffer + encryptedKey: Buffer + signature: Buffer +} + +export type KeyResponseModel = Sequelize.Model & KeyResponseAttributes +export type KeyResponseModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): KeyResponseModel; +} + +export const attributes: SequelizeAttributes = { + familyId: { + ...familyIdColumn, + primaryKey: true + }, + receiverDeviceId: { + ...idWithinFamilyColumn + }, + requestServerSequenceNumber: { + type: Sequelize.BIGINT, + primaryKey: true, + allowNull: false + }, + senderDeviceId: { + ...idWithinFamilyColumn + }, + replyServerSequenceNumber: { + type: Sequelize.BIGINT, + allowNull: false + }, + requestClientSequenceNumber: { + type: Sequelize.BIGINT, + allowNull: false + }, + tempKey: { + type: Sequelize.BLOB, + allowNull: false + }, + encryptedKey: { + type: Sequelize.BLOB, + allowNull: false + }, + signature: { + type: Sequelize.BLOB, + allowNull: false + } +} + +export const createKeyResponseModel = (sequelize: Sequelize.Sequelize): KeyResponseModelStatic => sequelize.define('KeyResponse', attributes) as KeyResponseModelStatic diff --git a/src/database/main.ts b/src/database/main.ts index ed96c8a..95ed3b8 100644 --- a/src/database/main.ts +++ b/src/database/main.ts @@ -27,7 +27,10 @@ import { CategoryTimeWarningModelStatic, createCategoryTimeWarningModel } from ' import { ChildTaskModelStatic, createChildTaskModel } from './childtask' import { ConfigModelStatic, createConfigModel } from './config' import { createDeviceModel, DeviceModelStatic } from './device' +import { createEncryptedAppListModel, EncryptedAppListModelStatic } from './encryptedapplist' import { createFamilyModel, FamilyModelStatic } from './family' +import { createKeyRequestModel, KeyRequestModelStatic } from './keyrequest' +import { createKeyResponseModel, KeyResponseModelStatic } from './keyresponse' import { createMailLoginTokenModel, MailLoginTokenModelStatic } from './maillogintoken' import { createUmzug } from './migration/umzug' import { createOldDeviceModel, OldDeviceModelStatic } from './olddevice' @@ -52,7 +55,10 @@ export interface Database { childTask: ChildTaskModelStatic config: ConfigModelStatic device: DeviceModelStatic + encryptedAppList: EncryptedAppListModelStatic family: FamilyModelStatic + keyRequest: KeyRequestModelStatic + keyResponse: KeyResponseModelStatic mailLoginToken: MailLoginTokenModelStatic oldDevice: OldDeviceModelStatic purchase: PurchaseModelStatic @@ -77,7 +83,10 @@ const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({ categoryTimeWarning: createCategoryTimeWarningModel(sequelize), config: createConfigModel(sequelize), device: createDeviceModel(sequelize), + encryptedAppList: createEncryptedAppListModel(sequelize), family: createFamilyModel(sequelize), + keyRequest: createKeyRequestModel(sequelize), + keyResponse: createKeyResponseModel(sequelize), mailLoginToken: createMailLoginTokenModel(sequelize), oldDevice: createOldDeviceModel(sequelize), purchase: createPurchaseModel(sequelize), diff --git a/src/database/migration/migrations/20181014-setup-tables.ts b/src/database/migration/migrations/20181014-setup-tables.ts index 7f9f63c..d3a1d37 100644 --- a/src/database/migration/migrations/20181014-setup-tables.ts +++ b/src/database/migration/migrations/20181014-setup-tables.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 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 @@ -22,7 +22,7 @@ import { attributesVersion1 as authTokenAttributes } from '../../authtoken' import { attributesVersion1 as categoryAttributes } from '../../category' import { attributes as categoryAppAttributes } from '../../categoryapp' import { attributesVersion1 as deviceAttributes } from '../../device' -import { attributes as familyAttributes } from '../../family' +import { attributesVersion1 as familyAttributes } from '../../family' import { attributes as purchaseAttributes } from '../../purchase' import { attributesVersion1 as timelimitruleAttributes } from '../../timelimitrule' import { attributesVersion1 as usedTimeAttribute } from '../../usedtime' diff --git a/src/database/migration/migrations/20220725-create-encrypted-app-lists.ts b/src/database/migration/migrations/20220725-create-encrypted-app-lists.ts new file mode 100644 index 0000000..273a028 --- /dev/null +++ b/src/database/migration/migrations/20220725-create-encrypted-app-lists.ts @@ -0,0 +1,62 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + const dialect = sequelize.getDialect() + const isMysql = dialect === 'mysql' || dialect === 'mariadb' + const isPosgresql = dialect === 'postgres' + + if (isMysql) { + await sequelize.query( + 'CREATE TABLE `EncryptedAppLists` ' + + '(`familyId` VARCHAR(10) NOT NULL, `deviceId` VARCHAR(6) NOT NULL,' + + '`type` INTEGER NOT NULL, `version` VARCHAR(4) NOT NULL,' + + '`data` BLOB NOT NULL, ' + + 'PRIMARY KEY (`familyId`, `deviceId`, `type`),' + + 'FOREIGN KEY (`familyId`, `deviceId`) REFERENCES `Devices` (`familyId`, `deviceId`) ON UPDATE CASCADE ON DELETE CASCADE' + + ')', + { transaction } + ) + } else { + await sequelize.query( + 'CREATE TABLE "EncryptedAppLists" ' + + '("familyId" VARCHAR(10) NOT NULL, "deviceId" VARCHAR(6) NOT NULL,' + + '"type" INTEGER NOT NULL, "version" VARCHAR(4) NOT NULL,' + + '"data" ' + (isPosgresql ? 'BYTEA' : 'BLOB') + ' NOT NULL, ' + + 'PRIMARY KEY ("familyId", "deviceId", "type"),' + + 'FOREIGN KEY ("familyId", "deviceId") REFERENCES "Devices" ("familyId", "deviceId") ON UPDATE CASCADE ON DELETE CASCADE' + + ')', + { transaction } + ) + } + + await queryInterface.addIndex('EncryptedAppLists', ['familyId', 'deviceId', 'type', 'version'], { transaction }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.dropTable('EncryptedAppLists', { transaction }) + }) +} diff --git a/src/database/migration/migrations/20220726-add-device-publickey.ts b/src/database/migration/migrations/20220726-add-device-publickey.ts new file mode 100644 index 0000000..f7d9c96 --- /dev/null +++ b/src/database/migration/migrations/20220726-add-device-publickey.ts @@ -0,0 +1,39 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { attributesVersion13 as deviceAttributes } from '../../device' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.addColumn('Devices', 'publicKey', { + ...deviceAttributes.publicKey + }, { + transaction + }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.removeColumn('Devices', 'publicKey', { transaction }) + }) +} diff --git a/src/database/migration/migrations/20220727-add-family-requestseq.ts b/src/database/migration/migrations/20220727-add-family-requestseq.ts new file mode 100644 index 0000000..cd3f809 --- /dev/null +++ b/src/database/migration/migrations/20220727-add-family-requestseq.ts @@ -0,0 +1,39 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { attributesVersion2 as familyAttributes } from '../../family' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.addColumn('Families', 'nextServerKeyRequestSeq', { + ...familyAttributes.nextServerKeyRequestSeq + }, { + transaction + }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.removeColumn('Families', 'nextServerKeyRequestSeq', { transaction }) + }) +} diff --git a/src/database/migration/migrations/20220728-create-key-requests.ts b/src/database/migration/migrations/20220728-create-key-requests.ts new file mode 100644 index 0000000..4fc4585 --- /dev/null +++ b/src/database/migration/migrations/20220728-create-key-requests.ts @@ -0,0 +1,81 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + const dialect = sequelize.getDialect() + const isMysql = dialect === 'mysql' || dialect === 'mariadb' + const isPosgresql = dialect === 'postgres' + + if (isMysql) { + await sequelize.query( + 'CREATE TABLE `KeyRequests` (' + + '`familyId` VARCHAR(10) NOT NULL, ' + + '`serverSequenceNumber` BIGINT NOT NULL, ' + + '`senderDeviceId` VARCHAR(6) NOT NULL, ' + + '`senderSequenceNumber` BIGINT NOT NULL, ' + + '`deviceId` VARCHAR(6) NULL, ' + + '`categoryId` VARCHAR(6) NULL, ' + + '`type` INTEGER NOT NULL, ' + + '`tempKey` BLOB NOT NULL, ' + + '`signature` BLOB NOT NULL, ' + + 'PRIMARY KEY (`familyId`, `serverSequenceNumber`), ' + + 'FOREIGN KEY (`familyId`, `senderDeviceId`) REFERENCES `Devices` (`familyId`, `deviceId`) ON UPDATE CASCADE ON DELETE CASCADE, ' + + 'FOREIGN KEY (`familyId`, `deviceId`) REFERENCES `Devices` (`familyId`, `deviceId`) ON UPDATE CASCADE ON DELETE CASCADE, ' + + 'FOREIGN KEY (`familyId`, `categoryId`) REFERENCES `Categories` (`familyId`, `categoryId`) ON UPDATE CASCADE ON DELETE CASCADE' + + ')', + { transaction } + ) + } else { + await sequelize.query( + 'CREATE TABLE "KeyRequests" (' + + '"familyId" VARCHAR(10) NOT NULL, ' + + '"serverSequenceNumber" ' + (isPosgresql ? 'BIGINT' : 'LONG') + ' NOT NULL, ' + + '"senderDeviceId" VARCHAR(6) NOT NULL, ' + + '"senderSequenceNumber" ' + (isPosgresql ? 'BIGINT' : 'LONG') + ' NOT NULL, ' + + '"deviceId" VARCHAR(6) NULL, ' + + '"categoryId" VARCHAR(6) NULL, ' + + '"type" INTEGER NOT NULL, ' + + '"tempKey" ' + (isPosgresql ? 'BYTEA' : 'BLOB') + ' NOT NULL, ' + + '"signature" ' + (isPosgresql ? 'BYTEA' : 'BLOB') + ' NOT NULL, ' + + 'PRIMARY KEY ("familyId", "serverSequenceNumber"), ' + + 'FOREIGN KEY ("familyId", "senderDeviceId") REFERENCES "Devices" ("familyId", "deviceId") ON UPDATE CASCADE ON DELETE CASCADE, ' + + 'FOREIGN KEY ("familyId", "deviceId") REFERENCES "Devices" ("familyId", "deviceId") ON UPDATE CASCADE ON DELETE CASCADE, ' + + 'FOREIGN KEY ("familyId", "categoryId") REFERENCES "Categories" ("familyId", "categoryId") ON UPDATE CASCADE ON DELETE CASCADE' + + ')', + { transaction } + ) + } + + await queryInterface.addIndex('KeyRequests', ['familyId', 'senderDeviceId', 'senderSequenceNumber'], { transaction }) + await queryInterface.addIndex('KeyRequests', ['familyId', 'deviceId'], { transaction }) + await queryInterface.addIndex('KeyRequests', ['familyId', 'categoryId'], { transaction }) + await queryInterface.addIndex('KeyRequests', ['familyId', 'senderDeviceId', 'deviceId', 'categoryId'], { transaction, unique: true }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.dropTable('KeyRequests', { transaction }) + }) +} diff --git a/src/database/migration/migrations/20220729-create-key-responses.ts b/src/database/migration/migrations/20220729-create-key-responses.ts new file mode 100644 index 0000000..29becd1 --- /dev/null +++ b/src/database/migration/migrations/20220729-create-key-responses.ts @@ -0,0 +1,83 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + const dialect = sequelize.getDialect() + const isMysql = dialect === 'mysql' || dialect === 'mariadb' + const isPosgresql = dialect === 'postgres' + + if (isMysql) { + await sequelize.query( + 'CREATE TABLE `KeyResponses` (' + + '`familyId` VARCHAR(10) NOT NULL, ' + + '`receiverDeviceId` VARCHAR(6) NOT NULL, ' + + '`requestServerSequenceNumber` BIGINT NOT NULL, ' + + '`senderDeviceId` VARCHAR(6) NOT NULL, ' + + '`replyServerSequenceNumber` BIGINT NOT NULL, ' + + '`requestClientSequenceNumber` BIGINT NOT NULL, ' + + '`tempKey` BLOB NOT NULL, ' + + '`encryptedKey` BLOB NOT NULL, ' + + '`signature` BLOB NOT NULL, ' + + 'PRIMARY KEY (`familyId`, `receiverDeviceId`, `requestServerSequenceNumber`, `senderDeviceId`), ' + + 'FOREIGN KEY (`familyId`, `requestServerSequenceNumber`) REFERENCES `KeyRequests` (`familyId`, `serverSequenceNumber`) ON UPDATE CASCADE ON DELETE CASCADE ' + + ')', + { transaction } + ) + } else { + await sequelize.query( + 'CREATE TABLE "KeyResponses" (' + + '"familyId" VARCHAR(10) NOT NULL, ' + + '"receiverDeviceId" VARCHAR(6) NOT NULL, ' + + '"requestServerSequenceNumber" ' + (isPosgresql ? 'BIGINT' : 'LONG') + ' NOT NULL, ' + + '"senderDeviceId" VARCHAR(6) NOT NULL, ' + + '"replyServerSequenceNumber" ' + (isPosgresql ? 'BIGINT' : 'LONG') + ' NOT NULL, ' + + '"requestClientSequenceNumber" ' + (isPosgresql ? 'BIGINT' : 'LONG') + ' NOT NULL, ' + + '"tempKey" ' + (isPosgresql ? 'BYTEA' : 'BLOB') + ' NOT NULL, ' + + '"encryptedKey" ' + (isPosgresql ? 'BYTEA' : 'BLOB') + ' NOT NULL, ' + + '"signature" ' + (isPosgresql ? 'BYTEA' : 'BLOB') + ' NOT NULL, ' + + 'PRIMARY KEY ("familyId", "receiverDeviceId", "requestServerSequenceNumber", "senderDeviceId"), ' + + 'FOREIGN KEY ("familyId", "requestServerSequenceNumber") REFERENCES "KeyRequests" ("familyId", "serverSequenceNumber") ON UPDATE CASCADE ON DELETE CASCADE ' + + ')', + { transaction } + ) + } + + await queryInterface.addIndex('KeyResponses', ['familyId', 'requestServerSequenceNumber'], { transaction }) + await queryInterface.addIndex( + 'KeyResponses', + ['familyId', 'receiverDeviceId', 'replyServerSequenceNumber'], + { + transaction, + unique: true, + name: 'key_response_index_fid_rdid_rssn' + } + ) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.dropTable('KeyResponses', { transaction }) + }) +} diff --git a/src/database/migration/migrations/20220730-add-device-key-response-counter.ts b/src/database/migration/migrations/20220730-add-device-key-response-counter.ts new file mode 100644 index 0000000..2849d4f --- /dev/null +++ b/src/database/migration/migrations/20220730-add-device-key-response-counter.ts @@ -0,0 +1,39 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { attributesVersion14 as deviceAttributes } from '../../device' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.addColumn('Devices', 'nextKeyReplySequenceNumber', { + ...deviceAttributes.nextKeyReplySequenceNumber + }, { + transaction + }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.removeColumn('Devices', 'nextKeyReplySequenceNumber', { transaction }) + }) +} diff --git a/src/function/device/prepare-device-entry.ts b/src/function/device/prepare-device-entry.ts index fb1dad1..32d2a7b 100644 --- a/src/function/device/prepare-device-entry.ts +++ b/src/function/device/prepare-device-entry.ts @@ -64,5 +64,7 @@ export const prepareDeviceEntry = ({ familyId, userId, deviceAuthToken, deviceId wasAsEnabled: false, activityLevelBlocking: false, isQorLater: false, - manipulationFlags: 0 + manipulationFlags: 0, + publicKey: null, + nextKeyReplySequenceNumber: '1' }) diff --git a/src/function/parent/create-family.ts b/src/function/parent/create-family.ts index efdb800..9bf20f4 100644 --- a/src/function/parent/create-family.ts +++ b/src/function/parent/create-family.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 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 @@ -65,7 +65,8 @@ export const createFamily = async ({ database, mailAuthToken, firstParentDevice, deviceListVersion: generateVersionId(), // 14 days demo version fullVersionUntil: (Date.now() + 1000 * 60 * 60 * 24 * 14).toString(10), - hasFullVersion: true + hasFullVersion: true, + nextServerKeyRequestSeq: '1' }, { transaction }) // create parent user diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/finishkeyrequest.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/finishkeyrequest.ts new file mode 100644 index 0000000..1bad5c4 --- /dev/null +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/finishkeyrequest.ts @@ -0,0 +1,34 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { FinishKeyRequestAction } from '../../../../action' +import { Cache } from '../cache' + +export async function dispatchFinishKeyRequestAction ({ action, cache, deviceId }: { + deviceId: string + action: FinishKeyRequestAction + cache: Cache +}) { + await cache.database.keyRequest.destroy({ + where: { + familyId: cache.familyId, + senderDeviceId: deviceId, + senderSequenceNumber: action.deviceSequenceNumber.toString(10) + }, + transaction: cache.transaction + }) +} 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 ebef50c..f914bcf 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 @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 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 @@ -20,13 +20,18 @@ import { AddUsedTimeAction, AddUsedTimeActionVersion2, AppLogicAction, + FinishKeyRequestAction, ForceSyncAction, MarkTaskPendingAction, + ReplyToKeyRequestAction, RemoveInstalledAppsAction, + SendKeyRequestAction, SignOutAtDeviceAction, TriedDisablingDeviceAdminAction, UpdateAppActivitiesAction, - UpdateDeviceStatusAction + UpdateDeviceStatusAction, + UpdateInstalledAppsAction, + UploadDevicePublicKeyAction } from '../../../../action' import { EventHandler } from '../../../../monitoring/eventhandler' import { Cache } from '../cache' @@ -34,13 +39,18 @@ import { ActionObjectTypeNotHandledException } from '../exception/illegal-state' import { dispatchAddInstalledApps } from './addinstalledapps' import { dispatchAddUsedTime } from './addusedtime' import { dispatchAddUsedTimeVersion2 } from './addusedtime2' +import { dispatchFinishKeyRequestAction } from './finishkeyrequest' import { dispatchForceSyncAction } from './forcesync' import { dispatchMarkTaskPendingAction } from './marktaskpendingaction' +import { dispatchReplyToKeyRequestAction } from './replytokeyrequest' import { dispatchRemoveInstalledApps } from './removeinstalledapps' +import { dispatchSendKeyRequestAction } from './sendkeyrequest' import { dispatchSignOutAtDevice } from './signoutatdevice' import { dispatchTriedDisablingDeviceAdmin } from './trieddisablingdeviceadmin' import { dispatchUpdateAppActivities } from './updateappactivities' import { dispatchUpdateDeviceStatus } from './updatedevicestatus' +import { dispatchUpdateInstalledApps } from './updateinstalledapps' +import { dispatchUploadDevicePublicKeyAction } from './uploaddevicepublickey' export const dispatchAppLogicAction = async ({ action, deviceId, cache, eventHandler }: { action: AppLogicAction @@ -54,12 +64,18 @@ export const dispatchAppLogicAction = async ({ action, deviceId, cache, eventHan await dispatchAddUsedTime({ deviceId, action, cache }) } else if (action instanceof AddUsedTimeActionVersion2) { await dispatchAddUsedTimeVersion2({ deviceId, action, cache, eventHandler }) + } else if (action instanceof FinishKeyRequestAction) { + await dispatchFinishKeyRequestAction({ deviceId, action, cache }) } else if (action instanceof ForceSyncAction) { await dispatchForceSyncAction({ deviceId, action, cache }) } else if (action instanceof MarkTaskPendingAction) { await dispatchMarkTaskPendingAction({ deviceId, action, cache }) + } else if (action instanceof ReplyToKeyRequestAction) { + await dispatchReplyToKeyRequestAction({ deviceId, action, cache, eventHandler }) } else if (action instanceof RemoveInstalledAppsAction) { await dispatchRemoveInstalledApps({ deviceId, action, cache }) + } else if (action instanceof SendKeyRequestAction) { + await dispatchSendKeyRequestAction({ deviceId, action, cache }) } else if (action instanceof SignOutAtDeviceAction) { await dispatchSignOutAtDevice({ deviceId, action, cache }) } else if (action instanceof UpdateDeviceStatusAction) { @@ -68,6 +84,10 @@ export const dispatchAppLogicAction = async ({ action, deviceId, cache, eventHan await dispatchUpdateAppActivities({ deviceId, action, cache }) } else if (action instanceof TriedDisablingDeviceAdminAction) { await dispatchTriedDisablingDeviceAdmin({ deviceId, action, cache }) + } else if (action instanceof UpdateInstalledAppsAction) { + await dispatchUpdateInstalledApps({ deviceId, action, cache }) + } else if (action instanceof UploadDevicePublicKeyAction) { + await dispatchUploadDevicePublicKeyAction({ deviceId, action, cache, eventHandler }) } else { throw new ActionObjectTypeNotHandledException() } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/replytokeyrequest.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/replytokeyrequest.ts new file mode 100644 index 0000000..f6c6ad5 --- /dev/null +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/replytokeyrequest.ts @@ -0,0 +1,108 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { ReplyToKeyRequestAction } from '../../../../action' +import { Cache } from '../cache' +import { EventHandler } from '../../../../monitoring/eventhandler' +import { SourceDeviceNotFoundException } from '../exception/illegal-state' + +export async function dispatchReplyToKeyRequestAction ({ deviceId, action, cache, eventHandler }: { + deviceId: string + action: ReplyToKeyRequestAction + cache: Cache + eventHandler: EventHandler +}) { + const requestUnsafe = await cache.database.keyRequest.findOne({ + where: { + familyId: cache.familyId, + serverSequenceNumber: action.requestServerSequenceNumber.toString(10) + }, + attributes: ['senderDeviceId', 'senderSequenceNumber'], + transaction: cache.transaction + }) + + if (!requestUnsafe) { + eventHandler.countEvent('dispatchReplyToKeyRequestAction:request does not exists (anymore)') + + return + } + + const request = { + senderDeviceId: requestUnsafe.senderDeviceId, + senderSequenceNumber: requestUnsafe.senderSequenceNumber + } + + const oldReplyCounter = await cache.database.keyResponse.count({ + where: { + familyId: cache.familyId, + receiverDeviceId: request.senderDeviceId, + requestServerSequenceNumber: action.requestServerSequenceNumber.toString(10), + senderDeviceId: deviceId + }, + transaction: cache.transaction + }) + + if (oldReplyCounter !== 0) { + eventHandler.countEvent('dispatchReplyToKeyRequestAction:got duplicate reply which was ignored') + + return + } + + const deviceEntryUnsafe = await cache.database.device.findOne({ + where: { + familyId: cache.familyId, + deviceId + }, + transaction: cache.transaction, + attributes: ['nextKeyReplySequenceNumber'] + }) + + if (!deviceEntryUnsafe) { + throw new SourceDeviceNotFoundException() + } + + const deviceEntry = { + nextKeyReplySequenceNumber: deviceEntryUnsafe.nextKeyReplySequenceNumber + } + + await cache.database.device.update({ + nextKeyReplySequenceNumber: (parseInt(deviceEntry.nextKeyReplySequenceNumber) + 1).toString(10) + }, { + where: { + familyId: cache.familyId, + deviceId + }, + transaction: cache.transaction + }) + + await cache.database.keyResponse.create({ + familyId: cache.familyId, + receiverDeviceId: request.senderDeviceId, + requestServerSequenceNumber: action.requestServerSequenceNumber.toString(10), + senderDeviceId: deviceId, + replyServerSequenceNumber: deviceEntry.nextKeyReplySequenceNumber, + requestClientSequenceNumber: requestUnsafe.senderSequenceNumber, + tempKey: action.tempKey, + encryptedKey: action.encryptedKey, + signature: action.signature + }, { + transaction: cache.transaction + }) + + // there is no way (yet) to inform the specific device only + cache.areChangesImportant = true +} diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/sendkeyrequest.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/sendkeyrequest.ts new file mode 100644 index 0000000..2907ab5 --- /dev/null +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/sendkeyrequest.ts @@ -0,0 +1,76 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { SendKeyRequestAction } from '../../../../action' +import { Cache } from '../cache' +import { SourceFamilyNotFoundException } from '../exception/illegal-state' + +export async function dispatchSendKeyRequestAction ({ action, cache, deviceId }: { + deviceId: string + action: SendKeyRequestAction + cache: Cache +}) { + const familyEntryUnsafe = await cache.database.family.findOne({ + where: { + familyId: cache.familyId + }, + transaction: cache.transaction, + attributes: ['nextServerKeyRequestSeq'] + }) + + if (!familyEntryUnsafe) { + throw new SourceFamilyNotFoundException() + } + + const serverSequenceNumber = familyEntryUnsafe.nextServerKeyRequestSeq + + await cache.database.family.update({ + nextServerKeyRequestSeq: (parseInt(serverSequenceNumber, 10) + 1).toString(10) + }, { + where: { + familyId: cache.familyId + }, + transaction: cache.transaction + }) + + await cache.database.keyRequest.destroy({ + where: { + familyId: cache.familyId, + senderDeviceId: deviceId, + type: action.type, + deviceId: action.deviceId || null, + categoryId: action.categoryId || null + }, + transaction: cache.transaction + }) + + await cache.database.keyRequest.create({ + familyId: cache.familyId, + serverSequenceNumber: serverSequenceNumber, + senderDeviceId: deviceId, + senderSequenceNumber: action.deviceSequenceNumber.toString(10), + deviceId: action.deviceId || null, + categoryId: action.categoryId || null, + type: action.type, + tempKey: action.tempKey, + signature: action.signature + }, { + transaction: cache.transaction + }) + + cache.areChangesImportant = true +} diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts new file mode 100644 index 0000000..27085b4 --- /dev/null +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts @@ -0,0 +1,59 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { UpdateInstalledAppsAction } from '../../../../action' +import { types } from '../../../../database/encryptedapplist' +import { generateVersionId } from '../../../../util/token' +import { Cache } from '../cache' + +export async function dispatchUpdateInstalledApps ({ deviceId, action, cache }: { + deviceId: string + action: UpdateInstalledAppsAction + cache: Cache +}) { + if (action.base) { + await cache.database.encryptedAppList.upsert({ + familyId: cache.familyId, + deviceId, + type: types.base, + version: generateVersionId(), + data: action.base + }, { transaction: cache.transaction }) + } + + if (action.diff) { + await cache.database.encryptedAppList.upsert({ + familyId: cache.familyId, + deviceId, + type: types.diff, + version: generateVersionId(), + data: action.diff + }, { transaction: cache.transaction }) + } + + if (action.wipe) { + await cache.database.app.destroy({ + where: { + familyId: cache.familyId, + deviceId + }, + transaction: cache.transaction + }) + + cache.devicesWithModifiedInstalledApps.add(deviceId) + } +} diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/uploaddevicepublickey.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/uploaddevicepublickey.ts new file mode 100644 index 0000000..0650328 --- /dev/null +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/uploaddevicepublickey.ts @@ -0,0 +1,50 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 { UploadDevicePublicKeyAction } from '../../../../action' +import { Cache } from '../cache' +import { EventHandler } from '../../../../monitoring/eventhandler' +import { SourceDeviceNotFoundException } from '../exception/illegal-state' + +export async function dispatchUploadDevicePublicKeyAction ({ deviceId, action, cache, eventHandler }: { + deviceId: string + action: UploadDevicePublicKeyAction + cache: Cache + eventHandler: EventHandler +}) { + const deviceEntry = await cache.database.device.findOne({ + where: { + familyId: cache.familyId, + deviceId + }, + transaction: cache.transaction + }) + + if (deviceEntry === null) { + throw new SourceDeviceNotFoundException() + } else if (deviceEntry.publicKey === null) { + deviceEntry.publicKey = action.key + + await deviceEntry.save({ transaction: cache.transaction }) + + cache.invalidiateDeviceList = true + } else if (deviceEntry.publicKey.equals(action.key)) { + eventHandler.countEvent('dispatchUploadDevicePublicKeyAction:duplicate action') + } else { + eventHandler.countEvent('dispatchUploadDevicePublicKeyAction:got new public key for existing device') + } +} diff --git a/src/function/sync/get-server-data-status/device-detail.ts b/src/function/sync/get-server-data-status/device-detail.ts new file mode 100644 index 0000000..8e9211d --- /dev/null +++ b/src/function/sync/get-server-data-status/device-detail.ts @@ -0,0 +1,119 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 } from '../../../database' +import { ClientDataStatusDevicesExtended } from '../../../object/clientdatastatus' +import { ServerExtendedDeviceData, ServerCryptContainer } from '../../../object/serverdatastatus' +import { FamilyEntry } from './family-entry' +import { types } from '../../../database/encryptedapplist' + +export async function getDeviceDetailList ({ database, transaction, familyEntry, devicesDetail }: { + database: Database + transaction: Sequelize.Transaction + familyEntry: FamilyEntry + devicesDetail: ClientDataStatusDevicesExtended +}): Promise | null> { + const serverEncryptedAppsVersions = (await database.encryptedAppList.findAll({ + where: { + familyId: familyEntry.familyId, + }, + attributes: ['deviceId', 'type', 'version'], + transaction + })).map((item) => ({ + deviceId: item.deviceId, + type: item.type, + version: item.version + })) + + const devicesWithChangedBaseApps: Array = [] + const devicesWithChangedDiffApps: Array = [] + + serverEncryptedAppsVersions.forEach((item) => { + if (item.type === types.base) { + if (!devicesDetail[item.deviceId] || devicesDetail[item.deviceId].appsB !== item.version) { + devicesWithChangedBaseApps.push(item.deviceId) + } + } else if (item.type === types.diff) { + if (!devicesDetail[item.deviceId] || devicesDetail[item.deviceId].appsD !== item.version) { + devicesWithChangedDiffApps.push(item.deviceId) + } + } + }) + + const updatedDeviceIds = Array.from(new Set([...devicesWithChangedBaseApps, ...devicesWithChangedDiffApps])) + + if (updatedDeviceIds.length === 0) return null + + const updatedBaseApps = devicesWithChangedBaseApps.length === 0 ? [] : (await database.encryptedAppList.findAll({ + where: { + familyId: familyEntry.familyId, + deviceId: { + [Sequelize.Op.in]: devicesWithChangedBaseApps + }, + type: types.base + }, + attributes: [ + 'deviceId', + 'version', + 'data' + ], + transaction + })).map((item) => ({ + deviceId: item.deviceId, + version: item.version, + data: item.data + })) + + const updatedDiffApps = devicesWithChangedDiffApps.length === 0 ? [] : (await database.encryptedAppList.findAll({ + where: { + familyId: familyEntry.familyId, + deviceId: { + [Sequelize.Op.in]: devicesWithChangedDiffApps + }, + type: types.diff + }, + attributes: [ + 'deviceId', + 'version', + 'data' + ], + transaction + })).map((item) => ({ + deviceId: item.deviceId, + version: item.version, + data: item.data + })) + + return updatedDeviceIds.map((deviceId) => { + const appsBase = updatedBaseApps.find((item) => item.deviceId === deviceId) + const appsDiff = updatedDiffApps.find((item) => item.deviceId === deviceId) + + return { + deviceId, + appsBase: appsBase ? wrapServerCryptContainer(appsBase) : undefined, + appsDiff: appsDiff ? wrapServerCryptContainer(appsDiff) : undefined + } + }) +} + +function wrapServerCryptContainer({ version, data }: { version: string, data: Buffer }): ServerCryptContainer { + return { + version, + data: data.toString('base64') + } +} diff --git a/src/function/sync/get-server-data-status/device-list.ts b/src/function/sync/get-server-data-status/device-list.ts index 2caf511..0d56181 100644 --- a/src/function/sync/get-server-data-status/device-list.ts +++ b/src/function/sync/get-server-data-status/device-list.ts @@ -65,7 +65,8 @@ export async function getDeviceList ({ database, transaction, familyEntry }: { wasAsEnabled: item.wasAsEnabled, activityLevelBlocking: item.activityLevelBlocking, qOrLater: item.isQorLater, - mFlags: item.manipulationFlags + mFlags: item.manipulationFlags, + pk: item.publicKey ? item.publicKey.toString('base64') : undefined })) } } diff --git a/src/function/sync/get-server-data-status/index.ts b/src/function/sync/get-server-data-status/index.ts index 5b03fb6..104eecf 100644 --- a/src/function/sync/get-server-data-status/index.ts +++ b/src/function/sync/get-server-data-status/index.ts @@ -26,25 +26,32 @@ import { getCategoryAssignedApps, getCategoryBaseDatas, getCategoryDataToSync, getRules, getTasks, getUsedTimes } from './category' +import { getDeviceDetailList } from './device-detail' import { getDeviceList } from './device-list' import { getFamilyEntry } from './family-entry' import { getUserList } from './user-list' +import { getKeyRequests } from './key-requests' +import { getKeyResponses } from './key-responses' -export const generateServerDataStatus = async ({ database, clientStatus, familyId, transaction }: { +export const generateServerDataStatus = async ({ + database, clientStatus, familyId, deviceId, transaction +}: { database: Database clientStatus: ClientDataStatus familyId: string + deviceId: string transaction: Sequelize.Transaction }): Promise => { const familyEntry = await getFamilyEntry({ database, familyId, transaction }) const doesClientSupportTasks = clientStatus.clientLevel !== undefined && clientStatus.clientLevel >= 3 + const doesClientSupportCryptoApps = clientStatus.clientLevel !== undefined && clientStatus.clientLevel >= 4 const result: ServerDataStatus = { fullVersion: config.alwaysPro ? 1 : ( familyEntry.hasFullVersion ? parseInt(familyEntry.fullVersionUntil, 10) : 0 ), message: await getStatusMessage({ database, transaction }) || undefined, - apiLevel: 3 + apiLevel: 4 } if (familyEntry.deviceListVersion !== clientStatus.devices) { @@ -103,5 +110,30 @@ export const generateServerDataStatus = async ({ database, clientStatus, familyI }) } + if (doesClientSupportCryptoApps) { + result.devices2 = await getDeviceDetailList({ + database, + transaction, + familyEntry, + devicesDetail: clientStatus.devicesDetail || {} + }) || undefined + + result.krq = await getKeyRequests({ + database, + transaction, + familyEntry, + deviceId, + lastSeenRequestIndex: clientStatus.kri || null + }) || undefined + + result.kr = await getKeyResponses({ + database, + transaction, + familyEntry, + deviceId, + lastSeenRequestIndex: clientStatus.kr || null + }) || undefined + } + return result } diff --git a/src/function/sync/get-server-data-status/key-requests.ts b/src/function/sync/get-server-data-status/key-requests.ts new file mode 100644 index 0000000..a7184d3 --- /dev/null +++ b/src/function/sync/get-server-data-status/key-requests.ts @@ -0,0 +1,58 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 } from '../../../database' +import { ServerKeyRequest } from '../../../object/serverdatastatus' +import { FamilyEntry } from './family-entry' + +export async function getKeyRequests ({ database, transaction, familyEntry, lastSeenRequestIndex, deviceId }: { + database: Database + transaction: Sequelize.Transaction + familyEntry: FamilyEntry + lastSeenRequestIndex: number | null + deviceId: string +}): Promise | null> { + const data = await database.keyRequest.findAll({ + where: { + familyId: familyEntry.familyId, + senderDeviceId: { + [Sequelize.Op.ne]: deviceId + }, + ...(lastSeenRequestIndex === null ? {} : { + serverSequenceNumber: { + [Sequelize.Op.gt]: lastSeenRequestIndex + } + }) + }, + transaction, + limit: 32 + }) + + if (data.length === 0) return null + + return data.map((item) => ({ + srvSeq: parseInt(item.serverSequenceNumber), + senId: item.senderDeviceId, + senSeq: parseInt(item.senderSequenceNumber), + deviceId: item.deviceId || undefined, + categoryId: item.categoryId || undefined, + type: item.type, + tempKey: item.tempKey.toString('base64'), + signature: item.signature.toString('base64') + })) +} diff --git a/src/function/sync/get-server-data-status/key-responses.ts b/src/function/sync/get-server-data-status/key-responses.ts new file mode 100644 index 0000000..b029454 --- /dev/null +++ b/src/function/sync/get-server-data-status/key-responses.ts @@ -0,0 +1,63 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2022 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 } from '../../../database' +import { ServerKeyResponse } from '../../../object/serverdatastatus' +import { FamilyEntry } from './family-entry' + +export async function getKeyResponses ({ database, transaction, familyEntry, lastSeenRequestIndex, deviceId }: { + database: Database + transaction: Sequelize.Transaction + familyEntry: FamilyEntry + lastSeenRequestIndex: number | null + deviceId: string +}): Promise | null> { + if (lastSeenRequestIndex !== null) { + await database.keyResponse.destroy({ + where: { + familyId: familyEntry.familyId, + receiverDeviceId: deviceId, + replyServerSequenceNumber: { + [Sequelize.Op.lte]: lastSeenRequestIndex.toString(10) + } + }, + transaction + }) + } + + const data = await database.keyResponse.findAll({ + where: { + familyId: familyEntry.familyId, + receiverDeviceId: deviceId, + }, + order: [['replyServerSequenceNumber', 'ASC']], + transaction, + limit: 32 + }) + + if (data.length === 0) return null + + return data.map((item) => ({ + srvSeq: parseInt(item.replyServerSequenceNumber), + sender: item.senderDeviceId, + rqSeq: parseInt(item.requestClientSequenceNumber), + tempKey: item.tempKey.toString('base64'), + cryptKey: item.encryptedKey.toString('base64'), + signature: item.signature.toString('base64') + })) +} diff --git a/src/object/clientdatastatus.ts b/src/object/clientdatastatus.ts index 437db70..531f17e 100644 --- a/src/object/clientdatastatus.ts +++ b/src/object/clientdatastatus.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 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 @@ -21,10 +21,14 @@ export interface ClientDataStatus { categories: ClientDataStatusCategories users: string // userListVersion clientLevel?: number + devicesDetail?: ClientDataStatusDevicesExtended + kri?: number // last key request index + kr?: number // last key response index } export type ClientDataStatusApps = {[key: string]: string} // installedAppsVersionsByDeviceId export type ClientDataStatusCategories = {[key: string]: CategoryDataStatus} +export type ClientDataStatusDevicesExtended = {[key: string]: DeviceDataStatus} export interface CategoryDataStatus { base: string // baseVersion @@ -33,3 +37,8 @@ export interface CategoryDataStatus { usedTime: string // usedTimeItemsVersion tasks?: string // taskListVersion } + +export interface DeviceDataStatus { + appsB?: string // encrypted app list base version + appsD?: string // encrypted app list diff version +} diff --git a/src/object/serverdatastatus.ts b/src/object/serverdatastatus.ts index a65dc22..78a1437 100644 --- a/src/object/serverdatastatus.ts +++ b/src/object/serverdatastatus.ts @@ -23,6 +23,7 @@ import { RuntimePermissionStatus } from '../model/runtimepermissionstatus' export interface ServerDataStatus { devices?: ServerDeviceList // newDeviceList + devices2?: Array // updatedExtendedDeviceData apps?: Array // newInstalledApps rmCategories?: Array // removedCategories categoryBase?: Array // newCategoryBaseData @@ -31,6 +32,8 @@ export interface ServerDataStatus { rules?: Array // newOrUpdatedTimeLimitRules tasks?: Array // newOrUpdatedTasks users?: ServerUserList // newUserList + krq?: Array // pendingKeyRequests + kr?: Array // keyResponses fullVersion: number // fullVersionUntil message?: string apiLevel: number @@ -97,6 +100,7 @@ export interface ServerDeviceData { activityLevelBlocking: boolean qOrLater: boolean mFlags: number // manipulation flags + pk?: string // public key } export interface ServerUpdatedCategoryBaseData { @@ -217,3 +221,34 @@ export interface ServerInstalledAppsData { apps: Array activities: Array } + +export interface ServerExtendedDeviceData { + deviceId: string + appsBase?: ServerCryptContainer + appsDiff?: ServerCryptContainer +} + +export interface ServerCryptContainer { + version: string + data: string +} + +export interface ServerKeyRequest { + srvSeq: number + senId: string + senSeq: number + deviceId?: string + categoryId?: string + type: number + tempKey: string + signature: string +} + +export interface ServerKeyResponse { + srvSeq: number + sender: string + rqSeq: number + tempKey: string, + cryptKey: string, + signature: string +}