This SDK provides a JavaScript interface for communicating with AO-Core.
AO-Core is a protocol and standard for distributed computation that forms the foundation of the AO Computer. Inspired by and built upon concepts from the Erlang language, AO-Core embraces the actor model for concurrent, distributed systems. It defines a minimal, generalized model for decentralized computation built around standard web technologies like HTTP.
For a full breakdown of AO-Core, see the documentation.
node >= v18.0
npm
oryarn
npm install @permaweb/ao-core-libs
or
yarn add @permaweb/ao-core-libs
The SDK can be initialized with either a JWK or a Signer. If a JWK is provided, then the default AO-Core Signer will be created and used on intilization. If both a JWK and Signer are provided, the Signer will be used.
import AOCore from '@permaweb/ao-core-libs';
// NodeJS Usage
const jwk = JSON.parse(readFileSync(process.env.PATH_TO_WALLET, 'utf-8'));
const aoCore = AOCore.init({ jwk });
// Or
import { createSigner } from '@permaweb/ao-core-libs'; // Or your own custom signer
const aoCore = AOCore.init({ signer: createSigner(jwk) });
// Browser Usage
import { createSigner } from '@permaweb/ao-core-libs';
const aoCore = AOCore.init({ signer: createSigner(window.arweaveWallet) });
This SDK exposes a single function, request
, for communicating with AO Core, which accepts these arguments:
path
– The endpoint path (no leading slash)method
– (optional - defaults toGET
) HTTP Request Method (GET
orPOST
)signing-format
– (optional - defaults tohttpsig
) Signing Format (ans104
orhttpsig
)- Any additional fields – All other fields passed in will be included as part of the request payload (e.g. custom headers, tags, or data fields depending on the signing format)
const response = await aoCore.request({
method: 'POST',
path: '[email protected]/compute/at-slot',
'signing-format': 'httpsig',
'my-custom-field': '1234',
});
To run the @permaweb/ao-core-libs
tests:
cd tests
npm test
This will install all dependencies into and build the SDK, and then install it locally into a client test project (tests/index.js
).