From 3319d9d0d2e6b60f95403a2ec45448aab60d2311 Mon Sep 17 00:00:00 2001 From: Marcos Caceres Date: Mon, 30 Jun 2025 17:11:04 +1000 Subject: [PATCH 01/19] Define Coordinator --- index.html | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/index.html b/index.html index 659ac64c..02a6bb8a 100644 --- a/index.html +++ b/index.html @@ -471,7 +471,120 @@

issuance protocol is identified by a [=digital credential/protocol identifier=]. See also section [[[#protocol-registry]]]. +
+ Digital credential coordinator +
+
+ See [=credential request coordinator=]. +
+

+ Credential Request Coordinator +

+

+ The credential request coordinator + is a user-agent-defined component that mediates [=digital credential=] + interactions within a [=top-level traversable=]. Each [=top-level + traversable=] has exactly one associated coordinator. The coordinator + ensures that at most one interaction is active across all [=child + navigables=], orchestrates the end-to-end flow of presentation or + issuance, and manages transitions between [=credential request + coordinator/interaction states=]. A user agent may delegate some or all + coordinator responsibilities to external wallet applications, platform + components, or other trusted entities according to user or platform + policy. +

+

+ The coordinator manages the lifecycle of the interaction's {{Promise}} + and its associated {{AbortSignal}}, including resolution with the user's + selected [=digital credential/digital credential|digital credential(s)=] + or rejection due to errors or cancellation by user or program. +

+

+ The [=credential request coordinator=]: +

+ + +

+ Interaction states +

+

+ The [=credential request coordinator=] has a finite set of + interaction + states, which are used to manage the lifecycle of a [=digital + credential/presentation request=] or [=digital credential/issuance + request=]: +

+
+
+ "idle": +
+
+ No credential interaction is currently in progress. +
+
+ "requesting": +
+
+ A credential interaction is in progress and the user interface is + presented. +
+
+ "aborting": +
+
+ The active interaction is being canceled due to an error, a user + action, or a [=AbortController/signal abort=]; the coordinator is + cleaning up before returning to [=credential request + coordinator/idle=]. +
+
+

+ The coordinator is initialized in the [=credential request + coordinator/idle=] [=credential request coordinator/interaction state=]. +

+

+ Prepare credential requests +

+

+ To be written. +

+

+ Abort the credential request +

+

+ To be written. +

+

+ Dismiss holder chooser +

+

+ To be written. +

+

+ Present holder chooser +

+

+ To be written. +

From 129664e29ee307a482fca30927399b32265aa579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:22:25 +0800 Subject: [PATCH 02/19] Update index.html Co-authored-by: Mohamed Amir Yosef --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 8e7e2feb..e4509511 100644 --- a/index.html +++ b/index.html @@ -579,7 +579,7 @@

  • Interprets each individual request in the input list as targeting a specific [=holder=], and prepares [=holder=] options accordingly.
  • -
  • Presents the available [=holders=] to the user for selection. +
  • Requests the platform to display the available credentials and/or holders for user selection.
  • Resolves the interaction's {{Promise}} with the selected [=digital credential=] or rejects it to indicate cancellation. From 35defaad7068a9c086b98d93302df93d5cfd7731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:27:44 +0800 Subject: [PATCH 03/19] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index e4509511..5acf7962 100644 --- a/index.html +++ b/index.html @@ -642,7 +642,7 @@

    To be written.

    - Dismiss holder chooser + Dismissing the credential request

    To be written. From 644940358c2a003aeaea3a38179f66b18053f0a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:28:02 +0800 Subject: [PATCH 04/19] Update index.html Co-authored-by: Ted Thibodeau Jr --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 5acf7962..ac147633 100644 --- a/index.html +++ b/index.html @@ -587,8 +587,8 @@

    From b7b49403ff514680caec0c7347ed63af102054d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:28:42 +0800 Subject: [PATCH 05/19] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index ac147633..fce38cb1 100644 --- a/index.html +++ b/index.html @@ -648,7 +648,7 @@

    To be written.

    - Present holder chooser + Present the credential request

    To be written. From 64d7a2370207ce279881a27aec91a54985becba9 Mon Sep 17 00:00:00 2001 From: Marcos Caceres Date: Thu, 9 Oct 2025 14:31:18 +0800 Subject: [PATCH 06/19] tidy --- index.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index fce38cb1..b3b5b3ae 100644 --- a/index.html +++ b/index.html @@ -579,7 +579,8 @@

  • Interprets each individual request in the input list as targeting a specific [=holder=], and prepares [=holder=] options accordingly.
  • -
  • Requests the platform to display the available credentials and/or holders for user selection. +
  • Requests the platform to display the available credentials and/or + holders for user selection.
  • Resolves the interaction's {{Promise}} with the selected [=digital credential=] or rejects it to indicate cancellation. @@ -588,7 +589,8 @@

    From 0da805b9dc62e06800228ab92800793788d5ebfc Mon Sep 17 00:00:00 2001 From: Mohamed Amir Yosef Date: Thu, 9 Oct 2025 08:46:31 +0200 Subject: [PATCH 07/19] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marcos Cáceres --- index.html | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/index.html b/index.html index b3b5b3ae..ff8775ca 100644 --- a/index.html +++ b/index.html @@ -554,21 +554,23 @@

    The credential request coordinator is a user-agent-defined component that mediates [=digital credential=] - interactions within a [=top-level traversable=]. Each [=top-level + interactions through the [=top-level traversable=]. Each [=top-level traversable=] has exactly one associated coordinator. The coordinator ensures that at most one interaction is active across all [=child navigables=], orchestrates the end-to-end flow of presentation or issuance, and manages transitions between [=credential request - coordinator/interaction states=]. A user agent may delegate some or all + coordinator/interaction states=]. +

    +

    A user agent MAY delegate some or all coordinator responsibilities to external wallet applications, platform components, or other trusted entities according to user or platform policy.

    The coordinator manages the lifecycle of the interaction's {{Promise}} - and its associated {{AbortSignal}}, including resolution with the user's - selected [=digital credential/digital credential|digital credential(s)=] - or rejection due to errors or cancellation by user or program. + and its associated {{AbortSignal}} (if any), including resolution with the user's + selected [=digital credential=] + or rejection due to errors or the user or program aborting the credential request.

    The [=credential request coordinator=]: @@ -576,14 +578,11 @@

    • Validates and transforms presentation or issuance inputs and outputs.
    • -
    • Interprets each individual request in the input list as targeting a - specific [=holder=], and prepares [=holder=] options accordingly. -
    • Requests the platform to display the available credentials and/or - holders for user selection. + [=holders=] for user selection.
    • Resolves the interaction's {{Promise}} with the selected [=digital - credential=] or rejects it to indicate cancellation. + credential=] or [=rejects=] it to indicate that the credential request was aborted.

  • Resolves the interaction's {{Promise}} with the selected [=digital - credential=] or [=rejects=] it to indicate that the credential request was aborted. + credential=] or [=rejects=] it to indicate that the credential request + was aborted.
  • Resolves the interaction's {{Promise}} with the selected [=digital - credential=] or [=rejects=] it to indicate that the credential request + credential=] or [=rejects=] it to indicate that the [=credential request=] was aborted.
  • @@ -621,7 +621,7 @@

    "requesting":
    - A credential request is in progress and the user interface is + A [=credential request=] is in progress and the user interface is presented.
    From 84a36c96aacc95851f2e12bce04abdf96e92ab3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:53:05 +0800 Subject: [PATCH 11/19] Update index.html Co-authored-by: Mohamed Amir Yosef --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 66f6fb29..72d065b7 100644 --- a/index.html +++ b/index.html @@ -651,7 +651,7 @@

    To be written.

    - Dismissing the credential request + Dismiss the credential request

    To be written. From 93796f80b3682184563d819dc8510f04c8dd1568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:54:14 +0800 Subject: [PATCH 12/19] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 72d065b7..c142eea2 100644 --- a/index.html +++ b/index.html @@ -588,7 +588,7 @@

  • Requests the platform to display the available credentials and/or [=holders=] for user selection.
  • -
  • Resolves the interaction's {{Promise}} with the selected [=digital +
  • [=Resolves=] the interaction's {{Promise}} with the selected [=digital credential=] or [=rejects=] it to indicate that the [=credential request=] was aborted.
  • From 2db49dbb85a5e588d283dff8062de0a2909b450e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:55:02 +0800 Subject: [PATCH 13/19] Update index.html Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index c142eea2..24eadc19 100644 --- a/index.html +++ b/index.html @@ -585,8 +585,8 @@

    • Validates and transforms presentation or issuance inputs and outputs.
    • -
    • Requests the platform to display the available credentials and/or - [=holders=] for user selection. +
    • Requests the platform to display, for user selection, the credentials that are available for the current request and/or the holders that possess such credentials. + The availability of credentials and holders is determined by matching the request parameters, user consent, and platform policy.
    • [=Resolves=] the interaction's {{Promise}} with the selected [=digital credential=] or [=rejects=] it to indicate that the [=credential request=] From f966b7ce9286500eaa0f4000a3441084e9dd494a Mon Sep 17 00:00:00 2001 From: Mohamed Amir Yosef Date: Thu, 9 Oct 2025 08:57:44 +0200 Subject: [PATCH 14/19] Update index.html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marcos Cáceres --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 24eadc19..8126f185 100644 --- a/index.html +++ b/index.html @@ -597,7 +597,7 @@

      Although the coordinator handles input/output coordination, it is the responsibility of the platform together with available [=holders=], to - present the [=credential chooser=]. + present the UI that allows the user to choose a [=digital credential=].

      From 442f421c79b13941422dad07bbff53cc0f0ef11e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 9 Oct 2025 14:58:53 +0800 Subject: [PATCH 15/19] Update index.html Co-authored-by: Mohamed Amir Yosef --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 8126f185..1c3c9778 100644 --- a/index.html +++ b/index.html @@ -585,7 +585,7 @@

      • Validates and transforms presentation or issuance inputs and outputs.
      • -
      • Requests the platform to display, for user selection, the credentials that are available for the current request and/or the holders that possess such credentials. +
      • Requests the platform to display, for user selection, the credentials that are available for the current request and/or the holders that can handle the current request. The availability of credentials and holders is determined by matching the request parameters, user consent, and platform policy.
      • [=Resolves=] the interaction's {{Promise}} with the selected [=digital From ca1ff8bf908f8004eb793364df2dcd16f598719f Mon Sep 17 00:00:00 2001 From: Marcos Caceres Date: Thu, 9 Oct 2025 14:59:25 +0800 Subject: [PATCH 16/19] tidy --- index.html | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 1c3c9778..aa80c5b7 100644 --- a/index.html +++ b/index.html @@ -585,12 +585,15 @@

        • Validates and transforms presentation or issuance inputs and outputs.
        • -
        • Requests the platform to display, for user selection, the credentials that are available for the current request and/or the holders that can handle the current request. - The availability of credentials and holders is determined by matching the request parameters, user consent, and platform policy. +
        • Requests the platform to display, for user selection, the credentials + that are available for the current request and/or the holders that can + handle the current request. The availability of credentials and holders + is determined by matching the request parameters, user consent, and + platform policy.
        • -
        • [=Resolves=] the interaction's {{Promise}} with the selected [=digital - credential=] or [=rejects=] it to indicate that the [=credential request=] - was aborted. +
        • [=Resolves=] the interaction's {{Promise}} with the selected + [=digital credential=] or [=rejects=] it to indicate that the + [=credential request=] was aborted.

    - Is either a [=digital credential/presentation request=] or [=digital + Is either a [=digital credential/presentation request=] or an [=digital credential/issuance request=].
    From 7e40c9c2471f7f6fb0a8768a8fbe3f0393337eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Fri, 10 Oct 2025 05:47:12 +0800 Subject: [PATCH 18/19] Apply suggestions from code review Co-authored-by: Tim Cappalli Co-authored-by: Mohamed Amir Yosef --- index.html | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index c7faa1b2..87492c12 100644 --- a/index.html +++ b/index.html @@ -489,7 +489,7 @@

    Credential request

    - Is either a [=digital credential/presentation request=] or an [=digital + A [=digital credential/presentation request=] or an [=digital credential/issuance request=].
    @@ -547,7 +547,7 @@

    identifier=]. See also section [[[#protocol-registry]]].
    - Digital credential coordinator + Request coordinator
    See [=credential request coordinator=]. @@ -576,7 +576,7 @@

    The coordinator manages the lifecycle of the interaction's {{Promise}} and its associated {{AbortSignal}} (if any), including resolution with - the user's selected [=digital credential=] or rejection due to errors or + the user's selected [=digital credential=], the [=holder=]'s response or rejection due to errors or the user or program aborting the [=credential request=].

    @@ -592,7 +592,7 @@

    platform policy.
  • [=Resolves=] the interaction's {{Promise}} with the selected - [=digital credential=] or [=rejects=] it to indicate that the + [=digital credential=]. [=holder=]'s response or [=rejects=] it to indicate that the [=credential request=] was aborted.
  • @@ -600,7 +600,7 @@

    Although the coordinator handles input/output coordination, it is the responsibility of the platform together with available [=holders=], to - present the UI that allows the user to choose a [=digital credential=]. + present the UI that allows the user to choose a [=digital credential=] and/or a [=holder].

    @@ -609,16 +609,14 @@

    The [=credential request coordinator=] has a finite set of interaction - states, which are used to manage the lifecycle of a [=digital - credential/presentation request=] or [=digital credential/issuance - request=]: + states, which are used to manage the lifecycle of a [=credential request=]:

    "idle":
    - No credential request is currently in progress. + No [=credential request=] is currently in progress.
    "requesting": From 0433fcd5393ed9e8a1d826b25c69ed22a0abe1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Fri, 10 Oct 2025 05:51:08 +0800 Subject: [PATCH 19/19] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- index.html | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 87492c12..ef3ae01d 100644 --- a/index.html +++ b/index.html @@ -576,7 +576,7 @@

    The coordinator manages the lifecycle of the interaction's {{Promise}} and its associated {{AbortSignal}} (if any), including resolution with - the user's selected [=digital credential=], the [=holder=]'s response or rejection due to errors or + the user's selected [=digital credential=], the [=holder=]'s response, or rejection due to errors or the user or program aborting the [=credential request=].

    @@ -591,9 +591,7 @@

    is determined by matching the request parameters, user consent, and platform policy. -
  • [=Resolves=] the interaction's {{Promise}} with the selected - [=digital credential=]. [=holder=]'s response or [=rejects=] it to indicate that the - [=credential request=] was aborted. +
  • [=Resolves=] the interaction's {{Promise}} with the selected [=digital credential=] or [=holder=]'s response, or [=rejects=] it to indicate that the [=credential request=] was aborted.