axiodb 16.2.1 β†’ 18.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -134,6 +134,7 @@ console.log(result.data.documents[0].message); // Hello, Developer! πŸ‘‹
134
134
  | Option | Type | Default | Description |
135
135
  | --- | --- | --- | --- |
136
136
  | `GUI` | `boolean` | `false` | Enable the web-based GUI dashboard at `localhost:27018` |
137
+ | `HTTP` | `boolean` | mirrors `GUI` | Enable the HTTP API server on port 27018 β€” auto-enables when GUI is on; `GUI: true` + `HTTP: false` throws an error |
137
138
  | `RootName` | `string` | `"AxioDB"` | Name of the root folder database files are stored under |
138
139
  | `CustomPath` | `string` | current working directory | Custom filesystem path for database storage |
139
140
  | `TCP` | `boolean` | `false` | Enable the AxioDBCloud TCP server on port 27019 |
@@ -341,7 +342,7 @@ The rule: the `-e AXIODB_TLS_CERT_PATH=...` value must always match the *right-h
341
342
 
342
343
  ## πŸ’» AxioDB CLI β€” Command Line Interface
343
344
 
344
- A Go-based CLI tool for interacting with AxioDB servers via the TCP protocol. Supports all database operations with both single-command and interactive REPL modes.
345
+ A Go-based CLI tool for interacting with AxioDB servers via the TCP protocol. Supports all database operations with both single-command and interactive REPL modes. Export and import databases via the HTTP API.
345
346
 
346
347
  ### Quick Install
347
348
 
@@ -399,14 +400,27 @@ axiodb -c axiodb://127.0.0.1:27019 -u admin -p admin connect
399
400
  axiodb -c axiodb://127.0.0.1:27019 --tls --tls-cert ./cert.pem connect
400
401
  ```
401
402
 
403
+ **Export database (via HTTP API):**
404
+ ```bash
405
+ axiodb export mydb --http-host localhost --http-port 27018 -u admin -p secret
406
+ # Saves mydb.tar.gz in current directory
407
+ ```
408
+
409
+ **Import database (via HTTP API):**
410
+ ```bash
411
+ axiodb import ./backups/mydb.tar.gz --http-host localhost --http-port 27018 -u admin -p secret
412
+ # Tab completes .tar.gz file paths
413
+ ```
414
+
402
415
  ### Features
403
416
 
404
- - **All 21 TCP commands:** database, collection, document CRUD, aggregation, indexing
417
+ - **All 23 commands:** database, collection, document CRUD, aggregation, indexing, export, import
405
418
  - **Interactive REPL:** MongoDB shell syntax (`use`, `show dbs`, `db.coll.find()`)
419
+ - **Export & Import:** backup/restore databases via HTTP API, tab-completes file paths
406
420
  - **TLS support:** `--tls`, `--tls-cert`, `--tls-skip-verify`
407
- - **Auth support:** `-u` / `-p` flags
421
+ - **Auth support:** `-u` / `-p` flags (TCP and HTTP)
408
422
  - **JSON output:** `--output json` for scripting
409
- - **Tab autocomplete** in REPL mode
423
+ - **Tab autocomplete** in REPL mode and file path completion
410
424
 
411
425
  πŸ‘‰ **[Full CLI Documentation](https://github.com/nexoral/AxioDB/tree/main/cli)**
412
426
 
@@ -529,7 +543,7 @@ docker run -d \
529
543
  --name axiodb-server \
530
544
  -p 27018:27018 \
531
545
  -p 27019:27019 \
532
- -e AXIODB_TCP_AUTH=true \
546
+ -e AXIODB_TCP_AUTH_ENABLED=true \
533
547
  -v axiodb-data:/app \
534
548
  theankansaha/axiodb
535
549
 
@@ -548,8 +562,9 @@ Every option below has a default matching the image's previous fixed behavior
548
562
  | Variable | Default | Description |
549
563
  | --- | --- | --- |
550
564
  | `AXIODB_GUI` | `true` | Enable the HTTP Control Server / web GUI on port 27018 |
565
+ | `AXIODB_HTTP` | mirrors `AXIODB_GUI` | Enable the HTTP API server on port 27018 β€” auto-enables when GUI is on; `AXIODB_GUI=true` + `AXIODB_HTTP=false` is an error |
551
566
  | `AXIODB_TCP` | `true` | Enable the AxioDBCloud TCP server on port 27019 |
552
- | `AXIODB_TCP_AUTH` | `true` | Require username/password authentication on TCP connections (same RBAC accounts as the GUI) |
567
+ | `AXIODB_TCP_AUTH_ENABLED` | `true` | Require username/password authentication on TCP connections (same RBAC accounts as the GUI) |
553
568
  | `AXIODB_TLS` | `false` | Encrypt TCP connections with TLS instead of plaintext (see [Advanced: TLS encryption](#advanced-tls-encryption)) |
554
569
  | `AXIODB_TLS_CERT_PATH` | *(none)* | Path **inside the container** to a PEM cert file - required when `AXIODB_TLS=true`. Mount the real file in with `-v` first (see the TLS section above) |
555
570
  | `AXIODB_TLS_KEY_PATH` | *(none)* | Path **inside the container** to the matching PEM private key - required when `AXIODB_TLS=true` |
@@ -566,7 +581,7 @@ docker run -d \
566
581
  --name axiodb-server \
567
582
  -p 27018:27018 \
568
583
  -p 27019:27019 \
569
- -e AXIODB_TCP_AUTH=false \
584
+ -e AXIODB_TCP_AUTH_ENABLED=false \
570
585
  -v axiodb-data:/app \
571
586
  theankansaha/axiodb
572
587
  ```
@@ -585,7 +600,7 @@ services:
585
600
  environment:
586
601
  - AXIODB_GUI=true
587
602
  - AXIODB_TCP=true
588
- - AXIODB_TCP_AUTH=true
603
+ - AXIODB_TCP_AUTH_ENABLED=true
589
604
  - AXIODB_ROOT_NAME=AxioDB
590
605
  volumes:
591
606
  - axiodb-data:/app
@@ -609,7 +624,7 @@ services:
609
624
  environment:
610
625
  - AXIODB_GUI=true
611
626
  - AXIODB_TCP=true
612
- - AXIODB_TCP_AUTH=true
627
+ - AXIODB_TCP_AUTH_ENABLED=true
613
628
  - AXIODB_TLS=true
614
629
  - AXIODB_TLS_CERT_PATH=/certs/cert.pem
615
630
  - AXIODB_TLS_KEY_PATH=/certs/key.pem
@@ -665,7 +680,7 @@ that logged-in user's actual role, exactly like the HTTP Control Server. A View-
665
680
  gets a real `403` on write tools; nothing is gated by a static container environment variable.
666
681
 
667
682
  `AXIODB_MCP=true` only has RBAC to serve once it's actually seeded, which requires
668
- `AXIODB_GUI=true` (the default) or `AXIODB_TCP=true` + `AXIODB_TCP_AUTH=true`.
683
+ `AXIODB_GUI=true` (the default) or `AXIODB_TCP=true` + `AXIODB_TCP_AUTH_ENABLED=true`.
669
684
 
