@dignetwork/dig-sdk 0.0.1-alpha.99 → 0.2.0
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/LICENSE +21 -7
- package/README.md +412 -0
- package/dist/adapters.cjs +356 -0
- package/dist/adapters.cjs.map +1 -0
- package/dist/adapters.d.cts +20 -0
- package/dist/adapters.d.ts +20 -0
- package/dist/adapters.js +347 -0
- package/dist/adapters.js.map +1 -0
- package/dist/dev-shim-DfKRA1ok.d.cts +128 -0
- package/dist/dev-shim-DfKRA1ok.d.ts +128 -0
- package/dist/dig-client-entry-ChYxUvBn.d.cts +372 -0
- package/dist/dig-client-entry-ChYxUvBn.d.ts +372 -0
- package/dist/dig-client.cjs +443 -0
- package/dist/dig-client.cjs.map +1 -0
- package/dist/dig-client.d.cts +1 -0
- package/dist/dig-client.d.ts +1 -0
- package/dist/dig-client.js +432 -0
- package/dist/dig-client.js.map +1 -0
- package/dist/index.cjs +1186 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +502 -0
- package/dist/index.d.ts +502 -5
- package/dist/index.js +1156 -19
- package/dist/index.js.map +1 -0
- package/dist/next.cjs +369 -0
- package/dist/next.cjs.map +1 -0
- package/dist/next.d.cts +23 -0
- package/dist/next.d.ts +23 -0
- package/dist/next.js +362 -0
- package/dist/next.js.map +1 -0
- package/dist/spend.cjs +14 -0
- package/dist/spend.cjs.map +1 -0
- package/dist/spend.d.cts +1 -0
- package/dist/spend.d.ts +1 -0
- package/dist/spend.js +3 -0
- package/dist/spend.js.map +1 -0
- package/dist/vite.cjs +381 -0
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.d.cts +35 -0
- package/dist/vite.d.ts +35 -0
- package/dist/vite.js +375 -0
- package/dist/vite.js.map +1 -0
- package/package.json +87 -59
- package/vendor/PROVENANCE.md +102 -0
- package/vendor/dig_client.d.ts +150 -0
- package/vendor/dig_client.mjs +805 -0
- package/vendor/dig_client_bg.wasm +0 -0
- package/dist/DataIntegrityTree/DataIntegrityTree.d.ts +0 -163
- package/dist/DataIntegrityTree/DataIntegrityTree.d.ts.map +0 -1
- package/dist/DataIntegrityTree/DataIntegrityTree.js +0 -707
- package/dist/DataIntegrityTree/DataLayerError.d.ts +0 -6
- package/dist/DataIntegrityTree/DataLayerError.d.ts.map +0 -1
- package/dist/DataIntegrityTree/DataLayerError.js +0 -17
- package/dist/DataIntegrityTree/index.d.ts +0 -2
- package/dist/DataIntegrityTree/index.d.ts.map +0 -1
- package/dist/DataIntegrityTree/index.js +0 -17
- package/dist/DigNetwork/ContentServer.d.ts +0 -31
- package/dist/DigNetwork/ContentServer.d.ts.map +0 -1
- package/dist/DigNetwork/ContentServer.js +0 -176
- package/dist/DigNetwork/DigChallenge.d.ts +0 -82
- package/dist/DigNetwork/DigChallenge.d.ts.map +0 -1
- package/dist/DigNetwork/DigChallenge.js +0 -144
- package/dist/DigNetwork/DigNetwork.d.ts +0 -14
- package/dist/DigNetwork/DigNetwork.d.ts.map +0 -1
- package/dist/DigNetwork/DigNetwork.js +0 -169
- package/dist/DigNetwork/DigPeer.d.ts +0 -24
- package/dist/DigNetwork/DigPeer.d.ts.map +0 -1
- package/dist/DigNetwork/DigPeer.js +0 -118
- package/dist/DigNetwork/IncentiveServer.d.ts +0 -13
- package/dist/DigNetwork/IncentiveServer.d.ts.map +0 -1
- package/dist/DigNetwork/IncentiveServer.js +0 -76
- package/dist/DigNetwork/PropagationServer.d.ts +0 -81
- package/dist/DigNetwork/PropagationServer.d.ts.map +0 -1
- package/dist/DigNetwork/PropagationServer.js +0 -563
- package/dist/DigNetwork/index.d.ts +0 -4
- package/dist/DigNetwork/index.d.ts.map +0 -1
- package/dist/DigNetwork/index.js +0 -19
- package/dist/blockchain/DataStore.d.ts +0 -67
- package/dist/blockchain/DataStore.d.ts.map +0 -1
- package/dist/blockchain/DataStore.js +0 -413
- package/dist/blockchain/DataStoreSerializer.d.ts +0 -52
- package/dist/blockchain/DataStoreSerializer.d.ts.map +0 -1
- package/dist/blockchain/DataStoreSerializer.js +0 -109
- package/dist/blockchain/FullNodePeer.d.ts +0 -31
- package/dist/blockchain/FullNodePeer.d.ts.map +0 -1
- package/dist/blockchain/FullNodePeer.js +0 -295
- package/dist/blockchain/ServerCoin.d.ts +0 -29
- package/dist/blockchain/ServerCoin.d.ts.map +0 -1
- package/dist/blockchain/ServerCoin.js +0 -324
- package/dist/blockchain/Wallet.d.ts +0 -28
- package/dist/blockchain/Wallet.d.ts.map +0 -1
- package/dist/blockchain/Wallet.js +0 -253
- package/dist/blockchain/coins.d.ts +0 -6
- package/dist/blockchain/coins.d.ts.map +0 -1
- package/dist/blockchain/coins.js +0 -102
- package/dist/blockchain/index.d.ts +0 -8
- package/dist/blockchain/index.d.ts.map +0 -1
- package/dist/blockchain/index.js +0 -36
- package/dist/index.d.ts.map +0 -1
- package/dist/prompts.d.ts +0 -21
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js +0 -149
- package/dist/types.d.ts +0 -64
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/utils/ContentScanner.d.ts +0 -63
- package/dist/utils/ContentScanner.d.ts.map +0 -1
- package/dist/utils/ContentScanner.js +0 -175
- package/dist/utils/Environment.d.ts +0 -18
- package/dist/utils/Environment.d.ts.map +0 -1
- package/dist/utils/Environment.js +0 -85
- package/dist/utils/FileCache.d.ts +0 -11
- package/dist/utils/FileCache.d.ts.map +0 -1
- package/dist/utils/FileCache.js +0 -58
- package/dist/utils/FileTransfer.d.ts +0 -47
- package/dist/utils/FileTransfer.d.ts.map +0 -1
- package/dist/utils/FileTransfer.js +0 -209
- package/dist/utils/NconfManager.d.ts +0 -11
- package/dist/utils/NconfManager.d.ts.map +0 -1
- package/dist/utils/NconfManager.js +0 -56
- package/dist/utils/StoreArchiveManager.d.ts +0 -45
- package/dist/utils/StoreArchiveManager.d.ts.map +0 -1
- package/dist/utils/StoreArchiveManager.js +0 -153
- package/dist/utils/asyncPool.d.ts +0 -9
- package/dist/utils/asyncPool.d.ts.map +0 -1
- package/dist/utils/asyncPool.js +0 -23
- package/dist/utils/config.d.ts +0 -68
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -223
- package/dist/utils/connectionUtils.d.ts +0 -10
- package/dist/utils/connectionUtils.d.ts.map +0 -1
- package/dist/utils/connectionUtils.js +0 -18
- package/dist/utils/credentialsUtils.d.ts +0 -8
- package/dist/utils/credentialsUtils.d.ts.map +0 -1
- package/dist/utils/credentialsUtils.js +0 -122
- package/dist/utils/directoryUtils.d.ts +0 -9
- package/dist/utils/directoryUtils.d.ts.map +0 -1
- package/dist/utils/directoryUtils.js +0 -110
- package/dist/utils/encryption.d.ts +0 -8
- package/dist/utils/encryption.d.ts.map +0 -1
- package/dist/utils/encryption.js +0 -55
- package/dist/utils/hashUtils.d.ts +0 -8
- package/dist/utils/hashUtils.d.ts.map +0 -1
- package/dist/utils/hashUtils.js +0 -44
- package/dist/utils/index.d.ts +0 -14
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -29
- package/dist/utils/merkle.d.ts +0 -2
- package/dist/utils/merkle.d.ts.map +0 -1
- package/dist/utils/merkle.js +0 -28
- package/dist/utils/network.d.ts +0 -2
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js +0 -54
- package/dist/utils/spinnerUtils.d.ts +0 -2
- package/dist/utils/spinnerUtils.d.ts.map +0 -1
- package/dist/utils/spinnerUtils.js +0 -47
- package/dist/utils/ssl.d.ts +0 -5
- package/dist/utils/ssl.d.ts.map +0 -1
- package/dist/utils/ssl.js +0 -50
- package/dist/utils/validationUtils.d.ts +0 -9
- package/dist/utils/validationUtils.d.ts.map +0 -1
- package/dist/utils/validationUtils.js +0 -55
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DataLayerError.d.ts","sourceRoot":"","sources":["../../src/DataIntegrityTree/DataLayerError.ts"],"names":[],"mappings":"AAAA,cAAM,cAAe,SAAQ,KAAK;IAC9B,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAe1C;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class DataLayerError extends Error {
|
|
4
|
-
constructor(code, message) {
|
|
5
|
-
// Call the parent constructor with the message
|
|
6
|
-
super(message);
|
|
7
|
-
// Set the name of the error to the class name
|
|
8
|
-
this.name = this.constructor.name;
|
|
9
|
-
// Assign the custom code
|
|
10
|
-
this.code = code;
|
|
11
|
-
// Capture the stack trace (if available in the environment)
|
|
12
|
-
if (Error.captureStackTrace) {
|
|
13
|
-
Error.captureStackTrace(this, this.constructor);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
exports.default = DataLayerError;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/DataIntegrityTree/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./DataIntegrityTree"), exports);
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export declare class ContentServer {
|
|
2
|
-
private ipAddress;
|
|
3
|
-
private storeId;
|
|
4
|
-
private static certPath;
|
|
5
|
-
private static keyPath;
|
|
6
|
-
private static readonly port;
|
|
7
|
-
private static readonly inactivityTimeout;
|
|
8
|
-
constructor(ipAddress: string, storeId: string);
|
|
9
|
-
getKey(key: string, rootHash: string, challengeHex?: string): Promise<string>;
|
|
10
|
-
getPaymentAddress(): Promise<string | null>;
|
|
11
|
-
getWellKnown(): Promise<any>;
|
|
12
|
-
getKnownStores(): Promise<any>;
|
|
13
|
-
getStoresIndex(): Promise<any>;
|
|
14
|
-
getKeysIndex(rootHash?: string): Promise<any>;
|
|
15
|
-
headKey(key: string, rootHash?: string): Promise<{
|
|
16
|
-
success: boolean;
|
|
17
|
-
headers?: any;
|
|
18
|
-
}>;
|
|
19
|
-
headStore(options?: {
|
|
20
|
-
hasRootHash: string;
|
|
21
|
-
}): Promise<{
|
|
22
|
-
success: boolean;
|
|
23
|
-
headers?: any;
|
|
24
|
-
}>;
|
|
25
|
-
hasRootHash(rootHash: string): Promise<boolean>;
|
|
26
|
-
private head;
|
|
27
|
-
private fetchJson;
|
|
28
|
-
private fetch;
|
|
29
|
-
private getAxiosConfig;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=ContentServer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentServer.d.ts","sourceRoot":"","sources":["../../src/DigNetwork/ContentServer.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAQ;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;gBAErC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAYjC,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC;IAWL,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAc3C,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IAM5B,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAM9B,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAM9B,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAU7C,OAAO,CAClB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAUlC,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACjE,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IAQW,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAW9C,IAAI;YAcJ,SAAS;YAMT,KAAK;IA+DnB,OAAO,CAAC,cAAc;CAUvB"}
|
|
@@ -1,176 +0,0 @@
|
|
|
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.ContentServer = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const https_1 = __importDefault(require("https"));
|
|
10
|
-
const ssl_1 = require("../utils/ssl");
|
|
11
|
-
class ContentServer {
|
|
12
|
-
constructor(ipAddress, storeId) {
|
|
13
|
-
this.ipAddress = ipAddress;
|
|
14
|
-
this.storeId = storeId;
|
|
15
|
-
if (!ContentServer.certPath || !ContentServer.keyPath) {
|
|
16
|
-
const { certPath, keyPath } = (0, ssl_1.getOrCreateSSLCerts)();
|
|
17
|
-
ContentServer.certPath = certPath;
|
|
18
|
-
ContentServer.keyPath = keyPath;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// Method to get the content of a specified key from the peer, with optional challenge query
|
|
22
|
-
async getKey(key, rootHash, challengeHex) {
|
|
23
|
-
let url = `https://${this.ipAddress}:${ContentServer.port}/chia.${this.storeId}.${rootHash}/${key}`;
|
|
24
|
-
if (challengeHex) {
|
|
25
|
-
url += `?challenge=${challengeHex}`;
|
|
26
|
-
}
|
|
27
|
-
return this.fetch(url);
|
|
28
|
-
}
|
|
29
|
-
// Method to get the payment address from the peer
|
|
30
|
-
async getPaymentAddress() {
|
|
31
|
-
console.log(`Fetching payment address from peer ${this.ipAddress}...`);
|
|
32
|
-
try {
|
|
33
|
-
const wellKnown = await this.getWellKnown();
|
|
34
|
-
return wellKnown.xch_address;
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
console.error(`Failed to fetch payment address from ${this.ipAddress}: ${error.message}`);
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Method to get the .well-known information
|
|
42
|
-
async getWellKnown() {
|
|
43
|
-
const url = `https://${this.ipAddress}:${ContentServer.port}/.well-known`;
|
|
44
|
-
return this.fetchJson(url);
|
|
45
|
-
}
|
|
46
|
-
// Method to get the list of known stores
|
|
47
|
-
async getKnownStores() {
|
|
48
|
-
const url = `https://${this.ipAddress}:${ContentServer.port}/.well-known/stores`;
|
|
49
|
-
return this.fetchJson(url);
|
|
50
|
-
}
|
|
51
|
-
// Method to get the index of all stores
|
|
52
|
-
async getStoresIndex() {
|
|
53
|
-
const url = `https://${this.ipAddress}:${ContentServer.port}/`;
|
|
54
|
-
return this.fetchJson(url);
|
|
55
|
-
}
|
|
56
|
-
// Method to get the index of keys in a store
|
|
57
|
-
async getKeysIndex(rootHash) {
|
|
58
|
-
let udi = `chia.${this.storeId}`;
|
|
59
|
-
if (rootHash) {
|
|
60
|
-
udi += `.${rootHash}`;
|
|
61
|
-
}
|
|
62
|
-
const url = `https://${this.ipAddress}:${ContentServer.port}/${udi}`;
|
|
63
|
-
return this.fetchJson(url);
|
|
64
|
-
}
|
|
65
|
-
// Method to check if a specific key exists (HEAD request)
|
|
66
|
-
async headKey(key, rootHash) {
|
|
67
|
-
let udi = `chia.${this.storeId}`;
|
|
68
|
-
if (rootHash) {
|
|
69
|
-
udi += `.${rootHash}`;
|
|
70
|
-
}
|
|
71
|
-
const url = `https://${this.ipAddress}:${ContentServer.port}/${udi}/${key}`;
|
|
72
|
-
return this.head(url);
|
|
73
|
-
}
|
|
74
|
-
// Method to check if a specific store exists (HEAD request)
|
|
75
|
-
async headStore(options) {
|
|
76
|
-
let url = `https://${this.ipAddress}:${ContentServer.port}/chia.${this.storeId}`;
|
|
77
|
-
if (options?.hasRootHash) {
|
|
78
|
-
url += `?hasRootHash=${options.hasRootHash}`;
|
|
79
|
-
}
|
|
80
|
-
return this.head(url);
|
|
81
|
-
}
|
|
82
|
-
async hasRootHash(rootHash) {
|
|
83
|
-
const { success, headers } = await this.headStore({
|
|
84
|
-
hasRootHash: rootHash,
|
|
85
|
-
});
|
|
86
|
-
if (success) {
|
|
87
|
-
return headers?.["x-has-root-hash"] === "true";
|
|
88
|
-
}
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
// Helper method to perform HEAD requests using axios
|
|
92
|
-
async head(url) {
|
|
93
|
-
try {
|
|
94
|
-
const config = this.getAxiosConfig();
|
|
95
|
-
const response = await axios_1.default.head(url, config);
|
|
96
|
-
return {
|
|
97
|
-
success: response.status >= 200 && response.status < 300,
|
|
98
|
-
headers: response.headers,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
return { success: false };
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// Helper method to fetch JSON data from a URL
|
|
106
|
-
async fetchJson(url) {
|
|
107
|
-
const response = await this.fetch(url);
|
|
108
|
-
return JSON.parse(response);
|
|
109
|
-
}
|
|
110
|
-
// Core method to fetch content from a URL with a 5-second inactivity timeout, handling redirects
|
|
111
|
-
async fetch(url) {
|
|
112
|
-
const config = this.getAxiosConfig();
|
|
113
|
-
// Create a cancel token for the inactivity timeout
|
|
114
|
-
const source = axios_1.default.CancelToken.source();
|
|
115
|
-
return new Promise((resolve, reject) => {
|
|
116
|
-
let timeout = null;
|
|
117
|
-
const resetTimeout = () => {
|
|
118
|
-
if (timeout) {
|
|
119
|
-
clearTimeout(timeout);
|
|
120
|
-
}
|
|
121
|
-
timeout = setTimeout(() => {
|
|
122
|
-
source.cancel(`Request timed out after ${ContentServer.inactivityTimeout / 1000} seconds of inactivity`);
|
|
123
|
-
}, ContentServer.inactivityTimeout);
|
|
124
|
-
};
|
|
125
|
-
axios_1.default
|
|
126
|
-
.get(url, {
|
|
127
|
-
...config,
|
|
128
|
-
cancelToken: source.token,
|
|
129
|
-
responseType: "stream", // Use stream to track data transfer
|
|
130
|
-
maxRedirects: 5, // Axios follows up to 5 redirects by default
|
|
131
|
-
})
|
|
132
|
-
.then((response) => {
|
|
133
|
-
let data = "";
|
|
134
|
-
response.data.on("data", (chunk) => {
|
|
135
|
-
data += chunk;
|
|
136
|
-
resetTimeout(); // Reset the timeout when data is received
|
|
137
|
-
});
|
|
138
|
-
response.data.on("end", () => {
|
|
139
|
-
if (timeout) {
|
|
140
|
-
clearTimeout(timeout); // Clear timeout on stream end
|
|
141
|
-
}
|
|
142
|
-
resolve(data);
|
|
143
|
-
});
|
|
144
|
-
response.data.on("error", (error) => {
|
|
145
|
-
if (timeout) {
|
|
146
|
-
clearTimeout(timeout);
|
|
147
|
-
}
|
|
148
|
-
reject(error);
|
|
149
|
-
});
|
|
150
|
-
})
|
|
151
|
-
.catch((error) => {
|
|
152
|
-
if (axios_1.default.isCancel(error)) {
|
|
153
|
-
console.error("Request canceled:", error.message);
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
console.error(`Failed to retrieve data from ${url}:`, error.message);
|
|
157
|
-
}
|
|
158
|
-
reject(error);
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
// Helper method to configure axios with HTTPS settings
|
|
163
|
-
getAxiosConfig() {
|
|
164
|
-
return {
|
|
165
|
-
httpsAgent: new https_1.default.Agent({
|
|
166
|
-
cert: fs_1.default.readFileSync(ContentServer.certPath),
|
|
167
|
-
key: fs_1.default.readFileSync(ContentServer.keyPath),
|
|
168
|
-
rejectUnauthorized: false,
|
|
169
|
-
}),
|
|
170
|
-
timeout: 0, // Disable axios timeout (we're using inactivity timeout)
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
exports.ContentServer = ContentServer;
|
|
175
|
-
ContentServer.port = 4161;
|
|
176
|
-
ContentServer.inactivityTimeout = 5000; // Inactivity timeout in milliseconds (5 seconds)
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
export declare class DigChallenge {
|
|
2
|
-
private readonly SEGMENT_SIZE;
|
|
3
|
-
private readonly NUMBER_OF_SEGMENTS;
|
|
4
|
-
private readonly HASH_ALGORITHM;
|
|
5
|
-
private readonly fileHash;
|
|
6
|
-
private readonly storeId;
|
|
7
|
-
private readonly hexKey;
|
|
8
|
-
private readonly rootHash;
|
|
9
|
-
private filePath;
|
|
10
|
-
private fileSize;
|
|
11
|
-
constructor(storeId: string, hexKey: string, rootHash: string, segmentSize?: number, numberOfSegments?: number, hashAlgorithm?: string);
|
|
12
|
-
/**
|
|
13
|
-
* Initializes file info like file size, based on the resolved filePath.
|
|
14
|
-
*/
|
|
15
|
-
private initFileInfo;
|
|
16
|
-
/**
|
|
17
|
-
* Generates a challenge by selecting random segments from the file using the instance's seed.
|
|
18
|
-
* The response includes the seed, selected segments, key (SHA-256), storeId, and rootHash.
|
|
19
|
-
*
|
|
20
|
-
* @param seed A random seed for generating the challenge.
|
|
21
|
-
* @returns An object containing the seed, segments, storeId, key (SHA-256), and rootHash.
|
|
22
|
-
*/
|
|
23
|
-
generateChallenge(seed: string): Promise<{
|
|
24
|
-
seed: string;
|
|
25
|
-
segments: number[];
|
|
26
|
-
key: string;
|
|
27
|
-
storeId: string;
|
|
28
|
-
rootHash: string;
|
|
29
|
-
}>;
|
|
30
|
-
/**
|
|
31
|
-
* Creates a challenge response by reading the file and hashing the selected segments.
|
|
32
|
-
*
|
|
33
|
-
* @param challenge The challenge object containing the seed, segments, storeId, and key (SHA-256).
|
|
34
|
-
* @returns A promise that resolves to the challenge response hash.
|
|
35
|
-
*/
|
|
36
|
-
createChallengeResponse(challenge: {
|
|
37
|
-
seed: string;
|
|
38
|
-
segments: number[];
|
|
39
|
-
}): Promise<string>;
|
|
40
|
-
/**
|
|
41
|
-
* Verifies that the server's response matches the client's calculated response.
|
|
42
|
-
*
|
|
43
|
-
* @param clientResponse The client's calculated challenge response.
|
|
44
|
-
* @param serverResponse The server's challenge response.
|
|
45
|
-
* @returns True if the responses match, false otherwise.
|
|
46
|
-
*/
|
|
47
|
-
verifyChallengeResponse(clientResponse: string, serverResponse: string): boolean;
|
|
48
|
-
/**
|
|
49
|
-
* Serializes a challenge object into a hex string.
|
|
50
|
-
* This converts the challenge into a format suitable for transport or storage.
|
|
51
|
-
*
|
|
52
|
-
* @param challenge The challenge object to serialize.
|
|
53
|
-
* @returns A hex string representing the serialized challenge.
|
|
54
|
-
*/
|
|
55
|
-
static serializeChallenge(challenge: {
|
|
56
|
-
seed: string;
|
|
57
|
-
segments: number[];
|
|
58
|
-
key: string;
|
|
59
|
-
storeId: string;
|
|
60
|
-
rootHash: string;
|
|
61
|
-
}): string;
|
|
62
|
-
/**
|
|
63
|
-
* Deserializes a hex string into a challenge object.
|
|
64
|
-
* This converts the hex-encoded string back into a challenge object.
|
|
65
|
-
*
|
|
66
|
-
* @param hexString The hex string representing the serialized challenge.
|
|
67
|
-
* @returns The deserialized challenge object.
|
|
68
|
-
*/
|
|
69
|
-
static deserializeChallenge(hexString: string): {
|
|
70
|
-
seed: string;
|
|
71
|
-
segments: number[];
|
|
72
|
-
key: string;
|
|
73
|
-
storeId: string;
|
|
74
|
-
rootHash: string;
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* Generates a random seed using a cryptographically secure random number generator.
|
|
78
|
-
* @returns A random seed in hexadecimal format.
|
|
79
|
-
*/
|
|
80
|
-
static generateSeed(): string;
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=DigChallenge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DigChallenge.d.ts","sourceRoot":"","sources":["../../src/DigNetwork/DigChallenge.ts"],"names":[],"mappings":"AAMA,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAa;gBAG3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAO,EAClB,gBAAgB,SAAK,EACrB,aAAa,SAAW;IAwB1B;;OAEG;YACW,YAAY;IAK1B;;;;;;OAMG;IACU,iBAAiB,CAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAyBF;;;;;OAKG;IACU,uBAAuB,CAAC,SAAS,EAAE;QAC9C,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBnB;;;;;;OAMG;IACI,uBAAuB,CAC5B,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACrB,OAAO;IAIV;;;;;;OAMG;WACW,kBAAkB,CAAC,SAAS,EAAE;QAC1C,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,MAAM;IAKV;;;;;;OAMG;WACW,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG;QACrD,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAKD;;;OAGG;WACW,YAAY,IAAI,MAAM;CAGrC"}
|
|
@@ -1,144 +0,0 @@
|
|
|
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
|
-
exports.DigChallenge = void 0;
|
|
27
|
-
const crypto = __importStar(require("crypto"));
|
|
28
|
-
const fs = __importStar(require("fs"));
|
|
29
|
-
const blockchain_1 = require("../blockchain");
|
|
30
|
-
const hashUtils_1 = require("../utils/hashUtils");
|
|
31
|
-
const config_1 = require("../utils/config");
|
|
32
|
-
class DigChallenge {
|
|
33
|
-
constructor(storeId, hexKey, rootHash, segmentSize = 1024, numberOfSegments = 10, hashAlgorithm = "sha256") {
|
|
34
|
-
this.fileSize = 0;
|
|
35
|
-
this.storeId = storeId;
|
|
36
|
-
this.hexKey = hexKey;
|
|
37
|
-
this.rootHash = rootHash;
|
|
38
|
-
this.SEGMENT_SIZE = segmentSize; // Size of each segment to hash (default 1 KB)
|
|
39
|
-
this.NUMBER_OF_SEGMENTS = numberOfSegments; // Number of segments to select for the challenge
|
|
40
|
-
this.HASH_ALGORITHM = hashAlgorithm; // Hash algorithm (default sha256)
|
|
41
|
-
const dataStore = blockchain_1.DataStore.from(storeId);
|
|
42
|
-
const sha256 = dataStore.Tree.getSHA256(hexKey, rootHash);
|
|
43
|
-
if (!sha256) {
|
|
44
|
-
throw new Error("Invalid hexKey or root hash");
|
|
45
|
-
}
|
|
46
|
-
this.fileHash = sha256;
|
|
47
|
-
this.filePath = (0, hashUtils_1.getFilePathFromSha256)(sha256, `${config_1.DIG_FOLDER_PATH}/stores/${storeId}/data`);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Initializes file info like file size, based on the resolved filePath.
|
|
51
|
-
*/
|
|
52
|
-
async initFileInfo() {
|
|
53
|
-
const fileStat = await fs.promises.stat(this.filePath);
|
|
54
|
-
this.fileSize = fileStat.size;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Generates a challenge by selecting random segments from the file using the instance's seed.
|
|
58
|
-
* The response includes the seed, selected segments, key (SHA-256), storeId, and rootHash.
|
|
59
|
-
*
|
|
60
|
-
* @param seed A random seed for generating the challenge.
|
|
61
|
-
* @returns An object containing the seed, segments, storeId, key (SHA-256), and rootHash.
|
|
62
|
-
*/
|
|
63
|
-
async generateChallenge(seed) {
|
|
64
|
-
if (!this.fileSize) {
|
|
65
|
-
await this.initFileInfo(); // Ensure file info is available
|
|
66
|
-
}
|
|
67
|
-
// Use the seed to create a deterministic random value
|
|
68
|
-
const random = crypto.createHash("sha256").update(seed).digest("hex");
|
|
69
|
-
const randomSeed = parseInt(random, 16);
|
|
70
|
-
const segments = [];
|
|
71
|
-
for (let i = 0; i < this.NUMBER_OF_SEGMENTS; i++) {
|
|
72
|
-
const segmentPosition = (randomSeed + i) % (this.fileSize - this.SEGMENT_SIZE); // Ensure valid segment position
|
|
73
|
-
segments.push(segmentPosition);
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
seed,
|
|
77
|
-
segments,
|
|
78
|
-
key: this.hexKey,
|
|
79
|
-
storeId: this.storeId,
|
|
80
|
-
rootHash: this.rootHash,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Creates a challenge response by reading the file and hashing the selected segments.
|
|
85
|
-
*
|
|
86
|
-
* @param challenge The challenge object containing the seed, segments, storeId, and key (SHA-256).
|
|
87
|
-
* @returns A promise that resolves to the challenge response hash.
|
|
88
|
-
*/
|
|
89
|
-
async createChallengeResponse(challenge) {
|
|
90
|
-
const fileHandle = await fs.promises.open(this.filePath, "r");
|
|
91
|
-
const hash = crypto.createHash(this.HASH_ALGORITHM);
|
|
92
|
-
try {
|
|
93
|
-
for (const segmentPosition of challenge.segments) {
|
|
94
|
-
const buffer = Buffer.alloc(this.SEGMENT_SIZE);
|
|
95
|
-
await fileHandle.read(buffer, 0, this.SEGMENT_SIZE, segmentPosition);
|
|
96
|
-
hash.update(buffer);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
await fileHandle.close();
|
|
101
|
-
}
|
|
102
|
-
return hash.digest("hex");
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Verifies that the server's response matches the client's calculated response.
|
|
106
|
-
*
|
|
107
|
-
* @param clientResponse The client's calculated challenge response.
|
|
108
|
-
* @param serverResponse The server's challenge response.
|
|
109
|
-
* @returns True if the responses match, false otherwise.
|
|
110
|
-
*/
|
|
111
|
-
verifyChallengeResponse(clientResponse, serverResponse) {
|
|
112
|
-
return clientResponse === serverResponse;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Serializes a challenge object into a hex string.
|
|
116
|
-
* This converts the challenge into a format suitable for transport or storage.
|
|
117
|
-
*
|
|
118
|
-
* @param challenge The challenge object to serialize.
|
|
119
|
-
* @returns A hex string representing the serialized challenge.
|
|
120
|
-
*/
|
|
121
|
-
static serializeChallenge(challenge) {
|
|
122
|
-
const challengeString = JSON.stringify(challenge);
|
|
123
|
-
return Buffer.from(challengeString).toString("hex");
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Deserializes a hex string into a challenge object.
|
|
127
|
-
* This converts the hex-encoded string back into a challenge object.
|
|
128
|
-
*
|
|
129
|
-
* @param hexString The hex string representing the serialized challenge.
|
|
130
|
-
* @returns The deserialized challenge object.
|
|
131
|
-
*/
|
|
132
|
-
static deserializeChallenge(hexString) {
|
|
133
|
-
const challengeString = Buffer.from(hexString, "hex").toString();
|
|
134
|
-
return JSON.parse(challengeString);
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Generates a random seed using a cryptographically secure random number generator.
|
|
138
|
-
* @returns A random seed in hexadecimal format.
|
|
139
|
-
*/
|
|
140
|
-
static generateSeed() {
|
|
141
|
-
return crypto.randomBytes(32).toString("hex");
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
exports.DigChallenge = DigChallenge;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { DigPeer } from "./DigPeer";
|
|
2
|
-
export declare class DigNetwork {
|
|
3
|
-
private dataStore;
|
|
4
|
-
private serverCoin;
|
|
5
|
-
private storeDir;
|
|
6
|
-
private peerBlacklist;
|
|
7
|
-
constructor(storeId: string);
|
|
8
|
-
static subscribeToStore(storeId: string): Promise<void>;
|
|
9
|
-
static findPeerWithStoreKey(storeId: string, rootHash: string, key?: string, intialBlackList?: string[]): Promise<DigPeer | null>;
|
|
10
|
-
static unsubscribeFromStore(storeId: string): void;
|
|
11
|
-
syncStoreFromPeers(maxRootsToProcess?: number): Promise<void>;
|
|
12
|
-
fetchAvailablePeers(): Promise<DigPeer[]>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=DigNetwork.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DigNetwork.d.ts","sourceRoot":"","sources":["../../src/DigNetwork/DigNetwork.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAA2B;gBAEpC,OAAO,EAAE,MAAM;WAOP,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAQhD,oBAAoB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,EACZ,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;WA2DZ,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO5C,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiG7D,mBAAmB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CAUvD"}
|