Skip to content

Commit

Permalink
core: add utility for signing account signature message as backend wa…
Browse files Browse the repository at this point in the history
…llet
  • Loading branch information
alecananian committed Sep 17, 2024
1 parent 56d054b commit 947e37c
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 16 deletions.
5 changes: 5 additions & 0 deletions .changeset/quick-clouds-fly.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@treasure-dev/tdk-core": patch
---

Added utility for signing account signature message as backend wallet
2 changes: 1 addition & 1 deletion examples/connect-core/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ document.querySelector<HTMLDivElement>("#app")!.innerHTML = `
try {
const result = await logInWithSocial({
client,
network: "google",
method: "google",
apiUri,
chainId,
sessionOptions,
Expand Down
65 changes: 50 additions & 15 deletions packages/core/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,19 +208,37 @@ export class TDKAPI {
"inputs"
>;
},
options?: { includeAbi?: boolean; skipWaitForCompletion?: boolean },
options?: {
includeAbi?: boolean;
skipWaitForCompletion?: boolean;
accountAddress?: string;
accountSignature?: string;
},
) => {
const result = await this.post<
CreateTransactionBody,
CreateTransactionReply
>("/transactions", {
...params,
// biome-ignore lint/suspicious/noExplicitAny: abitype and the API schema don't play well
...(options?.includeAbi ? { abi: params.abi as any } : {}),
// biome-ignore lint/suspicious/noExplicitAny: abitype and the API schema don't play well
args: params.args as any,
backendWallet: params.backendWallet ?? this.backendWallet,
});
>(
"/transactions",
{
...params,
// biome-ignore lint/suspicious/noExplicitAny: abitype and the API schema don't play well
...(options?.includeAbi ? { abi: params.abi as any } : {}),
// biome-ignore lint/suspicious/noExplicitAny: abitype and the API schema don't play well
args: params.args as any,
backendWallet: params.backendWallet ?? this.backendWallet,
},
{
headers: {
...(options?.accountAddress
? { "x-account-address": options.accountAddress }
: {}),
...(options?.accountSignature
? { "x-account-signature": options.accountSignature }
: {}),
},
},
);

return options?.skipWaitForCompletion
? result
Expand All @@ -230,16 +248,33 @@ export class TDKAPI {
params: Omit<CreateRawTransactionBody, "value"> & {
value?: bigint;
},
options?: { skipWaitForCompletion?: boolean },
options?: {
skipWaitForCompletion?: boolean;
accountAddress?: string;
accountSignature?: string;
},
) => {
const result = await this.post<
CreateRawTransactionBody,
CreateRawTransactionReply
>("/transactions/raw", {
...params,
value: params.value ? toHex(params.value) : undefined,
backendWallet: params.backendWallet ?? this.backendWallet,
});
>(
"/transactions/raw",
{
...params,
value: params.value ? toHex(params.value) : undefined,
backendWallet: params.backendWallet ?? this.backendWallet,
},
{
headers: {
...(options?.accountAddress
? { "x-account-address": options.accountAddress }
: {}),
...(options?.accountSignature
? { "x-account-signature": options.accountSignature }
: {}),
},
},
);

return options?.skipWaitForCompletion
? result
Expand Down
19 changes: 19 additions & 0 deletions packages/core/src/connect/auth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { privateKeyToAccount } from "thirdweb/wallets";

import type { TreasureConnectClient } from "../types";

export const generateAccountSignature = ({
client,
accountAddress,
backendWalletPrivateKey,
}: {
client: TreasureConnectClient;
accountAddress: string;
backendWalletPrivateKey: string;
}) =>
privateKeyToAccount({
client,
privateKey: backendWalletPrivateKey,
}).signMessage({
message: JSON.stringify({ accountAddress }),
});
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export {

// Connect
export { getAllActiveSigners } from "./connect/accounts";
export { generateAccountSignature } from "./connect/auth";
export { decodeAuthToken } from "./connect/jwt";
export {
type SocialConnectMethod,
Expand Down

0 comments on commit 947e37c

Please sign in to comment.