*Initial version
This commit is contained in:
parent
758b4b1be0
commit
0ecd526fa0
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
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
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
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