@dignetwork/dig-sdk 0.0.1-alpha.15 → 0.0.1-alpha.150

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.
Files changed (83) hide show
  1. package/dist/DataIntegrityTree/DataIntegrityTree.d.ts +11 -2
  2. package/dist/DataIntegrityTree/DataIntegrityTree.d.ts.map +1 -1
  3. package/dist/DataIntegrityTree/DataIntegrityTree.js +117 -58
  4. package/dist/DigNetwork/ContentServer.d.ts +12 -5
  5. package/dist/DigNetwork/ContentServer.d.ts.map +1 -1
  6. package/dist/DigNetwork/ContentServer.js +172 -24
  7. package/dist/DigNetwork/DigNetwork.d.ts +15 -9
  8. package/dist/DigNetwork/DigNetwork.d.ts.map +1 -1
  9. package/dist/DigNetwork/DigNetwork.js +146 -189
  10. package/dist/DigNetwork/DigPeer.d.ts +8 -3
  11. package/dist/DigNetwork/DigPeer.d.ts.map +1 -1
  12. package/dist/DigNetwork/DigPeer.js +68 -115
  13. package/dist/DigNetwork/IncentiveServer.d.ts.map +1 -1
  14. package/dist/DigNetwork/IncentiveServer.js +6 -5
  15. package/dist/DigNetwork/PropagationServer.d.ts +83 -33
  16. package/dist/DigNetwork/PropagationServer.d.ts.map +1 -1
  17. package/dist/DigNetwork/PropagationServer.js +605 -356
  18. package/dist/blockchain/DataStore.d.ts +25 -7
  19. package/dist/blockchain/DataStore.d.ts.map +1 -1
  20. package/dist/blockchain/DataStore.js +114 -159
  21. package/dist/blockchain/DataStoreSerializer.d.ts +1 -1
  22. package/dist/blockchain/DataStoreSerializer.d.ts.map +1 -1
  23. package/dist/blockchain/FullNodePeer.d.ts +94 -10
  24. package/dist/blockchain/FullNodePeer.d.ts.map +1 -1
  25. package/dist/blockchain/FullNodePeer.js +325 -100
  26. package/dist/blockchain/ServerCoin.d.ts +13 -5
  27. package/dist/blockchain/ServerCoin.d.ts.map +1 -1
  28. package/dist/blockchain/ServerCoin.js +90 -28
  29. package/dist/blockchain/StoreMonitorRegistry.d.ts +85 -0
  30. package/dist/blockchain/StoreMonitorRegistry.d.ts.map +1 -0
  31. package/dist/blockchain/StoreMonitorRegistry.js +241 -0
  32. package/dist/blockchain/Wallet.d.ts +2 -2
  33. package/dist/blockchain/Wallet.d.ts.map +1 -1
  34. package/dist/blockchain/Wallet.js +50 -18
  35. package/dist/blockchain/coins.d.ts +1 -2
  36. package/dist/blockchain/coins.d.ts.map +1 -1
  37. package/dist/blockchain/coins.js +1 -55
  38. package/dist/blockchain/index.d.ts +1 -0
  39. package/dist/blockchain/index.d.ts.map +1 -1
  40. package/dist/blockchain/index.js +1 -0
  41. package/dist/types.d.ts +2 -0
  42. package/dist/types.d.ts.map +1 -1
  43. package/dist/utils/ContentScanner.d.ts +63 -0
  44. package/dist/utils/ContentScanner.d.ts.map +1 -0
  45. package/dist/utils/ContentScanner.js +175 -0
  46. package/dist/utils/Environment.d.ts +21 -0
  47. package/dist/utils/Environment.d.ts.map +1 -0
  48. package/dist/utils/Environment.js +92 -0
  49. package/dist/utils/FileCache.d.ts +1 -1
  50. package/dist/utils/FileCache.d.ts.map +1 -1
  51. package/dist/utils/FileCache.js +2 -2
  52. package/dist/utils/FileTransfer.d.ts +47 -0
  53. package/dist/utils/FileTransfer.d.ts.map +1 -0
  54. package/dist/utils/FileTransfer.js +209 -0
  55. package/dist/utils/NconfManager.js +2 -1
  56. package/dist/utils/PeerRanker.d.ts +53 -0
  57. package/dist/utils/PeerRanker.d.ts.map +1 -0
  58. package/dist/utils/PeerRanker.js +171 -0
  59. package/dist/utils/StoreArchiveManager.d.ts +45 -0
  60. package/dist/utils/StoreArchiveManager.d.ts.map +1 -0
  61. package/dist/utils/StoreArchiveManager.js +153 -0
  62. package/dist/utils/config.d.ts +4 -3
  63. package/dist/utils/config.d.ts.map +1 -1
  64. package/dist/utils/config.js +12 -7
  65. package/dist/utils/directoryUtils.d.ts.map +1 -1
  66. package/dist/utils/directoryUtils.js +9 -12
  67. package/dist/utils/index.d.ts +3 -1
  68. package/dist/utils/index.d.ts.map +1 -1
  69. package/dist/utils/index.js +3 -1
  70. package/dist/utils/merkle.d.ts +2 -0
  71. package/dist/utils/merkle.d.ts.map +1 -0
  72. package/dist/utils/merkle.js +28 -0
  73. package/dist/utils/network.d.ts +1 -0
  74. package/dist/utils/network.d.ts.map +1 -1
  75. package/dist/utils/network.js +38 -11
  76. package/dist/utils/promiseUtils.d.ts +19 -0
  77. package/dist/utils/promiseUtils.d.ts.map +1 -0
  78. package/dist/utils/promiseUtils.js +43 -0
  79. package/dist/utils/ssl.js +2 -2
  80. package/package.json +17 -5
  81. package/dist/utils/deltaUtils.d.ts +0 -2
  82. package/dist/utils/deltaUtils.d.ts.map +0 -1
  83. package/dist/utils/deltaUtils.js +0 -83
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const fs = __importStar(require("fs"));
27
+ const path = __importStar(require("path"));
28
+ const archiver = __importStar(require("archiver"));
29
+ const unzipper = __importStar(require("unzipper"));
30
+ /**
31
+ * Class for managing file archiving, extraction, and working with the 'data' folder.
32
+ */
33
+ class StoreArchiveManager {
34
+ /**
35
+ * Constructor that initializes the FileArchiveManager with a given path.
36
+ * @param archivePath - The path where the archive will be created.
37
+ */
38
+ constructor(archivePath) {
39
+ this.archivePath = archivePath;
40
+ this.outputStream = null;
41
+ }
42
+ /**
43
+ * Creates the archive at the specified path.
44
+ * @returns Promise<void>
45
+ */
46
+ async createArchive() {
47
+ return new Promise((resolve, reject) => {
48
+ this.outputStream = fs.createWriteStream(this.archivePath);
49
+ // @ts-ignore
50
+ const archive = archiver('zip', {
51
+ zlib: { level: 9 }
52
+ });
53
+ this.outputStream.on('close', () => {
54
+ console.log(`${archive.pointer()} total bytes`);
55
+ console.log('Archive has been finalized and output file descriptor has closed.');
56
+ resolve();
57
+ });
58
+ archive.on('error', (err) => {
59
+ reject(err);
60
+ });
61
+ archive.pipe(this.outputStream);
62
+ });
63
+ }
64
+ /**
65
+ * Streams a file into the archive.
66
+ * @param filePath - The file to add to the archive.
67
+ * @param fileNameInArchive - The name the file should have inside the archive.
68
+ * @returns Promise<void>
69
+ */
70
+ async addFileToArchive(filePath, fileNameInArchive) {
71
+ if (!this.outputStream) {
72
+ throw new Error('Archive not yet created.');
73
+ }
74
+ return new Promise((resolve, reject) => {
75
+ // @ts-ignore
76
+ const archive = archiver('zip', { zlib: { level: 9 } });
77
+ const fileStream = fs.createReadStream(filePath);
78
+ archive.append(fileStream, { name: fileNameInArchive });
79
+ archive.finalize();
80
+ archive.on('finish', resolve);
81
+ archive.on('error', reject);
82
+ });
83
+ }
84
+ /**
85
+ * Extracts a file from the archive to a specified directory.
86
+ * @param extractToPath - The path where the file should be extracted.
87
+ * @returns Promise<void>
88
+ */
89
+ async extractArchive(extractToPath) {
90
+ return new Promise((resolve, reject) => {
91
+ fs.createReadStream(this.archivePath)
92
+ .pipe(unzipper.Extract({ path: extractToPath }))
93
+ .on('close', resolve)
94
+ .on('error', reject);
95
+ });
96
+ }
97
+ /**
98
+ * Merges another archive into the current one.
99
+ * Extracts files from the given archive and adds them into the current archive.
100
+ * @param archiveToMergePath - The path of the archive to be merged.
101
+ * @returns Promise<void>
102
+ */
103
+ async mergeArchive(archiveToMergePath) {
104
+ if (!this.outputStream) {
105
+ throw new Error('Archive not yet created.');
106
+ }
107
+ return new Promise((resolve, reject) => {
108
+ const tempExtractPath = path.join(__dirname, 'tempExtract');
109
+ // Ensure the temp directory exists
110
+ if (!fs.existsSync(tempExtractPath)) {
111
+ fs.mkdirSync(tempExtractPath);
112
+ }
113
+ // Step 1: Extract the contents of the archive to be merged
114
+ fs.createReadStream(archiveToMergePath)
115
+ .pipe(unzipper.Extract({ path: tempExtractPath }))
116
+ .on('close', async () => {
117
+ try {
118
+ // Step 2: Read the extracted files and add them to the current archive
119
+ await this.addExtractedFilesToArchive(tempExtractPath);
120
+ // Clean up: Delete the temporary directory
121
+ fs.rmSync(tempExtractPath, { recursive: true, force: true });
122
+ resolve();
123
+ }
124
+ catch (error) {
125
+ reject(error);
126
+ }
127
+ })
128
+ .on('error', reject);
129
+ });
130
+ }
131
+ /**
132
+ * Adds extracted files to the current archive.
133
+ * @param extractedFolderPath - The path of the folder containing extracted files.
134
+ * @returns Promise<void>
135
+ */
136
+ async addExtractedFilesToArchive(extractedFolderPath) {
137
+ const files = fs.readdirSync(extractedFolderPath);
138
+ for (const file of files) {
139
+ const fullFilePath = path.join(extractedFolderPath, file);
140
+ const stat = fs.statSync(fullFilePath);
141
+ if (stat.isFile()) {
142
+ const relativePath = path.relative(extractedFolderPath, fullFilePath);
143
+ // Add the file into the current archive
144
+ await this.addFileToArchive(fullFilePath, relativePath);
145
+ }
146
+ else if (stat.isDirectory()) {
147
+ // Recursively add files from nested directories
148
+ await this.addExtractedFilesToArchive(fullFilePath);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ exports.default = StoreArchiveManager;
@@ -1,12 +1,12 @@
1
1
  import { DigConfig } from "../types";
2
2
  export declare const NETWORK_AGG_SIG_DATA = "ccd5bb71183532bff220ba46c268991a3ff07eb358e8255a65c30a2dce0e5fbb";
3
+ export declare const MAIN_NET_GENISES_CHALLENGE = "ccd5bb71183532bff220ba46c268991a3ff07eb358e8255a65c30a2dce0e5fbb";
3
4
  export declare const MIN_HEIGHT = 5777842;
4
5
  export declare const MIN_HEIGHT_HEADER_HASH = "b29a4daac2434fd17a36e15ba1aac5d65012d4a66f99bed0bf2b5342e92e562c";
5
6
  export declare const DIG_FOLDER_PATH: string;
6
7
  export declare const STORE_PATH: string;
7
8
  export declare const USER_DIR_PATH: string;
8
9
  export declare const CONFIG_FILE_PATH: string;
9
- export declare const getManifestFilePath: (storeId: string) => string;
10
10
  export declare const getHeightFilePath: (storeId: string) => string;
11
11
  export declare const createInitialConfig: () => void;
12
12
  export declare const setRemote: (remote: string) => void;
@@ -20,9 +20,10 @@ export declare const getCoinState: (storeId: string) => {
20
20
  };
21
21
  };
22
22
  /**
23
- * Retrieves a list of valid store folders (64-character hexadecimal names) in the DIG folder.
23
+ * Retrieves the list of valid store folders.
24
+ * If the STORE_PATH directory does not exist, it is created.
24
25
  *
25
- * @returns {string[]} An array of valid folder names.
26
+ * @returns {string[]} An array of valid store folder names.
26
27
  */
27
28
  export declare const getStoresList: () => string[];
28
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,eAAO,MAAM,oBAAoB,qEACmC,CAAC;AAErE,eAAO,MAAM,UAAU,UAAU,CAAC;AAClC,eAAO,MAAM,sBAAsB,qEACiC,CAAC;AAErE,eAAO,MAAM,eAAe,QACqC,CAAC;AAElE,eAAO,MAAM,UAAU,QAAuC,CAAC;AAE/D,eAAO,MAAM,aAAa,QAAkC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAE9E,eAAO,MAAM,mBAAmB,YAAa,MAAM,KAAG,MACN,CAAC;AAEjD,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,MACL,CAAC;AAEhD,eAAO,MAAM,mBAAmB,QAAO,IAItC,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,IAQ1C,CAAC;AAEF,eAAO,MAAM,cAAc,YAAa,MAAM,KAAG,IAQhD,CAAC;AAqBF,eAAO,MAAM,YAAY,YACd,MAAM,KACd;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CAYH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,EAOtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,MAAM,GAAG,IAAI,CAkC9D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,SAS/C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,YAAa,MAAM,KAAG,SAoBjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,YACjB,MAAM,OACV,MAAM,SACJ,GAAG,KACT,IAMF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YAAa,MAAM,OAAO,MAAM,KAAG,IAcjE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAMrC,eAAO,MAAM,oBAAoB,qEACmC,CAAC;AAErE,eAAO,MAAM,0BAA0B,qEAAuB,CAAC;AAE/D,eAAO,MAAM,UAAU,UAAU,CAAC;AAClC,eAAO,MAAM,sBAAsB,qEACiC,CAAC;AAErE,eAAO,MAAM,eAAe,QACqC,CAAC;AAElE,eAAO,MAAM,UAAU,QAAuC,CAAC;AAE/D,eAAO,MAAM,aAAa,QAAkC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAE9E,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,MACL,CAAC;AAEhD,eAAO,MAAM,mBAAmB,QAAO,IAItC,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,IAQ1C,CAAC;AAEF,eAAO,MAAM,cAAc,YAAa,MAAM,KAAG,IAQhD,CAAC;AAqBF,eAAO,MAAM,YAAY,YACd,MAAM,KACd;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CAYH,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,EAYtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,MAAM,GAAG,IAAI,CAkC9D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,SAS/C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,YAAa,MAAM,KAAG,SAoBjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,YACjB,MAAM,OACV,MAAM,SACJ,GAAG,KACT,IAMF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YAAa,MAAM,OAAO,MAAM,KAAG,IAcjE,CAAC"}
@@ -26,20 +26,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.deleteDigConfigKey = exports.setDigConfigKey = exports.ensureDigConfig = exports.loadDigConfig = exports.getActiveStoreId = exports.getStoresList = exports.getCoinState = exports.setActiveStore = exports.setRemote = exports.createInitialConfig = exports.getHeightFilePath = exports.getManifestFilePath = exports.CONFIG_FILE_PATH = exports.USER_DIR_PATH = exports.STORE_PATH = exports.DIG_FOLDER_PATH = exports.MIN_HEIGHT_HEADER_HASH = exports.MIN_HEIGHT = exports.NETWORK_AGG_SIG_DATA = void 0;
29
+ exports.deleteDigConfigKey = exports.setDigConfigKey = exports.ensureDigConfig = exports.loadDigConfig = exports.getActiveStoreId = exports.getStoresList = exports.getCoinState = exports.setActiveStore = exports.setRemote = exports.createInitialConfig = exports.getHeightFilePath = exports.CONFIG_FILE_PATH = exports.USER_DIR_PATH = exports.STORE_PATH = exports.DIG_FOLDER_PATH = exports.MIN_HEIGHT_HEADER_HASH = exports.MIN_HEIGHT = exports.MAIN_NET_GENISES_CHALLENGE = exports.NETWORK_AGG_SIG_DATA = void 0;
30
30
  const fs = __importStar(require("fs"));
31
31
  const path = __importStar(require("path"));
32
32
  const inquirer_1 = __importDefault(require("inquirer"));
33
33
  const os_1 = __importDefault(require("os"));
34
+ const Environment_1 = require("./Environment");
34
35
  exports.NETWORK_AGG_SIG_DATA = "ccd5bb71183532bff220ba46c268991a3ff07eb358e8255a65c30a2dce0e5fbb";
36
+ exports.MAIN_NET_GENISES_CHALLENGE = exports.NETWORK_AGG_SIG_DATA;
35
37
  exports.MIN_HEIGHT = 5777842;
36
38
  exports.MIN_HEIGHT_HEADER_HASH = "b29a4daac2434fd17a36e15ba1aac5d65012d4a66f99bed0bf2b5342e92e562c";
37
- exports.DIG_FOLDER_PATH = process.env.DIG_FOLDER_PATH || path.join(process.cwd(), ".dig");
39
+ exports.DIG_FOLDER_PATH = Environment_1.Environment.DIG_FOLDER_PATH || path.join(process.cwd(), ".dig");
38
40
  exports.STORE_PATH = path.join(exports.DIG_FOLDER_PATH, "stores");
39
41
  exports.USER_DIR_PATH = path.join(os_1.default.homedir(), ".dig");
40
42
  exports.CONFIG_FILE_PATH = path.join(exports.DIG_FOLDER_PATH, "dig.config.json");
41
- const getManifestFilePath = (storeId) => path.join(exports.STORE_PATH, storeId, "manifest.dat");
42
- exports.getManifestFilePath = getManifestFilePath;
43
43
  const getHeightFilePath = (storeId) => path.join(exports.STORE_PATH, storeId, "height.json");
44
44
  exports.getHeightFilePath = getHeightFilePath;
45
45
  const createInitialConfig = () => {
@@ -94,11 +94,16 @@ const getCoinState = (storeId) => {
94
94
  };
95
95
  exports.getCoinState = getCoinState;
96
96
  /**
97
- * Retrieves a list of valid store folders (64-character hexadecimal names) in the DIG folder.
97
+ * Retrieves the list of valid store folders.
98
+ * If the STORE_PATH directory does not exist, it is created.
98
99
  *
99
- * @returns {string[]} An array of valid folder names.
100
+ * @returns {string[]} An array of valid store folder names.
100
101
  */
101
102
  const getStoresList = () => {
103
+ // Check if the STORE_PATH exists, create it if not
104
+ if (!fs.existsSync(exports.STORE_PATH)) {
105
+ fs.mkdirSync(exports.STORE_PATH, { recursive: true });
106
+ }
102
107
  const folders = fs.readdirSync(exports.STORE_PATH);
103
108
  return folders.filter((folder) => /^[a-f0-9]{64}$/.test(folder) &&
104
109
  fs.lstatSync(path.join(exports.STORE_PATH, folder)).isDirectory());
@@ -123,7 +128,7 @@ const getActiveStoreId = async () => {
123
128
  return Buffer.from(config.active_store, "hex");
124
129
  }
125
130
  const validFolders = (0, exports.getStoresList)();
126
- if (validFolders.length === 1 || process.env.REMOTE_NODE === "1") {
131
+ if (validFolders.length === 1 || Environment_1.Environment.REMOTE_NODE) {
127
132
  // If only one valid folder exists, set it as the active_store and return it
128
133
  config.active_store = validFolders[0];
129
134
  fs.writeFileSync(configFilePath, JSON.stringify(config, null, 4));
@@ -1 +1 @@
1
- {"version":3,"file":"directoryUtils.d.ts","sourceRoot":"","sources":["../../src/utils/directoryUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA8BzD,eAAO,MAAM,YAAY,cACZ,iBAAiB,WACnB,MAAM,YACN,MAAM,KACd,OAAO,CAAC,IAAI,CAiDd,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,eAAgB,MAAM,KAAG,MAiBxD,CAAC"}
1
+ {"version":3,"file":"directoryUtils.d.ts","sourceRoot":"","sources":["../../src/utils/directoryUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA+BzD,eAAO,MAAM,YAAY,cACZ,iBAAiB,WACnB,MAAM,YACN,MAAM,KACd,OAAO,CAAC,IAAI,CA4Cd,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,eAAgB,MAAM,KAAG,MAiBxD,CAAC"}
@@ -32,22 +32,23 @@ const fs = __importStar(require("fs"));
32
32
  const ignore_1 = __importDefault(require("ignore"));
33
33
  // Custom concurrency handler
34
34
  const limitConcurrency = async (concurrencyLimit, tasks) => {
35
- const results = [];
36
35
  const executing = [];
37
36
  for (const task of tasks) {
38
37
  const p = task();
39
- results.push(p);
38
+ // Add the new task to the executing array
39
+ executing.push(p);
40
+ // When a task completes, remove it from the executing array
41
+ const cleanup = p.finally(() => {
42
+ executing.splice(executing.indexOf(cleanup), 1);
43
+ });
40
44
  // Once the limit is reached, wait for one to complete
41
45
  if (executing.length >= concurrencyLimit) {
46
+ await new Promise((resolve) => setTimeout(resolve, 100));
42
47
  await Promise.race(executing);
43
48
  }
44
- // Add the new task to the executing array
45
- executing.push(p);
46
- // When a task completes, remove it from the executing array
47
- p.finally(() => executing.splice(executing.indexOf(p), 1));
48
49
  }
49
50
  // Wait for all remaining tasks to complete
50
- return Promise.all(results);
51
+ return Promise.all(executing);
51
52
  };
52
53
  const addDirectory = async (datalayer, dirPath, baseDir = dirPath) => {
53
54
  const ig = (0, ignore_1.default)();
@@ -77,14 +78,10 @@ const addDirectory = async (datalayer, dirPath, baseDir = dirPath) => {
77
78
  const stream = fs.createReadStream(filePath);
78
79
  datalayer
79
80
  .upsertKey(stream, Buffer.from(relativePath).toString("hex"))
80
- .then(async () => {
81
- await new Promise((resolve) => setTimeout(resolve, 100));
82
- resolve();
83
- })
81
+ .then(() => resolve())
84
82
  .catch(reject);
85
83
  }));
86
84
  }
87
- await new Promise((resolve) => setTimeout(resolve, 100));
88
85
  }
89
86
  // Run tasks with limited concurrency (set the concurrency limit as needed)
90
87
  await limitConcurrency(10, tasks); // Adjust 10 based on your system limits
@@ -1,7 +1,6 @@
1
1
  export * from './config';
2
2
  export * from './connectionUtils';
3
3
  export * from './credentialsUtils';
4
- export * from './deltaUtils';
5
4
  export * from './directoryUtils';
6
5
  export * from './encryption';
7
6
  export * from './FileCache';
@@ -11,4 +10,7 @@ export * from './network';
11
10
  export * from './spinnerUtils';
12
11
  export * from './ssl';
13
12
  export * from './validationUtils';
13
+ export * from './Environment';
14
+ export * from './promiseUtils';
15
+ export * from './PeerRanker';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
@@ -17,7 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./config"), exports);
18
18
  __exportStar(require("./connectionUtils"), exports);
19
19
  __exportStar(require("./credentialsUtils"), exports);
20
- __exportStar(require("./deltaUtils"), exports);
21
20
  __exportStar(require("./directoryUtils"), exports);
22
21
  __exportStar(require("./encryption"), exports);
23
22
  __exportStar(require("./FileCache"), exports);
@@ -27,3 +26,6 @@ __exportStar(require("./network"), exports);
27
26
  __exportStar(require("./spinnerUtils"), exports);
28
27
  __exportStar(require("./ssl"), exports);
29
28
  __exportStar(require("./validationUtils"), exports);
29
+ __exportStar(require("./Environment"), exports);
30
+ __exportStar(require("./promiseUtils"), exports);
31
+ __exportStar(require("./PeerRanker"), exports);
@@ -0,0 +1,2 @@
1
+ export declare function merkleIntegrityCheck(treePath: string, tmpDir: string, dataPath: string, roothash: string): Promise<boolean>;
2
+ //# sourceMappingURL=merkle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/utils/merkle.ts"],"names":[],"mappings":"AAIA,wBAAsB,oBAAoB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.merkleIntegrityCheck = merkleIntegrityCheck;
7
+ const DataIntegrityTree_1 = require("../DataIntegrityTree");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ async function merkleIntegrityCheck(treePath, tmpDir, dataPath, roothash) {
11
+ const rootHashContent = fs_1.default.readFileSync(treePath, "utf-8");
12
+ const tree = JSON.parse(rootHashContent);
13
+ // Extract expected sha256 from dataPath
14
+ const expectedSha256 = dataPath.replace("data", "").replace(/\//g, "");
15
+ console.log("expectedSha256", expectedSha256);
16
+ // Find the hexKey in the tree based on matching sha256
17
+ const hexKey = Object.keys(tree.files).find((key) => {
18
+ const fileData = tree.files[key]; // Inline type definition
19
+ return fileData.sha256 === expectedSha256;
20
+ });
21
+ if (!hexKey) {
22
+ throw new Error(`No matching file found with sha256: ${expectedSha256}`);
23
+ }
24
+ // Validate the integrity with the foreign tree
25
+ const integrity = await DataIntegrityTree_1.DataIntegrityTree.validateKeyIntegrityWithForeignTree(hexKey, expectedSha256, tree, roothash, path_1.default.join(tmpDir, "data"));
26
+ console.log("Integrity check result:", integrity);
27
+ return integrity;
28
+ }
@@ -1,2 +1,3 @@
1
1
  export declare const getPublicIpAddress: () => Promise<string | undefined>;
2
+ export declare const formatHost: (host: string) => string;
2
3
  //# sourceMappingURL=network.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CA8BrE,CAAC"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CA6CrE,CAAC;AAGF,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAUzC,CAAC"}
@@ -3,36 +3,63 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getPublicIpAddress = void 0;
6
+ exports.formatHost = exports.getPublicIpAddress = void 0;
7
+ /*
8
+ * Stopgap until better solution for finding public IPS found
9
+ */
7
10
  const superagent_1 = __importDefault(require("superagent"));
11
+ const Environment_1 = require("./Environment");
8
12
  const MAX_RETRIES = 5;
9
13
  const RETRY_DELAY = 2000; // in milliseconds
14
+ // Regular expression for validating both IPv4 and IPv6 addresses
15
+ const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
16
+ const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|(([0-9a-fA-F]{1,4}:){1,7}|:):(([0-9a-fA-F]{1,4}:){1,6}|:):([0-9a-fA-F]{1,4}|:):([0-9a-fA-F]{1,4}|:)|::)$/;
17
+ // Helper function to validate the IP address
18
+ const isValidIp = (ip) => {
19
+ return ipv4Regex.test(ip) || ipv6Regex.test(ip);
20
+ };
10
21
  const getPublicIpAddress = async () => {
11
- const publicIp = process.env.PUBLIC_IP;
22
+ const publicIp = Environment_1.Environment.PUBLIC_IP;
12
23
  if (publicIp) {
13
- console.log('Public IP address from env:', publicIp);
14
- return publicIp;
24
+ console.log("Public IP address from env:", publicIp);
25
+ if (isValidIp(publicIp)) {
26
+ return publicIp;
27
+ }
28
+ console.error("Invalid public IP address in environment variable");
29
+ return undefined;
15
30
  }
16
31
  let attempt = 0;
17
32
  while (attempt < MAX_RETRIES) {
18
33
  try {
19
- const response = await superagent_1.default.get('https://api.datalayer.storage/user/v1/get_user_ip');
34
+ const response = await superagent_1.default.get("https://api.datalayer.storage/user/v1/get_user_ip");
20
35
  if (response.body && response.body.success) {
21
- console.log('Public IP address:', response.body);
22
- return response.body.ip_address;
23
- }
24
- else {
25
- throw new Error('Failed to retrieve public IP address');
36
+ const ipAddress = response.body.ip_address;
37
+ if (isValidIp(ipAddress)) {
38
+ return ipAddress;
39
+ }
40
+ throw new Error("Invalid IP address format received");
26
41
  }
42
+ throw new Error("Failed to retrieve public IP address");
27
43
  }
28
44
  catch (error) {
29
45
  attempt++;
30
46
  console.error(`Error fetching public IP address (Attempt ${attempt}):`, error.message);
31
47
  if (attempt >= MAX_RETRIES) {
32
- throw new Error('Could not retrieve public IP address after several attempts');
48
+ throw new Error("Could not retrieve public IP address after several attempts");
33
49
  }
34
50
  await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY));
35
51
  }
36
52
  }
37
53
  };
38
54
  exports.getPublicIpAddress = getPublicIpAddress;
55
+ // Helper function to wrap IPv6 addresses in brackets
56
+ const formatHost = (host) => {
57
+ const ipv6Pattern = /^[a-fA-F0-9:]+$/; // Simple regex to match raw IPv6 addresses (without brackets)
58
+ const hasBrackets = /^\[.*\]$/; // Regex to check if the address already has brackets
59
+ // If it's an IPv6 address without brackets, add them
60
+ if (ipv6Pattern.test(host) && !hasBrackets.test(host)) {
61
+ return `[${host}]`;
62
+ }
63
+ return host; // Return the host as is (IPv4, hostname, or already bracketed IPv6)
64
+ };
65
+ exports.formatHost = formatHost;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Processes items in sequential batches with a concurrency limit.
3
+ * Adds a cooldown between batches.
4
+ * @param {number} limit - The maximum number of concurrent executions per batch.
5
+ * @param {Array<T>} items - The array of items to process.
6
+ * @param {(item: T) => Promise<R>} iteratorFn - The async function to apply to each item.
7
+ * @param {number} cooldownMs - The cooldown duration between batches in milliseconds.
8
+ * @returns {Promise<Array<R>>} - A promise that resolves when all items have been processed.
9
+ */
10
+ export declare function asyncPool<T, R>(limit: number, items: T[], iteratorFn: (item: T) => Promise<R>, cooldownMs?: number): Promise<R[]>;
11
+ /**
12
+ * Helper function to add a timeout to a promise.
13
+ * @param promise The original promise.
14
+ * @param ms Timeout in milliseconds.
15
+ * @param timeoutMessage The error message when the timeout is reached.
16
+ * @returns Promise that resolves before the timeout or rejects with an error.
17
+ */
18
+ export declare const withTimeout: <T>(promise: Promise<T>, ms: number, timeoutMessage: string) => Promise<T>;
19
+ //# sourceMappingURL=promiseUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promiseUtils.d.ts","sourceRoot":"","sources":["../../src/utils/promiseUtils.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,UAAU,GAAE,MAAY,GACvB,OAAO,CAAC,CAAC,EAAE,CAAC,CAkBd;AACC;;;;;;EAMC;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,WAClB,OAAO,CAAC,CAAC,CAAC,MACf,MAAM,kBACM,MAAM,KACrB,OAAO,CAAC,CAAC,CAOX,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withTimeout = void 0;
4
+ exports.asyncPool = asyncPool;
5
+ /**
6
+ * Processes items in sequential batches with a concurrency limit.
7
+ * Adds a cooldown between batches.
8
+ * @param {number} limit - The maximum number of concurrent executions per batch.
9
+ * @param {Array<T>} items - The array of items to process.
10
+ * @param {(item: T) => Promise<R>} iteratorFn - The async function to apply to each item.
11
+ * @param {number} cooldownMs - The cooldown duration between batches in milliseconds.
12
+ * @returns {Promise<Array<R>>} - A promise that resolves when all items have been processed.
13
+ */
14
+ async function asyncPool(limit, items, iteratorFn, cooldownMs = 500 // Default cooldown of 500ms
15
+ ) {
16
+ const ret = [];
17
+ for (let i = 0; i < items.length; i += limit) {
18
+ const batchItems = items.slice(i, i + limit);
19
+ const batchPromises = batchItems.map((item) => iteratorFn(item));
20
+ // Wait for the current batch to complete before starting the next one
21
+ const batchResults = await Promise.all(batchPromises);
22
+ ret.push(...batchResults);
23
+ // Add a cooldown between batches, except after the last batch
24
+ if (i + limit < items.length) {
25
+ await new Promise((resolve) => setTimeout(resolve, cooldownMs));
26
+ }
27
+ }
28
+ return ret;
29
+ }
30
+ /**
31
+ * Helper function to add a timeout to a promise.
32
+ * @param promise The original promise.
33
+ * @param ms Timeout in milliseconds.
34
+ * @param timeoutMessage The error message when the timeout is reached.
35
+ * @returns Promise that resolves before the timeout or rejects with an error.
36
+ */
37
+ const withTimeout = (promise, ms, timeoutMessage) => {
38
+ return Promise.race([
39
+ promise,
40
+ new Promise((_, reject) => setTimeout(() => reject(new Error(timeoutMessage)), ms)),
41
+ ]);
42
+ };
43
+ exports.withTimeout = withTimeout;
package/dist/utils/ssl.js CHANGED
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.getOrCreateSSLCerts = void 0;
27
27
  const fs = __importStar(require("fs"));
28
28
  const path = __importStar(require("path"));
29
- const chia_server_coin_1 = require("chia-server-coin");
29
+ const datalayer_driver_1 = require("@dignetwork/datalayer-driver");
30
30
  const config_1 = require("./config");
31
31
  const getOrCreateSSLCerts = () => {
32
32
  const sslDir = path.join(config_1.USER_DIR_PATH, "ssl");
@@ -38,7 +38,7 @@ const getOrCreateSSLCerts = () => {
38
38
  }
39
39
  // Check if the certificate and key exist, if not, generate them
40
40
  if (!fs.existsSync(certPath) || !fs.existsSync(keyPath)) {
41
- new chia_server_coin_1.Tls(certPath, keyPath);
41
+ new datalayer_driver_1.Tls(certPath, keyPath);
42
42
  console.log("Client certificate and key generated successfully.");
43
43
  }
44
44
  // Return the paths to the cert and key files
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dignetwork/dig-sdk",
3
- "version": "0.0.1-alpha.15",
3
+ "version": "0.0.1-alpha.150",
4
4
  "description": "",
5
5
  "type": "commonjs",
6
6
  "main": "./dist/index.js",
@@ -25,15 +25,20 @@
25
25
  "LICENSE"
26
26
  ],
27
27
  "dependencies": {
28
+ "@dignetwork/datalayer-driver": "^0.1.29",
29
+ "@dignetwork/dig-sdk": "^0.0.1-alpha.124",
30
+ "archiver": "^7.0.1",
31
+ "axios": "^1.7.7",
28
32
  "bip39": "^3.1.0",
33
+ "bottleneck": "^2.19.5",
29
34
  "chia-bls": "^1.0.2",
30
35
  "chia-config-loader": "^1.0.1",
31
36
  "chia-root-resolver": "^1.0.0",
32
- "chia-server-coin": "^0.0.5",
33
37
  "chia-wallet": "^1.0.18",
34
38
  "cli-progress": "^3.12.0",
39
+ "colorette": "^2.0.20",
35
40
  "crypto-js": "^4.2.0",
36
- "datalayer-driver": "^0.1.21",
41
+ "figures": "^6.1.0",
37
42
  "fs-extra": "^11.2.0",
38
43
  "ignore": "^5.3.2",
39
44
  "inquirer": "^10.1.8",
@@ -41,10 +46,14 @@
41
46
  "merkletreejs": "^0.4.0",
42
47
  "nanospinner": "^1.1.0",
43
48
  "nconf": "^0.12.1",
44
- "p-limit": "^6.1.0",
45
- "superagent": "^10.0.0"
49
+ "node-cache": "^5.1.2",
50
+ "progress-stream": "^2.0.0",
51
+ "proper-lockfile": "^4.1.2",
52
+ "superagent": "^10.0.0",
53
+ "unzipper": "^0.12.3"
46
54
  },
47
55
  "devDependencies": {
56
+ "@types/archiver": "^6.0.2",
48
57
  "@types/chai": "^4.3.17",
49
58
  "@types/cli-progress": "^3.11.6",
50
59
  "@types/crypto-js": "^4.2.2",
@@ -54,7 +63,10 @@
54
63
  "@types/mocha": "^10.0.7",
55
64
  "@types/nconf": "^0.10.7",
56
65
  "@types/node": "^22.1.0",
66
+ "@types/progress-stream": "^2.0.5",
67
+ "@types/proper-lockfile": "^4.1.4",
57
68
  "@types/superagent": "^8.1.8",
69
+ "@types/unzipper": "^0.10.10",
58
70
  "chai": "^5.1.1",
59
71
  "copyfiles": "^2.4.1",
60
72
  "mocha": "^10.7.0",
@@ -1,2 +0,0 @@
1
- export declare const getDeltaFiles: (storeId: string, generationIndex: number | undefined, directoryPath: string) => Promise<string[]>;
2
- //# sourceMappingURL=deltaUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deltaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/deltaUtils.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,YACf,MAAM,mBACE,MAAM,6BACR,MAAM,KACpB,OAAO,CAAC,MAAM,EAAE,CAwElB,CAAC"}