diff --git a/_docs_integrate/attribute-introduction.md b/_docs_integrate/attribute-introduction.md index 0a9b7d175..402a27768 100644 --- a/_docs_integrate/attribute-introduction.md +++ b/_docs_integrate/attribute-introduction.md @@ -45,11 +45,11 @@ Depending on what IdentityAttribute value type is used, the associated IdentityA #### Simple IdentityAttributes -A simple IdentityAttribute is an IdentityAttribute with an [IdentityAttribute value type]({% link _docs_integrate/attribute-values.md %}#identity-attributes) for which none of its properties correspond to another IdentityAttribute value type. In most cases, the IdentityAttribute value type then only has a single property, which often also has the name `value`. This property stores the actual value of the IdentityAttribute. From a technical point of view, it can be stated that the `id` of a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) whose `content` is given by a simple IdentityAttribute cannot be the `parentId` of another LocalAttribute. In other words, it could be said that simple IdentityAttributes are not composite of other IdentityAttributes. Examples of simple IdentityAttributes are IdentityAttributes with IdentityAttribute value type [DisplayName]({% link _docs_integrate/attribute-values.md %}#displayname) or [EMailAddress]({% link _docs_integrate/attribute-values.md %}#emailaddress). +A simple IdentityAttribute is an IdentityAttribute with an [IdentityAttribute value type]({% link _docs_integrate/attribute-values.md %}#identity-attributes) for which none of its properties correspond to another IdentityAttribute value type. In most cases, the IdentityAttribute value type then only has a single property, which often also has the name `value`. This property stores the actual value of the IdentityAttribute. In other words, it could be said that simple IdentityAttributes are not composite of other IdentityAttributes. Examples of simple IdentityAttributes are IdentityAttributes with IdentityAttribute value type [DisplayName]({% link _docs_integrate/attribute-values.md %}#displayname) or [EMailAddress]({% link _docs_integrate/attribute-values.md %}#emailaddress). #### Complex IdentityAttributes -A complex IdentityAttribute is an IdentityAttribute with an [IdentityAttribute value type]({% link _docs_integrate/attribute-values.md %}#identity-attributes) for which at least one property corresponds to another IdentityAttribute value type. An IdentityAttribute value type that contains such a property can be recognized by whether another IdentityAttribute value type is mentioned in its table in the [documentation]({% link _docs_integrate/attribute-values.md %}#identity-attributes) with regard to the validation of the property. Examples of complex IdentityAttributes are IdentityAttributes with IdentityAttribute value type [BirthDate]({% link _docs_integrate/attribute-values.md %}#birthdate) or [StreetAddress]({% link _docs_integrate/attribute-values.md %}#streetaddress). When [creating a complex IdentityAttribute for yourself]({% link _docs_integrate/create-attributes-for-yourself.md %}#example-of-creating-a-complex-identityattribute), there is an important detail to note in contrast to the [creation of a simple IdentityAttribute for yourself]({% link _docs_integrate/create-attributes-for-yourself.md %}#example-of-creating-a-simple-identityattribute). Creating an IdentityAttribute for yourself always leads to the creation of a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) whose `shareInfo` property is undefined and whose `content` is given by the IdentityAttribute owned by yourself. Such a LocalAttribute is also referred to as a RepositoryAttribute. If a RepositoryAttribute is created that contains a complex IdentityAttribute within its `content` property, additional RepositoryAttributes are automatically created for each property of its IdentityAttribute value type that corresponds to another IdentityAttribute value type. These RepositoryAttributes are also referred to as children of the RepositoryAttribute belonging to the complex IdentityAttribute. The `id` of their parent is contained within their `parentId` property. The creation of these RepositoryAttributes makes it possible to share individual components of a complex IdentityAttribute. For example, if an IdentityAttribute of type [BirthDate]({% link _docs_integrate/attribute-values.md %}#birthdate) has been created, it is possible to share only the `year` of birth with peers, instead of the full date of birth. The corresponding IdentityAttribute of type [BirthYear]({% link _docs_integrate/attribute-values.md %}#birthyear) does not have to be created manually, but is created automatically after the IdentityAttribute of type [BirthDate]({% link _docs_integrate/attribute-values.md %}#birthdate) has been created. +A complex IdentityAttribute is an IdentityAttribute with an [IdentityAttribute value type]({% link _docs_integrate/attribute-values.md %}#identity-attributes) for which at least one property corresponds to another IdentityAttribute value type. An IdentityAttribute value type that contains such a property can be recognized by whether another IdentityAttribute value type is mentioned in its table in the [documentation]({% link _docs_integrate/attribute-values.md %}#identity-attributes) with regard to the validation of the property. Examples of complex IdentityAttributes are IdentityAttributes with IdentityAttribute value type [BirthDate]({% link _docs_integrate/attribute-values.md %}#birthdate) or [StreetAddress]({% link _docs_integrate/attribute-values.md %}#streetaddress). When [creating a complex IdentityAttribute for yourself]({% link _docs_integrate/create-attributes-for-yourself.md %}#example-of-creating-a-complex-identityattribute), there is an important detail to note in contrast to the [creation of a simple IdentityAttribute for yourself]({% link _docs_integrate/create-attributes-for-yourself.md %}#example-of-creating-a-simple-identityattribute). Creating an IdentityAttribute for yourself always leads to the creation of a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) whose `shareInfo` property is undefined and whose `content` is given by the IdentityAttribute owned by yourself. Such a LocalAttribute is also referred to as a RepositoryAttribute. If a RepositoryAttribute is created that contains a complex IdentityAttribute within its `content` property, additional RepositoryAttributes are automatically created for each property of its IdentityAttribute value type that corresponds to another IdentityAttribute value type. These RepositoryAttributes are also referred to as children of the RepositoryAttribute belonging to the complex IdentityAttribute. The creation of these RepositoryAttributes makes it possible to share individual components of a complex IdentityAttribute. For example, if an IdentityAttribute of type [BirthDate]({% link _docs_integrate/attribute-values.md %}#birthdate) has been created, it is possible to share only the `year` of birth with peers, instead of the full date of birth. The corresponding IdentityAttribute of type [BirthYear]({% link _docs_integrate/attribute-values.md %}#birthyear) does not have to be created manually, but is created automatically after the IdentityAttribute of type [BirthDate]({% link _docs_integrate/attribute-values.md %}#birthdate) has been created. Please note that when creating a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) that contains a complex IdentityAttribute in its `content` property, additional LocalAttributes are only created automatically if the LocalAttribute is a RepositoryAttribute. However, if the LocalAttribute is an own shared IdentityAttribute or a peer shared IdentityAttribute, no additional LocalAttributes are created. More details on the terminology related to [LocalAttributes and IdentityAttributes]({% link _docs_integrate/attribute-introduction.md %}#localattributes-and-identityattributes) can be found in the next section. {: .notice--info} diff --git a/_docs_integrate/connector-events.md b/_docs_integrate/connector-events.md index 863045062..b2be4a0dd 100644 --- a/_docs_integrate/connector-events.md +++ b/_docs_integrate/connector-events.md @@ -37,7 +37,6 @@ required_by: | consumption.
outgoingRequestFromRelationshipCreation
CreatedAndCompleted | [LocalRequest]({% link _docs_integrate/data-model-overview.md %}#localrequest) | ... a `consumption.`
`outgoingRequest`
`CreatedAndCompleted` event is fired and it was fired due to an incoming pending Relationship. This convenience event is useful to act on incoming pending Relationships. | | consumption.outgoingRequestStatusChanged | [RequestStatusChangedEventData](#requeststatuschangedeventdata) | ... the status of an outgoing Request has changed. | | consumption.relationshipTemplateProcessed | [RelationshipTemplateProcessedEventData](#relationshiptemplateprocessedeventdata) | ... a RelationshipTemplate was processed by Modules like the `RequestModule` or `DeciderModule`. | -| consumption.sharedAttributeCopyCreated | [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) | ... an Attribute is copied for sharing with another Identity. | | transport.fileOwnershipClaimed | [File]({% link _docs_integrate/data-model-overview.md %}#file) | ... the ownership of the File was claimed by another Identity. This happens when they accept a corresponding [TransferFileOwnershipRequestItem]({% link _docs_integrate/data-model-overview.md %}#transferfileownershiprequestitem). | | transport.fileOwnershipLocked | [File]({% link _docs_integrate/data-model-overview.md %}#file) | ... the ownership of the File is locked and can only be claimed once the [`ownershipToken` is regenerated]({% link _docs_use-cases/use-case-transport-regenerate-file-ownership-token.md %}). | | transport.identityDeletionProcessStatusChanged | [IdentityDeletionProcess]({% link _docs_integrate/data-model-overview.md %}#identitydeletionprocess) | ... a new IdentityDeletionProcess has been created or the status of an existing IdentityDeletionProcess has changed. | diff --git a/_docs_integrate/create-attributes-for-peer.md b/_docs_integrate/create-attributes-for-peer.md index 79ddbdda7..3953fa550 100644 --- a/_docs_integrate/create-attributes-for-peer.md +++ b/_docs_integrate/create-attributes-for-peer.md @@ -141,7 +141,7 @@ If the Recipient does not want to create any of the Attributes offered by the Se If the Recipient agrees to the creation of one of the Attributes offered by the Sender, it can accept the associated CreateAttributeRequestItem contained in the Request for creating Attributes. The [AcceptRequestItemParameters]({% link _docs_integrate/data-model-overview.md %}#acceptrequestitemparameters) must be used for that. -The acceptance of a CreateAttributeRequestItem leads to the creation of a corresponding [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) with a [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo) contained within its `shareInfo` property. +The acceptance of a CreateAttributeRequestItem leads to the creation of a corresponding [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute). The `content` of the LocalAttribute is the underlying `attribute` of the CreateAttributeRequestItem. Depending on whether an IdentityAttribute or a RelationshipAttribute is created and the ownership, it is referred to as either an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes), an [own shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes) or a [peer shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes). Based on the created LocalAttribute, an appropriate AcceptResponseItem of type [CreateAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#createattributeacceptresponseitem) is generated, which incorporates the `id` of the LocalAttribute in its `attributeId` property. @@ -253,7 +253,7 @@ To view the Response to the Request, proceed as described in the [Query outgoing The Integrator of the Sender can now get the Response of the Recipient from the `response.content` property of the result. In the `items` property of the [Response]({% link _docs_integrate/data-model-overview.md %}#response) is a [CreateAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#createattributeacceptresponseitem) for each accepted and a [RejectResponseItem]({% link _docs_integrate/data-model-overview.md %}#rejectresponseitem) for each rejected CreateAttributeRequestItem included. -Note that each accepted CreateAttributeRequestItem leads to the creation of an appropriate LocalAttribute with a LocalAttributeShareInfo of the Sender. +Note that each accepted CreateAttributeRequestItem leads to the creation of an appropriate LocalAttribute of the Sender. The `content` of the [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) is the underlying `attribute` of the [CreateAttributeRequestItem]({% link _docs_integrate/data-model-overview.md %}#createattributerequestitem). Depending on whether an IdentityAttribute or a RelationshipAttribute has been created and the ownership, it is referred to as either a [peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes), an [own shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes) or a [peer shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes). diff --git a/_docs_integrate/create-attributes-for-yourself.md b/_docs_integrate/create-attributes-for-yourself.md index 77d45d284..714667545 100644 --- a/_docs_integrate/create-attributes-for-yourself.md +++ b/_docs_integrate/create-attributes-for-yourself.md @@ -58,7 +58,7 @@ This is to prevent several latest RepositoryAttributes with the same `content.va ### Process of creating a RepositoryAttribute -As you can see from the diagram below, after you have entered the [input for creating a RepositoryAttribute]({% link _docs_integrate/create-attributes-for-yourself.md %}#input-for-creating-a-repositoryattribute), a check is performed whether the input values for the properties of the specified [IdentityAttributeValue]({% link _docs_integrate/attribute-values.md %}#identity-attributes) meet the validation criteria documented on the [Attribute Values]({% link _docs_integrate/attribute-values.md %}) page. If the validation is not successful, an [error message]({% link _docs_integrate/error-codes.md %}) is sent in response. Otherwise, a RepositoryAttribute is created that contains the IdentityAttribute in its `content` property. If it is a [simple IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#simple-identityattributes), a success response is sent directly. In the case of a [complex IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#complex-identityattributes), on the other hand, another RepositoryAttribute is created beforehand for each of its appropriate properties. These RepositoryAttributes for the properties are also referred to as children of the RepositoryAttribute belonging to the complex IdentityAttribute. The `id` of their parent is contained within their `parentId` property. Note that the successful creation of a LocalAttribute, and therefore in particular the creation of a RepositoryAttribute, triggers the `consumption.attributeCreated` [Connector event]({% link _docs_integrate/connector-events.md %}). +As you can see from the diagram below, after you have entered the [input for creating a RepositoryAttribute]({% link _docs_integrate/create-attributes-for-yourself.md %}#input-for-creating-a-repositoryattribute), a check is performed whether the input values for the properties of the specified [IdentityAttributeValue]({% link _docs_integrate/attribute-values.md %}#identity-attributes) meet the validation criteria documented on the [Attribute Values]({% link _docs_integrate/attribute-values.md %}) page. If the validation is not successful, an [error message]({% link _docs_integrate/error-codes.md %}) is sent in response. Otherwise, a RepositoryAttribute is created that contains the IdentityAttribute in its `content` property. If it is a [simple IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#simple-identityattributes), a success response is sent directly. In the case of a [complex IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#complex-identityattributes), on the other hand, another RepositoryAttribute is created beforehand for each of its appropriate properties. These RepositoryAttributes for the properties are also referred to as children of the RepositoryAttribute belonging to the complex IdentityAttribute. Note that the successful creation of a LocalAttribute, and therefore in particular the creation of a RepositoryAttribute, triggers the `consumption.attributeCreated` [Connector event]({% link _docs_integrate/connector-events.md %}).
@@ -106,7 +106,7 @@ When you have successfully created an IdentityAttribute for your own Connector, If you want to create a [RelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#relationshipattribute), you must proceed differently than when [creating an IdentityAttribute for yourself]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-an-identityattribute-for-yourself). This is because a RelationshipAttribute can only exist in the context of a [Relationship]({% link _docs_integrate/data-model-overview.md %}#relationship) with a peer, which means that they must also agree to the creation of it. This is achieved by sending a [Request]({% link _docs_integrate/data-model-overview.md %}#request) whose `items` property contains an appropriate [RequestItem]({% link _docs_integrate/data-model-overview.md %}#requestitems), which must be accepted by the peer. Depending on whether you or your peer should set the [RelationshipAttributeValue]({% link _docs_integrate/attribute-values.md %}#relationship-attributes) and depending on other factors, a [CreateAttributeRequestItem]({% link _docs_integrate/data-model-overview.md %}#createattributerequestitem), [ReadAttributeRequestItem]({% link _docs_integrate/data-model-overview.md %}#readattributerequestitem), [ProposeAttributeRequestItem]({% link _docs_integrate/data-model-overview.md %}#proposeattributerequestitem) or [ShareAttributeRequestItem]({% link _docs_integrate/data-model-overview.md %}#shareattributerequestitem) should be used for this. -From a technical point of view, the creation of a RelationshipAttribute corresponds to the creation of one [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) for yourself and one LocalAttribute for your peer, whereby their `content` is given by the RelationshipAttribute that is intended to be created and the `shareInfo` of both LocalAttributes contains a correspondingly suitable [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo). +From a technical point of view, the creation of a RelationshipAttribute corresponds to the creation of one [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) for yourself and one LocalAttribute for your peer, whereby their `content` is given by the RelationshipAttribute that is intended to be created. In terms of nomenclature, this pair of LocalAttributes consists of one own shared RelationshipAttribute and one peer shared RelationshipAttribute. {: .notice--info} diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 5d632585d..720660f30 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -358,70 +358,142 @@ With the information in this type you can clearly identify the Transport object ## LocalAttribute -A LocalAttribute stores the local metadata for an [Attribute](#attributes). This is contained within the `content` property of the LocalAttribute. The Attribute can be an [IdentityAttribute](#identityattribute) or a [RelationshipAttribute](#relationshipattribute). In the case of IdentityAttributes, there are three situations in which a LocalAttribute is created in the database: - -- The Identity [creates an IdentityAttribute for itself]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-an-identityattribute-for-yourself) (e.g. sets its first name). In particular, it is the `owner` of the IdentityAttribute. Its `shareInfo` property is undefined. Such an unshared LocalAttribute is called a **RepositoryAttribute**. -- The Identity shares an IdentityAttribute of itself with another Identity (e.g. by [exchanging]({% link _docs_integrate/attribute-introduction.md %}#attribute-management-options) it using a suitable [Request]({% link _docs_integrate/data-model-overview.md %}#request)). In that case, a _copy_ of the RepositoryAttribute used as the source is created for which the `shareInfo` property is set. This LocalAttribute is referred to as an **own shared IdentityAttribute**. -- The Identity receives an IdentityAttribute from another Identity (e.g. receives it via a [Request]({% link _docs_integrate/data-model-overview.md %}#request)). In that case a _new_ LocalAttribute is created for which the `shareInfo` property is set. This LocalAttribute is called a **peer shared IdentityAttribute**. - -In contrast, [RelationshipAttributes](#relationshipattribute) always exist in the context of a [Relationship](#relationship). +A LocalAttribute stores the local metadata for an [Attribute](#attributes). +This is contained within the `content` property of the LocalAttribute. +The Attribute can be an [IdentityAttribute](#identityattribute) or a [RelationshipAttribute](#relationshipattribute). +To represent who the `owner` of an Attribute is and who shared or received an Attribute, there are different subtypes of LocalAttributes. +In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.md %}), more details on the terminology related to LocalAttributes can be found. + +### OwnIdentityAttribute + +If an Identity [creates an IdentityAttribute for itself]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-an-identityattribute-for-yourself), it is referred to as an OwnIdentityAttribute. +The Identity can share an [IdentityAttribute](#identityattribute) of itself with another Identity by [exchanging]({% link _docs_integrate/attribute-introduction.md %}#attribute-management-options) it using a suitable [Request]({% link _docs_integrate/data-model-overview.md %}#request). +In that case, [AttributeForwardingDetails](#attributeforwardingdetails) are created, with their `attributeId` property set to the `id` of the OwnIdentityAttribute to represent their association. + +| Name | Type | Description | +| ----------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | +| content | [`IdentityAttribute`](#identityattribute) | The actual Content object this LocalAttribute defines the metadata for. | +| createdAt | `string` | {% include descr_createdAt class="LocalAttribute" %} | +| succeeds | `string` \| `undefined` | The `id` of a possibly existing predecessor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. The value of its `succeeds` property is then the `id` of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no predecessor, its `succeeds` property is `undefined`. | +| succeededBy | `string` \| `undefined` | The `id` of a possibly existing successor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. Its `id` is then the value of the `succeededBy` property of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no successor, its `succeededBy` property is `undefined`. | +| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | +| isDefault | `true` \| `undefined` | States whether the LocalAttribute is the default OwnIdentityAttribute for its Attribute value type. If setting default OwnIdentityAttributes is enabled, for every IdentityAttribute value type exactly one OwnIdentityAttribute will have `isDefault` set, given that at least one OwnIdentityAttribute of that value type exists. This property is only used for the UI of the App, e.g. to mark the Attribute that should be displayed firstly if multiple Attributes of the same value type exist. Thus, for a Connector it will always be `undefined`. | + +### PeerIdentityAttribute + +If an Identity shares an [OwnIdentityAttribute](#ownidentityattribute) with a peer, a PeerIdentityAttribute is created for the peer. +An [IdentityAttribute](#identityattribute) received from another Identity cannot be shared further. + +| Name | Type | Description | +| --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | +| content | [`IdentityAttribute`](#identityattribute) | The actual Content object this LocalAttribute defines the metadata for. | +| createdAt | `string` | {% include descr_createdAt class="LocalAttribute" %} | +| succeeds | `string` \| `undefined` | The `id` of a possibly existing predecessor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. The value of its `succeeds` property is then the `id` of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no predecessor, its `succeeds` property is `undefined`. | +| succeededBy | `string` \| `undefined` | The `id` of a possibly existing successor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. Its `id` is then the value of the `succeededBy` property of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no successor, its `succeededBy` property is `undefined`. | +| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | +| peer | `string` | The `address` of the [Identity](#identity) the LocalAttribute was received from. | +| sourceReference | `string` | The `id` of the [LocalRequest](#localrequest) or [LocalNotification](#localnotification) the LocalAttribute was received in. | +| deletionInfo | [`ReceivedAttributeDeletionInfo`](#receivedattributedeletioninfo) \| `undefined` | Information about whether the PeerIdentityAttribute is to be deleted or the OwnIdentityAttribute was deleted by the emitter, as well as the point in time of that deletion. | + +#### ReceivedAttributeDeletionInfo + +The ReceivedAttributeDeletionInfo holds information about the deletion status of the Attribute, as well as the point in time of that deletion. +If the Attribute's emitter requests the deletion of a shared Attribute via a [DeleteAttributeRequestItem](#deleteattributerequestitem) from the recipient, the recipient can accept or reject it. +If the recipient [accepts](#acceptdeleteattributerequestitemparameters) the DeleteAttributeRequestItem, the `deletionStatus` of the recipient's Attribute will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the recipient sent with their [DeleteAttributeAcceptResponseItem](#deleteattributeacceptresponseitem). +Once the recipient's Attribute is deleted by the recipient, a [ForwardedAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) or a [PeerRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#peerrelationshipattributedeletedbypeernotificationitem) is sent to the emitter, enabling it to update its corresponding [EmittedAttributeDeletionInfo](#emittedattributedeletioninfo). +If the emitter deletes their emitted Attribute, before the recipient deleted their Attribute, either an [OwnAttributeDeletedByOwnerNotificationItem](#ownattributedeletedbyownernotificationitem) or, in a special case, a [PeerRelationshipAttributeDeletedByPeerNotificationItem](#peerrelationshipattributedeletedbypeernotificationitem) is sent to the recipient. +If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` with the time of processing the [NotificationItem](#notificationitems) as `deletionDate`. +However, if the `deletionInfo` was defined before with `"ToBeDeleted"` as `deletionStatus`, it will remain unchanged, such that the recipient will be able to delete their Attribute as planned. + +| Name | Type | Description | +| -------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| deletionStatus | `"ToBeDeleted"` \| `"DeletedByEmitter"` | The deletion status of the Attribute. | +| deletionDate | `string` | The point in time
{::nomarkdown}{:/} | + +### OwnRelationshipAttribute + +[RelationshipAttributes](#relationshipattribute) always exist in the context of a [Relationship](#relationship). +For this reason, it is not possible for an Identity to have an unshared RelationshipAttribute. +The [creation of a RelationshipAttribute]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-a-relationshipattribute) corresponds to the creation of an OwnRelationshipAttribute for its `owner` and a [PeerRelationshipAttribute](#peerrelationshipattribute) for the peer with whom the `owner` has established the Relationship in whose context the RelationshipAttribute is to exist. + +| Name | Type | Description | +| --------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | +| content | [`RelationshipAttribute`](#relationshipattribute) | The actual Content object this LocalAttribute defines the metadata for. | +| createdAt | `string` | {% include descr_createdAt class="LocalAttribute" %} | +| succeeds | `string` \| `undefined` | The `id` of a possibly existing predecessor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. The value of its `succeeds` property is then the `id` of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no predecessor, its `succeeds` property is `undefined`. | +| succeededBy | `string` \| `undefined` | The `id` of a possibly existing successor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. Its `id` is then the value of the `succeededBy` property of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no successor, its `succeededBy` property is `undefined`. | +| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | +| peer | `string` | The `address` of the [Identity](#identity) the LocalAttribute was shared with. | +| sourceReference | `string` | The `id` of the [LocalRequest](#localrequest) or [LocalNotification](#localnotification) the LocalAttribute was sent with. | +| deletionInfo | [`EmittedAttributeDeletionInfo`](#emittedattributedeletioninfo) \| `undefined` | Information about whether the [PeerRelationshipAttribute](#peerrelationshipattribute) of the peer of the Relationship is to be deleted or was deleted by the peer, as well as the point in time of that deletion. | + +#### EmittedAttributeDeletionInfo + +The EmittedAttributeDeletionInfo holds information about the deletion status of the Attribute, as well as the point in time of that deletion. +If the Attribute's emitter requests the deletion of a shared Attribute via a [DeleteAttributeRequestItem](#deleteattributerequestitem) from the recipient, the emitted Attribute will get `"DeletionRequestSent"` as `deletionStatus` and the time of sending the Request as `deletionDate`. +If the recipient rejects the DeleteAttributeRequestItem, the emitted Attribute will get `"DeletionRequestRejected"` as `deletionStatus` and the time of receiving the [RejectResponseItem](#rejectresponseitem) as `deletionDate`. +If the recipient [accepts](#acceptdeleteattributerequestitemparameters), however, the `deletionStatus` of the emitter's Attribute will change to `"ToBeDeletedByRecipient"` and the `deletionDate` will be the same as the `deletionDate` of the received [DeleteAttributeAcceptResponseItem](#deleteattributeacceptresponseitem). +Either a [ForwardedAttributeDeletedByPeerNotificationItem](#forwardedattributedeletedbypeernotificationitem) or a [PeerRelationshipAttributeDeletedByPeerNotificationItem](#peerrelationshipattributedeletedbypeernotificationitem) is sent to the emitter, once the recipient's Attribute is deleted. +Finally, the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the time of processing the [NotificationItem](#notificationitems) as `deletionDate`. + +| Name | Type | Description | +| -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| deletionStatus | `"DeletionRequestSent"` \| `"DeletionRequestRejected"` \| `"ToBeDeletedByRecipient"` \| `"DeletedByRecipient"` | The deletion status of the Attribute. | +| deletionDate | `string` | The point in time
{::nomarkdown}{:/} | + +### PeerRelationshipAttribute + +[RelationshipAttributes](#relationshipattribute) always exist in the context of a [Relationship](#relationship). For this reason, it is not possible for an Identity to have an unshared RelationshipAttribute. -The [creation of a RelationshipAttribute]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-a-relationshipattribute) corresponds to the creation of one LocalAttribute for its `owner` and one LocalAttribute for the peer with whom the `owner` has established the Relationship in whose context the RelationshipAttribute is to exist. - -- We refer to the LocalAttribute of the `owner` as an **own shared RelationshipAttribute**. -- The peer’s LocalAttribute is referred to as a **peer shared RelationshipAttribute**. - -If a RelationshipAttribute is forwarded to a peer which is not involved in the Relationship in which the RelationshipAttribute exists, this will result in the creation of a pair of ThirdPartyRelationshipAttributes. -RelationshipAttributes can only be shared with third parties if their `confidentiality` is not set to `"private"`. - -- For the Identity which is in the Relationship in whose context the forwarded RelationshipAttribute exists, a LocalAttribute is created, whose `shareInfo.sourceAttribute` holds the `id` of the source RelationshipAttribute. It is referred to as an **emitted ThirdPartyRelationshipAttribute**. The property `shareInfo.thirdPartyAddress` stores the `address` of the peer to which the Relationship exists, in whose context the source RelationshipAttribute was created. -- For the Identity which received the forwarded RelationshipAttribute, a so-called **received ThirdPartyRelationshipAttribute** is created. It is a LocalAttribute whose property `shareInfo.thirdPartyAddress` is set equally to the one of the corresponding emitted ThirdPartyRelationshipAttribute. However, the property `shareInfo.sourceAttribute` is undefined, since the Identity doesn't have the source RelationshipAttribute. - -In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.md %}) more details on the terminology related to LocalAttributes can be found. - -| Name | Type | Description | -| ------------ | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | -| parentId | `string` \| `undefined` | If the Attribute referenced by this LocalAttribute is a component of a [complex Attribute]({% link _docs_integrate/attribute-introduction.md %}#complex-identityattributes), the `parentId` property is set to the `id` of the complex Attribute. Example: if a LocalAttribute is created with the content `StreetAddress`, for each property of the `StreetAddress` an additional LocalAttribute is created. And each of these will have `parentId` set to the `id` of the LocalAttribute for the `StreetAddress`. | -| createdAt | `string` | {% include descr_createdAt class="LocalAttribute" %} | -| content | [`IdentityAttribute`](#identityattribute) \| [`RelationshipAttribute`](#relationshipattribute) | The actual Content object this LocalAttribute defines the metadata for. | -| succeeds | `string` \| `undefined` | The `id` of a possibly existing predecessor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. The value of its `succeeds` property is then the `id` of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no predecessor, its `succeeds` property is `undefined`. | -| succeededBy | `string` \| `undefined` | The `id` of a possibly existing successor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. Its `id` is then the value of the `succeededBy` property of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no successor, its `succeededBy` property is `undefined`. | -| shareInfo | [`LocalAttributeShareInfo`](#localattributeshareinfo) \| `undefined` | Information about the peer this LocalAttribute was received from/shared with, as well as via which LocalRequest it was received/sent. If the LocalAttribute refers to a RepositoryAttribute, this property is `undefined`. | -| deletionInfo | [`LocalAttributeDeletionInfo`](#localattributedeletioninfo) \| `undefined` | Information about whether the counterpart of a shared Attribute is to be deleted or was deleted by the peer of the Relationship, as well as the point in time of that deletion. | -| isDefault | `true` \| `undefined` | States whether the LocalAttribute is the default RepositoryAttribute for its Attribute value type. If setting default RepositoryAttributes is enabled, for every IdentityAttribute value type exactly one RepositoryAttribute will have `isDefault` set, given that at least one RepositoryAttribute of that value type exists. This property is only used for the UI of the App, e.g. to mark the Attribute that should be displayed firstly if multiple Attributes of the same value type exist. Thus, for a Connector it will always be `undefined`. | -| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | - -### LocalAttributeShareInfo - -The LocalAttributeShareInfo helps to keep track of how the LocalAttribute was received/sent, from whom it was received/who sent it, as well as which LocalAttribute it was copied from. For example, this enables us to track back who we shared a certain IdentityAttribute with, so we are able to notify each of those peers when changing it. The Attribute can be either transmitted via Request or Notification. Hence, only one of `requestReference` and `notificationReference` can be set. - -| Name | Type | Description | -| --------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| peer | `string` | The `address` of the [Identity](#identity) the LocalAttribute was received from/shared with. | -| requestReference | `string` \| `undefined` | The `id` of the [LocalRequest](#localrequest) the LocalAttribute was received in/sent with. If this is set, `notificationReference` must be undefined. | -| notificationReference | `string` \| `undefined` | The `id` of the [LocalNotification](#localnotification) the LocalAttribute was received in/sent with. If this is set, `requestReference` must be undefined. | -| sourceAttribute | `string` \| `undefined` | If the [LocalAttribute](#localattribute) is an own shared IdentityAttribute, then this property contains the `id` of the RepositoryAttribute it was copied from. Also, if a RelationshipAttribute is shared with a third party, i.e. in the context of a Relationship that is different to the one the RelationshipAttribute was initially created in, this ThirdPartyRelationshipAttribute will link to the source RelationshipAttribute. Note that `sourceAttribute` is only defined for the peer who also has the Attribute this property links to. Regarding IdentityAttributes this is the owner. For ThirdPartyRelationshipAttributes it is the Identity who is in the Relationship the source RelationshipAttribute is copied from and who emitted the ThirdPartyRelationshipAttribute to the peer. | -| thirdPartyAddress | `string` \| `undefined` | If the [LocalAttribute](#localattribute) is a ThirdPartyRelationshipAttribute, this property will contain the `address` of the [Identity](#identity) with whom the emitter has the Relationship in which context the source RelationshipAttribute exists. | - -### LocalAttributeDeletionInfo - -The LocalAttributeDeletionInfo holds information about the deletion status of the counterpart of a shared Attribute, as well as the point in time of that deletion. -If the Attribute's `owner` requests the deletion of a shared Attribute via a [DeleteAttributeRequestItem](#deleteattributerequestitem) from the peer, their own shared Attribute will get `"DeletionRequestSent"` as `deletionStatus` and the time of sending the Request as `deletionDate`. -Should the peer reject the DeleteAttributeRequestItem, the own shared Attribute of the `owner` is given `"DeletionRequestRejected"` as `deletionStatus`. -The `deletionDate` then will be set to the time of receiving the [RejectResponseItem](#rejectresponseitem). -If they accept, however, using the [AcceptDeleteAttributeRequestItemParameters](#acceptdeleteattributerequestitemparameters), the `deletionStatus` of the peer shared Attribute of the peer will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the peer sent in their Response. -Accordingly, the `deletionStatus` of the own shared Attribute of the owner will move to `"ToBeDeletedByPeer"` with the same `deletionDate`. -Once the peer shared Attribute is deleted by the peer, a [PeerSharedAttributeDeletedByPeerNotificationItem](#peersharedattributedeletedbypeernotificationitem) is sent to the owner, where the `deletionStatus` of the own shared Attribute is set to `"DeletedByPeer"` with the current time stamp as `deletionDate`. -Likewise, if the owner deletes their own shared Attribute, before the peer deleted their corresponding peer shared Attribute, an [OwnSharedAttributeDeletedByOwnerNotificationItem](#ownsharedattributedeletedbyownernotificationitem) is sent to the peer. -If the `deletionInfo` of the peer was undefined before, the `deletionStatus` will be set to `"DeletedByOwner"` with the current time stamp as `deletionDate`. -However, if the `deletionInfo` was defined before with `"ToBeDeleted"` as `deletionStatus`, it will remain unchanged, such that the peer will be able to delete their peer shared Attribute as planned. -This will be the case, if the peer already accepted the DeleteAttributeRequestItem for this particular Attribute. - -| Name | Type | Description | -| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| deletionStatus | `"DeletionRequestSent"` \| `"DeletionRequestRejected"` \| `"ToBeDeleted"` \| `"ToBeDeletedByPeer"` \| `"DeletedByOwner"` \| `"DeletedByPeer"` | The deletion status of the peer's counterpart of the shared Attribute. For own shared Attributes it may only be set to `"DeletionRequestSent"`, `"DeletionRequestRejected"`, `"ToBeDeletedByPeer"` or `"DeletedByPeer"`, whereas for peer shared Attributes only the values `"ToBeDeleted"` and `"DeletedByOwner"` are allowed. | -| deletionDate | `string` | The point in time
{::nomarkdown}{:/} | +The [creation of a RelationshipAttribute]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-a-relationshipattribute) corresponds to the creation of an [OwnRelationshipAttribute](#ownrelationshipattribute) for its `owner` and a PeerRelationshipAttribute for the peer with whom the `owner` has established the Relationship in whose context the RelationshipAttribute is to exist. + +| Name | Type | Description | +| --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | +| content | [`RelationshipAttribute`](#relationshipattribute) | The actual Content object this LocalAttribute defines the metadata for. | +| createdAt | `string` | {% include descr_createdAt class="LocalAttribute" %} | +| succeeds | `string` \| `undefined` | The `id` of a possibly existing predecessor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. The value of its `succeeds` property is then the `id` of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no predecessor, its `succeeds` property is `undefined`. | +| succeededBy | `string` \| `undefined` | The `id` of a possibly existing successor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. Its `id` is then the value of the `succeededBy` property of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no successor, its `succeededBy` property is `undefined`. | +| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | +| peer | `string` | The `address` of the [Identity](#identity) the LocalAttribute was received from. | +| sourceReference | `string` | The `id` of the [LocalRequest](#localrequest) or [LocalNotification](#localnotification) the LocalAttribute was received in. | +| deletionInfo | [`ReceivedAttributeDeletionInfo`](#receivedattributedeletioninfo) \| `undefined` | Information about whether the PeerRelationshipAttribute is to be deleted or the OwnRelationshipAttribute is deleted by the emitter, as well as the point in time of that deletion. | + +### ThirdPartyRelationshipAttribute + +A [RelationshipAttribute](#relationshipattribute) can be forwarded to a peer which is not involved in the [Relationship](#relationship) in which the RelationshipAttribute exists if its `confidentiality` is not set to `"private"`. +For the Identity which forwards its [OwnRelationshipAttribute](#ownrelationshipattribute) or [PeerRelationshipAttribute](#peerrelationshipattribute) to a peer, [AttributeForwardingDetails](#attributeforwardingdetails) are created, with their `attributeId` property set to the `id` of the source RelationshipAttribute to represent their association. +A ThirdPartyRelationshipAttribute is created for the Identity which received the forwarded RelationshipAttribute. + +| Name | Type | Description | +| -------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | +| content | [`RelationshipAttribute`](#relationshipattribute) | The actual Content object this LocalAttribute defines the metadata for. | +| createdAt | `string` | {% include descr_createdAt class="LocalAttribute" %} | +| succeeds | `string` \| `undefined` | The `id` of a possibly existing predecessor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. The value of its `succeeds` property is then the `id` of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no predecessor, its `succeeds` property is `undefined`. | +| succeededBy | `string` \| `undefined` | The `id` of a possibly existing successor of a LocalAttribute. It is possible to update the [Attribute](#attributes) contained in the `content` property of a LocalAttribute using [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}). In this case, a new LocalAttribute, the so-called successor, is created. Its `id` is then the value of the `succeededBy` property of the old LocalAttribute, the so-called predecessor. If a LocalAttribute has no successor, its `succeededBy` property is `undefined`. | +| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | +| peer | `string` | The `address` of the [Identity](#identity) the LocalAttribute was received from. | +| sourceReference | `string` | The `id` of the [LocalRequest](#localrequest) or [LocalNotification](#localnotification) the LocalAttribute was received in. | +| initialAttributePeer | `string` | This property contains the `address` of the [Identity](#identity) with whom the emitter has the Relationship in which context the source RelationshipAttribute exists. | +| deletionInfo | [`ReceivedAttributeDeletionInfo`](#receivedattributedeletioninfo) \| `undefined` | Information about whether the ThirdPartyRelationshipAttribute is to be deleted or the source RelationshipAttribute is deleted by the emitter, as well as the point in time of that deletion. | + +## AttributeForwardingDetails + +If an Identity has shared an [OwnIdentityAttribute](#ownidentityattribute) with a peer or forwarded an [OwnRelationshipAttribute](#ownrelationshipattribute) or a [PeerRelationshipAttribute](#peerrelationshipattribute) to a peer which is not involved in the Relationship in which the RelationshipAttribute exists, AttributeForwardingDetails are created. +These help track which peer a [LocalAttribute](#localattribute) was shared with and when it was shared. +This also makes it possible to notify that peer if the LocalAttribute changes. + +| Name | Type | Description | +| --------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| attributeId | `string` | The `id` of the [LocalAttribute](#localattribute) that was shared. | +| peer | `string` | The `address` of the [Identity](#identity) the LocalAttribute was shared with. | +| sourceReference | `string` | The `id` of the [LocalRequest](#localrequest) or [LocalNotification](#localnotification) the LocalAttribute was sent with. | +| sharedAt | `string` | A timestamp that describes when the corresponding Attribute was shared. | +| deletionInfo | [`EmittedAttributeDeletionInfo`](#emittedattributedeletioninfo) \| `undefined` | Information about whether the recipient's Attribute is to be deleted or was deleted by the recipient, as well as the point in time of that deletion. | ## AttributeTagCollection @@ -516,7 +588,7 @@ For more information you should check out the section [DeleteAttributeRequestIte | Name | Type | Description | | -------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | @type | `"DeleteAttributeRequestItem"` | Specifies the type of the RequestItem for internal processing. | -| attributeId | `string` | The `id` of the own shared Attribute you wish for the peer to delete. This will match the `id` of the corresponding peer shared Attribute at the peer's side. | +| attributeId | `string` | The `id` of the emitted Attribute you wish for the peer to delete. This will match the `id` of the corresponding peer Attribute at the peer's side. | | description | `string` \| `undefined` | An optional, human readable description for the RequestItem. | | metadata | `object` \| `undefined` | The metadata property can be used to provide arbitrary JSON content by the sender of the Request. The metadata is not processed by enmeshed. It is a great way to use your own process descriptors at the time of sending the Request which helps you identify the correct internal process at the time of receiving the Response. | | mustBeAccepted | `boolean` | The mandatory `mustBeAccepted` property is used to differentiate between required and optional RequestItems within the Request.
{::nomarkdown}{:/} | @@ -696,9 +768,10 @@ An AcceptResponseItem can be received as answer to an [AuthenticationRequestItem ##### AttributeAlreadySharedAcceptResponseItem An AttributeAlreadySharedAcceptResponseItem can be received as answer to a [ReadAttributeRequestItem]({% link _docs_integrate/request-and-response-introduction.md %}#readattributerequestitem) or [ProposeAttributeRequestItem]({% link _docs_integrate/request-and-response-introduction.md %}#proposeattributerequestitem). -It is generated if the Recipient of the RequestItem responds to it with an existing Attribute they already shared with the Sender in case the own shared [LocalAttribute](#localattribute) doesn't have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. -Instead of creating a further own shared/peer shared Attribute pair, the `id` of the already existing shared LocalAttributes is returned. -Note that the `id` of the own/peer shared Attribute of the Sender matches the `id` of the corresponding peer/own shared Attribute of the Recipient. +It is generated if the Recipient of the RequestItem responds to it with an existing Attribute they already shared with the Sender in case the corresponding AttributeForwardingDetails of the own [LocalAttribute](#localattribute) don't have `"DeletedByRecipient"` as `deletionInfo.deletionStatus`. +If `"ToBeDeletedByRecipient"` was previously the `deletionInfo.deletionStatus`, the `deletionInfo` will be reset to undefined. +Instead of creating further AttributeForwardingDetails, the `id` of the already existing shared LocalAttributes is returned. +Note that the `id` of the own/peer Attribute of the Sender matches the `id` of the corresponding peer/own Attribute of the Recipient. | Name | Type | Description | | ----------- | -------------------------------------------- | -------------------------------------------------------- | @@ -709,8 +782,8 @@ Note that the `id` of the own/peer shared Attribute of the Sender matches the `i ##### AttributeSuccessionAcceptResponseItem An AttributeSuccessionAcceptResponseItem can be received as answer to a [ReadAttributeRequestItem]({% link _docs_integrate/request-and-response-introduction.md %}#readattributerequestitem) or [ProposeAttributeRequestItem]({% link _docs_integrate/request-and-response-introduction.md %}#proposeattributerequestitem). -It is generated if the Recipient of the RequestItem responds to it with an existing Attribute that is a successor of an Attribute they already shared with the Sender in case the own shared [LocalAttribute](#localattribute) doesn't have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. -Instead of creating an independent own shared/peer shared Attribute pair, internally an [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}) is performed. +It is generated if the Recipient of the RequestItem responds to it with an existing Attribute that is a successor of an Attribute they already shared with the Sender in case the corresponding AttributeForwardingDetails of the own [LocalAttribute](#localattribute) don't have `"DeletedByRecipient"` as `deletionInfo.deletionStatus`. +Instead of creating an independent peer Attribute, internally an [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}) is performed. The `id` of the already existing shared LocalAttribute predecessor is returned, as well as the `id` and `content` of the newly created successor. Receiving an AttributeSuccessionAcceptResponseItem, the respective shared LocalAttribute of the Sender of the Request is automatically succeeded accordingly. @@ -837,47 +910,47 @@ In the example of Attribute succession, the peer can not decide to accept or rej NotificationItems are sent inside a Notification and specify which processes should be triggered when receiving the Notification. -#### OwnSharedAttributeDeletedByOwnerNotificationItem +#### ForwardedAttributeDeletedByPeerNotificationItem -If a peer has shared one of their Attributes with you and deletes their own shared Attribute, an OwnSharedAttributeDeletedByOwnerNotificationItem will be sent to you. -Internally, for your corresponding peer shared Attribute the `deletionInfo.deletionStatus` will be set to `"DeletedByOwner"` if it wasn't set to `"ToBeDeleted` before. +If an Identity has shared an [OwnIdentityAttribute](#ownidentityattribute) with a peer or forwarded an [OwnRelationshipAttribute](#ownrelationshipattribute) or a [PeerRelationshipAttribute](#peerrelationshipattribute) to a peer which is not involved in the [Relationship](#relationship) in which the [RelationshipAttribute](#relationshipattribute) exists, a ForwardedAttributeDeletedByPeerNotificationItem will be sent to the Identity if the peer deletes their forwarded Attribute. +Internally, for the corresponding [AttributeForwardingDetails](#attributeforwardingdetails) of the Identity's Attribute, the `deletionInfo.deletionStatus` will be set to `"DeletedByRecipient"`. -| Name | Type | Description | -| ----------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| @type | `"OwnSharedAttributeDeletedByOwnerNotificationItem"` | | -| attributeId | `string` | The `id` of the own shared Attribute that was deleted by the owner. It matches the `id` of the corresponding peer shared Attributes of the recipient. | +| Name | Type | Description | +| ----------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| @type | `"ForwardedAttributeDeletedByPeerNotificationItem"` | | +| attributeId | `string` | The `id` of the forwarded Attribute that was deleted by the peer. It matches the `id` of the corresponding Attribute of the Identity. | -#### PeerSharedAttributeDeletedByPeerNotificationItem +#### OwnAttributeDeletedByOwnerNotificationItem -If you have shared one of your Attributes with a peer and they delete their peer shared Attribute, a PeerSharedAttributeDeletedByPeerNotificationItem will be sent to you. -Internally, for your corresponding own shared Attribute the `deletionInfo.deletionStatus` will be set to `"DeletedByPeer"` . +If an Identity has shared an [OwnIdentityAttribute](#ownidentityattribute) or an [OwnRelationshipAttribute](#ownrelationshipattribute) with a peer and deletes it, an OwnAttributeDeletedByOwnerNotificationItem will be sent to the peer. +Internally, for the corresponding Attribute of the peer, the `deletionInfo.deletionStatus` will be set to `"DeletedByEmitter"` if it wasn't set to `"ToBeDeleted` before. -| Name | Type | Description | -| ----------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| @type | `"PeerSharedAttributeDeletedByPeerNotificationItem"` | | -| attributeId | `string` | The `id` of the peer shared Attribute that was deleted by the peer. It matches the `id` of the corresponding own shared Attributes of the recipient. | +| Name | Type | Description | +| ----------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| @type | `"OwnAttributeDeletedByOwnerNotificationItem"` | | +| attributeId | `string` | The `id` of the own Attribute that was deleted by the owner. It matches the `id` of the corresponding Attribute of the peer. | -#### PeerSharedAttributeSucceededNotificationItem +#### PeerRelationshipAttributeDeletedByPeerNotificationItem -A PeerSharedAttributeSucceededNotificationItem will be sent, if an Attribute, a peer shared with you, was succeeded by them and they choose to notify you about it. -Internally, the succeeded version will then be created at your side as successor for your previously received Attribute. +If an Identity has shared a [PeerRelationshipAttribute](#peerrelationshipattribute) with a peer and deletes it, a PeerRelationshipAttributeDeletedByPeerNotificationItem will be sent to the peer. +Internally, for the corresponding [OwnRelationshipAttribute](#ownrelationshipattribute) or [ThirdPartyRelationshipAttribute](#thirdpartyrelationshipattribute) of the peer, the `deletionInfo.deletionStatus` will be set to `"DeletedByRecipient"` or `"DeletedByEmitter"`, respectively. -| Name | Type | Description | -| ---------------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------- | -| @type | `"PeerSharedAttributeSucceededNotificationItem"` | | -| predecessorId | `string` | The `id` of the LocalAttribute that was succeeded | -| successorId | `string` | The `id` of the LocalAttribute it was succeeded by | -| successorContent | [`IdentityAttribute`](#identityattribute) \| [`RelationshipAttribute`](#relationshipattribute) | The updated `content` of the LocalAttribute | +| Name | Type | Description | +| ----------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| @type | `"PeerRelationshipAttributeDeletedByPeerNotificationItem"` | | +| attributeId | `string` | The `id` of the PeerRelationshipAttribute that was deleted by the Identity. It matches the `id` of the OwnRelationshipAttribute or ThirdPartyRelationshipAttribute of the peer. | -#### ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem +#### PeerAttributeSucceededNotificationItem -If your peer deletes an [emitted or received ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes), a ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem will be sent to you. -Internally, for your corresponding ThirdPartyRelationshipAttribute the `deletionInfo.deletionStatus` will be set to `"DeletedByPeer"`. +A PeerAttributeSucceededNotificationItem will be sent if an Attribute, an Identity has shared with a peer, was succeeded by the Identity and they choose to notify the peer about it. +Internally, the succeeded version will then be created at the peer's side as successor for the previously received Attribute. -| Name | Type | Description | -| ----------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| @type | `"ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem"` | | -| attributeId | `string` | The `id` of the ThirdPartyRelationshipAttribute that was deleted by the peer. The `id` of the ThirdPartyRelationshipAttribute of the sender of the NotificationItem matches the one of the recipient. | +| Name | Type | Description | +| ---------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| @type | `"PeerAttributeSucceededNotificationItem"` | | +| predecessorId | `string` | The `id` of the [LocalAttribute](#localattribute) that was succeeded. | +| successorId | `string` | The `id` of the [LocalAttribute](#localattribute) it was succeeded by. | +| successorContent | [`IdentityAttribute`](#identityattribute) \| [`RelationshipAttribute`](#relationshipattribute) | The updated `content` of the [LocalAttribute](#localattribute). | ## Attributes diff --git a/_docs_integrate/delete-attributes.md b/_docs_integrate/delete-attributes.md index c7a5486d6..1b03345d8 100644 --- a/_docs_integrate/delete-attributes.md +++ b/_docs_integrate/delete-attributes.md @@ -69,7 +69,7 @@ Before sending the Request, we recommend to [validate its content]({% link _docs Next, send the Request to the peer. You can either do so by [Message]({% link _docs_integrate/data-model-overview.md %}#message) or by a [RelationshipTemplate]({% link _docs_integrate/data-model-overview.md %}#relationshiptemplate), using the `onExistingRelationship` property of a [RelationshipTemplateContent]({% link _docs_integrate/data-model-overview.md %}#relationshiptemplatecontent). For a detailed explanation check out our guides on how to send [Requests via Messages]({% link _docs_integrate/requests-via-messages.md %}) and [Requests via RelationshipTemplates]({% link _docs_integrate/requests-via-relationshiptemplates.md %}). -Once the Request is sent, the according own shared Attribute of the Sender gets a [LocalAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#localattributedeletioninfo). +Once the Request is sent, the according own shared Attribute of the Sender gets an [EmittedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#emittedattributedeletioninfo). There, `"DeletionRequestSent"` is set as `deletionStatus` and the time of sending the Request is stored as `deletionDate`. When the peer receives the Request, they can accept or reject it. @@ -91,7 +91,7 @@ In the given example, the payload would look like the following: Now, the [enmeshed Runtime]({% link _docs_explore/61-runtime.md %}) sets the `deletionInfo` of the corresponding peer shared Attribute of the peer with `deletionStatus` `"ToBeDeleted"` and the specified `deletionDate`. The same is done for all predecessors of the peer shared Attribute. Then, the appropriate [DeleteAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#deleteattributeacceptresponseitem) is generated and sent back in the [Reponse]({% link _docs_integrate/data-model-overview.md %}#response) to the Sender of the Request. -There, the `deletionInfo` of the corresponding own shared Attribute and its predecessors is set with `deletionStatus` `"ToBeDeletedByPeer"` and the `deletionDate` received in the Response. +There, the `deletionInfo` of the corresponding own shared Attribute and its predecessors is set with `deletionStatus` `"ToBeDeletedByRecipient"` and the `deletionDate` received in the Response.
@@ -108,8 +108,8 @@ This can either be triggered if the `deletionInfo.deletionDate` is reached, in c To [delete a peer shared Attribute]({% link _docs_use-cases/use-case-consumption-delete-a-peer-shared-attribute-and-notify-peer.md %}), only its `attributeId` must be specified. Internally, not just the given peer shared Attribute is deleted, but also all its predecessors, in case there were any. Moreover, if the peer shared Attribute had a successor, its `succeeds` property will be set to undefined, as the corresponding predecessor no longer exists. -Then, a [Notification]({% link _docs_integrate/data-model-overview.md %}#notification) with a [PeerSharedAttributeDeletedByPeerNotificationItem]({% link _docs_integrate/data-model-overview.md %}#peersharedattributedeletedbypeernotificationitem) is generated and sent to the owner of the peer shared Attribute, informing them that you deleted the Attribute they shared with you. -Consequently, the `deletionInfo` of their corresponding own shared Attribute and of all potential predecessors is updated with `deletionStatus` `"DeletedByPeer"` and the time of receiving the Notification as `deletionDate`. +Then, a [Notification]({% link _docs_integrate/data-model-overview.md %}#notification) with a [ForwardedAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) or a [PeerRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#peerrelationshipattributedeletedbypeernotificationitem) is generated and sent to the owner of the peer shared Attribute, informing them that you deleted the Attribute they shared with you. +Consequently, the `deletionInfo` of their corresponding own shared Attribute and of all potential predecessors is updated with `deletionStatus` `"DeletedByRecipient"` and the time of receiving the Notification as `deletionDate`. In case the owner already [deleted their own shared Attribute](#delete-own-shared-attributes), nothing happens. Please further note that the Notification is queued if the [Relationship is currently terminated]({% link _docs_integrate/terminate-relationships.md %}#terminate-an-active-relationship) but not yet [decomposed]({% link _docs_integrate/terminate-relationships.md %}#decompose-a-relationship). It can then only be received and processed if the [Relationship is reactivated]({% link _docs_integrate/terminate-relationships.md %}#reactivate-a-terminated-relationship). @@ -119,7 +119,7 @@ It can then only be received and processed if the peer [cancels its deletion]({%
If you want to [delete a ThirdPartyRelationshipAttribute]({% link _docs_use-cases/use-case-consumption-delete-a-thirdpartyrelationshipattribute-and-notify-peer.md %}), the process will work analogously. -In this case, a [ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem]({% link _docs_integrate/data-model-overview.md %}#thirdpartyrelationshipattributedeletedbypeernotificationitem) will be sent. +In this case, a [ForwardedAttributeDeletedByPeerNotificationItem]({% link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) will be sent. {: .notice--info} ## Delete own shared Attributes @@ -132,10 +132,10 @@ Thus, we recommend to [request the deletion of own Attributes from the peer](#re If you decide to [delete an own shared Attribute]({% link _docs_use-cases/use-case-consumption-delete-an-own-shared-attribute-and-notify-peer.md %}), you must specifiy its `attributeId`. Then, in addition to the own shared Attribute itself, also all its predecessors will be deleted, given there were any. Moreover, if the own shared Attribute had a successor, its `succeeds` property will be set to undefined, as the corresponding predecessor no longer exists. -Then, a Notification with an [OwnSharedAttributeDeletedByOwnerNotificationItem]({% link _docs_integrate/data-model-overview.md %}#ownsharedattributedeletedbyownernotificationitem) is generated and sent to the peer you shared the Attribute with, informing them that you deleted that own shared Attribute. +Then, a Notification with an [OwnAttributeDeletedByOwnerNotificationItem]({% link _docs_integrate/data-model-overview.md %}#ownattributedeletedbyownernotificationitem) is generated and sent to the peer you shared the Attribute with, informing them that you deleted that own shared Attribute. If they already deleted their corresponding peer shared Attribute or marked it for deletion, nothing will change. However, if the `deletionInfo` of their peer shared Attribute was undefined before, since you didn't send a Request for Attribute deletion or the Request was rejected, a `deletionInfo` will be set. -Its `deletionStatus` will be set to `"DeletedByOwner"` and the `deletionDate` will be the time of receiving the Notification. +Its `deletionStatus` will be set to `"DeletedByEmitter"` and the `deletionDate` will be the time of receiving the Notification. Please note that the Notification is queued if the [Relationship is currently terminated]({% link _docs_integrate/terminate-relationships.md %}#terminate-an-active-relationship) but not yet [decomposed]({% link _docs_integrate/terminate-relationships.md %}#decompose-a-relationship). It can then only be received and processed if the [Relationship is reactivated]({% link _docs_integrate/terminate-relationships.md %}#reactivate-a-terminated-relationship). Furthermore, the Notification is also queued if the [peer is currently in deletion]({% link _docs_integrate/delete-identities.md %}#effects-of-identity-deletion-on-relationships) but not yet deleted. diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index edac18dcc..609db8569 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -68,6 +68,25 @@ The step-by-step instructions can be consulted to start the migration to version - The properties `approvedAt` and `approvedByDevice` of the [IdentityDeletionProcess]({% link _docs_integrate/data-model-overview.md %}#identitydeletionprocess) have been removed. Furthermore, renaming `"Approved"` to `"Active"` resulted in a change of an IdentityDeletionProcess `status`. - All data structures around the Attribute listener feature, including the LocalAttributeListener, the RegisterAttributeListenerRequestItem, and the RegisterAttributeListenerAcceptResponseItem, were removed. +- With the new [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) concept, an Attribute copy is no longer created when an Attribute is [shared]({% link _docs_integrate/share-attributes-with-peer.md %}). + Furthermore, LocalAttribute subtypes have been introduced to help distinguish between different kinds of LocalAttributes. + - RepositoryAttributes were renamed to [OwnIdentityAttributes]({% link _docs_integrate/data-model-overview.md %}#ownidentityattribute). + There are no own shared IdentityAttributes anymore. + Instead, sharing an OwnIdentityAttribute leads to the creation of [AttributeForwardingDetails]({% link _docs_integrate/data-model-overview.md %}#attributeforwardingdetails). + - The peer shared IdentityAttribute, the own shared RelationshipAttribute and the peer shared RelationshipAttribute have been replaced by the LocalAttribute subtypes [PeerIdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#peeridentityattribute), [OwnRelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#ownrelationshipattribute) and [PeerRelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#peerrelationshipattribute), respectively. + - There are no emitted ThirdPartyRelationshipAttributes anymore. + Instead, forwarding a [RelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#relationshipattribute) to a peer, which is not involved in the [Relationship]({% link _docs_integrate/data-model-overview.md %}#relationship) in which the RelationshipAttribute exists, leads to the creation of [AttributeForwardingDetails]({% link _docs_integrate/data-model-overview.md %}#attributeforwardingdetails). + For this reason, the received ThirdPartyRelationshipAttribute is called [ThirdPartyRelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#thirdpartyrelationshipattribute) from now on. + - The `shareInfo` property of the [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) and the corresponding LocalAttributeShareInfo data object were removed. + To track with which peer an Attribute was [shared]({% link _docs_integrate/share-attributes-with-peer.md %}), [AttributeForwardingDetails]({% link _docs_integrate/data-model-overview.md %}#attributeforwardingdetails) are now used and, in the case of [PeerIdentityAttributes]({% link _docs_integrate/data-model-overview.md %}#peeridentityattribute), [OwnRelationshipAttributes]({% link _docs_integrate/data-model-overview.md %}#ownrelationshipattribute), [PeerRelationshipAttributes]({% link _docs_integrate/data-model-overview.md %}#peerrelationshipattribute), and [ThirdPartyRelationshipAttributes]({% link _docs_integrate/data-model-overview.md %}#thirdpartyrelationshipattribute), the properties `peer`, `sourceReference`, and `deletionInfo` are utilized. + For the ThirdPartyRelationshipAttributes, the `initialAttributePeer` property is additionally needed. + - Some [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) subtypes may have a `deletionInfo` set, which has either [EmittedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#emittedattributedeletioninfo) or [ReceivedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#receivedattributedeletioninfo) as its type. + The LocalAttributeDeletionInfo data object has been removed. + - The introduction of the [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) subtypes has led to a renaming of the [NotificationItems]({% link _docs_integrate/data-model-overview.md %}#notificationitems). + The [PeerAttributeSucceededNotificationItem]({% link _docs_integrate/data-model-overview.md %}#peerattributesucceedednotificationitem) replaces the PeerSharedAttributeSucceededNotificationItem. + The OwnSharedAttributeDeletedByOwnerNotificationItem, the PeerSharedAttributeDeletedByPeerNotificationItem and the ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem have been replaced by the [OwnAttributeDeletedByOwnerNotificationItem]({% link _docs_integrate/data-model-overview.md %}#ownattributedeletedbyownernotificationitem), the [PeerRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#peerrelationshipattributedeletedbypeernotificationitem) and the [ForwardedAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem). + - The `parentId` property of the [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) was removed as there is no child Attribute feature anymore. + Sharing individual components of a [complex IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#complex-identityattributes) will be possible again in future releases. ### Changed Behavior of Known Features @@ -109,7 +128,6 @@ An overview of the [Error codes]({% link _docs_integrate/error-codes.md %}) that - The `error.runtime.attributes.isNotRepositoryAttribute` error code has been renamed to `error.runtime.attributes.isNotOwnIdentityAttribute` as OwnIdentityAttributes now present those [LocalAttributes]({% link _docs_integrate/data-model-overview.md %}#localattribute) that were previously known as RepositoryAttributes. Similarly, other error codes have been renamed. - The `error.consumption.attributes.cannotSucceedChildOfComplexAttribute` error code has been removed as there is no child Attribute feature anymore. - Sharing individual components of a [complex IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#complex-identityattributes) will be possible again in future releases. - By renaming an [IdentityDeletionProcess]({% link _docs_integrate/data-model-overview.md %}#identitydeletionprocess) `status` from `"Approved"` to `"Active"`, the error code `error.runtime.identityDeletionProcess.noApprovedIdentityDeletionProcess` has been replaced by `error.runtime.identityDeletionProcess.noActiveIdentityDeletionProcess`. ## Runtime-Specific Breaking Changes diff --git a/_docs_integrate/propose-attributes-to-peer.md b/_docs_integrate/propose-attributes-to-peer.md index c74ac79c3..c6108ad9e 100644 --- a/_docs_integrate/propose-attributes-to-peer.md +++ b/_docs_integrate/propose-attributes-to-peer.md @@ -157,17 +157,17 @@ As it makes no sense for the Sender to request a RelationshipAttribute from the Otherwise, the [error code]({% link _docs_integrate/error-codes.md %}) `error.consumption.requests.invalidAcceptParameters` arises. Furthermore, an error with the code `error.consumption.requests.attributeQueryMismatch` will be thrown if the Attribute provided by the Recipient does not match the [AttributeQuery]({% link _docs_integrate/data-model-overview.md %}#attributequeries) specified in the `query` property of the ProposeAttributeRequestItem. {: .notice--info} -Accepting a ProposeAttributeRequestItem with a new Attribute or an existing, that isn’t shared with the Sender already neither itself nor any of its predecessing versions, leads to the creation of a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) with a [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo) contained within its `shareInfo` property. +Accepting a ProposeAttributeRequestItem with a new Attribute or an existing, that isn’t shared with the Sender already neither itself nor any of its predecessing versions, leads to the creation of a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute). The `content` of the LocalAttribute is the Attribute that the Recipient wants to send back to the Sender, that is, the proposed Attribute itself or a corrected version of it. Depending on whether the Recipient sends back an IdentityAttribute or a RelationshipAttribute, it is referred to as either an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or an [own shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes). An appropriate AcceptResponseItem of type [ProposeAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#proposeattributeacceptresponseitem) is generated, which incorporates the `id` of the LocalAttribute in its `attributeId` property and the Attribute that the Recipient wants to send back to the Sender in its `attribute` property. If a new IdentityAttribute is to be created and sent back to the Sender, a [RepositoryAttribute]({% link _docs_integrate/attribute-introduction.md %}#repositoryattributes) will additionally be created for the Recipient beforehand. -If the ProposeAttributeRequestItem is accepted with an existing Attribute that the Recipient already shared with the Sender and the corresponding [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) does not have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`, an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) will be generated. +If the ProposeAttributeRequestItem is accepted with an existing Attribute that the Recipient already shared with the Sender and the corresponding [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) does not have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`, an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) will be generated. Instead of creating a further pair consisting of an [own shared and a peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes), the `id` of the already existing [LocalAttributes]({% link _docs_integrate/data-model-overview.md %}#localattribute) is returned. Note that the `id` of the LocalAttribute of the Sender matches the `id` of the corresponding LocalAttribute of the Recipient. -Lastly, if the ProposeAttributeRequestItem is accepted with an existing Attribute of which the Recipient already shared a predecessor with the Sender, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be generated, given that it is an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) that does not have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. +Lastly, if the ProposeAttributeRequestItem is accepted with an existing Attribute of which the Recipient already shared a predecessor with the Sender, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be generated, given that it is an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) that does not have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. Instead of creating an independent pair consisting of an [own shared and a peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes), internally an [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}) is performed. The `id` of the already existing [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) predecessor is returned, as well as the `id` and `content` of the newly created LocalAttribute successor. @@ -308,7 +308,7 @@ To view the Response to the Request, proceed as described in the [Query outgoing The Integrator of the Sender can now get the Response of the Recipient from the `response.content` property of the result. In the `items` property of the [Response]({% link _docs_integrate/data-model-overview.md %}#response) is a [ProposeAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#proposeattributeacceptresponseitem), an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) or an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) for each accepted and a [RejectResponseItem]({% link _docs_integrate/data-model-overview.md %}#rejectresponseitem) for each rejected ProposeAttributeRequestItem included. -Internally, a returned `attribute` that can be read from a ProposeAttributeAcceptResponseItem is used to create an appropriate LocalAttribute with a LocalAttributeShareInfo of the Sender. +Internally, a returned `attribute` that can be read from a ProposeAttributeAcceptResponseItem is used to create an appropriate LocalAttribute of the Sender. Depending on whether the Recipient has sent back an IdentityAttribute or a RelationshipAttribute to the Sender, it is referred to as either a [peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or a [peer shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes). The `content` of the LocalAttribute is the Attribute that the Recipient has sent back to the Sender. Depending on whether the Recipient has confirmed the fittingness of the Attribute proposed by the Sender, it is therefore the proposed Attribute itself or a corrected version of it. diff --git a/_docs_integrate/read-attributes-from-peer.md b/_docs_integrate/read-attributes-from-peer.md index c47a64437..13a37936b 100644 --- a/_docs_integrate/read-attributes-from-peer.md +++ b/_docs_integrate/read-attributes-from-peer.md @@ -166,16 +166,16 @@ If the Recipient agrees to share a requested Attribute with the Sender, it can a Otherwise, the [error code]({% link _docs_integrate/error-codes.md %}) `error.consumption.requests.invalidAcceptParameters` arises. Furthermore, an error with the code `error.consumption.requests.attributeQueryMismatch` will be thrown if the Attribute provided by the Recipient does not match the [AttributeQuery]({% link _docs_integrate/data-model-overview.md %}#attributequeries) specified in the `query` property of the ReadAttributeRequestItem. {: .notice--info} -Accepting a ReadAttributeRequestItem with a new Attribute or an existing, that isn't shared with the Sender already neither itself nor any of its predecessing versions, leads to the creation of a LocalAttribute with a [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo) contained within its `shareInfo` property, whose underlying `content` is given by the shared Attribute. +Accepting a ReadAttributeRequestItem with a new Attribute or an existing, that isn't shared with the Sender already neither itself nor any of its predecessing versions, leads to the creation of a LocalAttribute, whose underlying `content` is given by the shared Attribute. Depending on whether the Recipient sends back an IdentityAttribute or a RelationshipAttribute, the ownership, and, in the case of RelationshipAttributes, from which Relationship context the RelationshipAttribute originates, it is referred to as either an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes), an [own shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes), a [peer shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes) or an [emitted ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes). An appropriate AcceptResponseItem of type [ReadAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#readattributeacceptresponseitem) is generated, which incorporates the `id` of the LocalAttribute in its `attributeId` property and the shared Attribute in its `attribute` property. If a new IdentityAttribute is to be shared, a [RepositoryAttribute]({% link _docs_integrate/attribute-introduction.md %}#repositoryattributes) will additionally be created for the Recipient beforehand. -If the ReadAttributeRequestItem is accepted with an existing Attribute that the Recipient already shared with the Sender and the corresponding [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or [emitted ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes) does not have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`, an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) will be generated. +If the ReadAttributeRequestItem is accepted with an existing Attribute that the Recipient already shared with the Sender and the corresponding [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or [emitted ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes) does not have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`, an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) will be generated. Instead of creating a further pair consisting of an [own shared and a peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or of an [emitted and a received ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes), the `id` of the already existing [LocalAttributes]({% link _docs_integrate/data-model-overview.md %}#localattribute), which represent the sharing of the Attribute, is returned. Note that the `id` of the LocalAttribute of the Sender matches the `id` of the corresponding LocalAttribute of the Recipient. -Lastly, if the ReadAttributeRequestItem is accepted with an existing Attribute of which the Recipient already shared a predecessor with the Sender, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be generated, given that it is an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or an [emitted ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes) that does not have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. +Lastly, if the ReadAttributeRequestItem is accepted with an existing Attribute of which the Recipient already shared a predecessor with the Sender, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be generated, given that it is an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or an [emitted ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes) that does not have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. Instead of creating an independent pair consisting of an [own shared and a peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or of an [emitted and a received ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes), internally an [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}) is performed. The `id` of the already existing [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) predecessor is returned, as well as the `id` and `content` of the newly created LocalAttribute successor. @@ -273,7 +273,7 @@ To view the Response to the Request, proceed as described in the [Query outgoing The Integrator of the Sender can now get the Response of the Recipient from the `response.content` property of the result. In the `items` property of the [Response]({% link _docs_integrate/data-model-overview.md %}#response) is a [ReadAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#readattributeacceptresponseitem), an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) or an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) for each accepted and a [RejectResponseItem]({% link _docs_integrate/data-model-overview.md %}#rejectresponseitem) for each rejected ReadAttributeRequestItem included. -A shared `attribute` that can be read from a ReadAttributeAcceptResponseItem is used to create an appropriate LocalAttribute with a LocalAttributeShareInfo of the Sender. +A shared `attribute` that can be read from a ReadAttributeAcceptResponseItem is used to create an appropriate LocalAttribute of the Sender. Depending on whether the Recipient has sent back an IdentityAttribute or a RelationshipAttribute to the Sender, the ownership, and, in the case of RelationshipAttributes, from which Relationship context the RelationshipAttribute originates, it is referred to as either a [peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes), an [own shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes), a [peer shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes) or a [received ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes). When the Sender of the Request receives an AttributeSuccessionAcceptResponseItem, the according [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}) is automatically performed for them. diff --git a/_docs_integrate/request-and-response-introduction.md b/_docs_integrate/request-and-response-introduction.md index ad8ce4c54..dec7f5929 100644 --- a/_docs_integrate/request-and-response-introduction.md +++ b/_docs_integrate/request-and-response-introduction.md @@ -139,8 +139,8 @@ Depending on whether the ProposeAttributeRequestItem is to be accepted or reject After the Recipient has responded to the ProposeAttributeRequestItem, a suitable [ResponseItem]({% link _docs_integrate/data-model-overview.md %}#responseitems) is generated and transferred to the Sender of the Request: - After accepting this RequestItem with a new Attribute or an existing one that isn't shared with the peer already neither itself nor any of its predecessing versions, a [ProposeAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#proposeattributeacceptresponseitem) will be transferred. -- After accepting this RequestItem with an existing Attribute that was shared with the peer already, an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) will be transferred, given that the own shared LocalAttribute doesn't have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. -- After accepting this RequestItem with an existing Attribute of which a predecessor was shared with the peer already, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be transferred, given that the own shared predecessor doesn't have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. +- After accepting this RequestItem with an existing Attribute that was shared with the peer already, an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) will be transferred, given that the own shared LocalAttribute doesn't have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. +- After accepting this RequestItem with an existing Attribute of which a predecessor was shared with the peer already, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be transferred, given that the own shared predecessor doesn't have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. - After rejecting this RequestItem, a [RejectResponseItem]({% link _docs_integrate/data-model-overview.md %}#rejectresponseitem) will be transferred. - In case of an error, an [ErrorResponseItem]({% link _docs_integrate/data-model-overview.md %}#errorresponseitem) will be transferred. @@ -157,7 +157,7 @@ After the Recipient has responded to the ReadAttributeRequestItem, a suitable [R - After accepting this RequestItem with a new Attribute or an existing one that isn't shared with the peer already neither itself nor any of its predecessing versions, a [ReadAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#readattributeacceptresponseitem) will be transferred. - After accepting this RequestItem with an existing Attribute that was shared with the peer already, an [AttributeAlreadySharedAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributealreadysharedacceptresponseitem) will be transferred, given that the own shared LocalAttribute doesn't have `DeletedByPeer` as `deletionInfo.deletionStatus`. -- After accepting this RequestItem with an existing Attribute of which a predecessor was shared with the peer already, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be transferred, given that the own shared predecessor doesn't have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. +- After accepting this RequestItem with an existing Attribute of which a predecessor was shared with the peer already, an [AttributeSuccessionAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#attributesuccessionacceptresponseitem) will be transferred, given that the own shared predecessor doesn't have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. - After rejecting this RequestItem, a [RejectResponseItem]({% link _docs_integrate/data-model-overview.md %}#rejectresponseitem) will be transferred. - In case of an error, an [ErrorResponseItem]({% link _docs_integrate/data-model-overview.md %}#errorresponseitem) will be transferred. diff --git a/_docs_integrate/share-attributes-with-peer.md b/_docs_integrate/share-attributes-with-peer.md index d1a3b8498..0efc4d897 100644 --- a/_docs_integrate/share-attributes-with-peer.md +++ b/_docs_integrate/share-attributes-with-peer.md @@ -114,7 +114,7 @@ The value of the `mustBeAccepted` property of the ShareAttributeRequestItem is s ### Example of sharing a RelationshipAttribute -We now consider the case in which the Sender has an active [Relationship]({% link _docs_integrate/data-model-overview.md %}#relationship) with a third party and owns a RelationshipAttribute, which has already been created by using an appropriate Request, of type [ProprietaryString]({% link _docs_integrate/attribute-values.md %}#proprietarystring) of this Relationship. The Sender can request to share this RelationshipAttribute with the Recipient if its `confidentiality` is `"protected"` or `"public"`. In our example, we assume that the `confidentiality` of the RelationshipAttribute is `"public"` and that it is stored locally within the `content` property of a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) with a [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo) of the Sender, which is also referred to as an [own shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes). +We now consider the case in which the Sender has an active [Relationship]({% link _docs_integrate/data-model-overview.md %}#relationship) with a third party and owns a RelationshipAttribute, which has already been created by using an appropriate Request, of type [ProprietaryString]({% link _docs_integrate/attribute-values.md %}#proprietarystring) of this Relationship. The Sender can request to share this RelationshipAttribute with the Recipient if its `confidentiality` is `"protected"` or `"public"`. In our example, we assume that the `confidentiality` of the RelationshipAttribute is `"public"` and that it is stored locally within the `content` property of a [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) of the Sender, which is also referred to as an [own shared RelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-relationshipattributes). ```jsonc { @@ -199,7 +199,7 @@ If the Recipient does not want to get any of the Sender's shared Attributes and, If the Recipient agrees to get one of the Sender's shared Attributes, it can accept the associated ShareAttributeRequestItem contained in the Request for sharing Attributes. The [AcceptRequestItemParameters]({% link _docs_integrate/data-model-overview.md %}#acceptrequestitemparameters) must be used for this. -The acceptance of a ShareAttributeRequestItem leads to the creation of a corresponding LocalAttribute with a [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo) contained within its `shareInfo` property. +The acceptance of a ShareAttributeRequestItem leads to the creation of a corresponding LocalAttribute. Depending on whether an IdentityAttribute or a RelationshipAttribute has been shared by the Sender, it is referred to as either a [peer shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or a [received ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes). The `content` of the LocalAttribute corresponds to the underlying `attribute` of the ShareAttributeRequestItem. Based on this, an appropriate AcceptResponseItem of type [ShareAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#shareattributeacceptresponseitem) is generated, which incorporates the `id` of the created LocalAttribute in its `attributeId` property. @@ -310,7 +310,7 @@ To view the Response to the Request, proceed as described in the [Query outgoing The Integrator of the Sender can now get the Response of the Recipient from the `response.content` property of the result. In the `items` property of the [Response]({% link _docs_integrate/data-model-overview.md %}#response) is a [ShareAttributeAcceptResponseItem]({% link _docs_integrate/data-model-overview.md %}#shareattributeacceptresponseitem) for each accepted ShareAttributeRequestItem and a [RejectResponseItem]({% link _docs_integrate/data-model-overview.md %}#rejectresponseitem) for each rejected ShareAttributeRequestItem included. -Note that each accepted ShareAttributeRequestItem leads to the creation of an appropriate LocalAttribute with a LocalAttributeShareInfo of the Sender. +Note that each accepted ShareAttributeRequestItem leads to the creation of an appropriate LocalAttribute of the Sender. Depending on whether an IdentityAttribute or a RelationshipAttribute has been shared by the Sender, it is referred to as either an [own shared IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#own-shared-and-peer-shared-identityattributes) or an [emitted ThirdPartyRelationshipAttribute]({% link _docs_integrate/attribute-introduction.md %}#emitted-and-received-thirdpartyrelationshipattributes). The `content` of the LocalAttribute is the underlying `attribute` of the ShareAttributeRequestItem. diff --git a/_docs_integrate/update-attributes-by-succession.md b/_docs_integrate/update-attributes-by-succession.md index aab748133..7491c8cf7 100644 --- a/_docs_integrate/update-attributes-by-succession.md +++ b/_docs_integrate/update-attributes-by-succession.md @@ -83,7 +83,7 @@ During the succession of a [complex IdentityAttribute]({% link _docs_integrate/a After succeeding a RepositoryAttribute, you can check [with which of your peers you have previously shared the succeeded Attribute]({% link _docs_use-cases/use-case-consumption-get-shared-versions-of-an-attribute.md %}) to choose those, you'd like to [notify about the succession]({% link _docs_use-cases/use-case-consumption-notify-peer-about-repositoryattribute-succession.md %}). Your own shared IdentityAttributes associated with the peers chosen will be succeeded in the same manner as your RepositoryAttribute before. -Then, a [Notification]({% link _docs_integrate/data-model-overview.md %}#notification) is sent to the peers, containing a [PeerSharedAttributeSucceededNotificationItem]({% link _docs_integrate/data-model-overview.md %}#peersharedattributesucceedednotificationitem). +Then, a [Notification]({% link _docs_integrate/data-model-overview.md %}#notification) is sent to the peers, containing a [PeerAttributeSucceededNotificationItem]({% link _docs_integrate/data-model-overview.md %}#peerattributesucceedednotificationitem). In the `successorContent` property of the latter the updated IdentityAttribute is transmitted and automatically a likewise succession at the peers' side will be triggered, such that their LocalAttribute versions replicate the succession chain at your side. Please note that the Notification is queued if the [Relationship is currently terminated]({% link _docs_integrate/terminate-relationships.md %}#terminate-an-active-relationship) but not yet [decomposed]({% link _docs_integrate/terminate-relationships.md %}#decompose-a-relationship). It can then only be received and processed if the [Relationship is reactivated]({% link _docs_integrate/terminate-relationships.md %}#reactivate-a-terminated-relationship). diff --git a/_docs_use-cases/use-case-consumption-create-a-shared-attribute-copy.md b/_docs_use-cases/use-case-consumption-create-a-shared-attribute-copy.md index b9a256fab..e8dbd3af5 100644 --- a/_docs_use-cases/use-case-consumption-create-a-shared-attribute-copy.md +++ b/_docs_use-cases/use-case-consumption-create-a-shared-attribute-copy.md @@ -44,7 +44,7 @@ required_by: Be advised that this is a Runtime-internal use case which is automatically used by the module system. You should not call this use case without having good reason. {: .notice--warning} -This use case is intended to create a copy of a LocalAttribute with the intent to share it. The copy references the original [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo). +This use case is intended to create a copy of a LocalAttribute with the intent to share it. The copy references the original [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute). ## Parameters diff --git a/_docs_use-cases/use-case-consumption-delete-a-peer-shared-attribute-and-notify-peer.md b/_docs_use-cases/use-case-consumption-delete-a-peer-shared-attribute-and-notify-peer.md index 1b0da23ee..c973d7f29 100644 --- a/_docs_use-cases/use-case-consumption-delete-a-peer-shared-attribute-and-notify-peer.md +++ b/_docs_use-cases/use-case-consumption-delete-a-peer-shared-attribute-and-notify-peer.md @@ -54,7 +54,7 @@ This use case allows you to delete a peer shared Attribute, i.e. a [LocalAttribu - All predecessors of the peer shared Attribute will be deleted. - If the peer shared Attribute was succeeded, the `succeeds` property of the successor will be set to undefined. - If the `attributeId` relates to a [RelationshipAttribute]({%link _docs_integrate/data-model-overview.md %}#relationshipattribute) and there are shared copies of the peer shared RelationshipAttribute or potential predecessors of it, the `shareInfo.sourceAttribute` of those emitted ThirdPartyRelationshipAttributes will be set to undefined. -- A [Notification]({%link _docs_integrate/data-model-overview.md %}#notification) with a [PeerSharedAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#peersharedattributedeletedbypeernotificationitem) is sent to the owner of the Attribute, informing them that you deleted their Attribute. Technically, the own shared Attribute of the owner and all predecessors will get a `deletionInfo` with `deletionStatus` `"DeletedByPeer"` and the time of receiving the Notification as `deletionDate`. +- A [Notification]({%link _docs_integrate/data-model-overview.md %}#notification) with a [ForwardedAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) or a [PeerRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#peerrelationshipattributedeletedbypeernotificationitem) is sent to the owner of the Attribute, informing them that you deleted their Attribute. Technically, the own shared Attribute of the owner and all predecessors will get a `deletionInfo` with `deletionStatus` `"DeletedByRecipient"` and the time of receiving the Notification as `deletionDate`. - The `notificationId` is returned. ## On Failure diff --git a/_docs_use-cases/use-case-consumption-delete-a-thirdpartyrelationshipattribute-and-notify-peer.md b/_docs_use-cases/use-case-consumption-delete-a-thirdpartyrelationshipattribute-and-notify-peer.md index 29aa046fa..f805cdd5c 100644 --- a/_docs_use-cases/use-case-consumption-delete-a-thirdpartyrelationshipattribute-and-notify-peer.md +++ b/_docs_use-cases/use-case-consumption-delete-a-thirdpartyrelationshipattribute-and-notify-peer.md @@ -55,7 +55,7 @@ This use case allows you to delete a ThirdPartyRelationshipAttribute, i.e. a [Lo - The ThirdPartyRelationshipAttribute will be deleted. - All predecessors of the ThirdPartyRelationshipAttribute will be deleted. - If the ThirdPartyRelationshipAttribute was succeeded, the `succeeds` property of the successor will be set to undefined. -- A [Notification]({%link _docs_integrate/data-model-overview.md %}#notification) with a [ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#thirdpartyrelationshipattributedeletedbypeernotificationitem) is sent to the peer of the Attribute, informing them that you deleted the Attribute. Technically, the Attribute of the peer and all predecessors will get a `deletionInfo` with `deletionStatus` `"DeletedByPeer"` and the time of receiving the Notification as `deletionDate`. +- A [Notification]({%link _docs_integrate/data-model-overview.md %}#notification) with a [ForwardedAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) is sent to the peer of the Attribute, informing them that you deleted the Attribute. Technically, the Attribute of the peer and all predecessors will get a `deletionInfo` with `deletionStatus` `"DeletedByRecipient"` and the time of receiving the Notification as `deletionDate`. - The `notificationId` is returned. ## On Failure diff --git a/_docs_use-cases/use-case-consumption-delete-an-own-shared-attribute-and-notify-peer.md b/_docs_use-cases/use-case-consumption-delete-an-own-shared-attribute-and-notify-peer.md index 0d9186335..e359dbe6e 100644 --- a/_docs_use-cases/use-case-consumption-delete-an-own-shared-attribute-and-notify-peer.md +++ b/_docs_use-cases/use-case-consumption-delete-an-own-shared-attribute-and-notify-peer.md @@ -55,7 +55,7 @@ It is created as a result of sharing the `content` of a RepositoryAttribute with - All predecessors of the own shared Attribute will be deleted. - If the own shared Attribute was succeeded, the `succeeds` property of the successor will be set to undefined. - If the `attributeId` relates to a [RelationshipAttribute]({%link _docs_integrate/data-model-overview.md %}#relationshipattribute) and there are shared copies of the own shared RelationshipAttribute or potential predecessors of it, the `shareInfo.sourceAttribute` of those emitted ThirdPartyRelationshipAttributes will be set to undefined. -- A [Notification]({%link _docs_integrate/data-model-overview.md %}#notification) with a [OwnSharedAttributeDeletedByOwnerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#ownsharedattributedeletedbyownernotificationitem) is sent to the peer you shared the Attribute with, informing them that you deleted the Attribute. Technically, the peer shared Attribute at the peer's side and all predecessors will get a `deletionInfo` with `deletionStatus` `"DeletedByOwner"` and the time of receiving the Notification as `deletionDate`. +- A [Notification]({%link _docs_integrate/data-model-overview.md %}#notification) with an [OwnAttributeDeletedByOwnerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#ownattributedeletedbyownernotificationitem) is sent to the peer you shared the Attribute with, informing them that you deleted the Attribute. Technically, the peer shared Attribute at the peer's side and all predecessors will get a `deletionInfo` with `deletionStatus` `"DeletedByEmitter"` and the time of receiving the Notification as `deletionDate`. - The `notificationId` is returned. ## On Failure diff --git a/_docs_use-cases/use-case-consumption-get-attributes.md b/_docs_use-cases/use-case-consumption-get-attributes.md index 29cfcc064..dec7fb6cc 100644 --- a/_docs_use-cases/use-case-consumption-get-attributes.md +++ b/_docs_use-cases/use-case-consumption-get-attributes.md @@ -50,12 +50,10 @@ This use case is intended to query [LocalAttributes]({% link _docs_integrate/dat - `query` allows to specify the conditions for the returned LocalAttributes. In detail, the following keys may be used: - `createdAt` describes the time when the LocalAttribute was created. - - `parentId` can be used to find the child Attributes of a [complex IdentityAttribute]({% link _docs_integrate/attribute-introduction.md %}#complex-identityattributes). - The fields of `content` can be used to describe the queried Attribute (either an [IdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#identityattribute) or a [RelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#relationshipattribute)). - `succeeds` and `succeededBy` give information about the [succession state]({% link _docs_integrate/update-attributes-by-succession.md %}) of the LocalAttribute. - - The fields of the `shareInfo` describe if the LocalAttribute is shared with a peer and specify its [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo). - - The fields of the `deletionInfo` describe the [LocalAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#localattributedeletioninfo) of a shared LocalAttribute. + - The fields of the `deletionInfo` describe the [EmittedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#emittedattributedeletioninfo) or [ReceivedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#receivedattributedeletioninfo) of a shared LocalAttribute. - `isDefault` states whether a RepositoryAttribute is the default for its value type. - If `hideTechnical` is set to `true`, RelationshipAttributes with `isTechnical` `true` will not be returned. diff --git a/_docs_use-cases/use-case-consumption-get-own-shared-attributes.md b/_docs_use-cases/use-case-consumption-get-own-shared-attributes.md index 46e5faff5..7e08c8e3b 100644 --- a/_docs_use-cases/use-case-consumption-get-own-shared-attributes.md +++ b/_docs_use-cases/use-case-consumption-get-own-shared-attributes.md @@ -53,8 +53,7 @@ This use case is intended to retrieve Attributes that the current Identity share - `createdAt` describes the time when the LocalAttribute was created. - The fields of `content` can be used to describe the queried Attribute (either an [IdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#identityattribute) or a [RelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#relationshipattribute)). - - The fields of the `shareInfo` describe if the LocalAttribute is shared with a peer and specify its [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo). - - The fields of the `deletionInfo` describe the [LocalAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#localattributedeletioninfo) of a shared LocalAttribute. + - The fields of the `deletionInfo` describe the [EmittedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#emittedattributedeletioninfo) of a shared LocalAttribute. - If `hideTechnical` is set to `true`, RelationshipAttributes with `isTechnical` `true` will not be returned. - Optionally, `onlyLatestVersions` can be disabled, such that in case of [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}) all versions will be returned. diff --git a/_docs_use-cases/use-case-consumption-get-peer-shared-attributes.md b/_docs_use-cases/use-case-consumption-get-peer-shared-attributes.md index 9c2c73ef9..781529853 100644 --- a/_docs_use-cases/use-case-consumption-get-peer-shared-attributes.md +++ b/_docs_use-cases/use-case-consumption-get-peer-shared-attributes.md @@ -53,8 +53,7 @@ This use case is intended to retrieve Attributes that a peer has shared with the - `createdAt` describes the time when the LocalAttribute was created. - The fields of `content` can be used to describe the queried Attribute (either an [IdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#identityattribute) or a [RelationshipAttribute]({% link _docs_integrate/data-model-overview.md %}#relationshipattribute)). - - The fields of the `shareInfo` describe if the LocalAttribute is shared with a peer and specify its [LocalAttributeShareInfo]({% link _docs_integrate/data-model-overview.md %}#localattributeshareinfo). - - The fields of the `deletionInfo` describe the [LocalAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#localattributedeletioninfo) of a shared LocalAttribute. + - The fields of the `deletionInfo` describe the [ReceivedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#receivedattributedeletioninfo) of a shared LocalAttribute. - If `hideTechnical` is set to `true`, RelationshipAttributes with `isTechnical` `true` will not be returned. - Optionally, `onlyLatestVersions` can be disabled, such that in case of [Attribute succession]({% link _docs_integrate/update-attributes-by-succession.md %}) all versions will be returned. diff --git a/_docs_use-cases/use-case-consumption-share-a-repositoryattribute.md b/_docs_use-cases/use-case-consumption-share-a-repositoryattribute.md index 63610b8d3..32543b472 100644 --- a/_docs_use-cases/use-case-consumption-share-a-repositoryattribute.md +++ b/_docs_use-cases/use-case-consumption-share-a-repositoryattribute.md @@ -66,6 +66,6 @@ If you have already shared another version of a succeeded Attribute with the pee - The Request cannot be created if the `peer` is unknown. - The Request cannot be created if the `attributeId` belongs to a RelationshipAttribute. - The Request cannot be created if the `attributeId` belongs to an IdentityAttribute with a `shareInfo`. -- The Request cannot be created if the Attribute has already been shared with the peer and the own shared IdentityAttribute doesn't have `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. -- The Request cannot be created if another version of the Attribute regarding succession has already been shared with the peer, unless the latest shared version has `"DeletedByPeer"` or `"ToBeDeletedByPeer"` as `deletionInfo.deletionStatus`. +- The Request cannot be created if the Attribute has already been shared with the peer and the own shared IdentityAttribute doesn't have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. +- The Request cannot be created if another version of the Attribute regarding succession has already been shared with the peer, unless the latest shared version has `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. - The Request cannot be created if the parameters are malformed. diff --git a/_includes/descr_createdAt b/_includes/descr_createdAt index dfbe2c951..a3c642ed2 100644 --- a/_includes/descr_createdAt +++ b/_includes/descr_createdAt @@ -1 +1 @@ -A timestamp that describes when the {{ include.class }} was created \ No newline at end of file +A timestamp that describes when the {{ include.class }} was created. \ No newline at end of file