import { InjectionToken } from "@rxdi/core"; import { GapiIpfsNodeInfoService } from './ipfs-node-info'; export type Callback = (error: Error, result?: T) => void; export interface IPFS { constructor(options: Options); types: Types; init(options: InitOptions, callback: Callback): void; init(callback: Callback): void; preStart(callback: Callback): void; start(callback?: Callback): void; stop(callback?: (error?: Error) => void): void; isOnline(): boolean; version(options: any, callback: (error: Error, version: Version) => void): void ; version(options: any): Promise; version(callback: (error: Error, version: Version) => void): void ; version(): Promise; id(options: any, callback: (error: Error, version: Id) => void): void ; id(options: any): Promise; id(callback: (error: Error, version: Id) => void): void ; id(): Promise; repo: RepoAPI; bootstrap: any; config: any; block: any; object: ObjectAPI; dag: DagAPI; libp2p: any; swarm: SwarmAPI; files: FilesAPI; bitswap: any; ping(callback: (error: Error) => void): void; ping(): Promise; pubsub: any; on(event: string, callback: (e) => void): void; } export interface ExperimentalFeatures { pubsub: true } export class Options { init?: boolean; start?: boolean; EXPERIMENTAL?: ExperimentalFeatures; repo?: string; config?: { Addresses?: { API?: string, Announce?: Array, Gateway?: string, NoAnnounce?: Array, Swarm?: Array }, }; } export class InitOptions { emptyRepo?: boolean; bits?: number; log?: Function; } export class Multiaddr { buffer: Uint8Array; } export type Multihash = any | string; export type CID = any; export class Types { Buffer: any; PeerId: any; PeerInfo: any; multiaddr: Multiaddr; multihash: Multihash; CID: CID; } export class Version { version: string; repo: string; commit: string; } export class Id { id: string; publicKey: string; addresses: Multiaddr[]; agentVersion: string; protocolVersion: string; } export interface RepoAPI { init(bits: number, empty: boolean, callback: Callback): void; version(options: any, callback: Callback): void; version(callback: Callback): void; gc(): void; path(): string; } export type FileContent = Object | Blob | string; export class IPFSFile { path: string; hash: string; size: number; content?: FileContent; } export interface FilesAPI { createAddStream(options: any, callback: Callback): void; createAddStream(callback: Callback): void; createPullStream(options: any): any; add(data: FileContent, options: any, callback: Callback): void; add(data: FileContent, options: any): Promise; add(data: FileContent, callback: Callback): void; add(data: FileContent): Promise; cat(hash: Multihash, callback: Callback): void; cat(hash: Multihash): Promise; get(hash: Multihash, callback: Callback): void; get(hash: Multihash): Promise; getPull(hash: Multihash, callback: Callback): void; } export class PeersOptions { v?: boolean; verbose?: boolean; } export type PeerId = any; export interface PeerInfo { id: PeerId; multiaddr: Multiaddr; multiaddrs: Multiaddr[]; distinctMultiaddr(): Multiaddr[]; } export class Peer { addr: Multiaddr; peer: PeerInfo; } export interface SwarmAPI { peers(options: PeersOptions, callback: Callback): void; peers(options: PeersOptions): Promise; peers(callback: Callback): void; peers(): Promise; addrs(callback: Callback) : void; addrs(): Promise; localAddrs(callback: Callback): void; localAddrs(): Promise; connect(maddr: Multiaddr | string, callback: Callback): void; connect(maddr: Multiaddr | string): Promise; disconnect(maddr: Multiaddr | string, callback: Callback): void; disconnect(maddr: Multiaddr | string): Promise; filters(callback: Callback): never; } export type DAGNode = any; export type DAGLink = any; export type DAGLinkRef = DAGLink | any; export type Obj = BufferSource | Object; export class ObjectStat { Hash: Multihash; NumLinks: number; BlockSize: number; LinksSize: number; DataSize: number; CumulativeSize: number; } export class PutObjectOptions { enc?: any; } export class GetObjectOptions { enc?: any; } export interface ObjectPatchAPI { addLink(multihash: Multihash, link: DAGLink, options: GetObjectOptions, callback: Callback): void; addLink(multihash: Multihash, link: DAGLink, options: GetObjectOptions): Promise; addLink(multihash: Multihash, link: DAGLink, callback: Callback): void; addLink(multihash: Multihash, link: DAGLink): Promise; rmLink(multihash: Multihash, linkRef: DAGLinkRef, options: GetObjectOptions, callback: Callback): void; rmLink(multihash: Multihash, linkRef: DAGLinkRef, options: GetObjectOptions): Promise; rmLink(multihash: Multihash, linkRef: DAGLinkRef, callback: Callback): void; rmLink(multihash: Multihash, linkRef: DAGLinkRef): Promise; appendData(multihash: Multihash, data: any, options: GetObjectOptions, callback: Callback): void; appendData(multihash: Multihash, data: any, options: GetObjectOptions): Promise; appendData(multihash: Multihash, data: any, callback: Callback): void; appendData(multihash: Multihash, data: any): Promise; setData(multihash: Multihash, data: any, options: GetObjectOptions, callback: Callback): void; setData(multihash: Multihash, data: any, options: GetObjectOptions): Promise; setData(multihash: Multihash, data: any, callback: Callback): void; setData(multihash: Multihash, data: any): Promise; } export interface ObjectAPI { "new"(template: 'unixfs-dir', callback: Callback): void; "new"(callback: Callback): void; "new"(): Promise; put(obj: Obj, options: PutObjectOptions, callback: Callback): void; put(obj: Obj, options: PutObjectOptions): Promise; put(obj: Obj, callback: Callback): void; put(obj: Obj): Promise; get(multihash: Multihash, options: GetObjectOptions, callback: Callback): void; get(multihash: Multihash, options: GetObjectOptions): Promise; get(multihash: Multihash, callback: Callback): void; get(multihash: Multihash): Promise; data(multihash: Multihash, options: GetObjectOptions, callback: Callback): void; data(multihash: Multihash, options: GetObjectOptions): Promise; data(multihash: Multihash, callback: Callback): void; data(multihash: Multihash): Promise; links(multihash: Multihash, options: GetObjectOptions, callback: Callback): void; links(multihash: Multihash, options: GetObjectOptions): Promise; links(multihash: Multihash, callback: Callback): void; links(multihash: Multihash): Promise; stat(multihash: Multihash, options: GetObjectOptions, callback: Callback): void; stat(multihash: Multihash, options: GetObjectOptions): Promise; stat(multihash: Multihash, callback: Callback): void; stat(multihash: Multihash): Promise; patch: ObjectPatchAPI; } export interface DagAPI { put(dagNode: any, options: any, callback: Callback): void; put(dagNode: any, options: any): Promise; get(cid: string | CID, path: string, options: any, callback: Callback): void; get(cid: string | CID, path: string, options: any): Promise; get(cid: string | CID, path: string, callback: Callback): void; get(cid: string | CID, path: string): Promise; get(cid: string | CID, callback: Callback): void; get(cid: string | CID): Promise; tree(cid: string | CID, path: string, options: any, callback: Callback): void; tree(cid: string | CID, path: string, options: any): Promise; tree(cid: string | CID, path: string, callback: Callback): void; tree(cid: string | CID, path: string): Promise; tree(cid: string | CID, options: any, callback: Callback): void; tree(cid: string | CID, options: any): Promise; tree(cid: string | CID, callback: Callback): void; tree(cid: string | CID): Promise; } export const IPFS = new InjectionToken('gapi-ipfs-node-injection'); export const IPFS_NODE_READY = new InjectionToken('gapi-ipfs-ready-injection');