Skip to content

Installation

Direct <script> include via CDN

In case you're not using any JS bundling/compilation technique, the SDK can also be loaded with the traditional <script> tag, as follows:

Latest SDK version

<script src="https://unpkg.com/@aeternity/aepp-sdk/dist/aepp-sdk.browser-script.cjs"></script>

Specific SDK version

<script src="https://unpkg.com/@aeternity/aepp-sdk@VERSION/dist/aepp-sdk.browser-script.cjs"></script>

...where VERSION is the version number of the SDK you want to use (eg. 14.0.0).

Browser <script> tag

The bundle will assign the SDK to a global variable called Aeternity that makes all functionalities of the SDK accessible.

Usage:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <!-- include latest SDK version -->
    <script src="https://unpkg.com/@aeternity/aepp-sdk/dist/aepp-sdk.browser-script.cjs"></script>
    <script type="text/javascript">
      const { AeSdk, Node } = Aeternity;

      const node = new Node('https://testnet.aeternity.io');
      const aeSdk = new AeSdk({
        nodes: [{ name: 'testnet', instance: node }],
      });
      aeSdk.getHeight().then((height) => {
        console.log('Current Block Height:' + height);
      });
    </script>
  </body>
</html>

NPM

Latest Release

npm i @aeternity/aepp-sdk

Pre Release

To install a Pre-Release (latest beta or alpha version) you have to install the package appending the @next tag reference.

npm i @aeternity/aepp-sdk@next

Specific Github Branch

You can also install a version coming from a specific branch. In this case you would install the SDK version of the develop branch.

npm i github:aeternity/aepp-sdk-js#develop

TypeScript projects

To work properly, sdk requires to enable allowSyntheticDefaultImports flag and register folder that contains type definitions for third-party packages sdk depends on. This may be done in tsconfig.json:

{
  "compilerOptions": {
    ...
+   "typeRoots": [
+     "node_modules/@types",
+     "node_modules/@aeternity/aepp-sdk/src/typings"
+   ],
+   "allowSyntheticDefaultImports": true
  }
}

Ensure that you have strictFunctionTypes option not enabled (as it is in VS code and ts-node by default), otherwise some of SDK types won't work correctly (see #1793).

In some environments, TypeScript fails to check types of sdk's dependencies (@metamask/json-rpc-engine, @ledgerhq/hw-transport), if so you may find skipLibCheck useful.

Vue CLI@4

SDK checks are not working correctly because CLI picks both ESM and CJS versions of autorest dependencies. To fix this, you need to specify aliases in vue.config.js.

module.exports = {
  configureWebpack: {
    resolve: {
      alias: {
+       '@azure/core-client': '@azure/core-client/dist-esm/src/index.js',
+       '@azure/core-rest-pipeline': '@azure/core-rest-pipeline/dist-esm/src/index.js',
      },
    },
  },
};

Vue@3

Reactivity in Vue@3 based on Proxy class. Proxy is not compatible with private fields of ES classes. AeSdk and Contract classes uses private fields, so if you make an instance of these classes reactive then the app may fail with

TypeError: attempted to get private field on non-instance

AeSdk and Contract classes doesn’t have a state intended to be tracked using reactivity. Therefore to solve this issue we suggest to avoid making their instances reactive. One of the ways is to use Vue's integrated utility: shallowRef. The idea is to make reactive only the root variable, to don't make it reactive in deep. You can find it implementation in the æpp example.

Command Line Interface (CLI)

If you don't need to include specific functionality into your application and just want to use or play around with features the SDK provides you can make use of the 💻 CLI and follow the instructions mentioned there.