*Initial version
This commit is contained in:
parent
758b4b1be0
commit
0ecd526fa0
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2022 Derrick Hammer
|
||||
Copyright (c) 2022 Hammer Technologies LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
# kernel-ipfs-http-client
|
||||
IPFS client interface to @lumeweb/kernel-ipfs-http module
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"name": "@lumeweb/kernel-ipfs-client",
|
||||
"version": "0.1.0",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"dependencies": {
|
||||
"is-ipfs": "^6.0.2",
|
||||
"libkernel": "^0.1.43",
|
||||
"libkmodule": "^0.2.44"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.0.6",
|
||||
"libskynet": "^0.0.62",
|
||||
"prettier": "^2.7.1"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
import type { DataFn } from "libskynet";
|
||||
import { ipnsPath, ipfsPath } from "is-ipfs";
|
||||
|
||||
const IPFS_MODULE = "AQDr2iGYEiMKIdb14w7dxwxFYBo3LaYc0mAuRKXsF2w9OQ";
|
||||
|
||||
let callModule: any, connectModule: any;
|
||||
|
||||
async function loadLibs() {
|
||||
if (callModule && connectModule) {
|
||||
return;
|
||||
}
|
||||
if (typeof window !== "undefined" && window?.document) {
|
||||
const pkg = await import("libkernel");
|
||||
callModule = pkg.callModule;
|
||||
connectModule = pkg.connectModule;
|
||||
} else {
|
||||
const pkg = await import("libkmodule");
|
||||
callModule = pkg.callModule;
|
||||
connectModule = pkg.connectModule;
|
||||
}
|
||||
}
|
||||
|
||||
export async function refreshGatewayList() {
|
||||
const [resp, err] = await doCall("refreshGatewayList");
|
||||
|
||||
if (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
export async function fetchIpfs(
|
||||
hash: string,
|
||||
path = "",
|
||||
headers = {},
|
||||
receiveUpdate: DataFn
|
||||
) {
|
||||
if (!ipfsPath(`/ipfs/{${hash}`)) {
|
||||
throw new Error("Invalid hash");
|
||||
}
|
||||
return doFetch("fetchIpfs", { hash, path, headers }, receiveUpdate);
|
||||
}
|
||||
|
||||
export async function statIpfs(hash: string, path = "", headers = {}) {
|
||||
if (!ipfsPath(`/ipfs/{${hash}`)) {
|
||||
throw new Error("Invalid hash");
|
||||
}
|
||||
return doFetch("statIpfs", { hash, path, headers });
|
||||
}
|
||||
|
||||
export async function fetchIpns(
|
||||
hash: string,
|
||||
path = "",
|
||||
headers = {},
|
||||
receiveUpdate: DataFn
|
||||
) {
|
||||
if (!ipnsPath(`/ipns/{${hash}`)) {
|
||||
throw new Error("Invalid hash");
|
||||
}
|
||||
return doFetch("fetchIpns", { hash, path, headers }, receiveUpdate);
|
||||
}
|
||||
|
||||
export async function statIpns(hash: string, path = "", headers = {}) {
|
||||
if (!ipnsPath(`/ipns/{${hash}`)) {
|
||||
throw new Error("Invalid hash");
|
||||
}
|
||||
return doFetch("statIpns", { hash, path, headers });
|
||||
}
|
||||
|
||||
async function doFetch(method: string, data: any, receiveUpdate?: DataFn) {
|
||||
let [resp, err] = await doCall(method, data, receiveUpdate);
|
||||
|
||||
if (typeof err?.then === "function") {
|
||||
[resp, err] = await err;
|
||||
}
|
||||
|
||||
if (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
async function doCall(method: string, data?: any, receiveUpdate?: DataFn) {
|
||||
await loadLibs();
|
||||
if (receiveUpdate) {
|
||||
return connectModule(IPFS_MODULE, method, data, receiveUpdate);
|
||||
}
|
||||
|
||||
return callModule(IPFS_MODULE, method, data);
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"declaration": true,
|
||||
"strict": true,
|
||||
"module": "esnext",
|
||||
"target": "esnext",
|
||||
"esModuleInterop": true,
|
||||
"sourceMap": false,
|
||||
"rootDir": "src",
|
||||
"outDir": "dist",
|
||||
"typeRoots": [
|
||||
"node_modules/@types",
|
||||
],
|
||||
"moduleResolution": "node",
|
||||
"declarationMap": true,
|
||||
"declarationDir": "dist",
|
||||
"emitDeclarationOnly": false,
|
||||
"allowJs": true
|
||||
},
|
||||
"include": [
|
||||
"src"
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue