I need to save a public key to my postgres database from graphql. Using a Uint8Array seems the best option to save this with (let me know if you have a better suggestion). Therefore I have the entity:
@ObjectType()
@Entity()
export class Wallet extends BaseEntity {
@Field()
@PrimaryGeneratedColumn()
id!: number;
@Field()
@Column({ type: 'bytea' })
public_key!: Uint8Array;
}
And the resolver:
@Mutation(() => User)
async createUser(
@Arg("email") email: string,
@Arg("wallets", _type => [Uint8Array], { nullable: true }) wallets: Uint8Array[],
@Ctx() { em }: MyContext
): Promise<User> {
// input validation
const user = {
email: email,
wallets: (wallets ? wallets.map(e => ({ 'public_key': e })) : [])
}
return { user: await em.save(User, user) };
}
CannotDetermineGraphQLTypeError: Cannot determine GraphQL input type for argument named 'wallets' of 'createUser' of 'UserResolver' class. Is the value, that is used as its TS type or explicit type, decorated with a proper decorator or is it a proper input value?
I'm not sure I understand this error properly, can I not use Uint8Array as an input to my mutation or am I doing it incorrectly?
GraphQL does not support binary types out of the box. It is recommended to use Base-64 encoded strings instead, which works well for small payloads. Read more: Binary in GraphQL