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

feat: typebox mutations #1221

Merged
merged 11 commits into from
Mar 24, 2025
Merged

feat: typebox mutations #1221

merged 11 commits into from
Mar 24, 2025

Conversation

roderik
Copy link
Member

@roderik roderik commented Mar 24, 2025

Summary by Sourcery

Migrate Zod validation schemas to TypeBox for improved type safety and schema definition across multiple mutations, including bond creation, fund creation, contact addition, tokenized deposit creation, asset transfer, equity creation, yield schedule setting, cryptocurrency creation, stablecoin creation, asset withdrawal, collateral updating, asset burning, asset minting, bond topping up, asset freezing, and general asset transferring. This change enhances the reliability and maintainability of the application's data validation processes.

Enhancements:

  • Replace Zod schemas with TypeBox schemas for various mutations to leverage its static type checking and schema definition capabilities.
  • Update the safe-action client to use typeboxAdapter for validation.
  • Improve error logging for TypeBox validation errors by including input data and error details.
  • Add descriptions to TypeBox schemas for better documentation and clarity.
  • Implement amount validation using TypeBox's Amount function, providing more control over minimum and maximum values.
  • Add RoleMap type to validate user roles selection

Tests:

  • Ensure all mutations with schema changes continue to function correctly and validate data as expected.

Copy link

sourcery-ai bot commented Mar 24, 2025

Reviewer's Guide by Sourcery

This pull request migrates the mutation schemas from Zod to TypeBox. This change enhances type safety, improves validation, and provides better integration with the existing codebase.

No diagrams generated as the changes look simple and do not need a visual representation.

File-Level Changes

Change Details Files
Migrated mutation schemas from Zod to TypeBox for improved type safety and validation.
  • Replaced Zod schemas with TypeBox schemas in multiple files.
  • Updated schema definitions to use TypeBox's syntax and features.
  • Adjusted input and output types to align with TypeBox's type inference.
  • Modified action files to use safeParse for schema validation.
  • Updated schema definitions to leverage TypeBox features such as descriptions, formats, and refinements.
  • Adjusted the action function to use the typeboxAdapter.
  • Added redactSensitiveFields to redact the pincode field.
