開発者コンソール

承認ルールの確定

承認ルールの変更を、二人以上の Passkey で確定します。

Base URL は https://api.clavis.nexus です。パスは /orgs/{org}/approval-requestsです。認可は session JWT と本文の SignProof です(認証)。

手順

  1. 1. 組織(Org)を開きます。確定する人は /developers/{orgId}/settings/governanceで二人以上にします。

  2. 2. owner または admin が POST …/approval-requests で依頼を開きます。

    Request
    POST https://api.clavis.nexus/orgs/<org>/approval-requests
    Authorization: Bearer <session JWT>
    Content-Type: application/json
    
    {
      "request_kind": "policy_revision",
      "policy_revision_hash": "<64 hex>",
      "target_domain": "<domain>",
      "sign_proof": {
        "v": 1,
        "purpose": "org.approval.request",
        "intent_type": "generic_sign",
        "intent_id": "<intent_id>",
        "rp_id": "<rp id>",
        "origin": "https://<host>",
        "counter_previous": 0,
        "public_key_cose_b64u": "<base64url>",
        "message_digest": "<base64url>",
        "sub": "<passkey sub>",
        "challenge": "<base64url>",
        "binding_nonce": "<base64url>",
        "credential_id": "<base64url>",
        "authenticator_data": "<base64url>",
        "client_data_json": "<base64url>",
        "signature": "<base64url>",
        "signed_at": 1710000000
      }
    }
    • policy_revision_hash
      POST /orgs/<org>/policy-revisions の応答です。現行と同一は POLICY_UNCHANGED、未知は UNKNOWN_POLICY です。
    • target_domain
      trim、小文字、末尾ドット除去のあと、digest 入力を UTF-8 のまま SHA-256 し Base64URL にします。空白は入れないでください。
    • request_id
      以降の vote と commit に使います。
    • sign_proof
      purpose org.approval.request です。開発者コンソールで Passkey 署名したあとに得ます。

    Response

    {
      "request_id": "<id>",
      "expires_at": 1710000900
    }

    digest 入力

    {"created_by_sub":"<session sub>","org_id":"<org UUID>","policy_revision_hash":"<64 hex>","request_kind":"policy_revision","target_domain":"<domain>"}
  3. 3. 確定に必要な投票者が POST …/votes で投票します。本文は sign_proof(purpose org.policy.vote)です。

    Request
    POST https://api.clavis.nexus/orgs/<org>/approval-requests/<request_id>/votes
    Authorization: Bearer <session JWT>
    Content-Type: application/json
    
    {
      "sign_proof": {
        "v": 1,
        "purpose": "org.policy.vote",
        "intent_type": "generic_sign",
        "intent_id": "<intent_id>",
        "rp_id": "<rp id>",
        "origin": "https://<host>",
        "counter_previous": 0,
        "public_key_cose_b64u": "<base64url>",
        "message_digest": "<base64url>",
        "sub": "<passkey sub>",
        "challenge": "<base64url>",
        "binding_nonce": "<base64url>",
        "credential_id": "<base64url>",
        "authenticator_data": "<base64url>",
        "client_data_json": "<base64url>",
        "signature": "<base64url>",
        "signed_at": 1710000000
      }
    }

    Response

    {
      "ok": true,
      "state": "<state>"
    }

    digest 入力

    {"approval_request_id":"<request_id>","policy_revision_hash":"<64 hex>","voter_sub":"<session sub>"}
  4. 4. 閾値に達したら POST …/commit で確定します。本文は sign_proof(purpose org.approval.commit)です。

    Request
    POST https://api.clavis.nexus/orgs/<org>/approval-requests/<request_id>/commit
    Authorization: Bearer <session JWT>
    Content-Type: application/json
    
    {
      "sign_proof": {
        "v": 1,
        "purpose": "org.approval.commit",
        "intent_type": "generic_sign",
        "intent_id": "<intent_id>",
        "rp_id": "<rp id>",
        "origin": "https://<host>",
        "counter_previous": 0,
        "public_key_cose_b64u": "<base64url>",
        "message_digest": "<base64url>",
        "sub": "<passkey sub>",
        "challenge": "<base64url>",
        "binding_nonce": "<base64url>",
        "credential_id": "<base64url>",
        "authenticator_data": "<base64url>",
        "client_data_json": "<base64url>",
        "signature": "<base64url>",
        "signed_at": 1710000000
      }
    }

    Response

    {
      "ok": true,
      "org_status": "<status>",
      "approval_manifest": null
    }

    digest 入力

    {"committer_sub":"<session sub>","org_id":"<org UUID>","request_id":"<request_id>"}

エンドポイント

approval-requests の HTTP と読み取りです。

  • POST …/approval-requests
    依頼を開きます。Authorization と sign_proof が要ります。
  • GET …/approval-requests/{id}
    票の合計と ready_for_finalize を読みます。
  • POST …/votes
    1 票を載せます。
  • POST …/commit
    確定します。
GET
GET https://api.clavis.nexus/orgs/<org>/approval-requests/<request_id>
Authorization: Bearer <session JWT>

Response

{
  "request": {},
  "vote_count": 1,
  "weight_sum": 1,
  "ready_for_finalize": false
}

範囲

  • 確定する人が二人以上のときに、この手順を使います。
  • 投票は開発者コンソールで行います。

参照