承認ルールの確定
承認ルールの変更を、二人以上の Passkey で確定します。
Base URL は https://api.clavis.nexus です。パスは /orgs/{org}/approval-requestsです。認可は session JWT と本文の SignProof です(認証)。
手順
1. 組織(Org)を開きます。確定する人は
/developers/{orgId}/settings/governanceで二人以上にします。2. owner または admin が
POST …/approval-requestsで依頼を開きます。RequestPOST 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_hashPOST /orgs/<org>/policy-revisions の応答です。現行と同一は POLICY_UNCHANGED、未知は UNKNOWN_POLICY です。target_domaintrim、小文字、末尾ドット除去のあと、digest 入力を UTF-8 のまま SHA-256 し Base64URL にします。空白は入れないでください。request_id以降の vote と commit に使います。sign_proofpurpose 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. 確定に必要な投票者が
POST …/votesで投票します。本文はsign_proof(purposeorg.policy.vote)です。RequestPOST 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. 閾値に達したら
POST …/commitで確定します。本文はsign_proof(purposeorg.approval.commit)です。RequestPOST 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 …/votes1 票を載せます。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
}範囲
- 確定する人が二人以上のときに、この手順を使います。
- 投票は開発者コンソールで行います。