javascript icon indicating copy to clipboard operation
javascript copied to clipboard

Public metadata must be a string containing a valid JSON object

Open himself65 opened this issue 3 years ago • 0 comments

  • [x] Review the documentation: https://docs.clerk.dev/
  • [x] Search for existing issues: https://github.com/clerkinc/javascript/issues
  • [x] Go through package changelog files.
  • [x] Provide the Frontend API key from your application dashboard.

Package + Version

  • [ ] @clerk/clerk-js
  • [ ] @clerk/clerk-react
  • [x] @clerk/nextjs
  • [ ] @clerk/remix
  • [ ] @clerk/types
  • [ ] @clerk/themes
  • [ ] @clerk/clerk-expo
  • [ ] @clerk/backend-core
  • [x] @clerk/clerk-sdk-node
  • [ ] @clerk/edge
  • [ ] other:

Version:

"@clerk/clerk-sdk-node": "^4.0.2",
"@clerk/nextjs": "^4.0.2",

Browser/OS

Chrome latest

Description

import clerk from '@clerk/clerk-sdk-node'
import { withAuth } from '@clerk/nextjs/api'

/**
 * invite a user by email
 */
const invite = withAuth(async (req, res) => {
  if (req.method === 'POST') {
    const { userId } = req.auth
    if (!userId) {
      return res.status(401).json('no userId found')
    }
    const publicMetadata = Object.create(null)
    publicMetadata.userType = 'invite'
    const response = await clerk.invitations.createInvitation({
      emailAddress: req.body.email_address,
      publicMetadata: {
        type: 'invite'
      }
    })
    res.json(response)
    res.status(200)
  } else if (req.method === 'GET') {
    res.json(
      await clerk.invitations.getInvitationList()
    )
  }
})

export default invite
error - ClerkAPIResponseError: Unprocessable Entity
    at Object.request (/Users/himself65/Code/textea-sheet/node_modules/@clerk/clerk-sdk-node/dist/Clerk.js:56:31)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Clerk.request (/Users/himself65/Code/textea-sheet/node_modules/@clerk/backend-core/dist/cjs/api/ClerkBackendApi.js:46:22)
    at async eval (webpack-internal:///(api)/./src/pages/api/invite.ts:27:26)
    at async Object.apiResolver (/Users/himself65/Code/textea-sheet/node_modules/next/dist/server/api-utils/node.js:184:9)
    at async DevServer.runApi (/Users/himself65/Code/textea-sheet/node_modules/next/dist/server/next-server.js:403:9)
    at async Object.fn (/Users/himself65/Code/textea-sheet/node_modules/next/dist/server/base-server.js:493:37)
    at async Router.execute (/Users/himself65/Code/textea-sheet/node_modules/next/dist/server/router.js:222:36)
    at async DevServer.run (/Users/himself65/Code/textea-sheet/node_modules/next/dist/server/base-server.js:612:29)
    at async DevServer.run (/Users/himself65/Code/textea-sheet/node_modules/next/dist/server/dev/next-dev-server.js:569:20) {
  clerkError: true,
  status: 422,
  errors: [
    {
      code: 'form_param_value_invalid',
      message: 'Public metadata must be a string containing a valid JSON object. To reset the public metadata, use an empty JSON object ("{}").',
      longMessage: 'Public metadata must be a string containing a valid JSON object. To reset the public metadata, use an empty JSON object ("{}").',
      meta: [Object]
    }
  ],
  page: '/api/invite'
}

himself65 avatar Aug 16 '22 03:08 himself65