diff --git a/Makefile b/Makefile index ec8d7e1d..e9c87359 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: build-keria -VERSION=0.2.0 +VERSION=0.4.0 IMAGE_NAME=weboftrust/keria VERSION_TAG=$(IMAGE_NAME):$(VERSION) LATEST_TAG=$(IMAGE_NAME):latest diff --git a/pyproject.toml b/pyproject.toml index 4abece70..641588a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "keria" -version = "0.2.0" +version = "0.4.0" description = "KERIA: KERI Agent in the cloud" readme = "README.md" license = { text = "Apache Software License 2.0" } @@ -27,13 +27,13 @@ keywords = [ requires-python = ">=3.12.2" dependencies = [ "hio==0.6.14", - "keri==1.2.7", + "keri==1.2.12", "mnemonic==0.21", - "multicommand==1.0.0", + "multicommand>=1.0.0", "falcon==4.0.2", "http_sfv==0.9.9", "dataclasses_json==0.6.7", - "apispec==6.8.1", + "apispec==6.10.0", "marshmallow_dataclass==8.7.1", "deprecation==2.1.0", ] @@ -46,13 +46,13 @@ package = true [dependency-groups] dev = [ - "ruff>=0.8.0", - "pytest>=8.3.4", - "coverage>=7.6.10", - "pytest-cov>=6.0.0", - "requests", - "sphinx", - "sphinx-rtd-theme", + "ruff>=0.15.5", + "pytest>=9.0.2", + "coverage>=7.13.4", + "pytest-cov>=7.0.0", + "requests>=2.32.5", + "sphinx>=9.1.0", + "sphinx-rtd-theme>=3.1.0", ] [tool.pytest.ini_options] diff --git a/src/keria/__init__.py b/src/keria/__init__.py index ebbb4063..be9e0307 100644 --- a/src/keria/__init__.py +++ b/src/keria/__init__.py @@ -3,7 +3,7 @@ main package """ -__version__ = "0.2.0" # also change in setup.py +__version__ = "0.4.0" # also change in setup.py import logging from hio.help import ogling diff --git a/tests/app/test_specing.py b/tests/app/test_specing.py index a7e7a4ab..5e978d01 100644 --- a/tests/app/test_specing.py +++ b/tests/app/test_specing.py @@ -1,12 +1,64 @@ -import json - from keria.app import agenting, aiding, delegating, notifying, indirecting, specing from keria.end import ending +""" +OpenAPI Spec test validates: +- basic openapi document shape (version, paths, components, schemas) +- operation shape and HTTP method +- that referenced schemas from each operation actually exist in the document schemas + +This is much more reliable than a big, copy-pasted string value in a gigantic test assertion. +""" + + +def _iter_refs(node): + """Yield all $ref values from a nested OpenAPI document.""" + if isinstance(node, dict): + for key, value in node.items(): + if key == "$ref" and isinstance(value, str): + yield value + else: + yield from _iter_refs(value) + elif isinstance(node, list): + for value in node: + yield from _iter_refs(value) + + +def _validate_openapi_semantics(spec): + """Perform lightweight semantic validation without brittle full-string snapshots.""" + assert spec.get("openapi", "").startswith("3.") + assert isinstance(spec.get("paths"), dict) + assert isinstance(spec.get("components"), dict) + assert isinstance(spec["components"].get("schemas"), dict) + + schemas = spec["components"]["schemas"] + http_methods = {"get", "post", "put", "patch", "delete", "options", "head", "trace"} + + for route, operations in spec["paths"].items(): + assert route.startswith("/") + assert isinstance(operations, dict) + assert operations, f"Path {route} must include at least one operation" + + for method, operation in operations.items(): + assert method in http_methods or method.startswith("x-") + if not isinstance(operation, dict) or not operation: + # Some routes may intentionally define placeholder operations. + continue + assert "responses" in operation, ( + f"Missing responses for {method.upper()} {route}" + ) + assert isinstance(operation["responses"], dict) + + # Ensure all local schema references resolve. + for ref in set(_iter_refs(spec)): + if ref.startswith("#/components/schemas/"): + schema_name = ref.split("/")[-1] + assert schema_name in schemas, f"Unresolved schema reference: {ref}" + def test_spec_resource(helpers): with helpers.openKeria() as (agency, agent, app, client): - # Add all the endpoints similar to the agenting.setup function + # Add all the endpoints similar to the agenting.setup function. agenting.loadEnds(app) aiding.loadEnds(app, agency, authn=None) delegating.loadEnds(app=app, identifierResource=aiding.IdentifierResourceEnd()) @@ -17,10 +69,9 @@ def test_spec_resource(helpers): specRes = specing.AgentSpecResource( app, title="KERIA Interactive Web Interface API" ) - sd = specRes.spec.to_dict() - assert "paths" in sd + # Contract checks for critical API routes and basic document shape. paths = sd["paths"] assert "/" in paths assert "/agent/{caid}" in paths @@ -50,10 +101,4 @@ def test_spec_resource(helpers): assert "/states" in paths assert "/config" in paths - js = json.dumps(sd) - print(js) - # Assert on the entire JSON to ensure we are getting all the docs - assert ( - js - == '{"paths": {"/operations": {"get": {"summary": "Get list of long running operations", "parameters": [{"in": "query", "name": "type", "schema": {"type": "string"}, "required": false, "description": "filter list of long running operations by type"}], "responses": {"200": {"description": "list of long running operations", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/Operation"}}}}}}}}, "/oobis": {"post": {"summary": "Resolve OOBI and assign an alias for the remote identifier", "description": "Resolve OOBI URL or `rpy` message by process results of request and assign \'alias\' in contact data for resolved identifier", "tags": ["OOBIs"], "requestBody": {"required": true, "content": {"application/json": {"schema": {"description": "OOBI", "oneOf": [{"type": "object", "properties": {"oobialias": {"type": "string", "description": "alias to assign to the identifier resolved from this OOBI"}, "url": {"type": "string", "description": "URL OOBI"}, "rpy": {"type": "object", "description": "unsigned KERI `rpy` event message with endpoints"}}}]}}}}, "responses": {"202": {"description": "OOBI resolution to key state successful", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OOBIOperation"}}}}}}}, "/states": {"get": {"summary": "Display key event log (KEL) for given identifier prefix", "description": "If provided qb64 identifier prefix is in Kevers, return the current state of the identifier along with the KEL and all associated signatures and receipts", "tags": ["Key Event Log"], "parameters": [{"in": "path", "name": "pre", "description": "qb64 identifier prefix of KEL to load", "schema": {"type": "string"}, "required": true}], "responses": {"200": {"description": "Key event log and key state of identifier", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/KeyStateRecord"}}}}}, "400": {"description": "Bad request, missing required fields"}, "404": {"description": "Identifier not found in Key event database"}}}}, "/events": {"get": {"summary": "Display key event log (KEL) for given identifier prefix", "description": "If provided qb64 identifier prefix is in Kevers, return the current state of the identifier along with the KEL and all associated signatures and receipts", "tags": ["Key Event Log"], "parameters": [{"in": "path", "name": "pre", "schema": {"type": "string"}, "required": true, "description": "qb64 identifier prefix of KEL to load"}], "responses": {"200": {"description": "Key event log and key state of identifier", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/KeyEventRecord"}}}}}, "404": {"description": "Identifier not found in Key event database"}}}}, "/queries": {"post": {"summary": "Display key event log (KEL) for given identifier prefix", "description": "If provided qb64 identifier prefix is in Kevers, return the current state of the identifier along with the KEL and all associated signatures and receipts", "tags": ["Query"], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["pre"], "properties": {"pre": {"type": "string", "description": "qb64 identifier prefix of KEL to load"}, "anchor": {"type": "string", "description": "Anchor"}, "sn": {"type": "string", "description": "Serial number"}}}}}}, "responses": {"200": {"description": "Key event log and key state of identifier", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/QueryOperation"}}}}, "404": {"description": "Identifier not found in Key event database"}}}}, "/config": {"get": {"summary": "Retrieve agent configuration", "description": "Retrieve agent configuration (only necessary fields are exposed)", "tags": ["Config"], "responses": {"200": {"description": "Subset of configuration dict as JSON", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AgentConfig"}}}}}}}, "/identifiers": {"get": {"summary": "Retrieve a list of identifiers associated with the agent.", "description": "This endpoint retrieves a list of identifiers associated with the agent. It supports pagination through the \'Range\' header.", "tags": ["Identifier"], "parameters": [{"in": "header", "name": "Range", "schema": {"type": "string"}, "required": false, "description": "The \'Range\' header is used for pagination. The default range is 0-9."}], "responses": {"200": {"description": "Successfully retrieved identifiers.", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/HabStateBase"}}}}}, "206": {"description": "Successfully retrieved identifiers within the specified range."}}}, "options": {}, "post": {"summary": "Create an identifier.", "description": "This endpoint creates an identifier with the provided inception event, name, and signatures.", "tags": ["Identifier"], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"icp": {"type": "object", "description": "The inception event for the identifier."}, "name": {"type": "string", "description": "The name of the identifier."}, "sigs": {"type": "array", "items": {"type": "string"}, "description": "The signatures for the inception event."}, "group": {"type": "object", "description": "Multisig group information."}, "salty": {"type": "object", "description": "Salty parameters."}, "randy": {"type": "object", "description": "Randomly generated materials."}, "extern": {"type": "object", "description": "External parameters."}}}}}}, "responses": {"202": {"description": "Identifier creation is in progress. The response is a long running operation.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/GroupOperation"}, {"$ref": "#/components/schemas/WitnessOperation"}, {"$ref": "#/components/schemas/DelegationOperation"}, {"$ref": "#/components/schemas/DoneOperation"}]}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}}}}, "/challenges": {"get": {"summary": "Get random list of words for a 2 factor auth challenge", "description": "Get the list of identifiers associated with this agent", "tags": ["Challenge/Response"], "parameters": [{"in": "query", "name": "strength", "schema": {"type": "integer"}, "description": "cryptographic strength of word list", "required": false}], "responses": {"200": {"description": "An array of random words", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Challenge"}}}}}}}, "/contacts": {"get": {"summary": "Get list of contact information associated with remote identifiers", "description": "Get list of contact information associated with remote identifiers. All information is metadata and kept in local storage only", "tags": ["Contacts"], "parameters": [{"in": "query", "name": "group", "schema": {"type": "string"}, "required": false, "description": "field name to group results by"}, {"in": "query", "name": "filter_field", "schema": {"type": "string"}, "description": "field name to search", "required": false}, {"in": "query", "name": "filter_value", "schema": {"type": "string"}, "description": "value to search for", "required": false}], "responses": {"200": {"description": "List of contact information for remote identifiers", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/Contact"}}}}}}}}, "/oobi": {"get": {"summary": "Retrieve OOBI resource.", "description": "This endpoint retrieves the OOBI resource based on the provided aid, role, and eid.", "tags": ["OOBI Resource"], "parameters": [{"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of OOBI."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The requested role for OOBI rpy message."}, {"in": "path", "name": "eid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of participant in role."}], "responses": {"200": {"description": "Successfully retrieved the OOBI resource."}, "400": {"description": "Bad request. This could be due to invalid or missing parameters."}, "404": {"description": "The requested OOBI resource was not found."}}}}, "/": {"post": {"summary": "Accept KERI events with attachment headers and parse", "description": "Accept KERI events with attachment headers and parse.", "tags": ["Events"], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "description": "KERI event message"}}}}, "responses": {"204": {"description": "KEL EXN, QRY, RPY event accepted."}}}, "put": {"summary": "Accept KERI events with attachment headers and parse", "description": "Accept KERI events with attachment headers and parse.", "tags": ["Events"], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "description": "KERI event message"}}}}, "responses": {"200": {"description": "Mailbox query response for server sent events"}, "204": {"description": "KEL or EXN event accepted."}}}}, "/notifications": {"get": {"summary": "Get list of notifications for the controller of the agent", "description": "Get list of notifications for the controller of the agent. Notifications will be sorted by creation date/time", "parameters": [{"in": "header", "name": "Range", "schema": {"type": "string"}, "required": false, "description": "size of the result list. Defaults to 25"}], "tags": ["Notifications"], "responses": {"200": {"description": "List of contact information for remote identifiers", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/Notification"}}}}}}}}, "/operations/{name}": {"delete": {"summary": "Remove a specific long running operation.", "description": "This endpoint removes a long running operation by its name.", "tags": ["Operation"], "parameters": [{"in": "path", "name": "name", "schema": {"type": "string"}, "required": true, "description": "The name of the long running operation to remove."}], "responses": {"204": {"description": "Successfully removed the long running operation."}, "404": {"description": "The requested long running operation was not found."}, "500": {"description": "Internal server error. This could be due to an issue with removing the operation."}}}, "get": {"summary": "Retrieve a specific long running operation.", "description": "This endpoint retrieves the status of a long running operation by its name.", "tags": ["Operation"], "parameters": [{"in": "path", "name": "name", "schema": {"type": "string"}, "required": true, "description": "The name of the long running operation to retrieve."}], "responses": {"200": {"description": "Successfully retrieved the status of the long running operation.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Operation"}}}}, "404": {"description": "The requested long running operation was not found."}}}}, "/oobis/{alias}": {"get": {"summary": "Get OOBI for specific identifier", "description": "Generate OOBI for the identifier of the specified alias and role", "tags": ["OOBIs"], "parameters": [{"in": "path", "name": "alias", "schema": {"type": "string"}, "required": true, "description": "human readable alias for the identifier generate OOBI for"}, {"in": "query", "name": "role", "schema": {"type": "string"}, "required": true, "description": "role for which to generate OOBI"}], "responses": {"200": {"description": "An array of Identifier key state information", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OOBI"}}}}}}}, "/agent/{caid}": {"get": {"summary": "Retrieve key state record of an agent by controller AID.", "description": "This endpoint retrieves the key state record for a given controller of an agent.", "tags": ["Agent"], "parameters": [{"in": "path", "name": "caid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of Controller."}], "responses": {"200": {"description": "Successfully retrieved the key state record.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AgentResourceResult"}}}}, "400": {"description": "Bad request. This could be due to an invalid agent or controller configuration."}, "404": {"description": "The requested controller or agent was not found."}}}, "put": {"summary": "Update agent configuration by controller AID.", "description": "This endpoint updates the agent configuration based on the provided request parameters and body.", "tags": ["Agent"], "parameters": [{"in": "path", "name": "caid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of Controller."}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["rot", "sigs", "sxlt", "kyes"], "properties": {"rot": {"type": "object", "description": "The rotation event."}, "sigs": {"type": "array", "items": {"type": "string"}, "description": "The signatures."}, "sxlt": {"type": "string", "description": "The salty parameters."}, "keys": {"type": "object", "description": "The keys."}}}}}}, "responses": {"204": {"description": "Successfully updated the agent configuration."}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "The requested agent was not found."}, "500": {"description": "Internal server error. This could be due to an issue with updating the agent configuration."}}}}, "/identifiers/{name}": {"get": {"summary": "Retrieve an identifier.", "description": "This endpoint retrieves an identifier by its prefix or human-readable name.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "responses": {"200": {"description": "Successfully retrieved the identifier details.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HabState"}}}}, "400": {"description": "Bad request. This could be due to a missing or invalid name parameter."}, "404": {"description": "The requested identifier was not found."}}}, "post": {"summary": "Process identifier events.", "description": "This endpoint handles the \'rot\' or \'ixn\' events of an identifier, or the request to resubmit the KEL, based on the provided request.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rot": {"type": "object", "description": "The rotation event details."}, "ixn": {"type": "object", "description": "The interaction event details."}, "submit": {"type": "object", "description": "The request to resubmit event details to witnesses."}}, "oneOf": [{"required": ["rot"]}, {"required": ["ixn"]}, {"required": ["submit"]}]}}}}, "responses": {"200": {"description": "Successfully processed the identifier\'s event.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/GroupOperation"}, {"$ref": "#/components/schemas/WitnessOperation"}, {"$ref": "#/components/schemas/DelegationOperation"}, {"$ref": "#/components/schemas/DoneOperation"}, {"$ref": "#/components/schemas/SubmitOperation"}]}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}}}, "put": {"summary": "Rename an identifier.", "description": "This endpoint renames an identifier with the provided new name.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The current human-readable name of the identifier or its prefix."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string", "description": "The new human-readable name for the identifier."}}, "required": ["name"]}}}}, "responses": {"200": {"description": "Successfully renamed the identifier and returns the updated information.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HabState"}}}}, "400": {"description": "Bad request. This could be due to a missing or invalid name parameter."}, "404": {"description": "The requested identifier was not found."}}}}, "/endroles/{aid}": {"get": {"summary": "Retrieve end roles.", "description": "This endpoint retrieves the end roles associated with an identifier prefix or human-readable name. It can also filter the end roles based on a specific role.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The identifier (AID)."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The specific role to filter the end roles."}], "responses": {"200": {"description": "Successfully retrieved the end roles. The response body contains the end roles.", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/EndRole"}}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "The requested identifier was not found."}}}, "post": {"summary": "Create an end role.", "description": "This endpoint creates an end role associated with a given identifier prefix or human-readable name.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "Not supported for POST. If provided, a 404 is returned."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rpy": {"type": "object", "description": "The reply object."}, "sigs": {"type": "array", "items": {"type": "string"}, "description": "The signatures."}}}}}}, "responses": {"202": {"description": "Accepted. The end role creation is in progress.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/EndRoleOperation"}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "Not found. The requested identifier was not found."}}}}, "/escrows/rpy": {"get": {"summary": "Retrieve reply escrows.", "description": "This endpoint retrieves the reply escrows and can filter the collection based on a specific route.", "tags": ["Reply Escrow"], "parameters": [{"in": "query", "name": "route", "schema": {"type": "string"}, "required": false, "description": "The specific route to filter the reply escrow collection."}], "responses": {"200": {"description": "Successfully retrieved the reply escrows.", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/Rpy"}}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}}}}, "/challenges/{name}": {"post": {"summary": "Sign challenge message and forward to peer identifier", "description": "Sign a challenge word list received out of bands and send `exn` peer to peer message to recipient", "tags": ["Challenge/Response"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "Human readable alias or prefix for the identifier to create"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"description": "Challenge response", "properties": {"recipient": {"type": "string", "description": "human readable alias recipient identifier to send signed challenge to"}, "words": {"type": "array", "description": "challenge in form of word list", "items": {"type": "string"}}}}}}}, "responses": {"202": {"description": "Success submission of signed challenge/response"}}}}, "/challenges_verify/{source}": {"post": {"summary": "Sign challenge message and forward to peer identifier", "description": "Sign a challenge word list received out of bands and send `exn` peer to peer message to recipient", "tags": ["Challenge/Response"], "parameters": [{"in": "path", "name": "source", "schema": {"type": "string"}, "required": true, "description": "Human readable alias for the identifier to create"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"description": "Challenge response", "properties": {"recipient": {"type": "string", "description": "human readable alias recipient identifier to send signed challenge to"}, "words": {"type": "array", "description": "challenge in form of word list", "items": {"type": "string"}}}}}}}, "responses": {"202": {"description": "Success submission of signed challenge/response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChallengeOperation"}}}}}}, "put": {"summary": "Mark challenge response exn message as signed", "description": "Mark challenge response exn message as signed", "tags": ["Challenge/Response"], "parameters": [{"in": "path", "name": "source", "schema": {"type": "string"}, "required": true, "description": "Human readable alias for the identifier to create"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"description": "Challenge response", "properties": {"aid": {"type": "string", "description": "aid of signer of accepted challenge response"}, "said": {"type": "array", "description": "SAID of challenge message signed", "items": {"type": "string"}}}}}}}, "responses": {"202": {"description": "Success submission of signed challenge/response"}}}}, "/contacts/{prefix}": {"delete": {"summary": "Delete contact information associated with remote identifier", "description": "Delete contact information associated with remote identifier", "tags": ["Contacts"], "parameters": [{"in": "path", "name": "prefix", "schema": {"type": "string"}, "required": true, "description": "qb64 identifier prefix of contact to delete"}], "responses": {"202": {"description": "Contact information successfully deleted for prefix"}, "404": {"description": "No contact information found for prefix"}}}, "get": {"summary": "Get contact information associated with single remote identifier", "description": "Get contact information associated with single remote identifier. All information is meta-data and kept in local storage only", "tags": ["Contacts"], "parameters": [{"in": "path", "name": "prefix", "schema": {"type": "string"}, "required": true, "description": "qb64 identifier prefix of contact to get"}], "responses": {"200": {"description": "Contact information successfully retrieved for prefix", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Contact"}}}}, "404": {"description": "No contact information found for prefix"}}}, "post": {"summary": "Create new contact information for an identifier", "description": "Creates new information for an identifier, overwriting all existing information for that identifier", "tags": ["Contacts"], "parameters": [{"in": "path", "name": "prefix", "schema": {"type": "string"}, "required": true, "description": "qb64 identifier prefix to add contact metadata to"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"description": "Contact information", "type": "object"}}}}, "responses": {"200": {"description": "Updated contact information for remote identifier", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Contact"}}}}, "400": {"description": "Invalid identifier used to update contact information"}, "404": {"description": "Prefix not found in identifier contact information"}}}, "put": {"summary": "Update provided fields in contact information associated with remote identifier prefix", "description": "Update provided fields in contact information associated with remote identifier prefix. All information is metadata and kept in local storage only", "tags": ["Contacts"], "parameters": [{"in": "path", "name": "prefix", "schema": {"type": "string"}, "required": true, "description": "qb64 identifier prefix to add contact metadata to"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"description": "Contact information", "type": "object"}}}}, "responses": {"200": {"description": "Updated contact information for remote identifier", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Contact"}}}}, "400": {"description": "Invalid identifier used to update contact information"}, "404": {"description": "Prefix not found in identifier contact information"}}}}, "/oobi/{aid}": {"get": {"summary": "Retrieve OOBI resource.", "description": "This endpoint retrieves the OOBI resource based on the provided aid, role, and eid.", "tags": ["OOBI Resource"], "parameters": [{"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of OOBI."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The requested role for OOBI rpy message."}, {"in": "path", "name": "eid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of participant in role."}], "responses": {"200": {"description": "Successfully retrieved the OOBI resource."}, "400": {"description": "Bad request. This could be due to invalid or missing parameters."}, "404": {"description": "The requested OOBI resource was not found."}}}}, "/notifications/{said}": {"delete": {"summary": "Delete notification", "description": "Delete notification", "tags": ["Notifications"], "parameters": [{"in": "path", "name": "said", "schema": {"type": "string"}, "required": true, "description": "qb64 said of note to delete"}], "responses": {"202": {"description": "Notification successfully deleted for prefix"}, "404": {"description": "No notification information found for prefix"}}}, "put": {"summary": "Mark notification as read", "description": "Mark notification as read", "tags": ["Notifications"], "parameters": [{"in": "path", "name": "said", "schema": {"type": "string"}, "required": true, "description": "qb64 said of note to mark as read"}], "responses": {"202": {"description": "Notification successfully marked as read for prefix"}, "404": {"description": "No notification information found for SAID"}}}}, "/identifiers/{name}/events": {"get": {"summary": "Retrieve an identifier.", "description": "This endpoint retrieves an identifier by its prefix or human-readable name.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "responses": {"200": {"description": "Successfully retrieved the identifier details.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HabState"}}}}, "400": {"description": "Bad request. This could be due to a missing or invalid name parameter."}, "404": {"description": "The requested identifier was not found."}}}, "post": {"summary": "Process identifier events.", "description": "This endpoint handles the \'rot\' or \'ixn\' events of an identifier, or the request to resubmit the KEL, based on the provided request.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rot": {"type": "object", "description": "The rotation event details."}, "ixn": {"type": "object", "description": "The interaction event details."}, "submit": {"type": "object", "description": "The request to resubmit event details to witnesses."}}, "oneOf": [{"required": ["rot"]}, {"required": ["ixn"]}, {"required": ["submit"]}]}}}}, "responses": {"200": {"description": "Successfully processed the identifier\'s event.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/GroupOperation"}, {"$ref": "#/components/schemas/WitnessOperation"}, {"$ref": "#/components/schemas/DelegationOperation"}, {"$ref": "#/components/schemas/DoneOperation"}, {"$ref": "#/components/schemas/SubmitOperation"}]}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}}}, "put": {"summary": "Rename an identifier.", "description": "This endpoint renames an identifier with the provided new name.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The current human-readable name of the identifier or its prefix."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string", "description": "The new human-readable name for the identifier."}}, "required": ["name"]}}}}, "responses": {"200": {"description": "Successfully renamed the identifier and returns the updated information.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HabState"}}}}, "400": {"description": "Bad request. This could be due to a missing or invalid name parameter."}, "404": {"description": "The requested identifier was not found."}}}}, "/identifiers/{name}/submit": {"get": {"summary": "Retrieve an identifier.", "description": "This endpoint retrieves an identifier by its prefix or human-readable name.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "responses": {"200": {"description": "Successfully retrieved the identifier details.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HabState"}}}}, "400": {"description": "Bad request. This could be due to a missing or invalid name parameter."}, "404": {"description": "The requested identifier was not found."}}}, "post": {"summary": "Process identifier events.", "description": "This endpoint handles the \'rot\' or \'ixn\' events of an identifier, or the request to resubmit the KEL, based on the provided request.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rot": {"type": "object", "description": "The rotation event details."}, "ixn": {"type": "object", "description": "The interaction event details."}, "submit": {"type": "object", "description": "The request to resubmit event details to witnesses."}}, "oneOf": [{"required": ["rot"]}, {"required": ["ixn"]}, {"required": ["submit"]}]}}}}, "responses": {"200": {"description": "Successfully processed the identifier\'s event.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/GroupOperation"}, {"$ref": "#/components/schemas/WitnessOperation"}, {"$ref": "#/components/schemas/DelegationOperation"}, {"$ref": "#/components/schemas/DoneOperation"}, {"$ref": "#/components/schemas/SubmitOperation"}]}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}}}, "put": {"summary": "Rename an identifier.", "description": "This endpoint renames an identifier with the provided new name.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The current human-readable name of the identifier or its prefix."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string", "description": "The new human-readable name for the identifier."}}, "required": ["name"]}}}}, "responses": {"200": {"description": "Successfully renamed the identifier and returns the updated information.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HabState"}}}}, "400": {"description": "Bad request. This could be due to a missing or invalid name parameter."}, "404": {"description": "The requested identifier was not found."}}}}, "/identifiers/{name}/oobis": {"get": {"summary": "Fetch OOBI URLs of an identifier.", "description": "This endpoint fetches the OOBI URLs for a specific role associated with an identifier.", "tags": ["Identifier"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "query", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The role for which to fetch the OOBI URLs. Can be a witness, controller, agent, or mailbox."}], "responses": {"200": {"description": "Successfully fetched the OOBI URLs. The response body contains the OOBI URLs.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/OOBI"}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "The requested identifier was not found."}}}}, "/identifiers/{name}/endroles": {"get": {"summary": "Retrieve end roles.", "description": "This endpoint retrieves the end roles associated with an identifier prefix or human-readable name. It can also filter the end roles based on a specific role.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The identifier (AID)."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The specific role to filter the end roles."}], "responses": {"200": {"description": "Successfully retrieved the end roles. The response body contains the end roles.", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/EndRole"}}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "The requested identifier was not found."}}}, "post": {"summary": "Create an end role.", "description": "This endpoint creates an end role associated with a given identifier prefix or human-readable name.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "Not supported for POST. If provided, a 404 is returned."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rpy": {"type": "object", "description": "The reply object."}, "sigs": {"type": "array", "items": {"type": "string"}, "description": "The signatures."}}}}}}, "responses": {"202": {"description": "Accepted. The end role creation is in progress.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/EndRoleOperation"}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "Not found. The requested identifier was not found."}}}}, "/identifiers/{name}/locschemes": {"post": {"summary": "Authorises a new location scheme.", "description": "This endpoint authorises a new location scheme (endpoint) for a particular endpoint identifier.", "tags": ["Loc Scheme"], "parameters": [{"in": "path", "name": "name", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rpy": {"type": "object", "description": "The reply object."}, "sigs": {"type": "array", "items": {"type": "string"}, "description": "The signatures."}}}}}}, "responses": {"202": {"description": "Accepted. The loc scheme authorisation is in progress.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/LocSchemeOperation"}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "Not found. The requested identifier was not found."}}}}, "/identifiers/{name}/members": {"get": {"summary": "Fetch group member information.", "description": "This endpoint retrieves the signing and rotation members for a specific group associated with an identifier.", "tags": ["Group Member"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}], "responses": {"200": {"description": "Successfully fetched the group member information.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GroupMember"}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "The requested identifier was not found."}}}}, "/identifiers/{name}/delegation": {"post": {}}, "/endroles/{aid}/{role}": {"get": {"summary": "Retrieve end roles.", "description": "This endpoint retrieves the end roles associated with an identifier prefix or human-readable name. It can also filter the end roles based on a specific role.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The identifier (AID)."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The specific role to filter the end roles."}], "responses": {"200": {"description": "Successfully retrieved the end roles. The response body contains the end roles.", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/EndRole"}}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "The requested identifier was not found."}}}, "post": {"summary": "Create an end role.", "description": "This endpoint creates an end role associated with a given identifier prefix or human-readable name.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "Not supported for POST. If provided, a 404 is returned."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rpy": {"type": "object", "description": "The reply object."}, "sigs": {"type": "array", "items": {"type": "string"}, "description": "The signatures."}}}}}}, "responses": {"202": {"description": "Accepted. The end role creation is in progress.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/EndRoleOperation"}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "Not found. The requested identifier was not found."}}}}, "/contacts/{prefix}/img": {"get": {"summary": "Get contact image for identifer prefix", "description": "Get contact image for identifer prefix", "tags": ["Contacts"], "parameters": [{"in": "path", "name": "prefix", "schema": {"type": "string"}, "required": true, "description": "qb64 identifier prefix of contact image to get"}], "responses": {"200": {"description": "Contact information successfully retrieved for prefix", "content": {"image/jpg": {"schema": {"description": "Image", "type": "binary"}}}}, "404": {"description": "No contact information found for prefix"}}}, "post": {"summary": "Uploads an image to associate with identifier.", "description": "Uploads an image to associate with identifier.", "tags": ["Contacts"], "parameters": [{"in": "path", "name": "prefix", "schema": {"type": "string"}, "description": "identifier prefix to associate image to", "required": true}], "requestBody": {"required": true, "content": {"image/jpg": {"schema": {"type": "string", "format": "binary"}}, "image/png": {"schema": {"type": "string", "format": "binary"}}}}, "responses": {"200": {"description": "Image successfully uploaded"}}}}, "/oobi/{aid}/{role}": {"get": {"summary": "Retrieve OOBI resource.", "description": "This endpoint retrieves the OOBI resource based on the provided aid, role, and eid.", "tags": ["OOBI Resource"], "parameters": [{"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of OOBI."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The requested role for OOBI rpy message."}, {"in": "path", "name": "eid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of participant in role."}], "responses": {"200": {"description": "Successfully retrieved the OOBI resource."}, "400": {"description": "Bad request. This could be due to invalid or missing parameters."}, "404": {"description": "The requested OOBI resource was not found."}}}}, "/identifiers/{name}/endroles/{role}": {"get": {"summary": "Retrieve end roles.", "description": "This endpoint retrieves the end roles associated with an identifier prefix or human-readable name. It can also filter the end roles based on a specific role.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The identifier (AID)."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The specific role to filter the end roles."}], "responses": {"200": {"description": "Successfully retrieved the end roles. The response body contains the end roles.", "content": {"application/json": {"schema": {"type": "array", "items": {"$ref": "#/components/schemas/EndRole"}}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "The requested identifier was not found."}}}, "post": {"summary": "Create an end role.", "description": "This endpoint creates an end role associated with a given identifier prefix or human-readable name.", "tags": ["End Role"], "parameters": [{"in": "path", "name": "name or prefix", "schema": {"type": "string"}, "required": true, "description": "The human-readable name of the identifier or its prefix."}, {"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "Not supported for POST. If provided, a 404 is returned."}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"rpy": {"type": "object", "description": "The reply object."}, "sigs": {"type": "array", "items": {"type": "string"}, "description": "The signatures."}}}}}}, "responses": {"202": {"description": "Accepted. The end role creation is in progress.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/EndRoleOperation"}}}}, "400": {"description": "Bad request. This could be due to missing or invalid parameters."}, "404": {"description": "Not found. The requested identifier was not found."}}}}, "/oobi/{aid}/{role}/{eid}": {"get": {"summary": "Retrieve OOBI resource.", "description": "This endpoint retrieves the OOBI resource based on the provided aid, role, and eid.", "tags": ["OOBI Resource"], "parameters": [{"in": "path", "name": "aid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of OOBI."}, {"in": "path", "name": "role", "schema": {"type": "string"}, "required": true, "description": "The requested role for OOBI rpy message."}, {"in": "path", "name": "eid", "schema": {"type": "string"}, "required": true, "description": "The qb64 identifier prefix of participant in role."}], "responses": {"200": {"description": "Successfully retrieved the OOBI resource."}, "400": {"description": "Bad request. This could be due to invalid or missing parameters."}, "404": {"description": "The requested OOBI resource was not found."}}}}, "/identifiers/{name}/endroles/{role}/{eid}": {"delete": {}}}, "info": {"title": "KERIA Interactive Web Interface API", "version": "1.0.1"}, "openapi": "3.1.0", "components": {"schemas": {"ACDCAttributes": {"type": "object", "properties": {"dt": {"type": "string"}, "i": {"type": "string"}, "u": {"type": "string"}}, "additionalProperties": true}, "ACDC_V_1": {"oneOf": [{"type": "object", "properties": {"v": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "u": {"type": "string"}, "ri": {"type": "string"}, "e": {"type": "string"}, "r": {"type": "string"}, "a": {"$ref": "#/components/schemas/ACDCAttributes"}}, "additionalProperties": false, "required": ["d", "i", "s", "v"]}, {"type": "object", "properties": {"v": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "u": {"type": "string"}, "ri": {"type": "string"}, "e": {"type": "string"}, "r": {"type": "string"}, "A": {"anyOf": [{"type": "string"}, {"type": "array"}]}}, "additionalProperties": false, "required": ["d", "i", "s", "v"]}]}, "ACDC_V_2": {"oneOf": [{"type": "object", "properties": {"v": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "u": {"type": "string"}, "rd": {"type": "string"}, "e": {"type": "string"}, "r": {"type": "string"}, "a": {"$ref": "#/components/schemas/ACDCAttributes"}}, "additionalProperties": false, "required": ["d", "i", "s", "v"]}, {"type": "object", "properties": {"v": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "u": {"type": "string"}, "rd": {"type": "string"}, "e": {"type": "string"}, "r": {"type": "string"}, "A": {"anyOf": [{"type": "string"}, {"type": "array"}]}}, "additionalProperties": false, "required": ["d", "i", "s", "v"]}]}, "IssEvent": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"enum": ["iss", "bis"]}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "ri": {"type": "string"}, "dt": {"type": "string"}}, "required": ["d", "dt", "i", "ri", "s", "t", "v"]}, "Schema": {"type": "object", "properties": {"$id": {"type": "string"}, "$schema": {"type": "string"}, "title": {"type": "string"}, "description": {"type": "string"}, "type": {"type": "string"}, "credentialType": {"type": "string"}, "version": {"type": "string"}, "properties": {"type": "object", "additionalProperties": {}}, "additionalProperties": {"type": "boolean"}, "required": {"type": "array", "items": {"type": "string"}}}, "required": ["$id", "$schema", "additionalProperties", "credentialType", "description", "properties", "required", "title", "type", "version"]}, "Anchor": {"type": "object", "properties": {"pre": {"type": "string"}, "sn": {"type": "integer"}, "d": {"type": "string"}}, "required": ["d", "pre", "sn"]}, "Seal": {"type": "object", "properties": {"s": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}}, "required": ["d", "s"]}, "IXN_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "p": {"type": "string"}, "a": {}}, "required": ["a", "d", "i", "p", "s", "t", "v"]}, "IXN_V_2": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "p": {"type": "string"}, "a": {}}, "required": ["a", "d", "i", "p", "s", "t", "v"]}, "ICP_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "b": {"type": "array", "items": {"type": "string"}}, "c": {"type": "array", "items": {"type": "string"}}, "a": {}}, "required": ["a", "b", "bt", "c", "d", "i", "k", "kt", "n", "nt", "s", "t", "v"]}, "ICP_V_2": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "b": {"type": "array", "items": {"type": "string"}}, "c": {"type": "array", "items": {"type": "string"}}, "a": {}}, "required": ["a", "b", "bt", "c", "d", "i", "k", "kt", "n", "nt", "s", "t", "v"]}, "ROT_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "p": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "br": {"type": "array", "items": {"type": "string"}}, "ba": {"type": "array", "items": {"type": "string"}}, "a": {}}, "required": ["a", "ba", "br", "bt", "d", "i", "k", "kt", "n", "nt", "p", "s", "t", "v"]}, "ROT_V_2": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "p": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "br": {"type": "array", "items": {"type": "string"}}, "ba": {"type": "array", "items": {"type": "string"}}, "c": {"type": "array", "items": {"type": "string"}}, "a": {}}, "required": ["a", "ba", "br", "bt", "c", "d", "i", "k", "kt", "n", "nt", "p", "s", "t", "v"]}, "DIP_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "b": {"type": "array", "items": {"type": "string"}}, "c": {"type": "array", "items": {"type": "string"}}, "a": {}, "di": {"type": "string"}}, "required": ["a", "b", "bt", "c", "d", "di", "i", "k", "kt", "n", "nt", "s", "t", "v"]}, "DIP_V_2": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "b": {"type": "array", "items": {"type": "string"}}, "c": {"type": "array", "items": {"type": "string"}}, "a": {}, "di": {"type": "string"}}, "required": ["a", "b", "bt", "c", "d", "di", "i", "k", "kt", "n", "nt", "s", "t", "v"]}, "DRT_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "p": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "br": {"type": "array", "items": {"type": "string"}}, "ba": {"type": "array", "items": {"type": "string"}}, "a": {}}, "required": ["a", "ba", "br", "bt", "d", "i", "k", "kt", "n", "nt", "p", "s", "t", "v"]}, "DRT_V_2": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "p": {"type": "string"}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}, {"type": "array", "items": {"type": "array", "items": {"type": "string"}}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "br": {"type": "array", "items": {"type": "string"}}, "ba": {"type": "array", "items": {"type": "string"}}, "c": {"type": "array", "items": {"type": "string"}}, "a": {}}, "required": ["a", "ba", "br", "bt", "c", "d", "i", "k", "kt", "n", "nt", "p", "s", "t", "v"]}, "RPY_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "dt": {"type": "string"}, "r": {"type": "string"}, "a": {}}, "required": ["a", "d", "dt", "r", "t", "v"]}, "RPY_V_2": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "dt": {"type": "string"}, "r": {"type": "string"}, "a": {}}, "required": ["a", "d", "dt", "i", "r", "t", "v"]}, "VCP_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "ii": {"type": "string"}, "s": {"type": "string"}, "c": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string"}, "b": {"type": "array", "items": {"type": "string"}}, "n": {"type": "string"}}, "required": ["b", "bt", "c", "d", "i", "ii", "n", "s", "t", "v"]}, "ISS_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "ri": {"type": "string"}, "dt": {"type": "string"}}, "required": ["d", "dt", "i", "ri", "s", "t", "v"]}, "REV_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "s": {"type": "string"}, "ri": {"type": "string"}, "p": {"type": "string"}, "dt": {"type": "string"}}, "required": ["d", "dt", "i", "p", "ri", "s", "t", "v"]}, "EXN_V_1": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "rp": {"type": "string"}, "p": {"type": "string"}, "dt": {"type": "string"}, "r": {"type": "string"}, "q": {"type": "object", "additionalProperties": {}}, "a": {}, "e": {"type": "object", "additionalProperties": {}}}, "required": ["a", "d", "dt", "e", "i", "p", "q", "r", "rp", "t", "v"]}, "EXN_V_2": {"type": "object", "properties": {"v": {"type": "string"}, "t": {"type": "string"}, "d": {"type": "string"}, "i": {"type": "string"}, "x": {"type": "string"}, "p": {"type": "string"}, "dt": {"type": "string"}, "r": {"type": "string"}, "q": {"type": "object", "additionalProperties": {}}, "a": {}}, "required": ["a", "d", "dt", "i", "p", "q", "r", "t", "v", "x"]}, "Credential": {"type": "object", "properties": {"sad": {"oneOf": [{"$ref": "#/components/schemas/ACDC_V_1"}, {"$ref": "#/components/schemas/ACDC_V_2"}]}, "atc": {"type": "string"}, "iss": {"$ref": "#/components/schemas/IssEvent"}, "issatc": {"type": "string"}, "pre": {"type": "string"}, "schema": {"$ref": "#/components/schemas/Schema"}, "chains": {"type": "array", "items": {"type": "object", "additionalProperties": {}}}, "status": {"$ref": "#/components/schemas/CredentialState"}, "anchor": {"$ref": "#/components/schemas/Anchor"}, "anc": {"oneOf": [{"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}, {"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}, "ancatc": {"type": "string"}}, "required": ["anc", "ancatc", "anchor", "atc", "chains", "iss", "issatc", "pre", "sad", "schema", "status"]}, "EmptyDict": {"type": "object", "properties": {}}, "CredentialStateIssOrRev": {"type": "object", "properties": {"vn": {}, "i": {"type": "string"}, "s": {"type": "string"}, "d": {"type": "string"}, "ri": {"type": "string"}, "a": {"$ref": "#/components/schemas/Seal"}, "dt": {"type": "string"}, "et": {"enum": ["iss", "rev"]}, "ra": {"$ref": "#/components/schemas/EmptyDict"}}, "required": ["a", "d", "dt", "et", "i", "ra", "ri", "s", "vn"]}, "RaFields": {"type": "object", "properties": {"i": {"type": "string"}, "s": {"type": "string"}, "d": {"type": "string"}}, "required": ["d", "i", "s"]}, "CredentialStateBisOrBrv": {"type": "object", "properties": {"vn": {}, "i": {"type": "string"}, "s": {"type": "string"}, "d": {"type": "string"}, "ri": {"type": "string"}, "a": {"$ref": "#/components/schemas/Seal"}, "dt": {"type": "string"}, "et": {"enum": ["bis", "brv"]}, "ra": {"$ref": "#/components/schemas/RaFields"}}, "required": ["a", "d", "dt", "et", "i", "ra", "ri", "s", "vn"]}, "CredentialState": {"oneOf": [{"$ref": "#/components/schemas/CredentialStateIssOrRev"}, {"$ref": "#/components/schemas/CredentialStateBisOrBrv"}]}, "Registry": {"type": "object", "properties": {"name": {"type": "string"}, "regk": {"type": "string"}, "pre": {"type": "string"}, "state": {"$ref": "#/components/schemas/CredentialState"}}, "required": ["name", "pre", "regk", "state"]}, "StateEERecord": {"type": "object", "properties": {"s": {"type": "string", "default": "0"}, "d": {"type": "string", "default": ""}, "br": {"type": "array", "items": {}}, "ba": {"type": "array", "items": {}}}}, "KeyStateRecord": {"type": "object", "properties": {"vn": {"type": "array", "items": {"type": "integer"}}, "i": {"type": "string", "default": ""}, "s": {"type": "string", "default": "0"}, "p": {"type": "string", "default": ""}, "d": {"type": "string", "default": ""}, "f": {"type": "string", "default": "0"}, "dt": {"type": "string", "default": ""}, "et": {"type": "string", "default": ""}, "kt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}]}, "k": {"type": "array", "items": {"type": "string"}}, "nt": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}]}, "n": {"type": "array", "items": {"type": "string"}}, "bt": {"type": "string", "default": "0"}, "b": {"type": "array", "items": {"type": "string"}}, "c": {"type": "array", "items": {"type": "string"}}, "ee": {"$ref": "#/components/schemas/StateEERecord"}, "di": {"type": "string", "default": ""}}, "required": ["b", "c", "ee", "k", "n", "kt", "nt"]}, "Controller": {"type": "object", "properties": {"state": {"$ref": "#/components/schemas/KeyStateRecord"}, "ee": {"oneOf": [{"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}}, "required": ["ee", "state"]}, "AgentResourceResult": {"type": "object", "properties": {"agent": {"$ref": "#/components/schemas/KeyStateRecord"}, "controller": {"$ref": "#/components/schemas/Controller"}, "pidx": {"type": "integer"}, "ridx": {"type": ["integer", "null"], "default": null}, "sxlt": {"type": ["string", "null"], "default": null}}, "required": ["agent", "controller", "pidx"]}, "HabState": {"type": "object", "properties": {"name": {"type": "string"}, "prefix": {"type": "string"}, "icp_dt": {"type": "string"}, "state": {"$ref": "#/components/schemas/KeyStateRecord"}, "transferable": {"type": "boolean"}, "windexes": {"type": "array", "items": {"type": "string"}}}, "required": ["icp_dt", "name", "prefix"], "oneOf": [{"required": ["salty"], "properties": {"salty": {"$ref": "#/components/schemas/SaltyState"}}}, {"required": ["randy"], "properties": {"randy": {"$ref": "#/components/schemas/RandyKeyState"}}}, {"required": ["group"], "properties": {"group": {"$ref": "#/components/schemas/GroupKeyState"}}}, {"required": ["extern"], "properties": {"extern": {"$ref": "#/components/schemas/ExternState"}}}]}, "SaltyState": {"type": "object", "properties": {"tier": {"$ref": "#/components/schemas/Tier"}, "sxlt": {"type": "string", "default": ""}, "pidx": {"type": "integer", "default": 0}, "kidx": {"type": "integer", "default": 0}, "stem": {"type": "string", "default": ""}, "dcode": {"type": "string", "default": ""}, "icodes": {"type": "array", "items": {"type": "string"}}, "ncodes": {"type": "array", "items": {"type": "string"}}, "transferable": {"type": "boolean", "default": false}}, "required": ["icodes", "ncodes", "tier"]}, "RandyKeyState": {"type": "object", "properties": {"prxs": {"type": "array", "items": {"type": "string"}}, "nxts": {"type": "array", "items": {"type": "string"}}}, "required": ["nxts", "prxs"]}, "GroupKeyState": {"type": "object", "properties": {"mhab": {"$ref": "#/components/schemas/HabState"}, "keys": {"type": "array", "items": {"type": "string"}}, "ndigs": {"type": "array", "items": {"type": "string"}}}, "required": ["keys", "mhab", "ndigs"]}, "ExternState": {"type": "object", "properties": {"extern_type": {"type": "string"}, "pidx": {"type": "integer"}}, "required": ["extern_type", "pidx"], "additionalProperties": true}, "HabStateBase": {"type": "object", "properties": {"name": {"type": "string"}, "prefix": {"type": "string"}, "icp_dt": {"type": "string"}}, "required": ["icp_dt", "name", "prefix"], "oneOf": [{"required": ["salty"], "properties": {"salty": {"$ref": "#/components/schemas/SaltyState"}}}, {"required": ["randy"], "properties": {"randy": {"$ref": "#/components/schemas/RandyKeyState"}}}, {"required": ["group"], "properties": {"group": {"$ref": "#/components/schemas/GroupKeyState"}}}, {"required": ["extern"], "properties": {"extern": {"$ref": "#/components/schemas/ExternState"}}}]}, "Tier": {"type": "string", "enum": ["low", "med", "high"], "description": "Tier of key material"}, "OOBI": {"type": "object", "properties": {"role": {"type": "string", "enum": ["controller", "witness", "registrar", "watcher", "judge", "juror", "peer", "mailbox", "agent"]}, "oobis": {"type": "array", "items": {"type": "string"}}}, "required": ["oobis", "role"]}, "EndRole": {"type": "object", "properties": {"cid": {"type": "string"}, "role": {"type": "string"}, "eid": {"type": "string"}}, "required": ["cid", "eid", "role"]}, "Challenge": {"type": "object", "properties": {"words": {"type": "array", "items": {"type": "string"}}, "dt": {"type": "string"}, "said": {"type": "string"}, "authenticated": {"type": "boolean"}}, "required": ["words"]}, "MemberEnds": {"type": "object", "properties": {"agent": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "controller": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "witness": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "registrar": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "watcher": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "judge": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "juror": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "peer": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}, "mailbox": {"type": ["object", "null"], "default": null, "additionalProperties": {"type": "string"}}}}, "WellKnown": {"type": "object", "properties": {"url": {"type": "string"}, "dt": {"type": "string"}}, "required": ["dt", "url"]}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "alias": {"type": "string"}, "oobi": {"type": "string"}, "ends": {"$ref": "#/components/schemas/MemberEnds"}, "challenges": {"type": "array", "items": {"$ref": "#/components/schemas/Challenge"}}, "wellKnowns": {"type": "array", "items": {"$ref": "#/components/schemas/WellKnown"}}}, "required": ["id"], "additionalProperties": true}, "AidRecord": {"type": "object", "properties": {"aid": {"type": "string"}, "ends": {"$ref": "#/components/schemas/MemberEnds"}}, "required": ["aid", "ends"]}, "GroupMember": {"type": "object", "properties": {"signing": {"type": "array", "items": {"$ref": "#/components/schemas/AidRecord"}}, "rotation": {"type": "array", "items": {"$ref": "#/components/schemas/AidRecord"}}}, "required": ["rotation", "signing"]}, "KeyEventRecord": {"type": "object", "properties": {"ked": {"oneOf": [{"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}, {"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}, "atc": {"type": "string"}}, "required": ["atc", "ked"]}, "AgentConfig": {"type": "object", "properties": {"iurls": {"type": "array", "items": {"type": "string"}}}}, "Exn": {"oneOf": [{"$ref": "#/components/schemas/EXN_V_1"}, {"$ref": "#/components/schemas/EXN_V_2"}]}, "Icp": {"oneOf": [{"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}]}, "Rot": {"oneOf": [{"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}]}, "Vcp": {"oneOf": [{"$ref": "#/components/schemas/VCP_V_1"}]}, "Iss": {"oneOf": [{"$ref": "#/components/schemas/ISS_V_1"}]}, "Ixn": {"oneOf": [{"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}]}, "Rpy": {"oneOf": [{"$ref": "#/components/schemas/RPY_V_1"}, {"$ref": "#/components/schemas/RPY_V_2"}]}, "NotificationData": {"type": "object", "properties": {"r": {"type": "string"}, "d": {"type": "string"}, "m": {"type": "string"}}, "additionalProperties": true}, "Notification": {"type": "object", "properties": {"i": {"type": "string"}, "dt": {"type": "string"}, "r": {"type": "boolean"}, "a": {"$ref": "#/components/schemas/NotificationData"}}, "required": ["a", "dt", "i", "r"]}, "ExchangeResource": {"type": "object", "properties": {"exn": {"$ref": "#/components/schemas/Exn"}, "pathed": {"type": "object", "additionalProperties": {}}}, "required": ["exn", "pathed"]}, "MultisigInceptEmbeds": {"type": "object", "properties": {"icp": {"$ref": "#/components/schemas/Icp"}}, "required": ["icp"]}, "MultisigRotateEmbeds": {"type": "object", "properties": {"rot": {"$ref": "#/components/schemas/Rot"}}, "required": ["rot"]}, "MultisigInteractEmbeds": {"type": "object", "properties": {"ixn": {"$ref": "#/components/schemas/Ixn"}}, "required": ["ixn"]}, "MultisigRegistryInceptEmbeds": {"type": "object", "properties": {"vcp": {"$ref": "#/components/schemas/Vcp"}, "anc": {"oneOf": [{"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}, {"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}}, "required": ["anc", "vcp"]}, "MultisigIssueEmbeds": {"type": "object", "properties": {"acdc": {"oneOf": [{"$ref": "#/components/schemas/ACDC_V_1"}, {"$ref": "#/components/schemas/ACDC_V_2"}]}, "iss": {"$ref": "#/components/schemas/Iss"}, "anc": {"oneOf": [{"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}, {"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}}, "required": ["acdc", "anc", "iss"]}, "MultisigRevokeEmbeds": {"type": "object", "properties": {"rev": {"$ref": "#/components/schemas/REV_V_1"}, "anc": {"oneOf": [{"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}, {"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}}, "required": ["anc", "rev"]}, "MultisigRpyEmbeds": {"type": "object", "properties": {"rpy": {"$ref": "#/components/schemas/Rpy"}}, "required": ["rpy"]}, "MultisigExnEmbeds": {"type": "object", "properties": {"exn": {"$ref": "#/components/schemas/Exn"}}, "required": ["exn"]}, "ExnEmbeds": {"type": "object", "properties": {"d": {"type": "string"}}, "required": ["d"], "oneOf": [{"$ref": "#/components/schemas/MultisigInceptEmbeds"}, {"$ref": "#/components/schemas/MultisigRotateEmbeds"}, {"$ref": "#/components/schemas/MultisigInteractEmbeds"}, {"$ref": "#/components/schemas/MultisigRegistryInceptEmbeds"}, {"$ref": "#/components/schemas/MultisigIssueEmbeds"}, {"$ref": "#/components/schemas/MultisigRevokeEmbeds"}, {"$ref": "#/components/schemas/MultisigRpyEmbeds"}, {"$ref": "#/components/schemas/MultisigExnEmbeds"}]}, "ExnMultisig": {"type": "object", "properties": {"exn": {"$ref": "#/components/schemas/Exn"}, "paths": {"type": "object", "additionalProperties": {}}, "groupName": {"type": "string"}, "memberName": {"type": "string"}, "sender": {"type": "string"}}, "required": ["exn", "paths"]}, "OOBIMetadata": {"type": "object", "properties": {"oobi": {"type": "string"}}, "required": ["oobi"]}, "PendingOOBIOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/OOBIMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedOOBIOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/OOBIMetadata"}, "response": {"$ref": "#/components/schemas/KeyStateRecord"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "OperationStatus": {"type": "object", "properties": {"code": {"type": "integer"}, "message": {"type": "string"}, "details": {"type": ["object", "null"], "additionalProperties": {}}}, "required": ["code", "message"]}, "FailedOOBIOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/OOBIMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "OOBIOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingOOBIOperation"}, {"$ref": "#/components/schemas/CompletedOOBIOperation"}, {"$ref": "#/components/schemas/FailedOOBIOperation"}]}, "QueryMetadata": {"type": "object", "properties": {"pre": {"type": "string"}, "sn": {"type": "integer"}, "anchor": {"$ref": "#/components/schemas/Anchor"}}, "required": ["pre", "sn"]}, "PendingQueryOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/QueryMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedQueryOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/QueryMetadata"}, "response": {"$ref": "#/components/schemas/KeyStateRecord"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedQueryOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/QueryMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "QueryOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingQueryOperation"}, {"$ref": "#/components/schemas/CompletedQueryOperation"}, {"$ref": "#/components/schemas/FailedQueryOperation"}]}, "EndRoleMetadata": {"type": "object", "properties": {"cid": {"type": "string"}, "role": {"type": "string"}, "eid": {"type": "string"}}, "required": ["cid", "eid", "role"]}, "PendingEndRoleOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/EndRoleMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedEndRoleOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/EndRoleMetadata"}, "response": {"oneOf": [{"$ref": "#/components/schemas/RPY_V_1"}, {"$ref": "#/components/schemas/RPY_V_2"}]}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedEndRoleOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/EndRoleMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "EndRoleOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingEndRoleOperation"}, {"$ref": "#/components/schemas/CompletedEndRoleOperation"}, {"$ref": "#/components/schemas/FailedEndRoleOperation"}]}, "WitnessMetadata": {"type": "object", "properties": {"pre": {"type": "string"}, "sn": {"type": "integer"}}, "required": ["pre", "sn"]}, "PendingWitnessOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/WitnessMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedWitnessOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/WitnessMetadata"}, "response": {"oneOf": [{"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}]}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedWitnessOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/WitnessMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "WitnessOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingWitnessOperation"}, {"$ref": "#/components/schemas/CompletedWitnessOperation"}, {"$ref": "#/components/schemas/FailedWitnessOperation"}]}, "DelegationMetadata": {"type": "object", "properties": {"pre": {"type": "string"}, "sn": {"type": "integer"}}, "required": ["pre", "sn"]}, "PendingDelegationOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DelegationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedDelegationOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DelegationMetadata"}, "response": {"oneOf": [{"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedDelegationOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DelegationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "DelegationOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingDelegationOperation"}, {"$ref": "#/components/schemas/CompletedDelegationOperation"}, {"$ref": "#/components/schemas/FailedDelegationOperation"}]}, "RegistryOperationMetadata": {"type": "object", "properties": {"pre": {"type": "string"}, "depends": {}, "anchor": {"$ref": "#/components/schemas/Anchor"}}, "required": ["anchor", "depends", "pre"]}, "PendingRegistryOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/RegistryOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "RegistryOperationResponse": {"type": "object", "properties": {"anchor": {"$ref": "#/components/schemas/Anchor"}}, "required": ["anchor"]}, "CompletedRegistryOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/RegistryOperationMetadata"}, "response": {"$ref": "#/components/schemas/RegistryOperationResponse"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedRegistryOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/RegistryOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "RegistryOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingRegistryOperation"}, {"$ref": "#/components/schemas/CompletedRegistryOperation"}, {"$ref": "#/components/schemas/FailedRegistryOperation"}]}, "LocSchemeMetadata": {"type": "object", "properties": {"eid": {"type": "string"}, "scheme": {"type": "string"}, "url": {"type": "string"}}, "required": ["eid", "scheme", "url"]}, "PendingLocSchemeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/LocSchemeMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedLocSchemeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/LocSchemeMetadata"}, "response": {"$ref": "#/components/schemas/LocSchemeMetadata"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedLocSchemeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/LocSchemeMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "LocSchemeOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingLocSchemeOperation"}, {"$ref": "#/components/schemas/CompletedLocSchemeOperation"}, {"$ref": "#/components/schemas/FailedLocSchemeOperation"}]}, "ChallengeOperationMetadata": {"type": "object", "properties": {"words": {"type": "array", "items": {"type": "string"}}}, "required": ["words"]}, "PendingChallengeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/ChallengeOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "ChallengeOperationResponse": {"type": "object", "properties": {"exn": {"oneOf": [{"$ref": "#/components/schemas/EXN_V_1"}, {"$ref": "#/components/schemas/EXN_V_2"}]}}, "required": ["exn"]}, "CompletedChallengeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/ChallengeOperationMetadata"}, "response": {"$ref": "#/components/schemas/ChallengeOperationResponse"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedChallengeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/ChallengeOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "ChallengeOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingChallengeOperation"}, {"$ref": "#/components/schemas/CompletedChallengeOperation"}, {"$ref": "#/components/schemas/FailedChallengeOperation"}]}, "ExchangeOperationMetadata": {"type": "object", "properties": {"said": {"type": "string"}}, "required": ["said"]}, "PendingExchangeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/ExchangeOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedExchangeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/ExchangeOperationMetadata"}, "response": {"$ref": "#/components/schemas/ExchangeOperationMetadata"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedExchangeOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/ExchangeOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "ExchangeOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingExchangeOperation"}, {"$ref": "#/components/schemas/CompletedExchangeOperation"}, {"$ref": "#/components/schemas/FailedExchangeOperation"}]}, "SubmitOperationMetadata": {"type": "object", "properties": {"pre": {"type": "string"}, "sn": {"type": "integer"}}, "required": ["pre", "sn"]}, "PendingSubmitOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/SubmitOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedSubmitOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/SubmitOperationMetadata"}, "response": {"$ref": "#/components/schemas/KeyStateRecord"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedSubmitOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/SubmitOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "SubmitOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingSubmitOperation"}, {"$ref": "#/components/schemas/CompletedSubmitOperation"}, {"$ref": "#/components/schemas/FailedSubmitOperation"}]}, "DoneOperationMetadata": {"type": "object", "properties": {"response": {"oneOf": [{"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/EXN_V_1"}, {"$ref": "#/components/schemas/EXN_V_2"}]}, "pre": {"type": ["string", "null"], "default": null}}, "required": ["response"]}, "PendingDoneOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DoneOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedDoneOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DoneOperationMetadata"}, "response": {"oneOf": [{"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/EXN_V_1"}, {"$ref": "#/components/schemas/EXN_V_2"}]}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedDoneOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DoneOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "DoneOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingDoneOperation"}, {"$ref": "#/components/schemas/CompletedDoneOperation"}, {"$ref": "#/components/schemas/FailedDoneOperation"}]}, "CredentialOperationMetadata": {"type": "object", "properties": {"ced": {"oneOf": [{"$ref": "#/components/schemas/ACDC_V_1"}, {"$ref": "#/components/schemas/ACDC_V_2"}]}, "depends": {"oneOf": [{"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}, {"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}]}}, "required": ["ced"]}, "CredentialOperationResponse": {"type": "object", "properties": {"ced": {"oneOf": [{"$ref": "#/components/schemas/ACDC_V_1"}, {"$ref": "#/components/schemas/ACDC_V_2"}]}}}, "PendingCredentialOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/CredentialOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedCredentialOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/CredentialOperationMetadata"}, "response": {"$ref": "#/components/schemas/CredentialOperationResponse"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedCredentialOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/CredentialOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "CredentialOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingCredentialOperation"}, {"$ref": "#/components/schemas/CompletedCredentialOperation"}, {"$ref": "#/components/schemas/FailedCredentialOperation"}]}, "GroupOperationMetadata": {"type": "object", "properties": {"pre": {"type": "string"}, "sn": {"type": "integer"}}, "required": ["pre", "sn"]}, "PendingGroupOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/GroupOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedGroupOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/GroupOperationMetadata"}, "response": {"oneOf": [{"$ref": "#/components/schemas/IXN_V_1"}, {"$ref": "#/components/schemas/IXN_V_2"}, {"$ref": "#/components/schemas/ICP_V_1"}, {"$ref": "#/components/schemas/ICP_V_2"}, {"$ref": "#/components/schemas/ROT_V_1"}, {"$ref": "#/components/schemas/ROT_V_2"}, {"$ref": "#/components/schemas/DIP_V_1"}, {"$ref": "#/components/schemas/DIP_V_2"}, {"$ref": "#/components/schemas/DRT_V_1"}, {"$ref": "#/components/schemas/DRT_V_2"}]}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedGroupOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/GroupOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "GroupOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingGroupOperation"}, {"$ref": "#/components/schemas/CompletedGroupOperation"}, {"$ref": "#/components/schemas/FailedGroupOperation"}]}, "DelegatorOperationMetadata": {"type": "object", "properties": {"pre": {"type": "string"}, "teepre": {"type": "string"}, "anchor": {"$ref": "#/components/schemas/Anchor"}, "depends": {"oneOf": [{"$ref": "#/components/schemas/GroupOperation"}, {"$ref": "#/components/schemas/WitnessOperation"}, {"$ref": "#/components/schemas/DoneOperation"}]}}, "required": ["pre", "teepre"]}, "PendingDelegatorOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DelegatorOperationMetadata"}, "done": {"default": false, "enum": [false]}}, "required": ["name"]}, "CompletedDelegatorOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DelegatorOperationMetadata"}, "response": {"type": "string"}, "done": {"default": true, "enum": [true]}}, "required": ["name", "response"]}, "FailedDelegatorOperation": {"type": "object", "properties": {"name": {"type": "string"}, "metadata": {"$ref": "#/components/schemas/DelegatorOperationMetadata"}, "error": {"$ref": "#/components/schemas/OperationStatus"}, "done": {"default": true, "enum": [true]}}, "required": ["error", "name"]}, "DelegatorOperation": {"oneOf": [{"$ref": "#/components/schemas/PendingDelegatorOperation"}, {"$ref": "#/components/schemas/CompletedDelegatorOperation"}, {"$ref": "#/components/schemas/FailedDelegatorOperation"}]}, "Operation": {"oneOf": [{"$ref": "#/components/schemas/OOBIOperation"}, {"$ref": "#/components/schemas/QueryOperation"}, {"$ref": "#/components/schemas/EndRoleOperation"}, {"$ref": "#/components/schemas/WitnessOperation"}, {"$ref": "#/components/schemas/DelegationOperation"}, {"$ref": "#/components/schemas/RegistryOperation"}, {"$ref": "#/components/schemas/LocSchemeOperation"}, {"$ref": "#/components/schemas/ChallengeOperation"}, {"$ref": "#/components/schemas/ExchangeOperation"}, {"$ref": "#/components/schemas/SubmitOperation"}, {"$ref": "#/components/schemas/DoneOperation"}, {"$ref": "#/components/schemas/CredentialOperation"}, {"$ref": "#/components/schemas/GroupOperation"}, {"$ref": "#/components/schemas/DelegatorOperation"}]}}}}' - ) + _validate_openapi_semantics(sd) diff --git a/uv.lock b/uv.lock index 6cc6b612..761e340a 100644 --- a/uv.lock +++ b/uv.lock @@ -13,14 +13,14 @@ wheels = [ [[package]] name = "apispec" -version = "6.8.1" +version = "6.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/38/62499ad75cf085f5268458c09ae97007082ed85aec1a9cd9e38f7685fbb0/apispec-6.8.1.tar.gz", hash = "sha256:f4916cbb7be156963b18f5929a0e42bd2349135834b680a81b12432bcfaa9a39", size = 77050, upload-time = "2025-01-07T05:11:43.827Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/f1/1f5a9332df3ecd90cc5ab69bc58a4174b8ba2ac1720c4c26b01d20751bf5/apispec-6.10.0.tar.gz", hash = "sha256:0a888555cd4aa5fb7176041be15684154fd8961055e1672e703abf737e8761bf", size = 80631, upload-time = "2026-03-06T21:48:40.916Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/03/74947557f3b297cbf3dfc4689079aaf86aae02da69fc0c6a813fa5521556/apispec-6.8.1-py3-none-any.whl", hash = "sha256:eacba00df745efc9adb2a45cf992300e87938582077e101fb26b78ecf4320beb", size = 30461, upload-time = "2025-01-07T05:11:42.116Z" }, + { url = "https://files.pythonhosted.org/packages/20/88/e149b20246c4689e7d27163e4e3bb8946ef31617cfb3b9c427813483fe5b/apispec-6.10.0-py3-none-any.whl", hash = "sha256:8ff23e0de9a0ceb62ff70047241126315bd17b8d0565a567934c0156f4ddbb43", size = 31313, upload-time = "2026-03-06T21:48:39.404Z" }, ] [[package]] @@ -218,76 +218,86 @@ wheels = [ [[package]] name = "coverage" -version = "7.10.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" }, +version = "7.13.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/56/95b7e30fa389756cb56630faa728da46a27b8c6eb46f9d557c68fff12b65/coverage-7.13.4.tar.gz", hash = "sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91", size = 827239, upload-time = "2026-02-09T12:59:03.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/81/4ce2fdd909c5a0ed1f6dedb88aa57ab79b6d1fbd9b588c1ac7ef45659566/coverage-7.13.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459", size = 219449, upload-time = "2026-02-09T12:56:54.889Z" }, + { url = "https://files.pythonhosted.org/packages/5d/96/5238b1efc5922ddbdc9b0db9243152c09777804fb7c02ad1741eb18a11c0/coverage-7.13.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3", size = 219810, upload-time = "2026-02-09T12:56:56.33Z" }, + { url = "https://files.pythonhosted.org/packages/78/72/2f372b726d433c9c35e56377cf1d513b4c16fe51841060d826b95caacec1/coverage-7.13.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634", size = 251308, upload-time = "2026-02-09T12:56:57.858Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a0/2ea570925524ef4e00bb6c82649f5682a77fac5ab910a65c9284de422600/coverage-7.13.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3", size = 254052, upload-time = "2026-02-09T12:56:59.754Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ac/45dc2e19a1939098d783c846e130b8f862fbb50d09e0af663988f2f21973/coverage-7.13.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa", size = 255165, upload-time = "2026-02-09T12:57:01.287Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4d/26d236ff35abc3b5e63540d3386e4c3b192168c1d96da5cb2f43c640970f/coverage-7.13.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3", size = 257432, upload-time = "2026-02-09T12:57:02.637Z" }, + { url = "https://files.pythonhosted.org/packages/ec/55/14a966c757d1348b2e19caf699415a2a4c4f7feaa4bbc6326a51f5c7dd1b/coverage-7.13.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a", size = 251716, upload-time = "2026-02-09T12:57:04.056Z" }, + { url = "https://files.pythonhosted.org/packages/77/33/50116647905837c66d28b2af1321b845d5f5d19be9655cb84d4a0ea806b4/coverage-7.13.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7", size = 253089, upload-time = "2026-02-09T12:57:05.503Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b4/8efb11a46e3665d92635a56e4f2d4529de6d33f2cb38afd47d779d15fc99/coverage-7.13.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc", size = 251232, upload-time = "2026-02-09T12:57:06.879Z" }, + { url = "https://files.pythonhosted.org/packages/51/24/8cd73dd399b812cc76bb0ac260e671c4163093441847ffe058ac9fda1e32/coverage-7.13.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47", size = 255299, upload-time = "2026-02-09T12:57:08.245Z" }, + { url = "https://files.pythonhosted.org/packages/03/94/0a4b12f1d0e029ce1ccc1c800944a9984cbe7d678e470bb6d3c6bc38a0da/coverage-7.13.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985", size = 250796, upload-time = "2026-02-09T12:57:10.142Z" }, + { url = "https://files.pythonhosted.org/packages/73/44/6002fbf88f6698ca034360ce474c406be6d5a985b3fdb3401128031eef6b/coverage-7.13.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0", size = 252673, upload-time = "2026-02-09T12:57:12.197Z" }, + { url = "https://files.pythonhosted.org/packages/de/c6/a0279f7c00e786be75a749a5674e6fa267bcbd8209cd10c9a450c655dfa7/coverage-7.13.4-cp312-cp312-win32.whl", hash = "sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246", size = 221990, upload-time = "2026-02-09T12:57:14.085Z" }, + { url = "https://files.pythonhosted.org/packages/77/4e/c0a25a425fcf5557d9abd18419c95b63922e897bc86c1f327f155ef234a9/coverage-7.13.4-cp312-cp312-win_amd64.whl", hash = "sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126", size = 222800, upload-time = "2026-02-09T12:57:15.944Z" }, + { url = "https://files.pythonhosted.org/packages/47/ac/92da44ad9a6f4e3a7debd178949d6f3769bedca33830ce9b1dcdab589a37/coverage-7.13.4-cp312-cp312-win_arm64.whl", hash = "sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d", size = 221415, upload-time = "2026-02-09T12:57:17.497Z" }, + { url = "https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9", size = 219474, upload-time = "2026-02-09T12:57:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac", size = 219844, upload-time = "2026-02-09T12:57:20.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/fd/7e859f8fab324cef6c4ad7cff156ca7c489fef9179d5749b0c8d321281c2/coverage-7.13.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea", size = 250832, upload-time = "2026-02-09T12:57:22.007Z" }, + { url = "https://files.pythonhosted.org/packages/e4/dc/b2442d10020c2f52617828862d8b6ee337859cd8f3a1f13d607dddda9cf7/coverage-7.13.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b", size = 253434, upload-time = "2026-02-09T12:57:23.339Z" }, + { url = "https://files.pythonhosted.org/packages/5a/88/6728a7ad17428b18d836540630487231f5470fb82454871149502f5e5aa2/coverage-7.13.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525", size = 254676, upload-time = "2026-02-09T12:57:24.774Z" }, + { url = "https://files.pythonhosted.org/packages/7c/bc/21244b1b8cedf0dff0a2b53b208015fe798d5f2a8d5348dbfece04224fff/coverage-7.13.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242", size = 256807, upload-time = "2026-02-09T12:57:26.125Z" }, + { url = "https://files.pythonhosted.org/packages/97/a0/ddba7ed3251cff51006737a727d84e05b61517d1784a9988a846ba508877/coverage-7.13.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148", size = 251058, upload-time = "2026-02-09T12:57:27.614Z" }, + { url = "https://files.pythonhosted.org/packages/9b/55/e289addf7ff54d3a540526f33751951bf0878f3809b47f6dfb3def69c6f7/coverage-7.13.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a", size = 252805, upload-time = "2026-02-09T12:57:29.066Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/cc276b1fa4a59be56d96f1dabddbdc30f4ba22e3b1cd42504c37b3313255/coverage-7.13.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23", size = 250766, upload-time = "2026-02-09T12:57:30.522Z" }, + { url = "https://files.pythonhosted.org/packages/94/44/1093b8f93018f8b41a8cf29636c9292502f05e4a113d4d107d14a3acd044/coverage-7.13.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80", size = 254923, upload-time = "2026-02-09T12:57:31.946Z" }, + { url = "https://files.pythonhosted.org/packages/8b/55/ea2796da2d42257f37dbea1aab239ba9263b31bd91d5527cdd6db5efe174/coverage-7.13.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea", size = 250591, upload-time = "2026-02-09T12:57:33.842Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fa/7c4bb72aacf8af5020675aa633e59c1fbe296d22aed191b6a5b711eb2bc7/coverage-7.13.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a", size = 252364, upload-time = "2026-02-09T12:57:35.743Z" }, + { url = "https://files.pythonhosted.org/packages/5c/38/a8d2ec0146479c20bbaa7181b5b455a0c41101eed57f10dd19a78ab44c80/coverage-7.13.4-cp313-cp313-win32.whl", hash = "sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d", size = 222010, upload-time = "2026-02-09T12:57:37.25Z" }, + { url = "https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-win_amd64.whl", hash = "sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd", size = 222818, upload-time = "2026-02-09T12:57:38.734Z" }, + { url = "https://files.pythonhosted.org/packages/04/d1/934918a138c932c90d78301f45f677fb05c39a3112b96fd2c8e60503cdc7/coverage-7.13.4-cp313-cp313-win_arm64.whl", hash = "sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af", size = 221438, upload-time = "2026-02-09T12:57:40.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/57/ee93ced533bcb3e6df961c0c6e42da2fc6addae53fb95b94a89b1e33ebd7/coverage-7.13.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d", size = 220165, upload-time = "2026-02-09T12:57:41.639Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e0/969fc285a6fbdda49d91af278488d904dcd7651b2693872f0ff94e40e84a/coverage-7.13.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12", size = 220516, upload-time = "2026-02-09T12:57:44.215Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b8/9531944e16267e2735a30a9641ff49671f07e8138ecf1ca13db9fd2560c7/coverage-7.13.4-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b", size = 261804, upload-time = "2026-02-09T12:57:45.989Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f3/e63df6d500314a2a60390d1989240d5f27318a7a68fa30ad3806e2a9323e/coverage-7.13.4-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9", size = 263885, upload-time = "2026-02-09T12:57:47.42Z" }, + { url = "https://files.pythonhosted.org/packages/f3/67/7654810de580e14b37670b60a09c599fa348e48312db5b216d730857ffe6/coverage-7.13.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092", size = 266308, upload-time = "2026-02-09T12:57:49.345Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/39d41eca0eab3cc82115953ad41c4e77935286c930e8fad15eaed1389d83/coverage-7.13.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9", size = 267452, upload-time = "2026-02-09T12:57:50.811Z" }, + { url = "https://files.pythonhosted.org/packages/50/6d/39c0fbb8fc5cd4d2090811e553c2108cf5112e882f82505ee7495349a6bf/coverage-7.13.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26", size = 261057, upload-time = "2026-02-09T12:57:52.447Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a2/60010c669df5fa603bb5a97fb75407e191a846510da70ac657eb696b7fce/coverage-7.13.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2", size = 263875, upload-time = "2026-02-09T12:57:53.938Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d9/63b22a6bdbd17f1f96e9ed58604c2a6b0e72a9133e37d663bef185877cf6/coverage-7.13.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940", size = 261500, upload-time = "2026-02-09T12:57:56.012Z" }, + { url = "https://files.pythonhosted.org/packages/70/bf/69f86ba1ad85bc3ad240e4c0e57a2e620fbc0e1645a47b5c62f0e941ad7f/coverage-7.13.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c", size = 265212, upload-time = "2026-02-09T12:57:57.5Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f2/5f65a278a8c2148731831574c73e42f57204243d33bedaaf18fa79c5958f/coverage-7.13.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0", size = 260398, upload-time = "2026-02-09T12:57:59.027Z" }, + { url = "https://files.pythonhosted.org/packages/ef/80/6e8280a350ee9fea92f14b8357448a242dcaa243cb2c72ab0ca591f66c8c/coverage-7.13.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b", size = 262584, upload-time = "2026-02-09T12:58:01.129Z" }, + { url = "https://files.pythonhosted.org/packages/22/63/01ff182fc95f260b539590fb12c11ad3e21332c15f9799cb5e2386f71d9f/coverage-7.13.4-cp313-cp313t-win32.whl", hash = "sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9", size = 222688, upload-time = "2026-02-09T12:58:02.736Z" }, + { url = "https://files.pythonhosted.org/packages/a9/43/89de4ef5d3cd53b886afa114065f7e9d3707bdb3e5efae13535b46ae483d/coverage-7.13.4-cp313-cp313t-win_amd64.whl", hash = "sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd", size = 223746, upload-time = "2026-02-09T12:58:05.362Z" }, + { url = "https://files.pythonhosted.org/packages/35/39/7cf0aa9a10d470a5309b38b289b9bb07ddeac5d61af9b664fe9775a4cb3e/coverage-7.13.4-cp313-cp313t-win_arm64.whl", hash = "sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997", size = 222003, upload-time = "2026-02-09T12:58:06.952Z" }, + { url = "https://files.pythonhosted.org/packages/92/11/a9cf762bb83386467737d32187756a42094927150c3e107df4cb078e8590/coverage-7.13.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601", size = 219522, upload-time = "2026-02-09T12:58:08.623Z" }, + { url = "https://files.pythonhosted.org/packages/d3/28/56e6d892b7b052236d67c95f1936b6a7cf7c3e2634bf27610b8cbd7f9c60/coverage-7.13.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689", size = 219855, upload-time = "2026-02-09T12:58:10.176Z" }, + { url = "https://files.pythonhosted.org/packages/e5/69/233459ee9eb0c0d10fcc2fe425a029b3fa5ce0f040c966ebce851d030c70/coverage-7.13.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c", size = 250887, upload-time = "2026-02-09T12:58:12.503Z" }, + { url = "https://files.pythonhosted.org/packages/06/90/2cdab0974b9b5bbc1623f7876b73603aecac11b8d95b85b5b86b32de5eab/coverage-7.13.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129", size = 253396, upload-time = "2026-02-09T12:58:14.615Z" }, + { url = "https://files.pythonhosted.org/packages/ac/15/ea4da0f85bf7d7b27635039e649e99deb8173fe551096ea15017f7053537/coverage-7.13.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552", size = 254745, upload-time = "2026-02-09T12:58:16.162Z" }, + { url = "https://files.pythonhosted.org/packages/99/11/bb356e86920c655ca4d61daee4e2bbc7258f0a37de0be32d233b561134ff/coverage-7.13.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a", size = 257055, upload-time = "2026-02-09T12:58:17.892Z" }, + { url = "https://files.pythonhosted.org/packages/c9/0f/9ae1f8cb17029e09da06ca4e28c9e1d5c1c0a511c7074592e37e0836c915/coverage-7.13.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356", size = 250911, upload-time = "2026-02-09T12:58:19.495Z" }, + { url = "https://files.pythonhosted.org/packages/89/3a/adfb68558fa815cbc29747b553bc833d2150228f251b127f1ce97e48547c/coverage-7.13.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71", size = 252754, upload-time = "2026-02-09T12:58:21.064Z" }, + { url = "https://files.pythonhosted.org/packages/32/b1/540d0c27c4e748bd3cd0bd001076ee416eda993c2bae47a73b7cc9357931/coverage-7.13.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5", size = 250720, upload-time = "2026-02-09T12:58:22.622Z" }, + { url = "https://files.pythonhosted.org/packages/c7/95/383609462b3ffb1fe133014a7c84fc0dd01ed55ac6140fa1093b5af7ebb1/coverage-7.13.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98", size = 254994, upload-time = "2026-02-09T12:58:24.548Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ba/1761138e86c81680bfc3c49579d66312865457f9fe405b033184e5793cb3/coverage-7.13.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5", size = 250531, upload-time = "2026-02-09T12:58:26.271Z" }, + { url = "https://files.pythonhosted.org/packages/f8/8e/05900df797a9c11837ab59c4d6fe94094e029582aab75c3309a93e6fb4e3/coverage-7.13.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0", size = 252189, upload-time = "2026-02-09T12:58:27.807Z" }, + { url = "https://files.pythonhosted.org/packages/00/bd/29c9f2db9ea4ed2738b8a9508c35626eb205d51af4ab7bf56a21a2e49926/coverage-7.13.4-cp314-cp314-win32.whl", hash = "sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb", size = 222258, upload-time = "2026-02-09T12:58:29.441Z" }, + { url = "https://files.pythonhosted.org/packages/a7/4d/1f8e723f6829977410efeb88f73673d794075091c8c7c18848d273dc9d73/coverage-7.13.4-cp314-cp314-win_amd64.whl", hash = "sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505", size = 223073, upload-time = "2026-02-09T12:58:31.026Z" }, + { url = "https://files.pythonhosted.org/packages/51/5b/84100025be913b44e082ea32abcf1afbf4e872f5120b7a1cab1d331b1e13/coverage-7.13.4-cp314-cp314-win_arm64.whl", hash = "sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2", size = 221638, upload-time = "2026-02-09T12:58:32.599Z" }, + { url = "https://files.pythonhosted.org/packages/a7/e4/c884a405d6ead1370433dad1e3720216b4f9fd8ef5b64bfd984a2a60a11a/coverage-7.13.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056", size = 220246, upload-time = "2026-02-09T12:58:34.181Z" }, + { url = "https://files.pythonhosted.org/packages/81/5c/4d7ed8b23b233b0fffbc9dfec53c232be2e695468523242ea9fd30f97ad2/coverage-7.13.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc", size = 220514, upload-time = "2026-02-09T12:58:35.704Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6f/3284d4203fd2f28edd73034968398cd2d4cb04ab192abc8cff007ea35679/coverage-7.13.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9", size = 261877, upload-time = "2026-02-09T12:58:37.864Z" }, + { url = "https://files.pythonhosted.org/packages/09/aa/b672a647bbe1556a85337dc95bfd40d146e9965ead9cc2fe81bde1e5cbce/coverage-7.13.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf", size = 264004, upload-time = "2026-02-09T12:58:39.492Z" }, + { url = "https://files.pythonhosted.org/packages/79/a1/aa384dbe9181f98bba87dd23dda436f0c6cf2e148aecbb4e50fc51c1a656/coverage-7.13.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55", size = 266408, upload-time = "2026-02-09T12:58:41.852Z" }, + { url = "https://files.pythonhosted.org/packages/53/5e/5150bf17b4019bc600799f376bb9606941e55bd5a775dc1e096b6ffea952/coverage-7.13.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72", size = 267544, upload-time = "2026-02-09T12:58:44.093Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ed/f1de5c675987a4a7a672250d2c5c9d73d289dbf13410f00ed7181d8017dd/coverage-7.13.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a", size = 260980, upload-time = "2026-02-09T12:58:45.721Z" }, + { url = "https://files.pythonhosted.org/packages/b3/e3/fe758d01850aa172419a6743fe76ba8b92c29d181d4f676ffe2dae2ba631/coverage-7.13.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6", size = 263871, upload-time = "2026-02-09T12:58:47.334Z" }, + { url = "https://files.pythonhosted.org/packages/b6/76/b829869d464115e22499541def9796b25312b8cf235d3bb00b39f1675395/coverage-7.13.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3", size = 261472, upload-time = "2026-02-09T12:58:48.995Z" }, + { url = "https://files.pythonhosted.org/packages/14/9e/caedb1679e73e2f6ad240173f55218488bfe043e38da577c4ec977489915/coverage-7.13.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750", size = 265210, upload-time = "2026-02-09T12:58:51.178Z" }, + { url = "https://files.pythonhosted.org/packages/3a/10/0dd02cb009b16ede425b49ec344aba13a6ae1dc39600840ea6abcb085ac4/coverage-7.13.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39", size = 260319, upload-time = "2026-02-09T12:58:53.081Z" }, + { url = "https://files.pythonhosted.org/packages/92/8e/234d2c927af27c6d7a5ffad5bd2cf31634c46a477b4c7adfbfa66baf7ebb/coverage-7.13.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0", size = 262638, upload-time = "2026-02-09T12:58:55.258Z" }, + { url = "https://files.pythonhosted.org/packages/2f/64/e5547c8ff6964e5965c35a480855911b61509cce544f4d442caa759a0702/coverage-7.13.4-cp314-cp314t-win32.whl", hash = "sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea", size = 223040, upload-time = "2026-02-09T12:58:56.936Z" }, + { url = "https://files.pythonhosted.org/packages/c7/96/38086d58a181aac86d503dfa9c47eb20715a79c3e3acbdf786e92e5c09a8/coverage-7.13.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932", size = 224148, upload-time = "2026-02-09T12:58:58.645Z" }, + { url = "https://files.pythonhosted.org/packages/ce/72/8d10abd3740a0beb98c305e0c3faf454366221c0f37a8bcf8f60020bb65a/coverage-7.13.4-cp314-cp314t-win_arm64.whl", hash = "sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b", size = 222172, upload-time = "2026-02-09T12:59:00.396Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4a/331fe2caf6799d591109bb9c08083080f6de90a823695d412a935622abb2/coverage-7.13.4-py3-none-any.whl", hash = "sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0", size = 211242, upload-time = "2026-02-09T12:59:02.032Z" }, ] [[package]] @@ -483,7 +493,7 @@ wheels = [ [[package]] name = "keri" -version = "1.2.7" +version = "1.2.12" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apispec" }, @@ -507,11 +517,11 @@ dependencies = [ { name = "qrcode" }, { name = "semver" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3f/3c/fd7627dc9fb013ab2321213595bd02837533fdca856a7f75de7f9d233b21/keri-1.2.7.tar.gz", hash = "sha256:9e2687df544b2bc07ec2d63fa2fe906e8e8ab20bd5b788279da35724e443a223", size = 467791, upload-time = "2025-09-11T13:48:28.728Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/c6/c552cd481fac99102e0fd753b9df302fbe6acc7c766164e0c73464218724/keri-1.2.12.tar.gz", hash = "sha256:06c86aee587b81f1975b21e61a33b2402edf2ede47c0d7e693f66faad28ecae6", size = 479456, upload-time = "2026-03-04T22:44:13.633Z" } [[package]] name = "keria" -version = "0.2.0" +version = "0.4.0" source = { editable = "." } dependencies = [ { name = "apispec" }, @@ -539,27 +549,27 @@ dev = [ [package.metadata] requires-dist = [ - { name = "apispec", specifier = "==6.8.1" }, + { name = "apispec", specifier = "==6.10.0" }, { name = "dataclasses-json", specifier = "==0.6.7" }, { name = "deprecation", specifier = "==2.1.0" }, { name = "falcon", specifier = "==4.0.2" }, { name = "hio", specifier = "==0.6.14" }, { name = "http-sfv", specifier = "==0.9.9" }, - { name = "keri", specifier = "==1.2.7" }, + { name = "keri", specifier = "==1.2.12" }, { name = "marshmallow-dataclass", specifier = "==8.7.1" }, { name = "mnemonic", specifier = "==0.21" }, - { name = "multicommand", specifier = "==1.0.0" }, + { name = "multicommand", specifier = ">=1.0.0" }, ] [package.metadata.requires-dev] dev = [ - { name = "coverage", specifier = ">=7.6.10" }, - { name = "pytest", specifier = ">=8.3.4" }, - { name = "pytest-cov", specifier = ">=6.0.0" }, - { name = "requests" }, - { name = "ruff", specifier = ">=0.8.0" }, - { name = "sphinx" }, - { name = "sphinx-rtd-theme" }, + { name = "coverage", specifier = ">=7.13.4" }, + { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest-cov", specifier = ">=7.0.0" }, + { name = "requests", specifier = ">=2.32.5" }, + { name = "ruff", specifier = ">=0.15.5" }, + { name = "sphinx", specifier = ">=9.1.0" }, + { name = "sphinx-rtd-theme", specifier = ">=3.1.0" }, ] [[package]] @@ -828,7 +838,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/d7/a5/bcb82a6056bc8ad0d [[package]] name = "pytest" -version = "8.4.2" +version = "9.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -837,9 +847,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, ] [[package]] @@ -924,12 +934,12 @@ wheels = [ ] [[package]] -name = "roman-numerals-py" -version = "3.1.0" +name = "roman-numerals" +version = "4.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017, upload-time = "2025-02-22T07:34:54.333Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/f9/41dc953bbeb056c17d5f7a519f50fdf010bd0553be2d630bc69d1e022703/roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2", size = 9077, upload-time = "2025-12-17T18:25:34.381Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742, upload-time = "2025-02-22T07:34:52.422Z" }, + { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676, upload-time = "2025-12-17T18:25:33.098Z" }, ] [[package]] @@ -981,28 +991,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/b9/9bd84453ed6dd04688de9b3f3a4146a1698e8faae2ceeccce4e14c67ae17/ruff-0.14.0.tar.gz", hash = "sha256:62ec8969b7510f77945df916de15da55311fade8d6050995ff7f680afe582c57", size = 5452071, upload-time = "2025-10-07T18:21:55.763Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/4e/79d463a5f80654e93fa653ebfb98e0becc3f0e7cf6219c9ddedf1e197072/ruff-0.14.0-py3-none-linux_armv6l.whl", hash = "sha256:58e15bffa7054299becf4bab8a1187062c6f8cafbe9f6e39e0d5aface455d6b3", size = 12494532, upload-time = "2025-10-07T18:21:00.373Z" }, - { url = "https://files.pythonhosted.org/packages/ee/40/e2392f445ed8e02aa6105d49db4bfff01957379064c30f4811c3bf38aece/ruff-0.14.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:838d1b065f4df676b7c9957992f2304e41ead7a50a568185efd404297d5701e8", size = 13160768, upload-time = "2025-10-07T18:21:04.73Z" }, - { url = "https://files.pythonhosted.org/packages/75/da/2a656ea7c6b9bd14c7209918268dd40e1e6cea65f4bb9880eaaa43b055cd/ruff-0.14.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:703799d059ba50f745605b04638fa7e9682cc3da084b2092feee63500ff3d9b8", size = 12363376, upload-time = "2025-10-07T18:21:07.833Z" }, - { url = "https://files.pythonhosted.org/packages/42/e2/1ffef5a1875add82416ff388fcb7ea8b22a53be67a638487937aea81af27/ruff-0.14.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ba9a8925e90f861502f7d974cc60e18ca29c72bb0ee8bfeabb6ade35a3abde7", size = 12608055, upload-time = "2025-10-07T18:21:10.72Z" }, - { url = "https://files.pythonhosted.org/packages/4a/32/986725199d7cee510d9f1dfdf95bf1efc5fa9dd714d0d85c1fb1f6be3bc3/ruff-0.14.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e41f785498bd200ffc276eb9e1570c019c1d907b07cfb081092c8ad51975bbe7", size = 12318544, upload-time = "2025-10-07T18:21:13.741Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ed/4969cefd53315164c94eaf4da7cfba1f267dc275b0abdd593d11c90829a3/ruff-0.14.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30a58c087aef4584c193aebf2700f0fbcfc1e77b89c7385e3139956fa90434e2", size = 14001280, upload-time = "2025-10-07T18:21:16.411Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ad/96c1fc9f8854c37681c9613d825925c7f24ca1acfc62a4eb3896b50bacd2/ruff-0.14.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f8d07350bc7af0a5ce8812b7d5c1a7293cf02476752f23fdfc500d24b79b783c", size = 15027286, upload-time = "2025-10-07T18:21:19.577Z" }, - { url = "https://files.pythonhosted.org/packages/b3/00/1426978f97df4fe331074baf69615f579dc4e7c37bb4c6f57c2aad80c87f/ruff-0.14.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eec3bbbf3a7d5482b5c1f42d5fc972774d71d107d447919fca620b0be3e3b75e", size = 14451506, upload-time = "2025-10-07T18:21:22.779Z" }, - { url = "https://files.pythonhosted.org/packages/58/d5/9c1cea6e493c0cf0647674cca26b579ea9d2a213b74b5c195fbeb9678e15/ruff-0.14.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16b68e183a0e28e5c176d51004aaa40559e8f90065a10a559176713fcf435206", size = 13437384, upload-time = "2025-10-07T18:21:25.758Z" }, - { url = "https://files.pythonhosted.org/packages/29/b4/4cd6a4331e999fc05d9d77729c95503f99eae3ba1160469f2b64866964e3/ruff-0.14.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb732d17db2e945cfcbbc52af0143eda1da36ca8ae25083dd4f66f1542fdf82e", size = 13447976, upload-time = "2025-10-07T18:21:28.83Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c0/ac42f546d07e4f49f62332576cb845d45c67cf5610d1851254e341d563b6/ruff-0.14.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:c958f66ab884b7873e72df38dcabee03d556a8f2ee1b8538ee1c2bbd619883dd", size = 13682850, upload-time = "2025-10-07T18:21:31.842Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c4/4b0c9bcadd45b4c29fe1af9c5d1dc0ca87b4021665dfbe1c4688d407aa20/ruff-0.14.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7eb0499a2e01f6e0c285afc5bac43ab380cbfc17cd43a2e1dd10ec97d6f2c42d", size = 12449825, upload-time = "2025-10-07T18:21:35.074Z" }, - { url = "https://files.pythonhosted.org/packages/4b/a8/e2e76288e6c16540fa820d148d83e55f15e994d852485f221b9524514730/ruff-0.14.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4c63b2d99fafa05efca0ab198fd48fa6030d57e4423df3f18e03aa62518c565f", size = 12272599, upload-time = "2025-10-07T18:21:38.08Z" }, - { url = "https://files.pythonhosted.org/packages/18/14/e2815d8eff847391af632b22422b8207704222ff575dec8d044f9ab779b2/ruff-0.14.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:668fce701b7a222f3f5327f86909db2bbe99c30877c8001ff934c5413812ac02", size = 13193828, upload-time = "2025-10-07T18:21:41.216Z" }, - { url = "https://files.pythonhosted.org/packages/44/c6/61ccc2987cf0aecc588ff8f3212dea64840770e60d78f5606cd7dc34de32/ruff-0.14.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a86bf575e05cb68dcb34e4c7dfe1064d44d3f0c04bbc0491949092192b515296", size = 13628617, upload-time = "2025-10-07T18:21:44.04Z" }, - { url = "https://files.pythonhosted.org/packages/73/e6/03b882225a1b0627e75339b420883dc3c90707a8917d2284abef7a58d317/ruff-0.14.0-py3-none-win32.whl", hash = "sha256:7450a243d7125d1c032cb4b93d9625dea46c8c42b4f06c6b709baac168e10543", size = 12367872, upload-time = "2025-10-07T18:21:46.67Z" }, - { url = "https://files.pythonhosted.org/packages/41/77/56cf9cf01ea0bfcc662de72540812e5ba8e9563f33ef3d37ab2174892c47/ruff-0.14.0-py3-none-win_amd64.whl", hash = "sha256:ea95da28cd874c4d9c922b39381cbd69cb7e7b49c21b8152b014bd4f52acddc2", size = 13464628, upload-time = "2025-10-07T18:21:50.318Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2a/65880dfd0e13f7f13a775998f34703674a4554906167dce02daf7865b954/ruff-0.14.0-py3-none-win_arm64.whl", hash = "sha256:f42c9495f5c13ff841b1da4cb3c2a42075409592825dada7c5885c2c844ac730", size = 12565142, upload-time = "2025-10-07T18:21:53.577Z" }, +version = "0.15.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/77/9b/840e0039e65fcf12758adf684d2289024d6140cde9268cc59887dc55189c/ruff-0.15.5.tar.gz", hash = "sha256:7c3601d3b6d76dce18c5c824fc8d06f4eef33d6df0c21ec7799510cde0f159a2", size = 4574214, upload-time = "2026-03-05T20:06:34.946Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/20/5369c3ce21588c708bcbe517a8fbe1a8dfdb5dfd5137e14790b1da71612c/ruff-0.15.5-py3-none-linux_armv6l.whl", hash = "sha256:4ae44c42281f42e3b06b988e442d344a5b9b72450ff3c892e30d11b29a96a57c", size = 10478185, upload-time = "2026-03-05T20:06:29.093Z" }, + { url = "https://files.pythonhosted.org/packages/44/ed/e81dd668547da281e5dce710cf0bc60193f8d3d43833e8241d006720e42b/ruff-0.15.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6edd3792d408ebcf61adabc01822da687579a1a023f297618ac27a5b51ef0080", size = 10859201, upload-time = "2026-03-05T20:06:32.632Z" }, + { url = "https://files.pythonhosted.org/packages/c4/8f/533075f00aaf19b07c5cd6aa6e5d89424b06b3b3f4583bfa9c640a079059/ruff-0.15.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:89f463f7c8205a9f8dea9d658d59eff49db05f88f89cc3047fb1a02d9f344010", size = 10184752, upload-time = "2026-03-05T20:06:40.312Z" }, + { url = "https://files.pythonhosted.org/packages/66/0e/ba49e2c3fa0395b3152bad634c7432f7edfc509c133b8f4529053ff024fb/ruff-0.15.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba786a8295c6574c1116704cf0b9e6563de3432ac888d8f83685654fe528fd65", size = 10534857, upload-time = "2026-03-05T20:06:19.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/71/39234440f27a226475a0659561adb0d784b4d247dfe7f43ffc12dd02e288/ruff-0.15.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd4b801e57955fe9f02b31d20375ab3a5c4415f2e5105b79fb94cf2642c91440", size = 10309120, upload-time = "2026-03-05T20:06:00.435Z" }, + { url = "https://files.pythonhosted.org/packages/f5/87/4140aa86a93df032156982b726f4952aaec4a883bb98cb6ef73c347da253/ruff-0.15.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391f7c73388f3d8c11b794dbbc2959a5b5afe66642c142a6effa90b45f6f5204", size = 11047428, upload-time = "2026-03-05T20:05:51.867Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f7/4953e7e3287676f78fbe85e3a0ca414c5ca81237b7575bdadc00229ac240/ruff-0.15.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dc18f30302e379fe1e998548b0f5e9f4dff907f52f73ad6da419ea9c19d66c8", size = 11914251, upload-time = "2026-03-05T20:06:22.887Z" }, + { url = "https://files.pythonhosted.org/packages/77/46/0f7c865c10cf896ccf5a939c3e84e1cfaeed608ff5249584799a74d33835/ruff-0.15.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc6e7f90087e2d27f98dc34ed1b3ab7c8f0d273cc5431415454e22c0bd2a681", size = 11333801, upload-time = "2026-03-05T20:05:57.168Z" }, + { url = "https://files.pythonhosted.org/packages/d3/01/a10fe54b653061585e655f5286c2662ebddb68831ed3eaebfb0eb08c0a16/ruff-0.15.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cb7169f53c1ddb06e71a9aebd7e98fc0fea936b39afb36d8e86d36ecc2636a", size = 11206821, upload-time = "2026-03-05T20:06:03.441Z" }, + { url = "https://files.pythonhosted.org/packages/7a/0d/2132ceaf20c5e8699aa83da2706ecb5c5dcdf78b453f77edca7fb70f8a93/ruff-0.15.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9b037924500a31ee17389b5c8c4d88874cc6ea8e42f12e9c61a3d754ff72f1ca", size = 11133326, upload-time = "2026-03-05T20:06:25.655Z" }, + { url = "https://files.pythonhosted.org/packages/72/cb/2e5259a7eb2a0f87c08c0fe5bf5825a1e4b90883a52685524596bfc93072/ruff-0.15.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65bb414e5b4eadd95a8c1e4804f6772bbe8995889f203a01f77ddf2d790929dd", size = 10510820, upload-time = "2026-03-05T20:06:37.79Z" }, + { url = "https://files.pythonhosted.org/packages/ff/20/b67ce78f9e6c59ffbdb5b4503d0090e749b5f2d31b599b554698a80d861c/ruff-0.15.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d20aa469ae3b57033519c559e9bc9cd9e782842e39be05b50e852c7c981fa01d", size = 10302395, upload-time = "2026-03-05T20:05:54.504Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e5/719f1acccd31b720d477751558ed74e9c88134adcc377e5e886af89d3072/ruff-0.15.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:15388dd28c9161cdb8eda68993533acc870aa4e646a0a277aa166de9ad5a8752", size = 10754069, upload-time = "2026-03-05T20:06:06.422Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/d1db14469e32d98f3ca27079dbd30b7b44dbb5317d06ab36718dee3baf03/ruff-0.15.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b30da330cbd03bed0c21420b6b953158f60c74c54c5f4c1dabbdf3a57bf355d2", size = 11304315, upload-time = "2026-03-05T20:06:10.867Z" }, + { url = "https://files.pythonhosted.org/packages/28/3a/950367aee7c69027f4f422059227b290ed780366b6aecee5de5039d50fa8/ruff-0.15.5-py3-none-win32.whl", hash = "sha256:732e5ee1f98ba5b3679029989a06ca39a950cced52143a0ea82a2102cb592b74", size = 10551676, upload-time = "2026-03-05T20:06:13.705Z" }, + { url = "https://files.pythonhosted.org/packages/b8/00/bf077a505b4e649bdd3c47ff8ec967735ce2544c8e4a43aba42ee9bf935d/ruff-0.15.5-py3-none-win_amd64.whl", hash = "sha256:821d41c5fa9e19117616c35eaa3f4b75046ec76c65e7ae20a333e9a8696bc7fe", size = 11678972, upload-time = "2026-03-05T20:06:45.379Z" }, + { url = "https://files.pythonhosted.org/packages/fe/4e/cd76eca6db6115604b7626668e891c9dd03330384082e33662fb0f113614/ruff-0.15.5-py3-none-win_arm64.whl", hash = "sha256:b498d1c60d2fe5c10c45ec3f698901065772730b411f164ae270bb6bfcc4740b", size = 10965572, upload-time = "2026-03-05T20:06:16.984Z" }, ] [[package]] @@ -1025,7 +1034,7 @@ wheels = [ [[package]] name = "sphinx" -version = "8.2.3" +version = "9.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "alabaster" }, @@ -1037,7 +1046,7 @@ dependencies = [ { name = "packaging" }, { name = "pygments" }, { name = "requests" }, - { name = "roman-numerals-py" }, + { name = "roman-numerals" }, { name = "snowballstemmer" }, { name = "sphinxcontrib-applehelp" }, { name = "sphinxcontrib-devhelp" }, @@ -1046,23 +1055,23 @@ dependencies = [ { name = "sphinxcontrib-qthelp" }, { name = "sphinxcontrib-serializinghtml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, + { url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742, upload-time = "2025-12-31T15:09:25.561Z" }, ] [[package]] name = "sphinx-rtd-theme" -version = "3.0.2" +version = "3.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docutils" }, { name = "sphinx" }, { name = "sphinxcontrib-jquery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/44/c97faec644d29a5ceddd3020ae2edffa69e7d00054a8c7a6021e82f20335/sphinx_rtd_theme-3.0.2.tar.gz", hash = "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85", size = 7620463, upload-time = "2024-11-13T11:06:04.545Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/68/a1bfbf38c0f7bccc9b10bbf76b94606f64acb1552ae394f0b8285bfaea25/sphinx_rtd_theme-3.1.0.tar.gz", hash = "sha256:b44276f2c276e909239a4f6c955aa667aaafeb78597923b1c60babc76db78e4c", size = 7620915, upload-time = "2026-01-12T16:03:31.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/77/46e3bac77b82b4df5bb5b61f2de98637724f246b4966cfc34bc5895d852a/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", hash = "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13", size = 7655561, upload-time = "2024-11-13T11:06:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl", hash = "sha256:1785824ae8e6632060490f67cf3a72d404a85d2d9fc26bce3619944de5682b89", size = 7655617, upload-time = "2026-01-12T16:03:28.101Z" }, ] [[package]]