API
Javasscipt/Typescript

Typescript / Javascript

The typescript agdb API client is based on openapi-client-axios (opens in a new tab). The following is the quickstart guide for the agdb client in Javascript/Typescript (connecting to the server). It assumes an agdb_server is running locally. Please refer to the server guide to learn how to run the server.

Looking for... how to run a server? | another language? | embedded db guide?

Usage

The following is the from-scratch guide to use agdb-api typescript/javascript package.

Install NodeJS

https://nodejs.org/en (opens in a new tab)

Create your project

Let's create a directory (e.g. my_agdb) and nitialize the package:

mkdir my_agdb
cd my_agdb
npm init # follow the steps & prompts

Add typescript

npm install typescript --save-dev

and create its configuration file tsconfig.json:

{
    "compilerOptions": {
        "module": "ESNext",
        "sourceMap": true,
        "lib": ["ES2015", "DOM"],
        "moduleResolution": "node",
        "allowJs": true,
        "esModuleInterop": true
    }
}
💡

Consider using other dev packages such as prettier and eslint (and @typescript-eslint/parser)

Add @agnesoft/agdb_api as a dependency.

npm install @agnesoft/agdb_api

Create a client

In your main script (indes.ts or main.ts depending on your package.json's "main" field) create a client connecting to the server:

import { QueryBuilder, Comparison, AgdbApi } from "@agnesfot/agdb_api";
 
async function main() {
    // Creates a client connecting to the remote server.
    let client = await AgdbApi.client("http://localhost:3000");
}

Create a databasse user

To create a database user we use the default admin user:

await client.login("admin", "admin");
await client.admin_user_add("user1", { password: "password123" });
await client.login("user1", "password123");

Create a database

await client.db_add({
    owner: "user1",
    db: "db1",
    db_type: "mapped", //memory mapped type, other options are "memory" and "file"
});

Execute queries

To execute queries against the database we call db_exec with the user and their database.

Notice we are feeding results of the previous query to the next one with special alias ":0" and ":1" referencing first and second result respectively.

// Prepare the queries to be executed on the remote database.
let queries = [
    // :0: Inserts a root node aliased "users"
    QueryBuilder.insert().nodes().aliases(["users"]).query(),
 
    // :1: Inserts more nodes with some data
    QueryBuilder.insert()
        .nodes()
        .values([
            [
                ["username", "user1"],
                ["password", "password123"],
            ],
            [
                ["username", "user1"],
                ["password", "password456"],
            ],
        ])
        .query(),
 
    // :2: Connect the root to the inserted nodes with edges referencing both from previous queries
    QueryBuilder.insert().edges().from(":0").to(":1").query(),
 
    // :3: Find a node starting at the "users" node (could also be ":0" in this instance) with specific username
    QueryBuilder.select()
        .search()
        .from("users")
        .where()
        .key("username")
        .value(Comparison.Equal("user1"))
        .query(),
];
 
// Execute queries.
let results = (await client.db_exec({ owner: "user1", db: "db1" }, queries))
    .data;

Print the the result of the final query to the console:

console.log(`User (id: ${results[3].elements[0].id})`);
for (let { key, value } of results[3].elements[0].values) {
    console.log(`${key["String"]}: ${value["String"]}`);
}

Run the program

⚠️

Make sure the agdb_server is running at localhost:3000.

💡

If you are running this from the examples you may need to call npm install first.

npm run

Full program

https://github.com/agnesoft/agdb/tree/main/examples/server_client_typescript (opens in a new tab)