Skip to content

Commit

Permalink
update (#839)
Browse files Browse the repository at this point in the history
* update

* tests
  • Loading branch information
hcote authored Nov 22, 2024
1 parent 950ee7f commit a565e3c
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 36 deletions.
16 changes: 13 additions & 3 deletions packages/@magic-ext/kadena/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ import {
KadenaConfig,
KadenaGetInfoResponse,
KadenaPayloadMethod,
KadenaSignTransactionResponse,
LoginWithSpireKeyResponse,
SignTransactionResponse,
SignTransactionWithSpireKeyResponse,
} from './types';

export class KadenaExtension extends Extension.Internal<'kadena'> {
Expand All @@ -27,8 +28,17 @@ export class KadenaExtension extends Extension.Internal<'kadena'> {
};
}

public signTransaction(tx: string | IUnsignedCommand): Promise<KadenaSignTransactionResponse> {
return this.request(this.utils.createJsonRpcRequestPayload(KadenaPayloadMethod.KadenaSignTransaction, [{ tx }]));
public signTransaction(hash: string): Promise<SignTransactionResponse> {
return this.request(this.utils.createJsonRpcRequestPayload(KadenaPayloadMethod.KadenaSignTransaction, [{ hash }]));
}

public async signTransactionWithSpireKey(
transaction: IUnsignedCommand,
): Promise<SignTransactionWithSpireKeyResponse> {
const signedTransaction = await this.request(
this.utils.createJsonRpcRequestPayload(KadenaPayloadMethod.KadenaSignTransactionWithSpireKey, [{ transaction }]),
);
return signedTransaction;
}

public loginWithSpireKey(): Promise<LoginWithSpireKeyResponse> {
Expand Down
61 changes: 30 additions & 31 deletions packages/@magic-ext/kadena/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,13 @@ export interface KadenaConfig {
}

export enum KadenaPayloadMethod {
KadenaSignTransaction = 'kda_signTransaction',
KadenaLoginWithSpireKey = 'kda_loginWithSpireKey',
KadenaGetInfo = 'kda_getInfo',
KadenaSignTransaction = 'kda_signTransaction',
KadenaSignTransactionWithSpireKey = 'kda_signTransactionWithSpireKey',
}

export type KadenaSignTransactionResponse = ISignatureWithPublicKey | SignedTransactions;

export interface ISignatureWithPublicKey {
sig: string;
pubKey: string;
}

interface Sig {
export interface SignTransactionResponse {
sig: string;
pubKey: string;
}
Expand All @@ -30,25 +24,32 @@ export interface IUnsignedCommand {
sigs: [undefined];
}

interface ICommand {
export interface Sig {
sig: string;
pubKey?: string;
}

export interface ICommand {
hash: string;
cmd: string;
sigs: Sig[];
}

export interface SignedTransactions {
export interface SignTransactionWithSpireKeyResponse {
transactions: (IUnsignedCommand | ICommand)[];
}

export interface KadenaGetInfoResponse {
email: string | undefined;
issuer: string;
accountName: string;
publicKey: string;
loginType: 'spire_key' | 'email_otp' | 'sms';
loginType: string;
isMfaEnabled: boolean;
email?: string;
phoneNumber?: string;
}

type Guard = RefKeyset | Keyset;

type RefKeyset = {
keysetref: {
ns: string;
Expand All @@ -71,21 +72,6 @@ type Device = {
name?: string;
};

type Account = {
alias: string;
accountName: string;
minApprovals: number;
minRegistrationApprovals: number;
balance: string;
devices: Device[];
guard?: Guard;
keyset?: Keyset;
networkId: string;
chainIds: ChainId[];
txQueue: QueuedTx[];
requestedFungibles?: RequestedFungible[];
};

interface ITransactionDescriptor {
requestKey: string;
chainId: ChainId;
Expand All @@ -100,10 +86,23 @@ type RequestedFungible = {
target?: ChainId;
};

export type LoginWithSpireKeyResponse = Account & {
isReady: () => Promise<Account>;
type Account = {
alias: string;
accountName: string;
minApprovals: number;
minRegistrationApprovals: number;
balance: string;
devices: Device[];
guard?: Guard;
keyset?: Keyset;
networkId: string;
chainIds: ChainId[];
txQueue: QueuedTx[];
requestedFungibles?: RequestedFungible[];
};

export type LoginWithSpireKeyResponse = Account;

export type ChainId =
| '0'
| '1'
Expand Down
29 changes: 27 additions & 2 deletions packages/@magic-ext/kadena/test/spec/kadena.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ beforeEach(() => {
browserEnv.restore();
});

test('Sends params as payload', () => {
test('signTransaction - Sends params as payload', () => {
const magic = createMagicSDKWithExtension({}, [
new KadenaExtension({
rpcUrl: '',
Expand All @@ -25,7 +25,32 @@ test('Sends params as payload', () => {

const requestPayload = magic.kadena.request.mock.calls[0][0];
expect(requestPayload.method).toBe(KadenaPayloadMethod.KadenaSignTransaction);
expect(requestPayload.params).toEqual([{ tx: '0x123' }]);
expect(requestPayload.params).toEqual([{ hash: '0x123' }]);
});

test('signTransactionWithSpireKey - Sends params as payload', () => {
const magic = createMagicSDKWithExtension({}, [
new KadenaExtension({
rpcUrl: '',
chainId: '1',
networkId: 'testnet04',
network: 'testnet',
createAccountsOnChain: true,
}),
]);
magic.kadena.request = jest.fn();

const params = {
hash: '0x123',
cmd: '0x456',
sigs: [undefined],
};

magic.kadena.signTransactionWithSpireKey(params);

const requestPayload = magic.kadena.request.mock.calls[0][0];
expect(requestPayload.method).toBe(KadenaPayloadMethod.KadenaSignTransactionWithSpireKey);
expect(requestPayload.params).toEqual([{ transaction: params }]);
});

test('Generate JSON RPC request payload with method `kda_loginWithSpireKey`', () => {
Expand Down

0 comments on commit a565e3c

Please sign in to comment.