Specific endpoint call fails by fetch of node v18

Open
#999 6 comments 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
node.js, typescript
Domain
api, backend

Research direction

Reproduce the request from the issue using Node v18.10.0, SDK 3.0.2, and the applications endpoint, then compare it with Node v16 and NODE_OPTIONS=--no-experimental-fetch. Start by tracing the SDK's fetch-based request path around GraphRequest.ts and GraphErrorHandler.ts. Done means fetching a specific application returns its properties under Node 18 without the Invalid language specified error.

Written by the indexing model from the issue text.

Description

Bug - P1

Bug Report

Prerequisites

  • Can you reproduce the problem?
  • Are you running the latest version?
  • Are you reporting to the correct repository?
  • Did you perform a cursory search?

For more information, see the CONTRIBUTING guide.

Description

The fetch of node v18 introduces a bug to msgraph-sdk-javascript.

This is simple code.

  public async getApplications(): Promise<any> {
    return await this.client
      .api(`/applications`)
      .get();
  }

  public async getApplication(): Promise<any> {
    return await this.client
      .api(`/applications/deadbeef-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)
      .get();
  }

This works well with node v16.
However, in v18 it outputs following error.

❯ npx ts-node script/nishida-sample.ts
https://graph.microsoft.com/v1.0/applications/deadbeef-xxxx-xxxx-xxxx-xxxxxxxxxxxx
(node:99543) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/@microsoft/microsoft-graph-client/src/GraphError.ts:61
                super(message || (baseError && baseError.message));
  ^
GraphError: Invalid language specified.
    at new GraphError (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/@microsoft/microsoft-graph-client/src/GraphError.ts:61:3)
    at Function.GraphErrorHandler.constructErrorFromResponse (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/@microsoft/microsoft-graph-client/src/GraphErrorHandler.ts:76:18)
    at Function.<anonymous> (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/@microsoft/microsoft-graph-client/src/GraphErrorHandler.ts:102:31)
    at step (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/tslib/tslib.js:144:27)
    at Object.next (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/tslib/tslib.js:125:57)
    at /Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/tslib/tslib.js:118:75
    at new Promise (<anonymous>)
    at __awaiter (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/tslib/tslib.js:114:16)
    at Function.GraphErrorHandler.getError (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/@microsoft/microsoft-graph-client/lib/src/GraphErrorHandler.js:85:38)
    at GraphRequest.<anonymous> (/Users/kazufumi.nishida/code/_infra_others/graph-api-sandbox/node_modules/@microsoft/microsoft-graph-client/src/GraphRequest.ts:391:55) {
  statusCode: 400,
  code: 'Request_BadRequest',
  requestId: '329b85ba-dc7a-4712-b9b7-89e3907972c8',
  date: 2022-10-11T18:44:18.000Z,
  body: '{"code":"Request_BadRequest","message":"Invalid language specified.","innerError":{"date":"2022-10-12T03:44:18","request-id":"329b85ba-dc7a-4712-b9b7-89e3907972c8","client-request-id":"2729c80a-94c7-748f-31c2-fe56bb594a84"}}'
}

Also, it works once more with --no-experimental-fetch.

❯ NODE_OPTIONS=--no-experimental-fetch npx ts-node script/nishida-sample.ts
https://graph.microsoft.com/v1.0/applications/deadbeef-xxxx-xxxx-xxxx-xxxxxxxxxxxx
{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#applications/$entity","id":"
...
}

Steps to Reproduce

  1. Use node v18
  2. Setup ordinally (https://github.com/microsoftgraph/msgraph-sdk-javascript/tree/099afbe343cd279f218036a83eb2831ad065f46d#getting-started)
  3. Access v1.0/applications/deadbeef-xxxx-xxxx-xxxx-xxxxxxxxxxxx (use existing application id in your tenant)

Expected behavior: [What you expected to happen]

Return application property

Actual behavior: [What actually happened]

GraphError: Invalid language specified.

Additional Context

I was struggling 13 hours because new fetch of v18 works well except GET v1.0/applications/deadbeef-xxxx-xxxx-xxxx-xxxxxxxxxxxx endpoint. E.g, GET v1.0/applications endpoint (list applications) works correctly.

Usage Information

Request ID - Value of the requestId field if you are receiving a Graph API error response

329b85ba-dc7a-4712-b9b7-89e3907972c8

SDK Version - [SDK version you are using]

3.0.2

  • Node (Check, if using Node version of SDK)

Node Version - [The version of Node you are using]

❯ node --version
v18.10.0
  • Browser (Check, if using Browser version of SDK)

Browser Name - [The name of Browser that you are using for SDK]

Version - [The version of the browser you are using]

P.S.

Thank you good library. I'm happy to code with type informations.

Dominant language
TypeScript
Stars
833
Forks
240
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoftgraph/msgraph-sdk-javascript

All issues in microsoftgraph/msgraph-sdk-javascript

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.