kit/dapp/src/lib/mutations/bond/create/create-schema.ts
kit/dapp/src/lib/mutations/fund/create/create-schema.ts
kit/dapp/src/lib/mutations/contact/add-contact-schema.ts
kit/dapp/src/lib/mutations/tokenized-deposit/create/create-schema.ts
kit/dapp/src/lib/mutations/asset/transfer/transfer-schema.ts
kit/dapp/src/lib/mutations/equity/create/create-schema.ts
kit/dapp/src/lib/mutations/bond/set-yield-schedule/set-yield-schedule-action.ts
kit/dapp/src/lib/mutations/cryptocurrency/create/create-schema.ts
kit/dapp/src/lib/mutations/stablecoin/create/create-schema.ts
kit/dapp/src/lib/mutations/bond/set-yield-schedule/set-yield-schedule-schema.ts
kit/dapp/src/lib/mutations/withdraw/withdraw-schema.ts
kit/dapp/src/lib/mutations/update-collateral/update-collateral-schema.ts
kit/dapp/src/lib/mutations/burn/burn-schema.ts
kit/dapp/src/lib/mutations/mint/mint-schema.ts
kit/dapp/src/lib/mutations/bond/top-up/top-up-schema.ts
kit/dapp/src/lib/mutations/freeze/freeze-schema.ts
kit/dapp/src/lib/mutations/transfer/transfer-schema.ts
kit/dapp/src/lib/mutations/withdraw/withdraw-action.ts
kit/dapp/src/lib/mutations/disallow-user/disallow-user-schema.ts
kit/dapp/src/lib/mutations/unblock-user/unblock-user-schema.ts
kit/dapp/src/lib/mutations/allow-user/allow-user-schema.ts
kit/dapp/src/lib/mutations/block-user/block-user-schema.ts
kit/dapp/src/lib/mutations/bond/redeem/redeem-schema.ts
kit/dapp/src/lib/mutations/asset/access-control/update-role/update-role-schema.ts
kit/dapp/src/lib/mutations/mint/mint-action.ts
kit/dapp/src/lib/mutations/pause/pause-action.ts
kit/dapp/src/lib/mutations/bond/mature/mature-schema.ts
kit/dapp/src/lib/mutations/tokenized-deposit/create/create-action.ts
kit/dapp/src/lib/mutations/burn/burn-action.ts
kit/dapp/src/lib/mutations/freeze/freeze-action.ts
kit/dapp/src/lib/mutations/update-collateral/update-collateral-action.ts
kit/dapp/src/lib/mutations/transfer/transfer-action.ts
kit/dapp/src/lib/mutations/contact/add-contact-action.ts
kit/dapp/src/lib/mutations/cryptocurrency/create/create-action.ts
kit/dapp/src/lib/mutations/unblock-user/unblock-user-action.ts
kit/dapp/src/lib/mutations/allow-user/allow-user-action.ts
kit/dapp/src/lib/mutations/asset/access-control/update-role/update-roles.ts
kit/dapp/src/lib/mutations/bond/create/create-action.ts
kit/dapp/src/lib/mutations/bond/top-up/top-up-action.ts
kit/dapp/src/lib/mutations/equity/create/create-action.ts
kit/dapp/src/lib/mutations/fund/create/create-action.ts
kit/dapp/src/lib/mutations/asset/access-control/grant-role/grant-role-action.ts
kit/dapp/src/lib/mutations/asset/access-control/revoke-role/revoke-role.ts
kit/dapp/src/lib/mutations/bond/mature/mature-action.ts
kit/dapp/src/lib/mutations/bond/redeem/redeem-action.ts
kit/dapp/src/lib/mutations/disallow-user/disallow-user-action.ts
kit/dapp/src/lib/utils/typebox/index.ts
kit/dapp/src/lib/utils/typebox/roles.ts
kit/dapp/src/lib/mutations/pause/pause-action.ts
kit/dapp/src/lib/mutations/unpause/unpause-action.ts
kit/dapp/src/lib/mutations/block-user/block-user-action.ts
kit/dapp/src/lib/mutations/asset/access-control/grant-role/grant-role-schema.ts
kit/dapp/src/lib/mutations/asset/access-control/revoke-role/revoke-role-schema.ts
kit/dapp/src/lib/mutations/pause/pause-schema.ts
kit/dapp/src/lib/mutations/unpause/unpause-schema.ts
kit/dapp/src/lib/utils/redaction.ts

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!
  • Generate a plan of action for an issue: Comment @sourcery-ai plan on
    an issue to generate a plan of action for it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @roderik - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Consider adding a comment explaining why Zod is being replaced with TypeBox.
  • The safeParse function should be updated to handle errors in a more user-friendly way, perhaps by returning a result type instead of throwing an error.
Here's what I looked at during the review
  • 🟢 General issues: all looks good
  • 🟡 Security: 1 issue found
  • 🟢 Review instructions: all looks good
  • 🟢 Testing: all looks good
  • 🟡 Complexity: 3 issues found
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

/**
* Redacts sensitive fields in an object by replacing their values with asterisks
*/
export function redactSensitiveFields(obj: unknown): unknown {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 suggestion (security): Review the redaction utility logic.

Currently, the function redacts the 'pincode' field by replacing its value with asterisks. Consider whether additional sensitive fields should be redacted to meet security requirements.

}),
valueInBaseCurrency: z.fiatCurrencyAmount(),
});
export function CreateBondSchema({
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (complexity): Consider using a default constant schema for common cases and allowing customization only when necessary to reduce cognitive overhead and simplify usage for the majority of cases where the options don't vary.

The additional layer of parameterization does increase cognitive overhead when these options rarely vary. Consider maintaining a default constant schema and only allowing customization when needed. For example, you could define a default schema and then write a simple wrapper for the rare cases that require customization:

// Define default values
const DEFAULTS = {
  maxCap: 1000000,
  minCap: 1,
  maxFaceValue: 1000000,
  minFaceValue: 1,
  decimals: 2,
};

// Default constant schema
export const DefaultCreateBondSchema = t.Object({
  assetName: t.String({
    description: "The name of the bond",
    minLength: 1,
  }),
  // … other fields remain unchanged
  cap: t.Amount(DEFAULTS.maxCap, DEFAULTS.minCap, DEFAULTS.decimals, {
    description: "Maximum issuance amount",
    errorMessage: "Must be at least 1",
  }),
  faceValue: t.Amount(
    DEFAULTS.maxFaceValue,
    DEFAULTS.minFaceValue,
    DEFAULTS.decimals,
    {
      description: "Face value of the bond",
      errorMessage: "Must be at least 1",
    }
  ),
  // … remaining fields
});

// Use a simple function for customization when needed
export function CreateBondSchema(options: Partial<typeof DEFAULTS> = {}) {
  const { maxCap, minCap, maxFaceValue, minFaceValue, decimals } = {
    ...DEFAULTS,
    ...options,
  };

  return t.Object({
    assetName: t.String({
      description: "The name of the bond",
      minLength: 1,
    }),
    // … other fields remain as in DefaultCreateBondSchema
    cap: t.Amount(maxCap, minCap, decimals, {
      description: "Maximum issuance amount",
      errorMessage: "Must be at least 1",
    }),
    faceValue: t.Amount(maxFaceValue, minFaceValue, decimals, {
      description: "Face value of the bond",
      errorMessage: "Must be at least 1",
    }),
    // … remaining fields
  });
}

This way, most of your code can directly use the simpler DefaultCreateBondSchema while the function remains available for exceptional cases.

userAddress: z.address(),
assettype: z.assetType(),
});
export function DisallowUserSchema() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (complexity): Consider memoizing the schema to avoid recreating it every time the function is called, which reduces unnecessary indirection and improves performance without changing the API.

If you don’t need runtime customization, you can simplify by memoizing the schema rather than wrapping the definition in a function that creates a new schema every time. For example, you could define the schema once and then export a getter that returns the memoized instance:

const _disallowUserSchema = t.Object(
  {
    address: t.EthereumAddress({
      description: "The contract address",
    }),
    pincode: t.Pincode({
      description: "The pincode for signing the transaction",
    }),
    userAddress: t.EthereumAddress({
      description: "The address of the user to disallow",
    }),
    assettype: t.AssetType({
      description: "The type of asset",
    }),
  },
  {
    description: "Schema for validating disallow user mutation inputs",
  }
);

export function DisallowUserSchema() {
  return _disallowUserSchema;
}
export type DisallowUserInput = StaticDecode<ReturnType<typeof DisallowUserSchema>>;

This approach reduces the extra indirection by ensuring the schema is created only once while preserving the existing API.

pincode: z.pincode(),
assettype: z.assetType(),
});
export function WithdrawSchema({
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (complexity): Consider exposing a constant/default schema for common configurations and a parameterized function for specific cases to simplify code usage and reduce perceived complexity

You could simplify code usage by exposing a constant/default schema and, only when necessary, the parameterized function. For example, if most cases use a common configuration, create a default export that wraps your dynamic function:

const DEFAULT_MAX = 1000;
const DEFAULT_MIN = 1;
const DEFAULT_DECIMALS = 18;

export const withdrawSchemaDefault = WithdrawSchema({
  maxAmount: DEFAULT_MAX,
  minAmount: DEFAULT_MIN,
  decimals: DEFAULT_DECIMALS,
});
export type WithdrawInput = StaticDecode<ReturnType<typeof WithdrawSchema>>;

Then use withdrawSchemaDefault in most places and call WithdrawSchema with custom values only when really needed. This makes usage clearer and reduces perceived complexity.

decimals?: number;
} = {}) {
const maxAmount = balance ? Number(balance) : undefined;
const min = minAmount ? minAmount : decimals ? 10 ** -decimals : 1;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (code-quality): Avoid unneeded ternary statements (simplify-ternary)

Suggested change
const min = minAmount ? minAmount : decimals ? 10 ** -decimals : 1;
const min = minAmount || (decimals ? 10 ** -decimals : 1);


ExplanationIt is possible to simplify certain ternary statements into either use of an || or !.
This makes the code easier to read, since there is no conditional logic.

options?: SchemaOptions
) =>
t.Number({
minimum: min,
minimum: min ? min : decimals ? 10 ** -decimals : 0,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (code-quality): Avoid unneeded ternary statements (simplify-ternary)

Suggested change
minimum: min ? min : decimals ? 10 ** -decimals : 0,
minimum: min || (decimals ? 10 ** -decimals : 0),


ExplanationIt is possible to simplify certain ternary statements into either use of an || or !.
This makes the code easier to read, since there is no conditional logic.

@roderik roderik merged commit 2913e09 into main Mar 24, 2025
5 checks passed
@roderik roderik deleted the feat/typebox-mutations branch March 24, 2025 10:06
snigdha920 added a commit that referenced this pull request Mar 24, 2025
commit 8064a65
Author: janb87 <[email protected]>
Date:   Mon Mar 24 12:07:17 2025 +0100

    improved schema

commit 60b6155
Author: janb87 <[email protected]>
Date:   Mon Mar 24 11:44:44 2025 +0100

    fix type

commit 066b19f
Merge: 43ffd40 2913e09
Author: Jan Bevers <[email protected]>
Date:   Mon Mar 24 11:39:57 2025 +0100

    Merge branch 'main' into jan/fix-schema-errors

commit 43ffd40
Author: janb87 <[email protected]>
Date:   Mon Mar 24 11:39:30 2025 +0100

    fix

commit 9eff6eb
Author: janb87 <[email protected]>
Date:   Mon Mar 24 11:30:24 2025 +0100

    fix: asset creation and activity

commit 2913e09
Author: Roderik van der Veer <[email protected]>
Date:   Mon Mar 24 11:06:07 2025 +0100

    feat: typebox mutations (#1221)

    Migrate Zod validation schemas to TypeBox for improved type safety and
    schema definition across multiple mutations, including bond creation,
    fund creation, contact addition, tokenized deposit creation, asset
    transfer, equity creation, yield schedule setting, cryptocurrency
    creation, stablecoin creation, asset withdrawal, collateral updating,
    asset burning, asset minting, bond topping up, asset freezing, and
    general asset transferring. This change enhances the reliability and
    maintainability of the application's data validation processes.

    Enhancements:
    - Replace Zod schemas with TypeBox schemas for various mutations to
    leverage its static type checking and schema definition capabilities.
    - Update the safe-action client to use typeboxAdapter for validation.
    - Improve error logging for TypeBox validation errors by including input
    data and error details.
    - Add descriptions to TypeBox schemas for better documentation and
    clarity.
    - Implement amount validation using TypeBox's Amount function, providing
    more control over minimum and maximum values.
    - Add RoleMap type to validate user roles selection

    Tests:
    - Ensure all mutations with schema changes continue to function
    correctly and validate data as expected.

commit f29892e
Author: Jan Bevers <[email protected]>
Date:   Mon Mar 24 10:51:21 2025 +0100

    fix: user onboarding + user details (#1223)

    Fixes user onboarding and user details functionality by adjusting data
    types, modifying user detail retrieval, and updating authentication
    configurations.

    Bug Fixes:
    - Fixes an issue where event counts were incorrectly typed as BigInt in
    the AssetActivitySchema, changing them to Number.
    - Fixes an issue where user data and account data were not being merged
    correctly in the user list query.
    - Makes the currency field optional during user authentication.
snigdha920 added a commit that referenced this pull request Mar 24, 2025
* main:
  fix: asset creation and activity (#1224)
  feat: typebox mutations (#1221)
  fix: user onboarding + user details (#1223)
snigdha920 added a commit that referenced this pull request Mar 24, 2025
commit 810f6c1
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 12:22:05 2025 +0100

    fix user currency

commit 15b1096
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 12:21:39 2025 +0100

    cleanup

commit a4bb1c0
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 12:18:22 2025 +0100

    fix test

commit adc106e
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 12:17:38 2025 +0100

    resolve merge conflicts

commit 9809eff
Merge: c52dbd4 b2d9026
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 12:17:28 2025 +0100

    Merge branch 'main' into fix/validation-erros

    * main:
      fix: asset creation and activity (#1224)
      feat: typebox mutations (#1221)
      fix: user onboarding + user details (#1223)

commit c52dbd4
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 12:16:52 2025 +0100

    Squashed commit of the following:

    commit 8064a65
    Author: janb87 <[email protected]>
    Date:   Mon Mar 24 12:07:17 2025 +0100

        improved schema

    commit 60b6155
    Author: janb87 <[email protected]>
    Date:   Mon Mar 24 11:44:44 2025 +0100

        fix type

    commit 066b19f
    Merge: 43ffd40 2913e09
    Author: Jan Bevers <[email protected]>
    Date:   Mon Mar 24 11:39:57 2025 +0100

        Merge branch 'main' into jan/fix-schema-errors

    commit 43ffd40
    Author: janb87 <[email protected]>
    Date:   Mon Mar 24 11:39:30 2025 +0100

        fix

    commit 9eff6eb
    Author: janb87 <[email protected]>
    Date:   Mon Mar 24 11:30:24 2025 +0100

        fix: asset creation and activity

    commit 2913e09
    Author: Roderik van der Veer <[email protected]>
    Date:   Mon Mar 24 11:06:07 2025 +0100

        feat: typebox mutations (#1221)

        Migrate Zod validation schemas to TypeBox for improved type safety and
        schema definition across multiple mutations, including bond creation,
        fund creation, contact addition, tokenized deposit creation, asset
        transfer, equity creation, yield schedule setting, cryptocurrency
        creation, stablecoin creation, asset withdrawal, collateral updating,
        asset burning, asset minting, bond topping up, asset freezing, and
        general asset transferring. This change enhances the reliability and
        maintainability of the application's data validation processes.

        Enhancements:
        - Replace Zod schemas with TypeBox schemas for various mutations to
        leverage its static type checking and schema definition capabilities.
        - Update the safe-action client to use typeboxAdapter for validation.
        - Improve error logging for TypeBox validation errors by including input
        data and error details.
        - Add descriptions to TypeBox schemas for better documentation and
        clarity.
        - Implement amount validation using TypeBox's Amount function, providing
        more control over minimum and maximum values.
        - Add RoleMap type to validate user roles selection

        Tests:
        - Ensure all mutations with schema changes continue to function
        correctly and validate data as expected.

    commit f29892e
    Author: Jan Bevers <[email protected]>
    Date:   Mon Mar 24 10:51:21 2025 +0100

        fix: user onboarding + user details (#1223)

        Fixes user onboarding and user details functionality by adjusting data
        types, modifying user detail retrieval, and updating authentication
        configurations.

        Bug Fixes:
        - Fixes an issue where event counts were incorrectly typed as BigInt in
        the AssetActivitySchema, changing them to Number.
        - Fixes an issue where user data and account data were not being merged
        correctly in the user list query.
        - Makes the currency field optional during user authentication.

commit b2d9026
Author: Jan Bevers <[email protected]>
Date:   Mon Mar 24 12:15:59 2025 +0100

    fix: asset creation and activity (#1224)

    Improve type safety by updating schemas to handle null values and use
    safe parsing for transaction details and list existence checks.

commit 291b21c
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 12:05:53 2025 +0100

    unit test wait for single transaction

commit 2913e09
Author: Roderik van der Veer <[email protected]>
Date:   Mon Mar 24 11:06:07 2025 +0100

    feat: typebox mutations (#1221)

    Migrate Zod validation schemas to TypeBox for improved type safety and
    schema definition across multiple mutations, including bond creation,
    fund creation, contact addition, tokenized deposit creation, asset
    transfer, equity creation, yield schedule setting, cryptocurrency
    creation, stablecoin creation, asset withdrawal, collateral updating,
    asset burning, asset minting, bond topping up, asset freezing, and
    general asset transferring. This change enhances the reliability and
    maintainability of the application's data validation processes.

    Enhancements:
    - Replace Zod schemas with TypeBox schemas for various mutations to
    leverage its static type checking and schema definition capabilities.
    - Update the safe-action client to use typeboxAdapter for validation.
    - Improve error logging for TypeBox validation errors by including input
    data and error details.
    - Add descriptions to TypeBox schemas for better documentation and
    clarity.
    - Implement amount validation using TypeBox's Amount function, providing
    more control over minimum and maximum values.
    - Add RoleMap type to validate user roles selection

    Tests:
    - Ensure all mutations with schema changes continue to function
    correctly and validate data as expected.

commit f29892e
Author: Jan Bevers <[email protected]>
Date:   Mon Mar 24 10:51:21 2025 +0100

    fix: user onboarding + user details (#1223)

    Fixes user onboarding and user details functionality by adjusting data
    types, modifying user detail retrieval, and updating authentication
    configurations.

    Bug Fixes:
    - Fixes an issue where event counts were incorrectly typed as BigInt in
    the AssetActivitySchema, changing them to Number.
    - Fixes an issue where user data and account data were not being merged
    correctly in the user list query.
    - Makes the currency field optional during user authentication.

commit 6e8ce1f
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 10:48:16 2025 +0100

    fix assets stats schema

commit 892f4b7
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 10:45:24 2025 +0100

    cleanup console log

commit 791903f
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 10:44:42 2025 +0100

    fix asset activity fragment

commit 70a7dbe
Author: Snigdha Singh <[email protected]>
Date:   Mon Mar 24 10:04:12 2025 +0100

    fix fund predict address
snigdha920 added a commit that referenced this pull request Mar 24, 2025
…-dashboard

* main:
  fix: schema fixes, unit test wait for singe transaction (#1225)
  fix: asset creation and activity (#1224)
  feat: typebox mutations (#1221)
  fix: user onboarding + user details (#1223)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant