Threshold Access Control (TACo)
  • Getting Started
    • Introduction to TACo
    • How TACo Works
    • Quickstart (Testnet)
  • For Developers
    • Integrate TACo Into Apps
      • Testnets
      • Mainnet Access
      • Mainnet Deployment
    • Ecosystem Integrations
      • OrbisDB
      • Waku
      • Irys
      • ComposeDB
      • Turbo
    • API
      • Encryptor Allowlist
      • Encrypt & Decrypt
      • Authentication
        • Condition Context
      • Access Control
        • TimeCondition
        • RpcCondition
        • ContractCondition
          • Use custom contract calls
          • Implement access revocation via smart contract
        • JSON Endpoint Conditions
          • JsonApiCondition
          • JsonRpcCondition
        • JWT Conditions
        • Logical Conditions
          • CompoundCondition
          • IfThenElseCondition
          • SequentialCondition
        • WIP / Feature Requests
          • Any (Major) EVM Chain Condition Support
    • Blueprints & Inspiration
      • Seed phrase recovery & transfer
      • Digital Rights Management for on-chain assets
      • Trustless channels for journalists, archivists & whistleblowers
      • Crowdsourcing real-world data with trustless contribution
  • For Product Leads
    • Value Propositions
    • Capabilities & Extensions
    • Use cases
      • Seed phrase recovery & transfer
      • Digital Rights Management for on-chain assets
      • Trustless channels for journalists, archivists & whistleblowers
      • Crowdsourcing real-world data with trustless contribution
    • Mainnet Fees
    • Trust Assumptions
      • Mainnet Trust Disclosure (Provider Answers)
      • Mainnet Trust Model Foundation
      • Trust levers & parameter packages
  • Reference
    • Contract Addresses
    • Architecture
      • Porter
    • Github
    • TACo Playground
    • TACo Scan
  • For Node Operators
    • Getting Set Up
      • Minimum System Requirements
      • Run a TACo Node with Docker
    • Operations
      • TACo Node Management
      • TACo Node Recovery
      • Stake Authorization
    • Duties, Compensation & Penalties
    • Run a Porter Instance
Powered by GitBook
On this page
  • Use Cases
  • Example
  • Development References
  1. For Developers
  2. API
  3. Access Control
  4. JSON Endpoint Conditions

JsonApiCondition

PreviousJSON Endpoint ConditionsNextJsonRpcCondition

Last updated 1 month ago

The JsonApiCondition works by sending an HTTPS GET request to a specified JSON API endpoint, extracting relevant data from the response using a query, and then comparing the extracted value against an expected result.

It is composed of the following properties:

  • endpoint: the HTTPS URI for the JSON API endpoint that will be queried, e.g.https://api.example.com/user/status

  • parameters(Optional): a key-value mapping of parameter names and values to pass as part of the HTTPS GET request. These parameters will be appended to the URL as query string parameters.

  • query(Optional): a JSONPath query used to extract specific data from the JSON response.

  • (Optional): A bearer token that will be included in the HTTPS Authorization header. It enables the use of endpoints that require OAuth/JWT authorization.

  • : the test to validate the value extracted by the JSONPath query.

Error Handling

  • If the HTTPS response does not return a status code of 200, the condition will fail automatically, and access will be denied.

  • If the JSONPath query is provided but cannot properly extract the desired value, the condition will fail, resulting in access being denied.

  • If an invalid authorizationToken is provided, the call to the API will fail, causing the condition to fail and access to be denied.

Use Cases

Any JSON REST API endpoint including:

  • Social media APIs e.g. Twitter, Facebook

  • Communication application APIs e.g. Discord, Telegram

  • Oracle endpoints e.g. prices, weather etc.

Example

import { conditions } from '@nucypher/taco';

const firstBookPrice = new conditions.base.jsonApi.JsonApiCondition({
  endpoint: 'https://api.books.com/data',
  parameters: {
    'name': 'It'
  },
  query: '$.store.book[0].price',
  authorizationToken: ":authToken",
  returnValueTest: {
    comparator: "==",
    value: 1
  },
});

The condition would be satisfied if the API endpoint returned something analogous to the following:

{  
  "store":{
    "book":[
      {
        "name": "It",
        "author": "Stephen King",
        "price": 1
      }
    ]
  }
}

Development References

  • Client-side:

  • Server-side:

https://github.com/nucypher/taco-web/pull/550
https://github.com/nucypher/taco-web/pull/561
https://github.com/nucypher/taco-web/pull/599
https://github.com/nucypher/nucypher/pull/3511
https://github.com/nucypher/nucypher/pull/3560
JSONPath
authorizationToken
returnValueTest