xumm
Version:
One Xumm SDK to rule them all (browser, backend, xApp)
140 lines (139 loc) • 4.55 kB
TypeScript
/// <reference types="node" />
import type { XummSdk, XummSdkJwt, xAppOttData, Payload, JwtUserdata, Storage, Push } from "xumm-sdk";
import type { XummPkceEvent, ResolvedFlow, XummProfile } from "xumm-oauth2-pkce";
import type { xApp, xAppEvent } from "xumm-xapp-sdk";
import { EventEmitter } from "events";
export interface UniversalSdkEvent {
logout: () => void;
ready: () => void;
retrieving: () => void;
}
/**
* Development?
* npm run watch (tsc in watch mode)
* npm run browserify-watch (watch, browserify tsc output)
* npm run serve (webserver, :3001)
* npm run dev (watch, nodemon dist/samples/index.js)
* ngrok start dev (local :3001 to https:// dev URL)
* > https://.../sample/
*/
declare enum Runtimes {
cli = "cli",
browser = "browser",
xapp = "xapp"
}
type Runtime = Record<Runtimes, boolean>;
export declare interface Xumm {
on<U extends keyof UniversalSdkEvent>(event: U, listener: UniversalSdkEvent[U]): this;
on<U extends keyof xAppEvent>(event: U, listener: xAppEvent[U]): this;
on<U extends keyof XummPkceEvent>(event: U, listener: XummPkceEvent[U]): this;
off<U extends keyof UniversalSdkEvent>(event: U, listener: UniversalSdkEvent[U]): this;
off<U extends keyof xAppEvent>(event: U, listener: xAppEvent[U]): this;
off<U extends keyof XummPkceEvent>(event: U, listener: XummPkceEvent[U]): this;
}
/**
* The Promisified type takes an entire class and expects all methods
* to return a Promise of their method's native return values
*/
type Promisified<T> = {
[K in keyof T]: T[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<R> : T[K];
};
interface Environment {
ott?: Promise<xAppOttData | undefined>;
jwt?: Promise<{
client_id: string;
scope?: string;
state?: string;
aud: string;
sub: string;
email?: string;
app_uuidv4: string;
app_name: string;
payload_uuidv4?: string;
usertoken_uuidv4?: string;
network_type?: string;
network_endpoint?: string;
network_id?: number;
iat: number;
exp: number;
iss: string;
usr?: string;
net?: string;
[key: string]: any;
} | undefined>;
openid?: Promise<{
sub: string;
email: string;
picture: string;
account: string;
name: string;
domain?: string;
blocked: boolean;
source?: string;
kycApproved: boolean;
proSubscription: boolean;
networkType: string;
networkEndpoint: string;
networkId?: number;
profile?: XummProfile;
[key: string]: any;
} | undefined>;
bearer?: Promise<string>;
retrieving: Promise<void>;
ready: Promise<void>;
success: Promise<void>;
retrieved: Promise<void>;
}
declare class UnifiedUserData {
account: Promise<string | undefined>;
picture: Promise<string | undefined>;
name: Promise<string | undefined>;
domain: Promise<string | undefined>;
source: Promise<string | undefined>;
networkType: Promise<string | undefined>;
networkEndpoint: Promise<string | undefined>;
networkId: Promise<number | undefined>;
blocked: Promise<boolean | undefined>;
kycApproved: Promise<boolean | undefined>;
proSubscription: Promise<boolean | undefined>;
profile: Promise<XummProfile | undefined>;
token: Promise<string | null>;
}
/**
* This is where the magic happens
*/
export declare class Xumm extends EventEmitter {
private instance;
private jwtCredential;
runtime: Runtime;
state: {
account: string;
signedIn: boolean;
};
user: UnifiedUserData;
environment: Environment;
payload?: Promisified<Payload>;
xapp?: xApp;
userstore?: Promisified<JwtUserdata>;
backendstore?: Promisified<Storage>;
helpers?: Promisified<Pick<XummSdkJwt, "ping" | "getCuratedAssets" | "getKycStatus" | "getTransaction" | "verifyUserTokens" | "getRates" | "getNftokenDetail">>;
push?: Promisified<Push>;
private apiKeyOrJwt;
private apiSecretOrOtt?;
constructor(apiKeyOrJwt: string, apiSecretOrOtt?: string);
private initialize;
/**
* PKCE
*/
authorize(): Promise<ResolvedFlow | undefined | Error>;
/**
* TODO: CHECK IF EVENTS ARE NOT REGISTERED AND FIRING TWICE
*/
private handlePkceEvents;
logout(): Promise<void>;
/**
* SDK
*/
ping(): Promise<ReturnType<XummSdk["ping"]> | undefined>;
}
export {};