670
685
  Full tool catalogue, examples, and security notes: **[MCP Server docs](https://axiodb.in/mcp-server)**.
671
686
 
package/cli/VERSION CHANGED
@@ -1 +1 @@
1
- 16.2.1
1
+ 18.1.2
@@ -0,0 +1,66 @@
1
+ package cmd
2
+
3
+ import (
4
+ "fmt"
5
+ "os"
6
+
7
+ "github.com/nexoral/axiodb-cli/internal/config"
8
+ "github.com/spf13/cobra"
9
+ )
10
+
11
+ var exportCmd = &cobra.Command{
12
+ Use: "export <dbname>",
13
+ Short: "Export a database to a .tar.gz file via HTTP",
14
+ Long: "Export an AxioDB database to a .tar.gz archive. Uses the HTTP API (port 27018), not TCP.",
15
+ Args: cobra.ExactArgs(1),
16
+ RunE: func(cmd *cobra.Command, args []string) error {
17
+ dbName := args[0]
18
+ cfg, err := config.FromFlags(cmd)
19
+ if err != nil {
20
+ return err
21
+ }
22
+
23
+ if cfg.Username == "" || cfg.Password == "" {
24
+ return fmt.Errorf("username and password required for HTTP auth (-u, -p)")
25
+ }
26
+
27
+ client := cfg.NewHTTPClient()
28
+
29
+ fmt.Fprintf(os.Stderr, "Logging in to %s:%d...\n", cfg.HTTPHost, cfg.HTTPPort)
30
+ if err := client.Login(cfg.Username, cfg.Password); err != nil {
31
+ return err
32
+ }
33
+ defer client.Logout()
34
+
35
+ fmt.Fprintf(os.Stderr, "Exporting %s...\n", dbName)
36
+ filename, size, err := client.Export(dbName)
37
+ if err != nil {
38
+ return err
39
+ }
40
+
41
+ fmt.Fprintf(os.Stderr, "Exported %s (%s)\n", filename, formatBytes(size))
42
+ return nil
43
+ },
44
+ }
45
+
46
+ func formatBytes(bytes int64) string {
47
+ const (
48
+ KB = 1024
49
+ MB = 1024 * KB
50
+ GB = 1024 * MB
51
+ )
52
+ switch {
53
+ case bytes >= GB:
54
+ return fmt.Sprintf("%.1f GB", float64(bytes)/float64(GB))
55
+ case bytes >= MB:
56
+ return fmt.Sprintf("%.1f MB", float64(bytes)/float64(MB))
57
+ case bytes >= KB:
58
+ return fmt.Sprintf("%.1f KB", float64(bytes)/float64(KB))
59
+ default:
60
+ return fmt.Sprintf("%d B", bytes)
61
+ }
62
+ }
63
+
64
+ func init() {
65
+ rootCmd.AddCommand(exportCmd)
66
+ }
@@ -0,0 +1,84 @@
1
+ package cmd
2
+
3
+ import (
4
+ "fmt"
5
+ "os"
6
+ "path/filepath"
7
+ "strings"
8
+
9
+ "github.com/nexoral/axiodb-cli/internal/config"
10
+ "github.com/spf13/cobra"
11
+ )
12
+
13
+ var importCmd = &cobra.Command{
14
+ Use: "import <file>",
15
+ Short: "Import a database from a .tar.gz file via HTTP",
16
+ Long: "Import an AxioDB database from a .tar.gz archive. Uses the HTTP API (port 27018), not TCP.",
17
+ Args: cobra.ExactArgs(1),
18
+ ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
19
+ dir := "."
20
+ prefix := toComplete
21
+
22
+ if idx := strings.LastIndex(toComplete, "/"); idx >= 0 {
23
+ dir = toComplete[:idx+1]
24
+ prefix = toComplete[idx+1:]
25
+ }
26
+
27
+ entries, err := os.ReadDir(dir)
28
+ if err != nil {
29
+ return nil, cobra.ShellCompDirectiveDefault
30
+ }
31
+
32
+ var completions []string
33
+ for _, entry := range entries {
34
+ if entry.IsDir() {
35
+ continue
36
+ }
37
+ name := entry.Name()
38
+ if strings.HasPrefix(name, prefix) && strings.HasSuffix(name, ".tar.gz") {
39
+ completions = append(completions, filepath.Join(dir, name))
40
+ }
41
+ }
42
+ return completions, cobra.ShellCompDirectiveNoFileComp
43
+ },
44
+ RunE: func(cmd *cobra.Command, args []string) error {
45
+ filePath := args[0]
46
+ cfg, err := config.FromFlags(cmd)
47
+ if err != nil {
48
+ return err
49
+ }
50
+
51
+ if cfg.Username == "" || cfg.Password == "" {
52
+ return fmt.Errorf("username and password required for HTTP auth (-u, -p)")
53
+ }
54
+
55
+ info, err := os.Stat(filePath)
56
+ if err != nil {
57
+ return fmt.Errorf("file not found: %s", filePath)
58
+ }
59
+ if info.IsDir() {
60
+ return fmt.Errorf("not a file: %s", filePath)
61
+ }
62
+
63
+ client := cfg.NewHTTPClient()
64
+
65
+ fmt.Fprintf(os.Stderr, "Logging in to %s:%d...\n", cfg.HTTPHost, cfg.HTTPPort)
66
+ if err := client.Login(cfg.Username, cfg.Password); err != nil {
67
+ return err
68
+ }
69
+ defer client.Logout()
70
+
71
+ fmt.Fprintf(os.Stderr, "Importing %s...\n", filepath.Base(filePath))
72
+ dbName, err := client.Import(filePath)
73
+ if err != nil {
74
+ return err
75
+ }
76
+
77
+ fmt.Fprintf(os.Stderr, "Imported database: %s\n", dbName)
78
+ return nil
79
+ },
80
+ }
81
+
82
+ func init() {
83
+ rootCmd.AddCommand(importCmd)
84
+ }
package/cli/cmd/root.go CHANGED
@@ -33,4 +33,6 @@ func init() {
33
33
  rootCmd.PersistentFlags().Int("timeout", 30, "Request timeout in seconds")
34
34
  rootCmd.PersistentFlags().String("db", "", "Database name")
35
35
  rootCmd.PersistentFlags().String("collection", "", "Collection name")
36
+ rootCmd.PersistentFlags().String("http-host", "localhost", "HTTP server host (for export/import)")
37
+ rootCmd.PersistentFlags().Int("http-port", 27018, "HTTP server port (for export/import)")
36
38
  }
@@ -6,6 +6,7 @@ import (
6
6
  "strings"
7
7
  "time"
8
8
 
9
+ "github.com/nexoral/axiodb-cli/pkg/httpclient"
9
10
  "github.com/nexoral/axiodb-cli/pkg/protocol"
10
11
  "github.com/spf13/cobra"
11
12
  )
@@ -23,6 +24,8 @@ type Config struct {
23
24
  Timeout int
24
25
  DB string
25
26
  Collection string
27
+ HTTPHost string
28
+ HTTPPort int
26
29
  }
27
30
 
