Skip to content
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
23 changes: 23 additions & 0 deletions .changeset/cyan-worms-own.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
"@crossmint/wallets-sdk": major
---

# Breaking Change: Promote experimental APIs to stable

We're promoting several experimental APIs to stable by removing the `experimental_` prefix. This is a breaking change that requires updating your code.

## Migration Guide

Update your code to use the new stable API names:

- `experimental_prepareOnly` → `prepareOnly`
- `experimental_callbacks` → `callbacks`
- `experimental_loginWithOAuth` → `loginWithOAuth`
- `experimental_getNfts` → `getNfts`
- `experimental_activity` → `activity`
- `experimental_signer` → `signer`
- `experimental_approval` → `approval`
- `experimental_transaction` → `transaction`
- `experimental_transactions` → `transactions`

These APIs have been thoroughly tested and are now considered stable for production use.
2 changes: 1 addition & 1 deletion apps/wallets/quickstart-devkit/components/activity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export function Activity() {
}
setLoading(true);
try {
const activity = await wallet.experimental_activity();
const activity = await wallet.activity();
setActivity(activity);
} catch (error) {
console.error("Error fetching wallet activity:", error);
Expand Down
8 changes: 4 additions & 4 deletions apps/wallets/quickstart-devkit/components/approval-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export function ApprovalTest() {
// const evmWallet = EVMWallet.from(wallet);
// const txn = await evmWallet.sendTransaction({
// transaction: "0x",
// options: { experimental_prepareOnly: true },
// options: { prepareOnly: true },
// });

// const sigSigned = await evmWallet.signTypedData({
Expand All @@ -86,12 +86,12 @@ export function ApprovalTest() {
// chainId: BigInt(1),
// verifyingContract: "0x0000000000000000000000000000000000000000",
// },
// options: { experimental_prepareOnly: false },
// options: { prepareOnly: false },
// });

// const sigMessage = await evmWallet.signMessage({
// message: "Hello, world!",
// options: { experimental_prepareOnly: true },
// options: { prepareOnly: true },
// });

try {
Expand All @@ -103,7 +103,7 @@ export function ApprovalTest() {
prepareTransfer.recipient,
prepareTransfer.token,
prepareTransfer.amount,
{ experimental_prepareOnly: true }
{ prepareOnly: true }
);

setPreparedTransactionId(transaction.transactionId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,8 @@ export function CrossmintWalletBaseProvider({
setWalletStatus("in-progress");
const wallets = CrossmintWallets.from(crossmint);

const _onWalletCreationStart = args.options?.experimental_callbacks?.onWalletCreationStart;
const _onTransactionStart = args.options?.experimental_callbacks?.onTransactionStart;
const _onWalletCreationStart = args.options?.callbacks?.onWalletCreationStart;
const _onTransactionStart = args.options?.callbacks?.onTransactionStart;

const resolvedSigner = resolveSignerConfig(args.signer) as SignerConfigForChain<C>;

Expand All @@ -192,7 +192,7 @@ export function CrossmintWalletBaseProvider({
alias: args.alias,
options: {
clientTEEConnection: clientTEEConnection?.(),
experimental_callbacks: {
callbacks: {
onWalletCreationStart: _onWalletCreationStart ?? callbacks?.onWalletCreationStart,
onTransactionStart: _onTransactionStart ?? callbacks?.onTransactionStart,
},
Expand Down Expand Up @@ -240,7 +240,7 @@ export function CrossmintWalletBaseProvider({
signer: resolvedSigner,
options: {
clientTEEConnection: clientTEEConnection?.(),
experimental_callbacks: callbacks,
callbacks: callbacks,
shadowSignerStorage,
},
});
Expand Down
2 changes: 1 addition & 1 deletion packages/client/ui/react-ui/src/hooks/useAuth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { OAuthProvider } from "@crossmint/common-sdk-auth";
import { AuthContext } from "@/providers";

export interface CrossmintAuthContext extends CrossmintAuthBaseContextType {
experimental_loginWithOAuth: (provider: OAuthProvider) => Promise<void>;
loginWithOAuth: (provider: OAuthProvider) => Promise<void>;
}

export function useCrossmintAuth(): CrossmintAuthContext {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const defaultContextValue: CrossmintAuthContext = {
status: "initializing",
getUser: () => {},
experimental_externalWalletSigner: undefined,
experimental_loginWithOAuth: () => Promise.resolve(),
loginWithOAuth: () => Promise.resolve(),
loginMethods: [],
};

Expand Down Expand Up @@ -112,7 +112,7 @@ function CrossmintAuthProviderContent({
return "logged-out";
}, [baseAuth.status, baseAuth.jwt, isWeb3Enabled, dynamicSdkLoaded, dialogOpen]);

const experimental_loginWithOAuth = useCallback(
const loginWithOAuth = useCallback(
async (provider: OAuthProvider) => {
if (baseAuth.jwt != null) {
console.log("User already logged in");
Expand All @@ -129,10 +129,10 @@ function CrossmintAuthProviderContent({
login,
status: getAuthStatus(),
experimental_externalWalletSigner: externalWalletSigner,
experimental_loginWithOAuth,
loginWithOAuth,
loginMethods,
}),
[baseAuth, login, getAuthStatus, externalWalletSigner, experimental_loginWithOAuth, loginMethods]
[baseAuth, login, getAuthStatus, externalWalletSigner, loginWithOAuth, loginMethods]
);

return (
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ console.log(transaction.explorerLink);
### Get wallet activity

```ts
const activity = await wallet.experimental_activity();
const activity = await wallet.activity();

console.log(activity.events);
```
Expand Down
4 changes: 2 additions & 2 deletions packages/wallets/src/api/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ class ApiClient extends CrossmintApiClient {
return response.json();
}

async experimental_getNfts(params: {
async getNfts(params: {
address: string;
perPage: number;
page: number;
Expand All @@ -141,7 +141,7 @@ class ApiClient extends CrossmintApiClient {
return response.json();
}

async experimental_activity(walletLocator: WalletLocator, params: { chain: Chain }): Promise<GetActivityResponse> {
async activity(walletLocator: WalletLocator, params: { chain: Chain }): Promise<GetActivityResponse> {
let legacyLocator = walletLocator;
if (!this.isServerSide) {
legacyLocator = `me:${params.chain === "solana" ? "solana-smart-wallet" : "evm-smart-wallet"}`;
Expand Down
8 changes: 4 additions & 4 deletions packages/wallets/src/wallets/evm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export class EVMWallet extends Wallet<EVMChain> {
const builtTransaction = this.buildTransaction(params);
const createdTransaction = await this.createTransaction(builtTransaction, params.options);

if (params.options?.experimental_prepareOnly) {
if (params.options?.prepareOnly) {
return {
hash: undefined,
explorerLink: undefined,
Expand All @@ -73,7 +73,7 @@ export class EVMWallet extends Wallet<EVMChain> {
throw new SignatureNotCreatedError(JSON.stringify(signatureCreationResponse));
}

if (params.options?.experimental_prepareOnly) {
if (params.options?.prepareOnly) {
return {
signature: undefined,
signatureId: signatureCreationResponse.id,
Expand Down Expand Up @@ -120,7 +120,7 @@ export class EVMWallet extends Wallet<EVMChain> {
throw new SignatureNotCreatedError(JSON.stringify(signatureCreationResponse));
}

if (params.options?.experimental_prepareOnly) {
if (params.options?.prepareOnly) {
return {
signature: undefined,
signatureId: signatureCreationResponse.id,
Expand All @@ -141,7 +141,7 @@ export class EVMWallet extends Wallet<EVMChain> {
transaction: FormattedEVMTransaction,
options?: TransactionInputOptions
): Promise<CreateTransactionSuccessResponse> {
const signer = options?.experimental_signer ?? this.signer.locator();
const signer = options?.signer ?? this.signer.locator();
const transactionCreationResponse = await this.apiClient.createTransaction(this.walletLocator, {
params: {
signer,
Expand Down
4 changes: 2 additions & 2 deletions packages/wallets/src/wallets/solana.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export class SolanaWallet extends Wallet<SolanaChain> {
await this.preAuthIfNeeded();
const createdTransaction = await this.createTransaction(params);

if (params.options?.experimental_prepareOnly) {
if (params.options?.prepareOnly) {
return {
hash: undefined,
explorerLink: undefined,
Expand Down Expand Up @@ -71,7 +71,7 @@ export class SolanaWallet extends Wallet<SolanaChain> {
}

private async createTransaction(params: SolanaTransactionInput): Promise<CreateTransactionSuccessResponse> {
const signer = params.options?.experimental_signer ?? this.signer.locator();
const signer = params.options?.signer ?? this.signer.locator();

let serializedTransaction: string;

Expand Down
4 changes: 2 additions & 2 deletions packages/wallets/src/wallets/stellar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export class StellarWallet extends Wallet<StellarChain> {
await this.preAuthIfNeeded();
const createdTransaction = await this.createTransaction(params);

if (params.options?.experimental_prepareOnly) {
if (params.options?.prepareOnly) {
return {
hash: undefined,
explorerLink: undefined,
Expand All @@ -55,7 +55,7 @@ export class StellarWallet extends Wallet<StellarChain> {

private async createTransaction(params: StellarTransactionInput): Promise<CreateTransactionSuccessResponse> {
const { contractId, options } = params;
const signer = options?.experimental_signer ?? this.signer.locator();
const signer = options?.signer ?? this.signer.locator();

let transaction: any;

Expand Down
8 changes: 4 additions & 4 deletions packages/wallets/src/wallets/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import type { ShadowSignerStorage } from "../signers/shadow-signer";

export type { Activity } from "../api/types";

export type PrepareOnly<T extends boolean = boolean> = { experimental_prepareOnly: T };
export type PrepareOnly<T extends boolean = boolean> = { prepareOnly: T };

export type TransactionInputOptions = PrepareOnly & {
experimental_signer?: string;
signer?: string;
};

export type SignatureInputOptions = PrepareOnly;
Expand Down Expand Up @@ -116,7 +116,7 @@ export type StellarWalletPlugin = string;
export type WalletPlugin<C extends Chain> = C extends StellarChain ? StellarWalletPlugin : never;

export type WalletOptions = {
experimental_callbacks?: Callbacks;
callbacks?: Callbacks;
clientTEEConnection?: HandshakeParent<typeof signerOutboundEvents, typeof signerInboundEvents>;
shadowSignerStorage?: ShadowSignerStorage;
shadowSignerEnabled?: boolean;
Expand Down Expand Up @@ -188,7 +188,7 @@ export type Signature<TPrepareOnly extends boolean = false> = TPrepareOnly exten
};

export type ApproveOptions = {
experimental_approval?: Approval;
approval?: Approval;
additionalSigners?: Signer[];
};

Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/src/wallets/wallet-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export class WalletFactory {
}

public async createWallet<C extends Chain>(args: WalletCreateArgs<C>): Promise<Wallet<C>> {
await args.options?.experimental_callbacks?.onWalletCreationStart?.();
await args.options?.callbacks?.onWalletCreationStart?.();

let adminSignerConfig = args.onCreateConfig?.adminSigner ?? args.signer;
const { delegatedSigners, shadowSignerPublicKey, shadowSignerPublicKeyBase64 } =
Expand Down
Loading
Loading