fetch TL;DR
Azle canisters use a custom
fetch implementation to perform
cross-canister calls and to perform HTTPS
outcalls.
Here's an example of performing a cross-canister call:
import { serialize } from 'azle/experimental';
import express from 'express';
const app = express();
app.use(express.json());
app.post('/cross-canister-call', async (req, res) => {
const to: string = req.body.to;
const amount: number = req.body.amount;
const response = await fetch(`icp://dfdal-2uaaa-aaaaa-qaama-cai/transfer`, {
body: serialize({
candidPath: '/token.did',
args: [to, amount]
})
});
const responseJson = await response.json();
res.json(responseJson);
});
app.listen();
Keep these important points in mind when performing a cross-canister call:
-
Use the
icp://protocol in the URL -
The
canister idof the canister that you are calling immediately followsicp://in the URL -
The
canister methodthat you are calling immediately follows thecanister idin the URL -
The
candidPathproperty of thebodyis the path to the Candid file defining the method signatures of the canister that you are calling. You must obtain this file and copy it into your canister. See the Assets chapter for info on copying files into your canister -
The
argsproperty of thebodyis an array of the arguments that will be passed to thecanister methodthat you are calling
Here's an example of performing an HTTPS outcall:
import express from 'express';
const app = express();
app.use(express.json());
app.post('/https-outcall', async (_req, res) => {
const response = await fetch(`https://httpbin.org/headers`, {
headers: {
'X-Azle-Request-Key-0': 'X-Azle-Request-Value-0',
'X-Azle-Request-Key-1': 'X-Azle-Request-Value-1',
'X-Azle-Request-Key-2': 'X-Azle-Request-Value-2'
}
});
const responseJson = await response.json();
res.json(responseJson);
});
app.listen();
fetch
Azle has custom
fetch implementations for clients
and canisters.
The client fetch is used for
authentication, and you can learn more about it
in the
Authentication chapter.
Canister fetch is used to perform
cross-canister calls and
HTTPS outcalls. There are three main types of calls made with
canister fetch:
Cross-canister calls to a candid canister
Examples:
- async_await
- bitcoin
- canister
- ckbtc
- composite_queries
- cross_canister_calls
- cycles
- func_types
- heartbeat
- ic_evm_rpc
- icrc
- ledger_canister
- management_canister
- threshold_ecdsa
- whoami
- recursion
- rejections
- timers
Cross-canister calls to an HTTP canister
We are working on better abstractions for these
types of calls. For now you would just make a
cross-canister call using icp:// to
the http_request and
http_request_update methods of the
canister that you are calling.
HTTPS outcalls
Examples: