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

bringing deku to temple wallet #23

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
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
31 changes: 14 additions & 17 deletions src/client.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
import { nanoid } from "nanoid";
import { TezosOperationError } from "@taquito/taquito";
import { nanoid } from "nanoid";
import {
TemplePageMessageType,
TemplePageMessage,
TempleDAppMessageType,
TempleDAppRequest,
TempleDAppResponse,
TempleDAppErrorType,
TempleDAppNetwork,
TempleDAppMetadata,
TempleDAppPermission,
TempleDAppErrorType, TempleDAppGetCurrentPermissionResponse, TempleDAppMessageType, TempleDAppMetadata, TempleDAppNetwork, TempleDAppPermission, TempleDAppPermissionResponse, TempleDAppRequest,
TempleDAppResponse, TemplePageMessage, TemplePageMessageType
} from "./types";

export function isAvailable() {
Expand Down Expand Up @@ -71,16 +64,16 @@ export function onPermissionChange(
callback(perm);
currentPerm = perm;
}
} catch {}
} catch { }

t = setTimeout(check, 10_000);
};
check();
return () => clearTimeout(t);
}

export async function getCurrentPermission() {
const res = await request({
export async function getCurrentPermission(): Promise<TempleDAppPermission> {
const res: TempleDAppGetCurrentPermissionResponse = await request({
type: TempleDAppMessageType.GetCurrentPermissionRequest,
});
assertResponse(
Expand All @@ -101,10 +94,14 @@ export async function requestPermission(
force,
});
assertResponse(res.type === TempleDAppMessageType.PermissionResponse);

//FIXME TODO in V2 do not manage V3 message yet
const v2Message = res as TempleDAppPermissionResponse;

return {
rpc: res.rpc,
pkh: res.pkh,
publicKey: res.publicKey,
rpc: v2Message.rpc,
pkh: v2Message.pkh,
publicKey: v2Message.publicKey,
};
}

Expand Down Expand Up @@ -137,7 +134,7 @@ export async function requestBroadcast(signedOpBytes: string) {
return res.opHash;
}

function request(payload: TempleDAppRequest) {
function request(payload: TempleDAppRequest): any {
return new Promise<TempleDAppResponse>((resolve, reject) => {
const reqId = nanoid();
const handleMessage = (evt: MessageEvent) => {
Expand Down
88 changes: 75 additions & 13 deletions src/types.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
export interface AppMetadata extends TempleDAppMetadata {
senderId: string;
icon?: string;
};

export interface BlockchainMessage extends TempleDAppMessageBase {
blockchainIdentifier: string;
type: unknown;
blockchainData: unknown;
}

export interface BeaconMessageWrapper<T extends TempleDAppMessageBase> {
id: string // ID of the message. The same ID is used in the request and response
version: string
senderId: string // ID of the sender. This is used to identify the
message: T
}

export type TempleDAppMessage = TempleDAppRequest | TempleDAppResponse;

export type TempleDAppRequest =
Expand All @@ -7,23 +25,33 @@ export type TempleDAppRequest =
| TempleDAppSignRequest
| TempleDAppBroadcastRequest;

export type TempleDAppRequestV3 =
| BeaconMessageWrapper<TempleDAppPermissionRequestV3>
| BeaconMessageWrapper<TempleDAppBlockchainRequestV3>;

export type TempleDAppResponse =
| TempleDAppGetCurrentPermissionResponse
| TempleDAppPermissionResponse
| TempleDAppOperationResponse
| TempleDAppSignResponse
| TempleDAppBroadcastResponse;
| TempleDAppBroadcastResponse

export type TempleDAppResponseV3 =
| BeaconMessageWrapper<TempleDAppPermissionResponseV3>
| BeaconMessageWrapper<TempleDAppBlockchainResponseV3>;

export interface TempleDAppMessageBase {
type: TempleDAppMessageType;
type: unknown;
}

export enum TempleDAppMessageType {
GetCurrentPermissionRequest = "GET_CURRENT_PERMISSION_REQUEST",
GetCurrentPermissionResponse = "GET_CURRENT_PERMISSION_RESPONSE",
PermissionRequest = "PERMISSION_REQUEST",
PermissionRequest = "permission_request",
PermissionResponse = "PERMISSION_RESPONSE",
OperationRequest = "OPERATION_REQUEST",
BlockchainRequest = "blockchain_request",
BlockchainResponse = "blockchain_response",
OperationResponse = "OPERATION_RESPONSE",
SignRequest = "SIGN_REQUEST",
SignResponse = "SIGN_RESPONSE",
Expand Down Expand Up @@ -53,19 +81,61 @@ export interface TempleDAppPermissionRequest extends TempleDAppMessageBase {
force?: boolean;
}

export interface TempleDAppPermissionRequestV3 extends BlockchainMessage {
type: TempleDAppMessageType.PermissionRequest;
blockchainData: {
appMetadata: AppMetadata;
scopes: string[];
network: TempleDAppNetwork;
};
}

export interface TempleDAppPermissionResponse extends TempleDAppMessageBase {
type: TempleDAppMessageType.PermissionResponse;
pkh: string;
publicKey: string;
rpc: string;
}

export interface TempleDAppPermissionResponseV3 extends BlockchainMessage {
type: TempleDAppMessageType.PermissionResponse;
blockchainData: {
appMetadata: AppMetadata;
scopes: string[];
};
}

export interface TempleDAppOperationRequest extends TempleDAppMessageBase {
type: TempleDAppMessageType.OperationRequest;
sourcePkh: string;
opParams: any[];
}

export interface TempleDAppBlockchainRequestV3 extends BlockchainMessage {
type: TempleDAppMessageType.BlockchainRequest;
blockchainData: {
type: TempleDAppMessageType.OperationRequest;
scope: string;
sourceAddress: string;
amount: string;
recipient: string;
mode: 'submit' | 'submit-and-return' | 'return';
ticketer: string;
data: string;
options: {
nonce?: number;
level?: number;
}
};
}

export interface TempleDAppBlockchainResponseV3 extends TempleDAppMessageBase {
type: TempleDAppMessageType.BlockchainResponse;
transactionHash: string;
signature?: string;
payload?: string;
}

export interface TempleDAppOperationResponse extends TempleDAppMessageBase {
type: TempleDAppMessageType.OperationResponse;
opHash: string;
Expand Down Expand Up @@ -100,6 +170,7 @@ export enum TempleDAppErrorType {
NotFound = "NOT_FOUND",
InvalidParams = "INVALID_PARAMS",
TezosOperation = "TEZOS_OPERATION",
BlockchainOperation = "BLOCKCHAIN_OPERATION",
}

/**
Expand All @@ -112,16 +183,7 @@ export type TempleDAppPermission = {
publicKey: string;
} | null;

export type TempleDAppNetwork =
| "mainnet"
| "ithacanet"
| "hangzhounet"
| "idiazabalnet"
| "granadanet"
| "edo2net"
| "florencenet"
| "sandbox"
| { name: string; rpc: string };
export type TempleDAppNetwork = { name: string; rpcUrl: string; type?: string };

export interface TempleDAppMetadata {
name: string;
Expand Down
Loading