Skip to content

Development

Principles

The Javascript SDK wraps the æternity API explosed by Node's Swagger file. It aims to abstract the API, while still providing low-level access to it's endpoints, when necessary.

It uses the following Javascript technologies and principles:

Requirements

aepp-sdk is transpiled to EcmaScript 5 through WebPack, using Babel and is expected to work in any sufficiently new version of Node.js (>= v12.17) or modern web browser.

Contributing

  1. Clone the application
  2. Make sure your editor/IDE can read and use the .editorconfig file
  3. Start hacking (and dont forget to add test for whatever you'll be building).

Documenting

Apart from documenting features and code, there is also documentation automatically generated using jsdoc for documenting JS files (later transformed in to .md files (to have them readable in platforms like GitHub) and a script for documenting examples and code partials.

#generate examples and api documentation
npm run docs:examples && npm run docs:api

Building

aepp-sdk is built using pnpm. In order to build a development version, launch the build:dev command.

pnpm install
pnpm run build:dev

Testing

To test, launch the test command. This will run mocha's tests locally.

pnpm run test

This repository also includes a docker-compose file, to allow you to run your own æternity node locally. If you want to do so, from the root of the project:

  1. Create a docker-compose.override.yml file with this content:
    version: "3"
    services:
      node:
        ports:
          - 3013:3013
          - 3113:3113
          - 3014:3014
          - 3001:3001
    
  2. Run docker-compose up node
  3. Congrats! you're now running your own æternity node locally.

Composing new Flavors

You can also "compose" your own flavor by mixing 2 or more flavors likes so:

import { Wallet, Contract, MemoryAccount } from '@aeternity/aepp-sdk'

// make a "mixed flavor" containing Wallet and Contracts flavors
Wallet.compose(Contract)({
            url: 'https://testnet.aeternity.io',
            internalUrl: 'https://testnet.aeternity.io',
            accounts: [MemoryAccount({keypair: {secretKey: account.priv, publicKey: account.pub}})],
            address: account.pub,
            onTx: true, // or a function to Guard the Rpc client
            onChain: true, // or a function to Guard the Rpc client
            onAccount: true, // or a function to Guard the Rpc client
            networkId: 'ae_uat'
          }).then(ae => {
            // ae is your initialised client now! :)
            // ...

The WebPack compilation provides two different build artifacts in dist/, one for Node.js and one for browsers. When referencing aepp-sdk through any modern build tooling, it should pick the right one automatically through the entry points defined in package.json.

Installation / Linking

In order to add a local development version of aepp-sdk to a project, npm link1 can be used.

Releasing

How to release a new version