From dc95f4a5283820da755901112021be48f170edd0 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 08:04:11 +0000 Subject: [PATCH 01/38] feat: change introduction text of LocalAttribute --- _docs_integrate/data-model-overview.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 5d632585d..3c39cedc1 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -358,24 +358,22 @@ 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: +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 two 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**. +- 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. Such a LocalAttribute is an **OwnIdentityAttribute**. The Identity can share 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, AttributeForwardingDetails are created that reference the `id` of the OwnIdentityAttribute as `attributeId`. +- 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 which is a **PeerIdentityAttribute**. An IdentityAttribute received from another Identity cannot be shared further. In contrast, [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**. +- The LocalAttribute of the `owner` is an **OwnRelationshipAttribute**. +- The peer’s LocalAttribute is a **PeerRelationshipAttribute**. -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"`. +A RelationshipAttribute can be forwarded to a peer which is not involved in the Relationship in which the RelationshipAttribute exists if its `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. +- For the Identity which is in the Relationship in whose context the forwarded RelationshipAttribute exists, AttributeForwardingDetails are created that reference the `id` of the source RelationshipAttribute as `attributeId`. +- For the Identity which received the forwarded RelationshipAttribute, a new LocalAttribute is created which is a **ThirdPartyRelationshipAttribute**. In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.md %}) more details on the terminology related to LocalAttributes can be found. From b8d6b677a8b10736862b557c8faba6be2bc40dcb Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 08:51:24 +0000 Subject: [PATCH 02/38] feat: add sections for new Attribute types --- _docs_integrate/data-model-overview.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 3c39cedc1..934b15162 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -390,6 +390,16 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m | 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. | +### OwnIdentityAttribute + +### PeerIdentityAttribute + +### OwnRelationshipAttribute + +### PeerRelationshipAttribute + +### ThirdPartyRelationshipAttribute + ### 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. @@ -421,6 +431,8 @@ This will be the case, if the peer already accepted the DeleteAttributeRequestIt | 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}{:/} | +## AttributeForwardingDetails + ## AttributeTagCollection The AttributeTagCollection is defined by the Backbone and specifies which `tags` are allowed for which [IdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#identityattribute) `value.@type`. From 3377f3e91a33445fe0a8608e1754a5d6780ba2a5 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 09:04:20 +0000 Subject: [PATCH 03/38] feat: define OwnIdentityAttribute --- _docs_integrate/data-model-overview.md | 33 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 934b15162..e3e147627 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -377,21 +377,30 @@ A RelationshipAttribute can be forwarded to a peer which is not involved in the 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. | +| 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. | +| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | ### OwnIdentityAttribute +| 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`. | +| 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`. | +| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | + ### PeerIdentityAttribute ### OwnRelationshipAttribute From 4d9af39919595bb966c6143e0cc58fb47cdce984 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 09:25:18 +0000 Subject: [PATCH 04/38] feat: define PeerIdentityAttribute --- _docs_integrate/data-model-overview.md | 29 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index e3e147627..8056d48f6 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -381,13 +381,13 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m | ------------ | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 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. | +| 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. | | 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. | -| wasViewedAt | `string` \| `undefined` | A timestamp indicating when the LocalAttribute was firstly viewed. | ### OwnIdentityAttribute @@ -398,11 +398,23 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m | 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`. | -| 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`. | | 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 +| 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 | [`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. | + ### OwnRelationshipAttribute ### PeerRelationshipAttribute @@ -413,13 +425,10 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m 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. | +| Name | Type | Description | +| ----------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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 From a2a39777b9159a248cbba78acb6fb71fbacb9959 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 09:26:37 +0000 Subject: [PATCH 05/38] fix: missing point in createdAt description --- _includes/descr_createdAt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From b2a9bf41b9ae1ac10cf8cfb13562cc7f12e5ee0e Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 09:29:59 +0000 Subject: [PATCH 06/38] feat: add sections for new AttributeDeletionInfos --- _docs_integrate/data-model-overview.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 8056d48f6..9bef7d3c3 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -451,6 +451,10 @@ This will be the case, if the peer already accepted the DeleteAttributeRequestIt ## AttributeForwardingDetails +## EmittedAttributeDeletionInfo + +## ReceivedAttributeDeletionInfo + ## AttributeTagCollection The AttributeTagCollection is defined by the Backbone and specifies which `tags` are allowed for which [IdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#identityattribute) `value.@type`. From 073bcb3856999bd51816c9bae81e1d7ea7cd71e8 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 09:42:43 +0000 Subject: [PATCH 07/38] feat: add properties of EmittedAttributeDeletionInfo --- _docs_integrate/data-model-overview.md | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 9bef7d3c3..32314b125 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -403,17 +403,17 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### PeerIdentityAttribute -| 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 | [`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. | +| 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 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. | ### OwnRelationshipAttribute @@ -444,15 +444,15 @@ If the `deletionInfo` of the peer was undefined before, the `deletionStatus` wil 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 Request with a DeleteAttributeRequestItem was sent (for "DeletionRequestSent").
  • the Response with a RejectResponseItem was received (for "DeletionRequestRejected").
  • an upcoming deletion is planned (for "ToBeDeleted" or "ToBeDeletedByPeer").
  • a completed deletion has been notified (for "DeletedByOwner" or "DeletedByPeer").
{:/} | - ## AttributeForwardingDetails ## EmittedAttributeDeletionInfo +| Name | Type | Description | +| -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| deletionStatus | `"DeletionRequestSent"` \| `"DeletionRequestRejected"` \| `"ToBeDeletedByRecipient"` \| `"DeletedByRecipient"` | The deletion status of the recipient's Attribute. | +| deletionDate | `string` | The point in time
{::nomarkdown}
  • the Request with a DeleteAttributeRequestItem was sent (for "DeletionRequestSent").
  • the Response with a RejectResponseItem was received (for "DeletionRequestRejected").
  • an upcoming deletion is planned (for "ToBeDeletedByRecipient").
  • a completed deletion has been notified (for "DeletedByRecipient").
{:/} | + ## ReceivedAttributeDeletionInfo ## AttributeTagCollection From 41d125076ae7c420f6843e3ecf805be74adbf311 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 09:48:06 +0000 Subject: [PATCH 08/38] feat: add properties of ReceivedAttributeDeletionInfo --- _docs_integrate/data-model-overview.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 32314b125..c9fe28357 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -455,6 +455,11 @@ This will be the case, if the peer already accepted the DeleteAttributeRequestIt ## ReceivedAttributeDeletionInfo +| Name | Type | Description | +| -------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| deletionStatus | `"ToBeDeleted"` \| `"DeletedByEmitter"` | The deletion status of the recipient's or emitter's Attribute. | +| deletionDate | `string` | The point in time
{::nomarkdown}
  • an upcoming deletion is planned (for "ToBeDeleted").
  • a completed deletion has been notified (for "DeletedByEmitter").
{:/} | + ## AttributeTagCollection The AttributeTagCollection is defined by the Backbone and specifies which `tags` are allowed for which [IdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#identityattribute) `value.@type`. From b3fd60306269014aa38bc3dab5c11d881cf38248 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 10:06:38 +0000 Subject: [PATCH 09/38] refactor: move description to new AttributeDeletionInfos --- _docs_integrate/data-model-overview.md | 36 +++++++++++++++++--------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index c9fe28357..195d3bb12 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -432,22 +432,22 @@ The LocalAttributeShareInfo helps to keep track of how the LocalAttribute was re ### 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. - ## AttributeForwardingDetails ## EmittedAttributeDeletionInfo +The EmittedAttributeDeletionInfo holds information about the deletion status of the recipient's 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 recipient, their emitted Attribute will get `"DeletionRequestSent"` as `deletionStatus` and the time of sending the Request as `deletionDate`. +Should the recipient reject the DeleteAttributeRequestItem, the emitted 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 recipient's Attribute will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the recipient sent in their Response. +Accordingly, the `deletionStatus` of the emitted Attribute of the owner will move to `"ToBeDeletedByRecipient"` with the same `deletionDate`. +Once the recipient's Attribute is deleted by the recipient, a [PeerSharedAttributeDeletedByPeerNotificationItem](#peersharedattributedeletedbypeernotificationitem) is sent to the owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. +Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnSharedAttributeDeletedByOwnerNotificationItem](#ownsharedattributedeletedbyownernotificationitem) is sent to the recipient. +If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` 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 recipient will be able to delete their Attribute as planned. +This will be the case, if the recipient already accepted the DeleteAttributeRequestItem for this particular Attribute. + | Name | Type | Description | | -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | deletionStatus | `"DeletionRequestSent"` \| `"DeletionRequestRejected"` \| `"ToBeDeletedByRecipient"` \| `"DeletedByRecipient"` | The deletion status of the recipient's Attribute. | @@ -455,6 +455,18 @@ This will be the case, if the peer already accepted the DeleteAttributeRequestIt ## ReceivedAttributeDeletionInfo +The ReceivedAttributeDeletionInfo holds information about the deletion status of the recipient's or emitter's 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 recipient, their emitted Attribute will get `"DeletionRequestSent"` as `deletionStatus` and the time of sending the Request as `deletionDate`. +Should the recipient reject the DeleteAttributeRequestItem, the emitted 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 recipient's Attribute will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the recipient sent in their Response. +Accordingly, the `deletionStatus` of the emitted Attribute of the owner will move to `"ToBeDeletedByRecipient"` with the same `deletionDate`. +Once the recipient's Attribute is deleted by the recipient, a [PeerSharedAttributeDeletedByPeerNotificationItem](#peersharedattributedeletedbypeernotificationitem) is sent to the owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. +Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnSharedAttributeDeletedByOwnerNotificationItem](#ownsharedattributedeletedbyownernotificationitem) is sent to the recipient. +If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` 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 recipient will be able to delete their Attribute as planned. +This will be the case, if the recipient already accepted the DeleteAttributeRequestItem for this particular Attribute. + | Name | Type | Description | | -------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | deletionStatus | `"ToBeDeleted"` \| `"DeletedByEmitter"` | The deletion status of the recipient's or emitter's Attribute. | From 3b526633123e50b48d1338ac94d747365a2df824 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 10:21:33 +0000 Subject: [PATCH 10/38] feat: add properties of AttributeForwardingDetails --- _docs_integrate/data-model-overview.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 195d3bb12..56a8db5d8 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -425,15 +425,24 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m 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 | -| ----------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 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. | +| Name | Type | Description | +| ----------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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 ## AttributeForwardingDetails +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. + +| Name | Type | Description | +| --------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| attributeId | `string` | The ID of the Attribute 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 peer of the Relationship, as well as the point in time of that deletion. | + ## EmittedAttributeDeletionInfo The EmittedAttributeDeletionInfo holds information about the deletion status of the recipient's Attribute, as well as the point in time of that deletion. From ab588ec8c037d18cb34a6ab5ec4d2f2d583e7659 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 10:31:46 +0000 Subject: [PATCH 11/38] feat: remove LocalAttributeDeletionInfo --- _docs_integrate/data-model-overview.md | 22 ++++++++----------- _docs_integrate/delete-attributes.md | 2 +- .../use-case-consumption-get-attributes.md | 2 +- ...e-consumption-get-own-shared-attributes.md | 2 +- ...-consumption-get-peer-shared-attributes.md | 2 +- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 56a8db5d8..b0310dc5f 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -377,17 +377,15 @@ A RelationshipAttribute can be forwarded to a peer which is not involved in the 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`. | -| content | [`IdentityAttribute`](#identityattribute) \| [`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. | -| 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. | +| 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`. | +| content | [`IdentityAttribute`](#identityattribute) \| [`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. | ### OwnIdentityAttribute @@ -429,8 +427,6 @@ The LocalAttributeShareInfo helps to keep track of how the LocalAttribute was re | ----------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 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 - ## AttributeForwardingDetails 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. diff --git a/_docs_integrate/delete-attributes.md b/_docs_integrate/delete-attributes.md index c7a5486d6..201be61b1 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 a [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. diff --git a/_docs_use-cases/use-case-consumption-get-attributes.md b/_docs_use-cases/use-case-consumption-get-attributes.md index 29cfcc064..a05c37d42 100644 --- a/_docs_use-cases/use-case-consumption-get-attributes.md +++ b/_docs_use-cases/use-case-consumption-get-attributes.md @@ -55,7 +55,7 @@ This use case is intended to query [LocalAttributes]({% link _docs_integrate/dat 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..c66a2fa40 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 @@ -54,7 +54,7 @@ This use case is intended to retrieve Attributes that the current Identity share - 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..35e5c8f26 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 @@ -54,7 +54,7 @@ This use case is intended to retrieve Attributes that a peer has shared with the - 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. From 5122f2887be7f39aa17cb769e6e18d320cd2038f Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 10:36:27 +0000 Subject: [PATCH 12/38] refactor: copy common LocalAttribute properties to new Attribute types --- _docs_integrate/data-model-overview.md | 37 +++++++++++++++++++------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index b0310dc5f..dc2e7e33a 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -377,16 +377,6 @@ A RelationshipAttribute can be forwarded to a peer which is not involved in the 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`. | -| content | [`IdentityAttribute`](#identityattribute) \| [`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. | - ### OwnIdentityAttribute | Name | Type | Description | @@ -415,10 +405,37 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### OwnRelationshipAttribute +| 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. | + ### PeerRelationshipAttribute +| 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. | + ### ThirdPartyRelationshipAttribute +| 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. | + ### 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. From 14d62e27047e534a8660c7a503211b6de1e381d7 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 11:01:51 +0000 Subject: [PATCH 13/38] feat: add draft for new LocalAttribute concept in v7 migration guide --- _docs_integrate/migration-from-v6-to-v7.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index edac18dcc..f4f6ed758 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -69,6 +69,24 @@ The step-by-step instructions can be consulted to start the migration to version 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. +#### New LocalAttribute Concept + +With the new LocalAttribute concept, no Attribute copy is created anymore when an Attribute is shared. +Furthermore, LocalAttribute subtypes have been introduced to help distinguish between different kinds of LocalAttributes. + +- RepositoryAttributes were renamed to OwnIdentityAttributes. + There are no own shared IdentityAttributes anymore. + Instead, AttributeForwardingDetails are created. +- Peer shared IdentityAttributes and peer shared RelationshipAttributes have been replaced by the LocalAttribute subtypes PeerIdentityAttribute and PeerRelationshipAttribute. +- Instead of emitted ThirdPartyRelationshipAttributes, AttributeForwardingDetails are created. + For this reason, the received ThirdPartyRelationshipAttribute is now simply called ThirdPartyRelationshipAttribute. +- `shareInfo` property was removed. + Instead, there are AttributeForwardingDetails and flattened sharing properties depending on the type of LocalAttribute. +- LocalAttributeDeletionInfo has been replaced by EmittedAttributeDeletionInfo and ReceivedAttributeDeletionInfo depending on the type of LocalAttribute. +- `parentId` property 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. +- Many NotificationItems and many use cases have been renamed. + ### Changed Behavior of Known Features - Stricter validation of `tags` of [IdentityAttributes]({% link _docs_integrate/data-model-overview.md %}#identityattribute) and [Files]({% link _docs_integrate/data-model-overview.md %}#file) have been added as documented in their description in the data model overview. From 3c4e05ef3b026945ae7e6833356415d5d44818dd Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 11:18:26 +0000 Subject: [PATCH 14/38] feat: define OwnRelationshipAttribute --- _docs_integrate/data-model-overview.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index dc2e7e33a..47428ccda 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -405,14 +405,17 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### OwnRelationshipAttribute -| 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. | +| 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. | ### PeerRelationshipAttribute From 9462df933701df13b69edd11e4aec1ca14b79f28 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 11:23:26 +0000 Subject: [PATCH 15/38] feat: remove parentId property --- _docs_integrate/attribute-introduction.md | 4 ++-- _docs_integrate/create-attributes-for-yourself.md | 2 +- _docs_integrate/migration-from-v6-to-v7.md | 3 +-- _docs_use-cases/use-case-consumption-get-attributes.md | 1 - 4 files changed, 4 insertions(+), 6 deletions(-) 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/create-attributes-for-yourself.md b/_docs_integrate/create-attributes-for-yourself.md index 77d45d284..a66bfd677 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 %}).
diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index f4f6ed758..a78f03231 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -83,8 +83,7 @@ Furthermore, LocalAttribute subtypes have been introduced to help distinguish be - `shareInfo` property was removed. Instead, there are AttributeForwardingDetails and flattened sharing properties depending on the type of LocalAttribute. - LocalAttributeDeletionInfo has been replaced by EmittedAttributeDeletionInfo and ReceivedAttributeDeletionInfo depending on the type of LocalAttribute. -- `parentId` property 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. +- The `parentId` property was removed as there is no child Attribute feature anymore. - Many NotificationItems and many use cases have been renamed. ### Changed Behavior of Known Features diff --git a/_docs_use-cases/use-case-consumption-get-attributes.md b/_docs_use-cases/use-case-consumption-get-attributes.md index a05c37d42..bd7f484c2 100644 --- a/_docs_use-cases/use-case-consumption-get-attributes.md +++ b/_docs_use-cases/use-case-consumption-get-attributes.md @@ -50,7 +50,6 @@ 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. From 5142c92b25f898ed25e6f657d303b423f8af6141 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 11:33:10 +0000 Subject: [PATCH 16/38] feat: define PeerRelationshipAttribute --- _docs_integrate/data-model-overview.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 47428ccda..fe93a3687 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -419,14 +419,17 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### PeerRelationshipAttribute -| 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. | +| 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 peer of the Relationship, as well as the point in time of that deletion. | ### ThirdPartyRelationshipAttribute From f3cf6318d11dac8f818a9edee8127325d5f91be5 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 11:38:10 +0000 Subject: [PATCH 17/38] feat: define ThirdPartyRelationshipAttribute --- _docs_integrate/data-model-overview.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index fe93a3687..00730cb20 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -433,23 +433,23 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### ThirdPartyRelationshipAttribute -| 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. | +| 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. | ### 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 | -| ----------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 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. | - ## AttributeForwardingDetails 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. From 10bec0ffbf55892a61fe2b53cac65b0d21357cfa Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Wed, 29 Oct 2025 12:53:31 +0000 Subject: [PATCH 18/38] feat: remove LocalAttributeShareInfo --- _docs_integrate/create-attributes-for-peer.md | 4 ++-- _docs_integrate/create-attributes-for-yourself.md | 2 +- _docs_integrate/data-model-overview.md | 6 ++---- _docs_integrate/migration-from-v6-to-v7.md | 2 +- _docs_integrate/propose-attributes-to-peer.md | 4 ++-- _docs_integrate/read-attributes-from-peer.md | 4 ++-- _docs_integrate/share-attributes-with-peer.md | 6 +++--- .../use-case-consumption-create-a-shared-attribute-copy.md | 2 +- _docs_use-cases/use-case-consumption-get-attributes.md | 1 - .../use-case-consumption-get-own-shared-attributes.md | 1 - .../use-case-consumption-get-peer-shared-attributes.md | 1 - 11 files changed, 14 insertions(+), 19 deletions(-) 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 a66bfd677..714667545 100644 --- a/_docs_integrate/create-attributes-for-yourself.md +++ b/_docs_integrate/create-attributes-for-yourself.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 00730cb20..e843a96de 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -446,14 +446,12 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m | 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. | -### 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. - ## AttributeForwardingDetails 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. +The AttributeForwardingDetails 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 | | --------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | attributeId | `string` | The ID of the Attribute that was shared. | diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index a78f03231..a6be774bf 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -80,7 +80,7 @@ Furthermore, LocalAttribute subtypes have been introduced to help distinguish be - Peer shared IdentityAttributes and peer shared RelationshipAttributes have been replaced by the LocalAttribute subtypes PeerIdentityAttribute and PeerRelationshipAttribute. - Instead of emitted ThirdPartyRelationshipAttributes, AttributeForwardingDetails are created. For this reason, the received ThirdPartyRelationshipAttribute is now simply called ThirdPartyRelationshipAttribute. -- `shareInfo` property was removed. +- `shareInfo` property and the LocalAttributeShareInfo data object were removed. Instead, there are AttributeForwardingDetails and flattened sharing properties depending on the type of LocalAttribute. - LocalAttributeDeletionInfo has been replaced by EmittedAttributeDeletionInfo and ReceivedAttributeDeletionInfo depending on the type of LocalAttribute. - The `parentId` property was removed as there is no child Attribute feature anymore. diff --git a/_docs_integrate/propose-attributes-to-peer.md b/_docs_integrate/propose-attributes-to-peer.md index c74ac79c3..7786fcf6e 100644 --- a/_docs_integrate/propose-attributes-to-peer.md +++ b/_docs_integrate/propose-attributes-to-peer.md @@ -157,7 +157,7 @@ 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. @@ -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..d880bf4ed 100644 --- a/_docs_integrate/read-attributes-from-peer.md +++ b/_docs_integrate/read-attributes-from-peer.md @@ -166,7 +166,7 @@ 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. @@ -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/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_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-get-attributes.md b/_docs_use-cases/use-case-consumption-get-attributes.md index bd7f484c2..dec7fb6cc 100644 --- a/_docs_use-cases/use-case-consumption-get-attributes.md +++ b/_docs_use-cases/use-case-consumption-get-attributes.md @@ -53,7 +53,6 @@ This use case is intended to query [LocalAttributes]({% link _docs_integrate/dat - 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 [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 c66a2fa40..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,7 +53,6 @@ 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 [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 35e5c8f26..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,7 +53,6 @@ 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 [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. From 6c7193d20ad92f5a886761306a2c8a1d3fc986c1 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 15:15:47 +0000 Subject: [PATCH 19/38] feat: remove sharedAttributeCopyCreated event --- _docs_integrate/connector-events.md | 1 - 1 file changed, 1 deletion(-) 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. | From 2b75bfbe93f9ef632ff82f4534c296394b050cf5 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 16:34:14 +0000 Subject: [PATCH 20/38] feat: introduce new NotificationItems --- _docs_integrate/data-model-overview.md | 60 +++++++++++++------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index e843a96de..7402b0721 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -912,47 +912,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 in which the RelationshipAttribute exists, and the peer deletes their forwarded Attribute, a ForwardedAttributeDeletedByPeerNotificationItem will be sent to the Identity. +Internally, for the corresponding Attribute of the Identity, 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 their own Attribute, 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 +#### PeerAttributeSucceededNotificationItem -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. +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 | `"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 | `"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). | -#### ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem +#### PeerRelationshipAttributeDeletedByPeerNotificationItem -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"`. +If an Identity has shared a [PeerRelationshipAttribute](#peerrelationshipattribute) with a peer and deletes their PeerRelationshipAttribute, 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 | `"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 | `"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. | ## Attributes From 28b97de7deba980d8b2de5b687eece2f322236c3 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 16:53:02 +0000 Subject: [PATCH 21/38] feat: use new NotificationItems in use cases and scenarios --- _docs_integrate/data-model-overview.md | 8 ++++---- _docs_integrate/delete-attributes.md | 6 +++--- _docs_integrate/update-attributes-by-succession.md | 2 +- ...tion-delete-a-peer-shared-attribute-and-notify-peer.md | 2 +- ...e-a-thirdpartyrelationshipattribute-and-notify-peer.md | 2 +- ...tion-delete-an-own-shared-attribute-and-notify-peer.md | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 7402b0721..bdde7fd01 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -468,8 +468,8 @@ Should the recipient reject the DeleteAttributeRequestItem, the emitted Attribut 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 recipient's Attribute will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the recipient sent in their Response. Accordingly, the `deletionStatus` of the emitted Attribute of the owner will move to `"ToBeDeletedByRecipient"` with the same `deletionDate`. -Once the recipient's Attribute is deleted by the recipient, a [PeerSharedAttributeDeletedByPeerNotificationItem](#peersharedattributedeletedbypeernotificationitem) is sent to the owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. -Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnSharedAttributeDeletedByOwnerNotificationItem](#ownsharedattributedeletedbyownernotificationitem) is sent to the recipient. +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 owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. +Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnAttributeDeletedByOwnerNotificationItem](#ownattributedeletedbyownernotificationitem) is sent to the recipient. If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` 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 recipient will be able to delete their Attribute as planned. This will be the case, if the recipient already accepted the DeleteAttributeRequestItem for this particular Attribute. @@ -487,8 +487,8 @@ Should the recipient reject the DeleteAttributeRequestItem, the emitted Attribut 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 recipient's Attribute will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the recipient sent in their Response. Accordingly, the `deletionStatus` of the emitted Attribute of the owner will move to `"ToBeDeletedByRecipient"` with the same `deletionDate`. -Once the recipient's Attribute is deleted by the recipient, a [PeerSharedAttributeDeletedByPeerNotificationItem](#peersharedattributedeletedbypeernotificationitem) is sent to the owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. -Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnSharedAttributeDeletedByOwnerNotificationItem](#ownsharedattributedeletedbyownernotificationitem) is sent to the recipient. +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 owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. +Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnAttributeDeletedByOwnerNotificationItem](#ownattributedeletedbyownernotificationitem) is sent to the recipient. If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` 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 recipient will be able to delete their Attribute as planned. This will be the case, if the recipient already accepted the DeleteAttributeRequestItem for this particular Attribute. diff --git a/_docs_integrate/delete-attributes.md b/_docs_integrate/delete-attributes.md index 201be61b1..fe8b1647f 100644 --- a/_docs_integrate/delete-attributes.md +++ b/_docs_integrate/delete-attributes.md @@ -108,7 +108,7 @@ 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. +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` `"DeletedByPeer"` 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). @@ -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,7 +132,7 @@ 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. 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-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..86db71412 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` `"DeletedByPeer"` 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..b8653abc7 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` `"DeletedByPeer"` 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..b47699f8a 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` `"DeletedByOwner"` and the time of receiving the Notification as `deletionDate`. - The `notificationId` is returned. ## On Failure From 0e7db83005b5fcee2dd98b11a83d27167cf81e5b Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 17:18:34 +0000 Subject: [PATCH 22/38] feat: improve AttributeForwardingDetails description --- _docs_integrate/data-model-overview.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index bdde7fd01..324573151 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -448,13 +448,13 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ## AttributeForwardingDetails -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. - -The AttributeForwardingDetails 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. +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 Attribute that was shared. | +| 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. | From 81bd5ddf34d370775b180d4efaf3cfebb3249ff1 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 17:25:34 +0000 Subject: [PATCH 23/38] feat: improve description of deletionInfo property --- _docs_integrate/data-model-overview.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 324573151..84d06eb32 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -401,7 +401,7 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m | 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 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. | +| 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. | ### OwnRelationshipAttribute @@ -429,7 +429,7 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m | 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 peer of the Relationship, as well as the point in time of that deletion. | +| 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 @@ -452,13 +452,13 @@ If an Identity has shared an [OwnIdentityAttribute](#ownidentityattribute) with 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 peer of the Relationship, as well as the point in time of that deletion. | +| 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. | ## EmittedAttributeDeletionInfo From 19a8078b30e76e9a764dddc83314ddf63104df68 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 17:34:53 +0000 Subject: [PATCH 24/38] feat: remove own shared and peer shared from data model --- _docs_integrate/data-model-overview.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 84d06eb32..823a46388 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -591,7 +591,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 own 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}
  • If mustBeAccepted is set to true, the peer cannot accept the Request without accepting this RequestItem.
  • If mustBeAccepted is set to false, the peer can accept the Request even though the RequestItem is rejected.
{:/} | @@ -771,9 +771,9 @@ 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"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. +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 | | ----------- | -------------------------------------------- | -------------------------------------------------------- | @@ -784,8 +784,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"` or `"ToBeDeletedByRecipient"` 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. From 150d3fb745b099fca5d7d8203b5b933de8b5b4aa Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 17:39:59 +0000 Subject: [PATCH 25/38] feat: use new deletionStatuses in use cases and scenarios --- _docs_integrate/delete-attributes.md | 6 +++--- _docs_integrate/propose-attributes-to-peer.md | 4 ++-- _docs_integrate/read-attributes-from-peer.md | 4 ++-- _docs_integrate/request-and-response-introduction.md | 6 +++--- ...mption-delete-a-peer-shared-attribute-and-notify-peer.md | 2 +- ...ete-a-thirdpartyrelationshipattribute-and-notify-peer.md | 2 +- ...mption-delete-an-own-shared-attribute-and-notify-peer.md | 2 +- .../use-case-consumption-share-a-repositoryattribute.md | 4 ++-- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/_docs_integrate/delete-attributes.md b/_docs_integrate/delete-attributes.md index fe8b1647f..08d5f0e69 100644 --- a/_docs_integrate/delete-attributes.md +++ b/_docs_integrate/delete-attributes.md @@ -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.
@@ -109,7 +109,7 @@ To [delete a peer shared Attribute]({% link _docs_use-cases/use-case-consumption 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 [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` `"DeletedByPeer"` and the time of receiving the Notification as `deletionDate`. +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). @@ -135,7 +135,7 @@ Moreover, if the own shared Attribute had a successor, its `succeeds` property w 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/propose-attributes-to-peer.md b/_docs_integrate/propose-attributes-to-peer.md index 7786fcf6e..c6108ad9e 100644 --- a/_docs_integrate/propose-attributes-to-peer.md +++ b/_docs_integrate/propose-attributes-to-peer.md @@ -163,11 +163,11 @@ Depending on whether the Recipient sends back an IdentityAttribute or a Relation 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. diff --git a/_docs_integrate/read-attributes-from-peer.md b/_docs_integrate/read-attributes-from-peer.md index d880bf4ed..13a37936b 100644 --- a/_docs_integrate/read-attributes-from-peer.md +++ b/_docs_integrate/read-attributes-from-peer.md @@ -171,11 +171,11 @@ Depending on whether the Recipient sends back an IdentityAttribute or a Relation 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. 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_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 86db71412..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 [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` `"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 b8653abc7..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 [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` `"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 b47699f8a..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 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` `"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-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. From b5d2eb96392da4653f4d70ce20f6976ea4c61413 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Thu, 30 Oct 2025 17:55:25 +0000 Subject: [PATCH 26/38] feat: mention NotificationItem changes in v7 migration guide --- _docs_integrate/migration-from-v6-to-v7.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index a6be774bf..8bf64d6e6 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -84,7 +84,9 @@ Furthermore, LocalAttribute subtypes have been introduced to help distinguish be Instead, there are AttributeForwardingDetails and flattened sharing properties depending on the type of LocalAttribute. - LocalAttributeDeletionInfo has been replaced by EmittedAttributeDeletionInfo and ReceivedAttributeDeletionInfo depending on the type of LocalAttribute. - The `parentId` property was removed as there is no child Attribute feature anymore. -- Many NotificationItems and many use cases have been renamed. +- The OwnSharedAttributeDeletedByOwnerNotificationItem, the PeerSharedAttributeDeletedByPeerNotificationItem, the PeerSharedAttributeSucceededNotificationItem and the ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem have been removed. + The new NotificationItems are ForwardedAttributeDeletedByPeerNotificationItem, OwnAttributeDeletedByOwnerNotificationItem, PeerAttributeSucceededNotificationItem and PeerRelationshipAttributeDeletedByPeerNotificationItem. +- Many use cases have been renamed. ### Changed Behavior of Known Features From a3380724853882f44800c30a121ea3c2e0a14cac Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 07:53:41 +0000 Subject: [PATCH 27/38] feat: improve v7 migration guide for changed data structures --- _docs_integrate/migration-from-v6-to-v7.md | 39 +++++++++++----------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index 8bf64d6e6..e543d1fef 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -68,25 +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. - -#### New LocalAttribute Concept - -With the new LocalAttribute concept, no Attribute copy is created anymore when an Attribute is shared. -Furthermore, LocalAttribute subtypes have been introduced to help distinguish between different kinds of LocalAttributes. - -- RepositoryAttributes were renamed to OwnIdentityAttributes. - There are no own shared IdentityAttributes anymore. - Instead, AttributeForwardingDetails are created. -- Peer shared IdentityAttributes and peer shared RelationshipAttributes have been replaced by the LocalAttribute subtypes PeerIdentityAttribute and PeerRelationshipAttribute. -- Instead of emitted ThirdPartyRelationshipAttributes, AttributeForwardingDetails are created. - For this reason, the received ThirdPartyRelationshipAttribute is now simply called ThirdPartyRelationshipAttribute. -- `shareInfo` property and the LocalAttributeShareInfo data object were removed. - Instead, there are AttributeForwardingDetails and flattened sharing properties depending on the type of LocalAttribute. -- LocalAttributeDeletionInfo has been replaced by EmittedAttributeDeletionInfo and ReceivedAttributeDeletionInfo depending on the type of LocalAttribute. -- The `parentId` property was removed as there is no child Attribute feature anymore. -- The OwnSharedAttributeDeletedByOwnerNotificationItem, the PeerSharedAttributeDeletedByPeerNotificationItem, the PeerSharedAttributeSucceededNotificationItem and the ThirdPartyRelationshipAttributeDeletedByPeerNotificationItem have been removed. - The new NotificationItems are ForwardedAttributeDeletedByPeerNotificationItem, OwnAttributeDeletedByOwnerNotificationItem, PeerAttributeSucceededNotificationItem and PeerRelationshipAttributeDeletedByPeerNotificationItem. -- Many use cases have been renamed. +- 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 third party, 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`. + The `initialAttributePeer` property is additionally needed for the ThirdPartyRelationshipAttribute. + - 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 `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. + - The introduction of the new [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) subtypes have led to 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). ### Changed Behavior of Known Features @@ -128,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 From 68cc808b66ed9c65d36c7f1b270e7f83e97d84a5 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 08:01:35 +0000 Subject: [PATCH 28/38] feat: move LocalAttribute description to its subtypes --- _docs_integrate/data-model-overview.md | 47 ++++++++++++++++---------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 823a46388..c7804bb4f 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -358,27 +358,20 @@ 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 two 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. Such a LocalAttribute is an **OwnIdentityAttribute**. The Identity can share 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, AttributeForwardingDetails are created that reference the `id` of the OwnIdentityAttribute as `attributeId`. -- 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 which is a **PeerIdentityAttribute**. An IdentityAttribute received from another Identity cannot be shared further. - -In contrast, [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. - -- The LocalAttribute of the `owner` is an **OwnRelationshipAttribute**. -- The peer’s LocalAttribute is a **PeerRelationshipAttribute**. - -A RelationshipAttribute can be forwarded to a peer which is not involved in the Relationship in which the RelationshipAttribute exists if its `confidentiality` is not set to `"private"`. - -- For the Identity which is in the Relationship in whose context the forwarded RelationshipAttribute exists, AttributeForwardingDetails are created that reference the `id` of the source RelationshipAttribute as `attributeId`. -- For the Identity which received the forwarded RelationshipAttribute, a new LocalAttribute is created which is a **ThirdPartyRelationshipAttribute**. - -In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.md %}) more details on the terminology related to LocalAttributes can be found. +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 [Attribute introduction]({% link _docs_integrate/attribute-introduction.md %}), more details on the terminology related to LocalAttributes can be found. ### OwnIdentityAttribute +In the case of IdentityAttributes, there are two 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. +Such a LocalAttribute is an **OwnIdentityAttribute**. +The Identity can share 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, AttributeForwardingDetails are created that reference the `id` of the OwnIdentityAttribute as `attributeId`. + | Name | Type | Description | | ----------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | @@ -391,6 +384,10 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### PeerIdentityAttribute +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 which is a **PeerIdentityAttribute**. +An IdentityAttribute received from another Identity cannot be shared further. + | Name | Type | Description | | --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | @@ -405,6 +402,11 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### 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 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. +The LocalAttribute of the `owner` is an **OwnRelationshipAttribute** and the peer’s LocalAttribute is a **PeerRelationshipAttribute**. + | Name | Type | Description | | --------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | @@ -419,6 +421,11 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### 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. +The LocalAttribute of the `owner` is an **OwnRelationshipAttribute** and the peer’s LocalAttribute is a **PeerRelationshipAttribute**. + | Name | Type | Description | | --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | @@ -433,6 +440,10 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### ThirdPartyRelationshipAttribute +A RelationshipAttribute can be forwarded to a peer which is not involved in the Relationship in which the RelationshipAttribute exists if its `confidentiality` is not set to `"private"`. +For the Identity which is in the Relationship in whose context the forwarded RelationshipAttribute exists, AttributeForwardingDetails are created that reference the `id` of the source RelationshipAttribute, which is an OwnRelationshipAttribute or a PeerRelationshipAttribute, as `attributeId`. +For the Identity which received the forwarded RelationshipAttribute, a new LocalAttribute is created which is a **ThirdPartyRelationshipAttribute**. + | Name | Type | Description | | -------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | `string` | {% include descr_id class="LocalAttribute" prefix="ATT" %} | From 76c546366299950b1317ddf8b92a60d75d63cdda Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 09:10:37 +0000 Subject: [PATCH 29/38] feat: improve descriptions of LocalAttribute subtypes --- _docs_integrate/data-model-overview.md | 27 +++++++++++--------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index c7804bb4f..5050e313f 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -361,16 +361,14 @@ With the information in this type you can clearly identify the Transport object 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 -In the case of IdentityAttributes, there are two 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. -Such a LocalAttribute is an **OwnIdentityAttribute**. -The Identity can share 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, AttributeForwardingDetails are created that reference the `id` of the OwnIdentityAttribute as `attributeId`. +If an Identity [creates an IdentityAttribute for itself]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-an-identityattribute-for-yourself), an OwnIdentityAttribute is created. +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 | | ----------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -384,9 +382,8 @@ In that case, AttributeForwardingDetails are created that reference the `id` of ### PeerIdentityAttribute -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 which is a **PeerIdentityAttribute**. -An IdentityAttribute received from another Identity cannot be shared further. +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 | | --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -404,8 +401,7 @@ An IdentityAttribute received from another Identity cannot be shared further. [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. -The LocalAttribute of the `owner` is an **OwnRelationshipAttribute** and the peer’s LocalAttribute is a **PeerRelationshipAttribute**. +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 | | --------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -423,8 +419,7 @@ The LocalAttribute of the `owner` is an **OwnRelationshipAttribute** and the pee [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. -The LocalAttribute of the `owner` is an **OwnRelationshipAttribute** and the peer’s LocalAttribute is a **PeerRelationshipAttribute**. +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 | | --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -440,9 +435,9 @@ The LocalAttribute of the `owner` is an **OwnRelationshipAttribute** and the pee ### ThirdPartyRelationshipAttribute -A RelationshipAttribute can be forwarded to a peer which is not involved in the Relationship in which the RelationshipAttribute exists if its `confidentiality` is not set to `"private"`. -For the Identity which is in the Relationship in whose context the forwarded RelationshipAttribute exists, AttributeForwardingDetails are created that reference the `id` of the source RelationshipAttribute, which is an OwnRelationshipAttribute or a PeerRelationshipAttribute, as `attributeId`. -For the Identity which received the forwarded RelationshipAttribute, a new LocalAttribute is created which is a **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 | | -------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | From 5e0cf41bba06f312a889242311142dad4b049d41 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 09:23:19 +0000 Subject: [PATCH 30/38] refactor: changed wording in v7 migration guide --- _docs_integrate/migration-from-v6-to-v7.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index e543d1fef..28f97502c 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -75,11 +75,11 @@ The step-by-step instructions can be consulted to start the migration to version 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 third party, 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). + 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`. - The `initialAttributePeer` property is additionally needed for the ThirdPartyRelationshipAttribute. + 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 `parentId` property of the [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) was removed as there is no child Attribute feature anymore. From 1150e65034a591717c1104a37cc123b7567defea Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 10:15:58 +0000 Subject: [PATCH 31/38] feat: improve descriptions of AttributeDeletionInfos --- _docs_integrate/data-model-overview.md | 67 +++++++++++--------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 5050e313f..7086a1370 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -397,6 +397,21 @@ An [IdentityAttribute](#identityattribute) received from another Identity cannot | 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]({%link _docs_integrate/data-model-overview.md %}#peerrelationshipattributedeletedbypeernotificationitem) is sent to the recipient. +If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` 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 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}
  • an upcoming deletion is planned (for "ToBeDeleted").
  • a completed deletion has been notified (for "DeletedByEmitter").
{:/} | + ### OwnRelationshipAttribute [RelationshipAttributes](#relationshipattribute) always exist in the context of a [Relationship](#relationship). @@ -415,6 +430,20 @@ The [creation of a RelationshipAttribute]({% link _docs_integrate/create-attribu | 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]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) or, in a special case, a [PeerRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#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 current time stamp as `deletionDate`. + +| Name | Type | Description | +| -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| deletionStatus | `"DeletionRequestSent"` \| `"DeletionRequestRejected"` \| `"ToBeDeletedByRecipient"` \| `"DeletedByRecipient"` | The deletion status of the Attribute. | +| deletionDate | `string` | The point in time
{::nomarkdown}
  • the Request with a DeleteAttributeRequestItem was sent (for "DeletionRequestSent").
  • the Response with a RejectResponseItem was received (for "DeletionRequestRejected").
  • an upcoming deletion is planned (for "ToBeDeletedByRecipient").
  • a completed deletion has been notified (for "DeletedByRecipient").
{:/} | + ### PeerRelationshipAttribute [RelationshipAttributes](#relationshipattribute) always exist in the context of a [Relationship](#relationship). @@ -466,44 +495,6 @@ This also makes it possible to notify that peer if the LocalAttribute changes. | 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. | -## EmittedAttributeDeletionInfo - -The EmittedAttributeDeletionInfo holds information about the deletion status of the recipient's 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 recipient, their emitted Attribute will get `"DeletionRequestSent"` as `deletionStatus` and the time of sending the Request as `deletionDate`. -Should the recipient reject the DeleteAttributeRequestItem, the emitted 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 recipient's Attribute will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the recipient sent in their Response. -Accordingly, the `deletionStatus` of the emitted Attribute of the owner will move to `"ToBeDeletedByRecipient"` with the same `deletionDate`. -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 owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. -Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnAttributeDeletedByOwnerNotificationItem](#ownattributedeletedbyownernotificationitem) is sent to the recipient. -If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` 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 recipient will be able to delete their Attribute as planned. -This will be the case, if the recipient already accepted the DeleteAttributeRequestItem for this particular Attribute. - -| Name | Type | Description | -| -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| deletionStatus | `"DeletionRequestSent"` \| `"DeletionRequestRejected"` \| `"ToBeDeletedByRecipient"` \| `"DeletedByRecipient"` | The deletion status of the recipient's Attribute. | -| deletionDate | `string` | The point in time
{::nomarkdown}
  • the Request with a DeleteAttributeRequestItem was sent (for "DeletionRequestSent").
  • the Response with a RejectResponseItem was received (for "DeletionRequestRejected").
  • an upcoming deletion is planned (for "ToBeDeletedByRecipient").
  • a completed deletion has been notified (for "DeletedByRecipient").
{:/} | - -## ReceivedAttributeDeletionInfo - -The ReceivedAttributeDeletionInfo holds information about the deletion status of the recipient's or emitter's 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 recipient, their emitted Attribute will get `"DeletionRequestSent"` as `deletionStatus` and the time of sending the Request as `deletionDate`. -Should the recipient reject the DeleteAttributeRequestItem, the emitted 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 recipient's Attribute will be set to `"ToBeDeleted"` and its `deletionDate` will be set to the `deletionDate` the recipient sent in their Response. -Accordingly, the `deletionStatus` of the emitted Attribute of the owner will move to `"ToBeDeletedByRecipient"` with the same `deletionDate`. -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 owner, where the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. -Likewise, if the owner deletes their emitted Attribute, before the recipient deleted their Attribute, an [OwnAttributeDeletedByOwnerNotificationItem](#ownattributedeletedbyownernotificationitem) is sent to the recipient. -If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` 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 recipient will be able to delete their Attribute as planned. -This will be the case, if the recipient already accepted the DeleteAttributeRequestItem for this particular Attribute. - -| Name | Type | Description | -| -------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| deletionStatus | `"ToBeDeleted"` \| `"DeletedByEmitter"` | The deletion status of the recipient's or emitter's Attribute. | -| deletionDate | `string` | The point in time
{::nomarkdown}
  • an upcoming deletion is planned (for "ToBeDeleted").
  • a completed deletion has been notified (for "DeletedByEmitter").
{:/} | - ## AttributeTagCollection The AttributeTagCollection is defined by the Backbone and specifies which `tags` are allowed for which [IdentityAttribute]({% link _docs_integrate/data-model-overview.md %}#identityattribute) `value.@type`. From 85f6208bbf61066daf483f9de106eeb968cc6699 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 10:37:47 +0000 Subject: [PATCH 32/38] refactor: make descriptions more consistent --- _docs_integrate/data-model-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 7086a1370..f0178174b 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -436,7 +436,7 @@ The EmittedAttributeDeletionInfo holds information about the deletion status of 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]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) or, in a special case, a [PeerRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#peerrelationshipattributedeletedbypeernotificationitem) is sent to the emitter, once the recipient's Attribute is deleted. +Either 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, once the recipient's Attribute is deleted. Finally, the `deletionStatus` of the emitted Attribute is set to `"DeletedByRecipient"` with the current time stamp as `deletionDate`. | Name | Type | Description | From 68e32855edfb2131060eb861883492ce53da11fb Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 10:42:12 +0000 Subject: [PATCH 33/38] refactor: changed wording --- _docs_integrate/data-model-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index f0178174b..364becaa5 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -588,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 Attribute you wish for the peer to delete. This will match the `id` of the corresponding peer 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}
  • If mustBeAccepted is set to true, the peer cannot accept the Request without accepting this RequestItem.
  • If mustBeAccepted is set to false, the peer can accept the Request even though the RequestItem is rejected.
{:/} | From 26c8d75d59114537fd0be9365ac42693725ce34d Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Fri, 31 Oct 2025 10:50:42 +0000 Subject: [PATCH 34/38] feat: improve descriptions of NotificationItems --- _docs_integrate/data-model-overview.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 364becaa5..347a5115d 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -911,8 +911,8 @@ NotificationItems are sent inside a Notification and specify which processes sho #### ForwardedAttributeDeletedByPeerNotificationItem -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, and the peer deletes their forwarded Attribute, a ForwardedAttributeDeletedByPeerNotificationItem will be sent to the Identity. -Internally, for the corresponding Attribute of the Identity, the `deletionInfo.deletionStatus` will be set to `"DeletedByRecipient"`. +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 | | ----------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | @@ -921,7 +921,7 @@ Internally, for the corresponding Attribute of the Identity, the `deletionInfo.d #### OwnAttributeDeletedByOwnerNotificationItem -If an Identity has shared an [OwnIdentityAttribute](#ownidentityattribute) or an [OwnRelationshipAttribute](#ownrelationshipattribute) with a peer and deletes their own Attribute, an OwnAttributeDeletedByOwnerNotificationItem will be sent to the peer. +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 | @@ -931,7 +931,7 @@ Internally, for the corresponding Attribute of the peer, the `deletionInfo.delet #### PeerAttributeSucceededNotificationItem -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. +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 | @@ -943,7 +943,7 @@ Internally, the succeeded version will then be created at the peer's side as suc #### PeerRelationshipAttributeDeletedByPeerNotificationItem -If an Identity has shared a [PeerRelationshipAttribute](#peerrelationshipattribute) with a peer and deletes their PeerRelationshipAttribute, a PeerRelationshipAttributeDeletedByPeerNotificationItem will be sent to the peer. +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 | From bbef73f6fd757acc37f8c3329ffd9dc631b7b8d4 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Mon, 3 Nov 2025 08:36:13 +0000 Subject: [PATCH 35/38] refactor: changed wording --- _docs_integrate/data-model-overview.md | 2 +- _docs_integrate/delete-attributes.md | 2 +- _docs_integrate/migration-from-v6-to-v7.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index 347a5115d..a0c22d128 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -366,7 +366,7 @@ In the [Attribute introduction]({% link _docs_integrate/attribute-introduction.m ### OwnIdentityAttribute -If an Identity [creates an IdentityAttribute for itself]({% link _docs_integrate/create-attributes-for-yourself.md %}#create-an-identityattribute-for-yourself), an OwnIdentityAttribute is created. +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. diff --git a/_docs_integrate/delete-attributes.md b/_docs_integrate/delete-attributes.md index 08d5f0e69..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 [EmittedAttributeDeletionInfo]({% link _docs_integrate/data-model-overview.md %}#emittedattributedeletioninfo). +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. diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index 28f97502c..5df0fa2d0 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -84,7 +84,7 @@ The step-by-step instructions can be consulted to start the migration to version The LocalAttributeDeletionInfo data object has been removed. - 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. - - The introduction of the new [LocalAttribute]({% link _docs_integrate/data-model-overview.md %}#localattribute) subtypes have led to renaming of the [NotificationItems]({% link _docs_integrate/data-model-overview.md %}#notificationitems). + - 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). From 62c452499edbc2f72ec4c20623b4dd99593e893b Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Mon, 3 Nov 2025 11:24:28 +0000 Subject: [PATCH 36/38] refactor: changed order --- _docs_integrate/data-model-overview.md | 20 ++++++++++---------- _docs_integrate/migration-from-v6-to-v7.md | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index a0c22d128..c347ade37 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -929,6 +929,16 @@ Internally, for the corresponding Attribute of the peer, the `deletionInfo.delet | @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. | +#### PeerRelationshipAttributeDeletedByPeerNotificationItem + +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 | `"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. | + #### PeerAttributeSucceededNotificationItem 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. @@ -941,16 +951,6 @@ Internally, the succeeded version will then be created at the peer's side as suc | successorId | `string` | The `id` of the [LocalAttribute](#localattribute) it was succeeded by. | | successorContent | [`IdentityAttribute`](#identityattribute) \| [`RelationshipAttribute`](#relationshipattribute) | The updated `content` of the [LocalAttribute](#localattribute). | -#### PeerRelationshipAttributeDeletedByPeerNotificationItem - -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 | `"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. | - ## Attributes An Attribute is some piece of information about an Identity itself (e.g. its name, address, birth date, etc.) or about an Identity in the context of a Relationship (e.g. the customer id the of the user the Relationship). Since the two scenarios differ quite a lot, there are two different types for them: IdentityAttribute and RelationshipAttribute. diff --git a/_docs_integrate/migration-from-v6-to-v7.md b/_docs_integrate/migration-from-v6-to-v7.md index 5df0fa2d0..609db8569 100644 --- a/_docs_integrate/migration-from-v6-to-v7.md +++ b/_docs_integrate/migration-from-v6-to-v7.md @@ -82,11 +82,11 @@ The step-by-step instructions can be consulted to start the migration to version 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 `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. - 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 From 64ec98fa8aac6a3dea9e192a5d4f0a767cdcdc3a Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Mon, 3 Nov 2025 11:36:16 +0000 Subject: [PATCH 37/38] refactor: changed current time stamp wording --- _docs_integrate/data-model-overview.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index c347ade37..e5c9ce418 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -403,8 +403,8 @@ The ReceivedAttributeDeletionInfo holds information about the deletion status of 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]({%link _docs_integrate/data-model-overview.md %}#peerrelationshipattributedeletedbypeernotificationitem) is sent to the recipient. -If the `deletionInfo` of the recipient was undefined before, the `deletionStatus` will be set to `"DeletedByEmitter"` with the current time stamp as `deletionDate`. +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 | @@ -436,8 +436,8 @@ The EmittedAttributeDeletionInfo holds information about the deletion status of 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]({%link _docs_integrate/data-model-overview.md %}#forwardedattributedeletedbypeernotificationitem) or a [PeerRelationshipAttributeDeletedByPeerNotificationItem]({%link _docs_integrate/data-model-overview.md %}#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 current time stamp as `deletionDate`. +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 | | -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | From ca7fd7e9d89500ddaad8cda95b2e684d652c0e78 Mon Sep 17 00:00:00 2001 From: Britta Stallknecht Date: Mon, 3 Nov 2025 11:49:16 +0000 Subject: [PATCH 38/38] feat: handle ToBeDeletedByRecipient properly --- _docs_integrate/data-model-overview.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_docs_integrate/data-model-overview.md b/_docs_integrate/data-model-overview.md index e5c9ce418..720660f30 100644 --- a/_docs_integrate/data-model-overview.md +++ b/_docs_integrate/data-model-overview.md @@ -768,7 +768,8 @@ 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 corresponding AttributeForwardingDetails of the own [LocalAttribute](#localattribute) don't have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. +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. @@ -781,7 +782,7 @@ Note that the `id` of the own/peer Attribute of the Sender matches the `id` of t ##### 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 corresponding AttributeForwardingDetails of the own [LocalAttribute](#localattribute) don't have `"DeletedByRecipient"` or `"ToBeDeletedByRecipient"` as `deletionInfo.deletionStatus`. +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.