Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/v0.0.1 alpha.18 #18

Merged
merged 2 commits into from
Sep 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

### [0.0.1-alpha.18](https://github.com/DIG-Network/dig-chia-sdk/compare/v0.0.1-alpha.17...v0.0.1-alpha.18) (2024-09-16)


### Features

* add ssl to content server adapter ([6d45228](https://github.com/DIG-Network/dig-chia-sdk/commit/6d4522880b7d8e3ab1bf3c86f93d54007e5da220))

### [0.0.1-alpha.17](https://github.com/DIG-Network/dig-chia-sdk/compare/v0.0.1-alpha.16...v0.0.1-alpha.17) (2024-09-16)


Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dignetwork/dig-sdk",
"version": "0.0.1-alpha.17",
"version": "0.0.1-alpha.18",
"description": "",
"type": "commonjs",
"main": "./dist/index.js",
Expand Down
35 changes: 25 additions & 10 deletions src/DigNetwork/ContentServer.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
import fs from "fs";
import http from "http";
import { URL } from "url";
import { Readable } from "stream";
import { DataStore } from "../blockchain";
import { getOrCreateSSLCerts } from "../utils/ssl";

export class ContentServer {
private ipAddress: string;
private storeId: string;
private static readonly port = 80;
private static certPath: string;
private static keyPath: string;
private static readonly port = 4161;

constructor(ipAddress: string, storeId: string) {
this.ipAddress = ipAddress;
this.storeId = storeId;

if (!ContentServer.certPath || !ContentServer.keyPath) {
const { certPath, keyPath } = getOrCreateSSLCerts();
ContentServer.certPath = certPath;
ContentServer.keyPath = keyPath;
}
}

// Method to get the content of a specified key from the peer, with optional challenge query
public async getKey(key: string, rootHash: string, challengeHex?: string): Promise<string> {
// Construct the base URL
let url = `http://${this.ipAddress}/chia.${this.storeId}.${rootHash}/${key}`;
let url = `https://${this.ipAddress}/chia.${this.storeId}.${rootHash}/${key}`;

// If a challenge is provided, append it as a query parameter
if (challengeHex) {
Expand All @@ -43,33 +52,33 @@ export class ContentServer {

// Method to get the .well-known information
public async getWellKnown(): Promise<any> {
const url = `http://${this.ipAddress}/.well-known`;
const url = `https://${this.ipAddress}/.well-known`;
return this.fetchJson(url);
}

// Method to get the list of known stores
public async getKnownStores(): Promise<any> {
const url = `http://${this.ipAddress}/.well-known/stores`;
const url = `https://${this.ipAddress}/.well-known/stores`;
return this.fetchJson(url);
}

// Method to get the index of all stores
public async getStoresIndex(): Promise<any> {
const url = `http://${this.ipAddress}/`;
const url = `https://${this.ipAddress}/`;
return this.fetchJson(url);
}

// Method to get the index of keys in a store
public async getKeysIndex(): Promise<any> {
const url = `http://${this.ipAddress}/${this.storeId}`;
const url = `https://${this.ipAddress}/${this.storeId}`;
return this.fetchJson(url);
}

// Method to check if a specific key exists (HEAD request)
public async headKey(
key: string
): Promise<{ success: boolean; headers?: http.IncomingHttpHeaders }> {
const url = `http://${this.ipAddress}/${this.storeId}/${key}`;
const url = `https://${this.ipAddress}/${this.storeId}/${key}`;
return this.head(url); // Return the object from head method
}

Expand All @@ -78,14 +87,14 @@ export class ContentServer {
success: boolean;
headers?: http.IncomingHttpHeaders;
}> {
const url = `http://${this.ipAddress}/${this.storeId}`;
const url = `https://${this.ipAddress}/${this.storeId}`;
console.log({ url });
return this.head(url); // Return the object from head method
}

public streamKey(key: string): Promise<Readable> {
return new Promise((resolve, reject) => {
const url = `http://${this.ipAddress}/${this.storeId}/${key}`;
const url = `https://${this.ipAddress}/${this.storeId}/${key}`;
const urlObj = new URL(url);

const requestOptions = {
Expand Down Expand Up @@ -141,6 +150,9 @@ export class ContentServer {
(urlObj.protocol === "http:" ? 80 : ContentServer.port),
path: urlObj.pathname + urlObj.search,
method: "HEAD",
key: fs.readFileSync(ContentServer.keyPath),
cert: fs.readFileSync(ContentServer.certPath),
rejectUnauthorized: false,
};

const request = http.request(requestOptions, (response) => {
Expand Down Expand Up @@ -244,6 +256,9 @@ export class ContentServer {
port: urlObj.port || ContentServer.port,
path: urlObj.pathname + urlObj.search, // Include query params
method: "GET",
key: fs.readFileSync(ContentServer.keyPath),
cert: fs.readFileSync(ContentServer.certPath),
rejectUnauthorized: false,
};

const request = http.request(requestOptions, (response) => {
Expand Down
Loading