Closed
Description
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
- Try to fetch a list of exports against a matterId
- Get the error Error: "Missing required parameters: matterId"
Thanks!