28
31
  func FromFlags(cmd *cobra.Command) (*Config, error) {
@@ -40,6 +43,8 @@ func FromFlags(cmd *cobra.Command) (*Config, error) {
40
43
  cfg.Timeout, _ = cmd.Flags().GetInt("timeout")
41
44
  cfg.DB, _ = cmd.Flags().GetString("db")
42
45
  cfg.Collection, _ = cmd.Flags().GetString("collection")
46
+ cfg.HTTPHost, _ = cmd.Flags().GetString("http-host")
47
+ cfg.HTTPPort, _ = cmd.Flags().GetInt("http-port")
43
48
 
44
49
  if cfg.ConnString != "" {
45
50
  host, port, err := parseConnectionString(cfg.ConnString)
@@ -109,3 +114,7 @@ func GetCollectionContext(cmd *cobra.Command) string {
109
114
  coll, _ := cmd.Flags().GetString("collection")
110
115
  return coll
111
116
  }
117
+
118
+ func (c *Config) NewHTTPClient() *httpclient.HTTPClient {
119
+ return httpclient.New(c.HTTPHost, c.HTTPPort, time.Duration(c.Timeout)*time.Second)
120
+ }
@@ -0,0 +1,160 @@
1
+ package httpclient
2
+
3
+ import (
4
+ "bytes"
5
+ "encoding/json"
6
+ "fmt"
7
+ "io"
8
+ "mime/multipart"
9
+ "net/http"
10
+ "net/http/cookiejar"
11
+ "os"
12
+ "path/filepath"
13
+ "strings"
14
+ "time"
15
+ )
16
+
17
+ type HTTPClient struct {
18
+ baseURL string
19
+ httpClient *http.Client
20
+ }
21
+
22
+ func New(host string, port int, timeout time.Duration) *HTTPClient {
23
+ jar, _ := cookiejar.New(nil)
24
+ return &HTTPClient{
25
+ baseURL: fmt.Sprintf("http://%s:%d", host, port),
26
+ httpClient: &http.Client{
27
+ Timeout: timeout,
28
+ Jar: jar,
29
+ },
30
+ }
31
+ }
32
+
33
+ func (c *HTTPClient) Login(username, password string) error {
34
+ body, _ := json.Marshal(map[string]string{
35
+ "username": username,
36
+ "password": password,
37
+ })
38
+
39
+ resp, err := c.httpClient.Post(c.baseURL+"/api/auth/login", "application/json", bytes.NewReader(body))
40
+ if err != nil {
41
+ return fmt.Errorf("login request failed: %w", err)
42
+ }
43
+ defer resp.Body.Close()
44
+
45
+ if resp.StatusCode == http.StatusOK {
46
+ return nil
47
+ }
48
+
49
+ var errResp struct {
50
+ Message string `json:"message"`
51
+ }
52
+ json.NewDecoder(resp.Body).Decode(&errResp)
53
+ msg := errResp.Message
54
+ if msg == "" {
55
+ msg = resp.Status
56
+ }
57
+ return fmt.Errorf("login failed: %s", msg)
58
+ }
59
+
60
+ func (c *HTTPClient) Logout() error {
61
+ resp, err := c.httpClient.Post(c.baseURL+"/api/auth/logout", "application/json", nil)
62
+ if err != nil {
63
+ return err
64
+ }
65
+ defer resp.Body.Close()
66
+ return nil
67
+ }
68
+
69
+ func (c *HTTPClient) Export(dbName string) (string, int64, error) {
70
+ url := fmt.Sprintf("%s/api/db/export-database/?dbName=%s", c.baseURL, dbName)
71
+ resp, err := c.httpClient.Get(url)
72
+ if err != nil {
73
+ return "", 0, fmt.Errorf("export request failed: %w", err)
74
+ }
75
+ defer resp.Body.Close()
76
+
77
+ if resp.StatusCode != http.StatusOK {
78
+ var errResp struct {
79
+ Message string `json:"message"`
80
+ }
81
+ json.NewDecoder(resp.Body).Decode(&errResp)
82
+ msg := errResp.Message
83
+ if msg == "" {
84
+ msg = resp.Status
85
+ }
86
+ return "", 0, fmt.Errorf("export failed: %s", msg)
87
+ }
88
+
89
+ filename := dbName + ".tar.gz"
90
+ if cd := resp.Header.Get("Content-Disposition"); cd != "" {
91
+ if idx := strings.Index(cd, "filename="); idx >= 0 {
92
+ name := cd[idx+9:]
93
+ name = strings.Trim(name, "\"")
94
+ if name != "" {
95
+ filename = filepath.Base(name)
96
+ }
97
+ }
98
+ }
99
+
100
+ out, err := os.Create(filename)
101
+ if err != nil {
102
+ return "", 0, fmt.Errorf("create file: %w", err)
103
+ }
104
+ defer out.Close()
105
+
106
+ written, err := io.Copy(out, resp.Body)
107
+ if err != nil {
108
+ os.Remove(filename)
109
+ return "", 0, fmt.Errorf("write file: %w", err)
110
+ }
111
+
112
+ return filename, written, nil
113
+ }
114
+
115
+ func (c *HTTPClient) Import(filePath string) (string, error) {
116
+ file, err := os.Open(filePath)
117
+ if err != nil {
118
+ return "", fmt.Errorf("open file: %w", err)
119
+ }
120
+ defer file.Close()
121
+
122
+ var body bytes.Buffer
123
+ writer := multipart.NewWriter(&body)
124
+ part, err := writer.CreateFormFile("file", filepath.Base(filePath))
125
+ if err != nil {
126
+ return "", fmt.Errorf("create form file: %w", err)
127
+ }
128
+ if _, err := io.Copy(part, file); err != nil {
129
+ return "", fmt.Errorf("write form data: %w", err)
130
+ }
131
+ writer.Close()
132
+
133
+ resp, err := c.httpClient.Post(
134
+ c.baseURL+"/api/db/import-database/",
135
+ writer.FormDataContentType(),
136
+ &body,
137
+ )
138
+ if err != nil {
139
+ return "", fmt.Errorf("import request failed: %w", err)
140
+ }
141
+ defer resp.Body.Close()
142
+
143
+ var result struct {
144
+ Message string `json:"message"`
145
+ Database string `json:"database"`
146
+ }
147
+ if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
148
+ return "", fmt.Errorf("parse response: %w", err)
149
+ }
150
+
151
+ if resp.StatusCode != http.StatusOK {
152
+ msg := result.Message
153
+ if msg == "" {
154
+ msg = fmt.Sprintf("HTTP %d", resp.StatusCode)
155
+ }
156
+ return "", fmt.Errorf("import failed: %s", msg)
157
+ }
158
+
159
+ return result.Database, nil
160
+ }
@@ -25,9 +25,12 @@ export declare class AxioDB {
25
25
  private static _instance;
26
26
  private DatabaseMap;
27
27
  private GUI;
28
+ private HTTP;
28
29
  private TCP;
29
30
  private TCPAuth;
30
31
  private TLS;
32
+ private ready;
33
+ private _initializing;
31
34
  private TLSCertPath?;
32
35
  private TLSKeyPath?;
33
36
  constructor(options?: AxioDBOptions);
@@ -49,30 +49,30 @@ const LoginRateLimiter_service_1 = __importDefault(require("./Auth/LoginRateLimi
49
49
  class AxioDB {
50
50
  constructor(options = {}) {
51
51
  this.GUI = Keys_1.General.DBMS_GUI_Enable;
52
+ this.HTTP = false;
52
53
  this.TCP = false;
53
54
  this.TCPAuth = false;
54
55
  this.TLS = false;
56
+ this._initializing = false;
55
57
  if (AxioDB._instance) {
56
58
  throw new Error("Only one instance of AxioDB is allowed.");
57
59
  }
58
60
  AxioDB._instance = this;
59
61
  const { GUI, RootName, CustomPath, TCP, TCPAuth, TLS, TLSCertPath, TLSKeyPath } = options;
60
- // Default Vlaues
61
- this.RootName = RootName || Keys_1.General.DBMS_Name; // Set the root name
62
- this.currentPATH = path_1.default.resolve(CustomPath || "."); // Set the current path
63
- this.fileManager = new FileManager_1.default(); // Initialize the FileManager class
64
- this.folderManager = new FolderManager_1.default(); // Initialize the FolderManager class
65
- this.Converter = new Converter_helper_1.default(); // Initialize the Converter class
66
- this.ResponseHelper = new response_helper_1.default(); // Initialize the ResponseHelper class
67
- this.DatabaseMap = new Map(); // Initialize the DatabaseMap
68
- this.GUI = GUI !== undefined ? GUI : Keys_1.General.DBMS_GUI_Enable; // Set GUI option
69
- this.TCP = TCP !== undefined ? TCP : false; // Set TCP option
70
- this.TCPAuth = TCPAuth !== undefined ? TCPAuth : false; // Set TCPAuth option
71
- this.TLS = TLS !== undefined ? TLS : false; // Set TLS option
62
+ this.RootName = RootName || Keys_1.General.DBMS_Name;
63
+ this.currentPATH = path_1.default.resolve(CustomPath || ".");
64
+ this.fileManager = new FileManager_1.default();
65
+ this.folderManager = new FolderManager_1.default();
66
+ this.Converter = new Converter_helper_1.default();
67
+ this.ResponseHelper = new response_helper_1.default();
68
+ this.DatabaseMap = new Map();
69
+ this.GUI = GUI !== undefined ? GUI : Keys_1.General.DBMS_GUI_Enable;
70
+ this.HTTP = options.HTTP !== undefined ? options.HTTP : (this.GUI ? true : false);
71
+ this.TCP = TCP !== undefined ? TCP : false;
72
+ this.TCPAuth = TCPAuth !== undefined ? TCPAuth : false;
73
+ this.TLS = TLS !== undefined ? TLS : false;
72
74
  this.TLSCertPath = TLSCertPath;
73
75
  this.TLSKeyPath = TLSKeyPath;
74
- // Fail fast: never silently fall back to plaintext because a cert/key path was
75
- // missing or unreadable - that would be a silent security downgrade.
76
76
  if (this.TLS) {
77
77
  if (!this.TLSCertPath || !this.TLSKeyPath) {
78
78
  throw new Error("TLS: true requires both TLSCertPath and TLSKeyPath to be set.");
@@ -84,7 +84,11 @@ class AxioDB {
84
84
  throw new Error(`TLSKeyPath does not exist: ${this.TLSKeyPath}`);
85
85
  }
86
86
  }
87
- this.initializeRoot(); // Ensure root initialization (reads GUI/TCP/TCPAuth/TLS, so runs after they're set)
87
+ if (this.GUI && options.HTTP === false) {
88
+ throw new Error("GUI: true requires HTTP to be enabled. Set HTTP: true or remove the explicit HTTP: false.");
89
+ }
90
+ this._initializing = true;
91
+ this.ready = this.initializeRoot().finally(() => { this._initializing = false; });
88
92
  }
89
93
  /**
90
94
  * Initializes the root directory for the AxioDB.
@@ -110,16 +114,15 @@ class AxioDB {
110
114
  }
111
115
  }
112
116
  if (this.GUI || (this.TCP && this.TCPAuth)) {
113
- yield new AuthSeeder_service_1.default(this).seedIfNeeded(); // Ensure config DB, RBAC seed data exist before accepting requests
114
- LoginRateLimiter_service_1.default.startCleanupSweep(); // Only relevant once some auth surface (GUI or TCPAuth) is active
117
+ yield new AuthSeeder_service_1.default(this).seedIfNeeded();
118
+ LoginRateLimiter_service_1.default.startCleanupSweep();
115
119
  }
116
- if (this.GUI) {
117
- Console_helper_1.default.green("Starting AxioDB Control Server...");
118
- (0, server_1.default)(this); // Start the web Control Server with the AxioDB instance
120
+ if (this.HTTP) {
121
+ Console_helper_1.default.green(this.GUI ? "Starting AxioDB Control Server..." : "Starting AxioDB HTTP API Server (API only, GUI disabled)...");
122
+ (0, server_1.default)(this, this.GUI);
119
123
  }
120
124
  if (this.TCP) {
121
125
  Console_helper_1.default.green(this.TLS ? "Starting AxioDB TCP Server (TLS)..." : "Starting AxioDB TCP Server...");
122
- // Start the TCP Server with the AxioDB instance
123
126
  const tlsOptions = this.TLS
124
127
  ? { certPath: this.TLSCertPath, keyPath: this.TLSKeyPath }
125
128
  : undefined;
@@ -143,6 +146,8 @@ class AxioDB {
143
146
  */
144
147
  createDB(DBName) {
145
148
  return __awaiter(this, void 0, void 0, function* () {
149
+ if (!this._initializing)
150
+ yield this.ready;
146
151
  const dbPath = path_1.default.join(this.currentPATH, DBName);
147
152
  // Check if the database already exists
148
153
  const exists = yield this.folderManager.DirectoryExists(dbPath);
@@ -173,6 +178,8 @@ class AxioDB {
173
178
  */
174
179
  getInstanceInfo() {
175
180
  return __awaiter(this, void 0, void 0, function* () {
181
+ if (!this._initializing)
182
+ yield this.ready;
176
183
  const totalDatabases = yield this.folderManager.ListDirectory(path_1.default.resolve(this.currentPATH));
177
184
  // First
178
185
  const totalSize = yield this.folderManager.GetDirectorySize(path_1.default.resolve(this.currentPATH));
@@ -212,6 +219,8 @@ class AxioDB {
212
219
  */
213
220
  isDatabaseExists(DBName) {
214
221
  return __awaiter(this, void 0, void 0, function* () {
222
+ if (!this._initializing)
223
+ yield this.ready;
215
224
  const dbPath = path_1.default.join(this.currentPATH, DBName);
216
225
  const exists = yield this.folderManager.DirectoryExists(dbPath);
217
226
  return exists.statusCode === StatusCode_1.StatusCodes.OK;
@@ -231,6 +240,8 @@ class AxioDB {
231
240
  */
232
241
  deleteDatabase(DBName) {
233
242
  return __awaiter(this, void 0, void 0, function* () {
243
+ if (!this._initializing)
244
+ yield this.ready;
234
245
  const dbPath = path_1.default.join(this.currentPATH, DBName);
235
246
  const exists = yield this.folderManager.DirectoryExists(dbPath);
236
247
  if (exists.statusCode === StatusCode_1.StatusCodes.OK) {
@@ -1 +1 @@
1
- {"version":3,"file":"Indexation.operation.js","sourceRoot":"","sources":["../../source/Services/Indexation.operation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Indexation.operation.js","sourceRoot":"","sources":["../../source/Services/Indexation.operation.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { DatabaseMap } from "./database.operation.interface";
2
2
  export interface AxioDBOptions {
3
3
  GUI?: boolean;
4
+ /** Enable HTTP API server on port 27018. Auto-enables when GUI: true. If GUI: true and HTTP: false, throws error at startup. */
5
+ HTTP?: boolean;
4
6
  RootName?: string;
5
7
  CustomPath?: string;
6
8
  TCP?: boolean;
@@ -1,2 +1,2 @@
1
1
  import { AxioDB } from "../../Services/Indexation.operation";
2
- export default function createAxioDBControlServer(AxioDBInstance: AxioDB): Promise<void>;
2
+ export default function createAxioDBControlServer(AxioDBInstance: AxioDB, guiEnabled?: boolean): Promise<void>;
@@ -24,8 +24,8 @@ const keys_1 = require("./keys");
24
24
  const PortFreeChecker_1 = __importDefault(require("./PortFreeChecker"));
25
25
  const Router_1 = __importDefault(require("../router/Router"));
26
26
  const SessionStore_service_1 = __importDefault(require("../../Services/Auth/SessionStore.service"));
27
- function createAxioDBControlServer(AxioDBInstance) {
28
- return __awaiter(this, void 0, void 0, function* () {
27
+ function createAxioDBControlServer(AxioDBInstance_1) {
28
+ return __awaiter(this, arguments, void 0, function* (AxioDBInstance, guiEnabled = true) {
29
29
  yield (0, PortFreeChecker_1.default)(keys_1.ServerKeys.PORT);
30
30
  const AxioDBControlServer = (0, fastify_1.default)({
31
31
  logger: false,
@@ -52,19 +52,26 @@ function createAxioDBControlServer(AxioDBInstance) {
52
52
  done(err, undefined);
53
53
  }
54
54
  });
55
- // Registered before the SPA fallback route below, so static assets are served directly
56
- // rather than falling through to index.html.
57
- yield AxioDBControlServer.register(static_1.default, {
58
- root: keys_1.staticPath,
59
- prefix: "/",
60
- decorateReply: false,
61
- });
62
- // SPA fallback: any non-API, non-static route gets the React app's index.html
63
- AxioDBControlServer.get("/", (request, reply) => __awaiter(this, void 0, void 0, function* () {
64
- const indexPath = path_1.default.join(keys_1.staticPath, "index.html");
65
- const stream = fs_1.default.createReadStream(indexPath);
66
- return reply.type("text/html").send(stream);
67
- }));
55
+ if (guiEnabled) {
56
+ yield AxioDBControlServer.register(static_1.default, {
57
+ root: keys_1.staticPath,
58
+ prefix: "/",
59
+ decorateReply: false,
60
+ });
61
+ AxioDBControlServer.get("/", (request, reply) => __awaiter(this, void 0, void 0, function* () {
62
+ const indexPath = path_1.default.join(keys_1.staticPath, "index.html");
63
+ const stream = fs_1.default.createReadStream(indexPath);
64
+ return reply.type("text/html").send(stream);
65
+ }));
66
+ }
67
+ else {
68
+ AxioDBControlServer.get("/", (request, reply) => __awaiter(this, void 0, void 0, function* () {
69
+ return reply.type("application/json").send({
70
+ message: "AxioDB HTTP API is running. GUI is disabled. Enable it with GUI: true.",
71
+ api: "/api/health",
72
+ });
73
+ }));
74
+ }
68
75
  AxioDBControlServer.register(Router_1.default, {
69
76
  prefix: "/api",
70
77
  AxioDBInstance,
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../source/server/config/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sDAAsD;AACtD,sDAA8B;AAC9B,yDAAwC;AACxC,6DAA4C;AAC5C,6DAA4C;AAC5C,gDAAwB;AACxB,4CAAoB;AACpB,iCAA6D;AAC7D,wEAAmD;AAEnD,8DAAsC;AACtC,oGAAoE;AAEpE,mCACE,cAAsB;;QAEtB,MAAM,IAAA,yBAAkB,EAAC,iBAAU,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,mBAAmB,GAAG,IAAA,iBAAO,EAAC;YAClC,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,QAAQ,EAAE,OAAO;SAC7B,CAAC,CAAC;QAEH,MAAM,mBAAmB,CAAC,QAAQ,CAAC,cAAW,EAAE;YAC9C,MAAM,EAAE,kBAAW,CAAC,MAAM;YAC1B,OAAO,EAAE,kBAAW,CAAC,OAAO;YAC5B,cAAc,EAAE,kBAAW,CAAC,eAAe;YAC3C,WAAW,EAAE,kBAAW,CAAC,iBAAiB;YAC1C,cAAc,EAAE,kBAAW,CAAC,eAAe;YAC3C,MAAM,EAAE,kBAAW,CAAC,OAAO,EAAE,2BAA2B;SACzD,CAAC,CAAC;QAEH,8EAA8E;QAC9E,kFAAkF;QAClF,MAAM,mBAAmB,CAAC,QAAQ,CAAC,gBAAa,CAAC,CAAC;QAElD,mBAAmB,CAAC,oBAAoB,CACtC,kBAAkB,EAClB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAC1C,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAY,EAAE,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CACF,CAAC;QAEF,uFAAuF;QACvF,6CAA6C;QAC7C,MAAM,mBAAmB,CAAC,QAAQ,CAAC,gBAAa,EAAE;YAChD,IAAI,EAAE,iBAAU;YAChB,MAAM,EAAE,GAAG;YACX,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,8EAA8E;QAC9E,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,OAAO,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,iBAAU,EAAE,YAAY,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,YAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAA,CAAC,CAAC;QAEH,mBAAmB,CAAC,QAAQ,CAAC,gBAAM,EAAE;YACnC,MAAM,EAAE,MAAM;YACd,cAAc;SACf,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,mBAAmB,CAAC,MAAM,CAAC;gBAC/B,IAAI,EAAE,MAAM,CAAC,iBAAU,CAAC,IAAI,CAAC;gBAC7B,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,8BAAY,CAAC,iBAAiB,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CACT,wDAAwD,iBAAU,CAAC,IAAI,EAAE,CAC1E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CAAA"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../source/server/config/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sDAAsD;AACtD,sDAA8B;AAC9B,yDAAwC;AACxC,6DAA4C;AAC5C,6DAA4C;AAC5C,gDAAwB;AACxB,4CAAoB;AACpB,iCAA6D;AAC7D,wEAAmD;AAEnD,8DAAsC;AACtC,oGAAoE;AAEpE;yDACE,cAAsB,EACtB,UAAU,GAAY,IAAI;QAE1B,MAAM,IAAA,yBAAkB,EAAC,iBAAU,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,mBAAmB,GAAG,IAAA,iBAAO,EAAC;YAClC,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,QAAQ,EAAE,OAAO;SAC7B,CAAC,CAAC;QAEH,MAAM,mBAAmB,CAAC,QAAQ,CAAC,cAAW,EAAE;YAC9C,MAAM,EAAE,kBAAW,CAAC,MAAM;YAC1B,OAAO,EAAE,kBAAW,CAAC,OAAO;YAC5B,cAAc,EAAE,kBAAW,CAAC,eAAe;YAC3C,WAAW,EAAE,kBAAW,CAAC,iBAAiB;YAC1C,cAAc,EAAE,kBAAW,CAAC,eAAe;YAC3C,MAAM,EAAE,kBAAW,CAAC,OAAO,EAAE,2BAA2B;SACzD,CAAC,CAAC;QAEH,8EAA8E;QAC9E,kFAAkF;QAClF,MAAM,mBAAmB,CAAC,QAAQ,CAAC,gBAAa,CAAC,CAAC;QAElD,mBAAmB,CAAC,oBAAoB,CACtC,kBAAkB,EAClB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAC1C,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAY,EAAE,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CACF,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,mBAAmB,CAAC,QAAQ,CAAC,gBAAa,EAAE;gBAChD,IAAI,EAAE,iBAAU;gBAChB,MAAM,EAAE,GAAG;gBACX,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;YAEH,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,OAAO,EAAE,KAAK,EAAE,EAAE;gBACpD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,iBAAU,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,YAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,OAAO,EAAE,KAAK,EAAE,EAAE;gBACpD,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC;oBACzC,OAAO,EAAE,wEAAwE;oBACjF,GAAG,EAAE,aAAa;iBACnB,CAAC,CAAC;YACL,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB,CAAC,QAAQ,CAAC,gBAAM,EAAE;YACnC,MAAM,EAAE,MAAM;YACd,cAAc;SACf,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,mBAAmB,CAAC,MAAM,CAAC;gBAC/B,IAAI,EAAE,MAAM,CAAC,iBAAU,CAAC,IAAI,CAAC;gBAC7B,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,8BAAY,CAAC,iBAAiB,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CACT,wDAAwD,iBAAU,CAAC,IAAI,EAAE,CAC1E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axiodb",
3
- "version": "16.2.1",
3
+ "version": "18.1.2",
4
4
  "description": "The Pure JavaScript Alternative to SQLite. Embedded NoSQL database for Node.js with MongoDB-style queries, zero native dependencies, built-in InMemoryCache, and web GUI. Perfect for desktop apps, CLI tools, and embedded systems. No compilation, no platform issuesβ€”pure JavaScript from npm install to production.",
5
5
  "main": "./lib/config/DB.js",
6
6
  "types": "./lib/config/DB.d.ts",