Skip to content

Error: "Missing required parameters: matterId" #2791

Closed
@FranciscoFHDias

Description

@FranciscoFHDias

Hi,

I have a problem with googleapis with vault part to list exports against a matter. Until lunchtime today (U.K), this code was working. And since this afternoon, for no reason, I continue to get this error:

Error: "Missing required parameters: matterId"

The error is on the call of vault.matters.exports.list but, as you can see, the parameter matterId is passed :

const scope = {
  DRIVE: 'https://www.googleapis.com/auth/drive',
  VAULT: 'https://www.googleapis.com/auth/ediscovery',
  CLOUD_STORAGE: 'https://www.googleapis.com/auth/devstorage.full_control',
}

const getJwToken = (service: 'DRIVE' | 'VAULT' | 'CLOUD_STORAGE') => {
  return jwt.sign(
    JSON.stringify({
      iss: process.env.GOOGLE_CLIENT_EMAIL,
      sub: process.env.GOOGLE_SUB_EMAIL,
      scope: scope[service],
      aud: `https://oauth2.googleapis.com/token`,
      exp: Math.floor(Date.now() / 1000) + 60 * 60,
      iat: Math.floor(Date.now() / 1000) - 30,
    }),
    (process.env.GOOGLE_PRIVATE_KEY as string).replace(/\\n/g, '\n'),
    { header: { alg: 'RS256', typ: 'JWT' } }
  )
}

export const getOAuth2AccessToken = async (service: 'DRIVE' | 'VAULT' | 'CLOUD_STORAGE') => {
  const jwToken = getJwToken(service)

  const { access_token } = (await got
    .post(`https://oauth2.googleapis.com/token`, {
      json: {
        grant_type: `urn:ietf:params:oauth:grant-type:jwt-bearer`,
        assertion: jwToken,
      },
    })
    .json()
    .catch((err) => {
      console.log(`getAccessToken - Google OAuth2 access_token error`, err)

      throw new Error(err)
    })) as {
    access_token: string
    scope: string
    token_type: string
    expires_in: number
  }

  return access_token
}

const getVault = async () => {
  const token = await getOAuth2AccessToken('VAULT')

  const oAuth2Client = new auth.OAuth2(process.env.GOOGLE_CLIENT_ID, process.env.GOOGLE_CLIENT_SECRET, '')
  oAuth2Client.setCredentials({ access_token: token })

  return vault({
    version: `v1`,
    auth: oAuth2Client,
  })
}

export const listMatterExports = async ({ matterId }: vault_v1.Params$Resource$Matters$Exports$List) => {
  const vault = await getVault()

  const retrieveNextPageOfExports = async (
    vaultExports: vault_v1.Schema$Export[],
    pageToken?: string | null
  ): Promise<vault_v1.Schema$Export[]> => {
    if (pageToken) {
      const {
        data: { exports = [], nextPageToken },
      } = await vault.matters.exports.list({ pageToken })

      vaultExports = [...vaultExports, ...exports]

      return await retrieveNextPageOfExports(vaultExports, nextPageToken)
    }

    return vaultExports
  }

  const {
    data: { exports = [], nextPageToken },
  } = await vault.matters.exports.list({ matterId })

  if (nextPageToken && exports) {
    return retrieveNextPageOfExports(exports, nextPageToken)
  }

  return exports
}

Edit

A request using got to https://vault.googleapis.com/v1/matters/{matterId}/exports, works fine. The problem is undoubted with the library validation?!

export const listMatterExports = async ({ matterId }: vault_v1.Params$Resource$Matters$Exports$List) => {
  const token = await getOAuth2AccessToken('VAULT')

  const retrieveNextPageOfExports = async (
    vaultExports: vault_v1.Schema$Export[],
    pageToken?: string | null
  ): Promise<vault_v1.Schema$Export[]> => {
    if (pageToken) {
      const { exports: matterExports = [], nextPageToken } = (await got
        .get(`https://vault.googleapis.com/v1/matters/${matterId}/exports?pageToken=${pageToken}`, {
          headers: {
            authorization: `Bearer ${token}`,
          },
        })
        .json()
        .catch((err) => {
          console.log(`listMatterExports - failed to fetch exports`, err)

          throw new Error(err)
        })) as vault_v1.Schema$ListExportsResponse

      vaultExports = [...vaultExports, ...matterExports]

      return await retrieveNextPageOfExports(vaultExports, nextPageToken)
    }

    return vaultExports
  }

  const { exports: matterExports = [], nextPageToken } = (await got
    .get(`https://vault.googleapis.com/v1/matters/${matterId}/exports`, {
      headers: {
        authorization: `Bearer ${token}`,
      },
    })
    .json()
    .catch((err) => {
      console.log(`listMatterExports - failed to fetch exports`, err)

      throw new Error(err)
    })) as vault_v1.Schema$ListExportsResponse

  if (nextPageToken && matterExports) {
    return await retrieveNextPageOfExports(matterExports, nextPageToken)
  }

  return matterExports
}

Environment details

  • OS: macOs,
  • Node.js version: vv12.22.3
  • npm version: 6.14.13
  • @googleapis/vault version: 0.2.0

Steps to reproduce

  1. Try to fetch a list of exports against a matterId
  2. Get the error Error: "Missing required parameters: matterId"

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    api: vaultIssues related to the Vault API API.priority: p2Moderately-important priority. Fix may not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions