@sinch/sdk-client 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,13 @@
1
1
  import { RequestOptions, RequestPlugin } from '../plugins/core/request-plugin';
2
2
  import { ApiCallParameters, ApiCallParametersWithPagination } from '../api/api-client';
3
3
  import { ErrorContext } from '../api/api-errors';
4
- export declare const manageExpiredToken: (apiCallParameters: ApiCallParameters | ApiCallParametersWithPagination, errorContext: ErrorContext, requestPlugins: RequestPlugin[] | undefined) => Promise<RequestOptions>;
4
+ /**
5
+ * Clear the cached JWT (race-safely — only if the cache still holds the
6
+ * failing one) and re-run the OAuth2 plugin to obtain a fresh token, returning
7
+ * updated request options for a single retry.
8
+ */
9
+ export declare const manageExpiredToken: (apiCallParameters: ApiCallParameters | ApiCallParametersWithPagination, errorContext: ErrorContext, requestPlugins: RequestPlugin[] | undefined, failingJwt?: string) => Promise<RequestOptions>;
5
10
  export declare function buildErrorContext(apiCallParameters: ApiCallParameters): ErrorContext;
6
- export declare function invalidateAndRegenerateJwt(requestPlugins: RequestPlugin[] | undefined, options: RequestOptions, errorContext: ErrorContext): Promise<RequestOptions>;
7
11
  /**
8
12
  * Go through all an object's properties and transform to date the values that match the right format
9
13
  * @param {any} input - the response object after all the response plugins have been run
@@ -2,22 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.reviveDates = exports.manageExpiredToken = void 0;
4
4
  exports.buildErrorContext = buildErrorContext;
5
- exports.invalidateAndRegenerateJwt = invalidateAndRegenerateJwt;
6
5
  const request_plugin_1 = require("../plugins/core/request-plugin");
7
6
  const api_errors_1 = require("../api/api-errors");
8
- const manageExpiredToken = async (apiCallParameters, errorContext, requestPlugins) => {
9
- // Use the circuitBreaker variable to try to regenerate a valid JWT only 3 times
10
- if (!apiCallParameters.circuitBreaker) {
11
- apiCallParameters.circuitBreaker = 1;
12
- }
13
- else {
14
- apiCallParameters.circuitBreaker++;
15
- // Check the circuitBreaker value: if greater than 3, then we stop and throw
16
- if (apiCallParameters.circuitBreaker >= 3) {
17
- throw new api_errors_1.GenericError('Tried to generate a new JWT with no success', errorContext);
18
- }
7
+ /**
8
+ * Clear the cached JWT (race-safely only if the cache still holds the
9
+ * failing one) and re-run the OAuth2 plugin to obtain a fresh token, returning
10
+ * updated request options for a single retry.
11
+ */
12
+ const manageExpiredToken = async (apiCallParameters, errorContext, requestPlugins, failingJwt) => {
13
+ const oauth2Plugin = requestPlugins?.find((plugin) => plugin.getName() === request_plugin_1.RequestPluginEnum.OAUTH2_TOKEN_REQUEST);
14
+ if (!oauth2Plugin) {
15
+ throw new api_errors_1.GenericError('Trying to clear an expired JWT from the cache while the Oauth2Token plugin is not registered to the API client', errorContext);
19
16
  }
20
- return await invalidateAndRegenerateJwt(requestPlugins, apiCallParameters.requestOptions, errorContext);
17
+ oauth2Plugin.clearCachedToken(failingJwt);
18
+ return oauth2Plugin.load().transform(apiCallParameters.requestOptions);
21
19
  };
22
20
  exports.manageExpiredToken = manageExpiredToken;
23
21
  function buildErrorContext(apiCallParameters) {
@@ -27,17 +25,6 @@ function buildErrorContext(apiCallParameters) {
27
25
  url: apiCallParameters.url,
28
26
  };
29
27
  }
30
- async function invalidateAndRegenerateJwt(requestPlugins, options, errorContext) {
31
- const oauth2Plugin = requestPlugins?.find((plugin) => plugin.getName() === request_plugin_1.RequestPluginEnum.OAUTH2_TOKEN_REQUEST);
32
- if (oauth2Plugin) {
33
- oauth2Plugin.invalidateToken();
34
- return oauth2Plugin.load().transform(options);
35
- }
36
- else {
37
- const errorMessage = 'Trying to invalidate an expired JWT while the Oauth2Token plugin is not registered to the API client';
38
- throw new api_errors_1.GenericError(errorMessage, errorContext);
39
- }
40
- }
41
28
  /**
42
29
  * Go through all an object's properties and transform to date the values that match the right format
43
30
  * @param {any} input - the response object after all the response plugins have been run
@@ -1 +1 @@
1
- {"version":3,"file":"api-client-helpers.js","sourceRoot":"","sources":["../../src/client/api-client-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client-helpers.js","sourceRoot":"","sources":["../../src/client/api-client-helpers.ts"],"names":[],"mappings":";;;AAiCA,8CAQC;AAzCD,mEAIwC;AAExC,kDAA+D;AAG/D;;;;GAIG;AACI,MAAM,kBAAkB,GAAG,KAAK,EACrC,iBAAsE,EACtE,YAA0B,EAC1B,cAA2C,EAC3C,UAAmB,EACM,EAAE;IAC3B,MAAM,YAAY,GAAG,cAAc,EAAE,IAAI,CACvC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,kCAAiB,CAAC,oBAAoB,CACxE,CAAC;IACF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,yBAAY,CACpB,gHAAgH,EAChH,YAAY,CACb,CAAC;IACJ,CAAC;IACA,YAAmC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAClE,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACzE,CAAC,CAAC;AAjBW,QAAA,kBAAkB,sBAiB7B;AAEF,SAAgB,iBAAiB,CAC/B,iBAAoC;IAEpC,OAAO;QACL,OAAO,EAAE,iBAAiB,CAAC,OAAO;QAClC,WAAW,EAAE,iBAAiB,CAAC,WAAW;QAC1C,GAAG,EAAE,iBAAiB,CAAC,GAAG;KAC3B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,KAAU,EAAO,EAAE;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,qCAAqC;QACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,wCAAwC;QACxC,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAA,mBAAW,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,qCAAqC;QACrC,OAAO,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AApBW,QAAA,WAAW,eAoBtB;AAEF,MAAM,YAAY,GAAG,CAAC,KAAU,EAAW,EAAE;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,cAAsB,EAAU,EAAE;IAC9D,6CAA6C;IAC7C,MAAM,aAAa,GAAG,kCAAkC,CAAC;IACzD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,MAAM,wBAAwB,GAAG,cAAc,CAAC;QAChD,iGAAiG;QACjG,IAAI,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAClD,cAAc,GAAG,cAAc,GAAG,KAAK,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,cAAc,GAAG,GAAG,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC"}
@@ -116,7 +116,11 @@ class ApiFetchClient extends api_client_1.ApiClient {
116
116
  async sinchFetch(apiCallParameters, errorContext) {
117
117
  let response = await (0, node_fetch_1.default)(apiCallParameters.url, apiCallParameters.requestOptions);
118
118
  if (this.isTokenExpired(response)) {
119
- const requestOptions = await (0, api_client_helpers_1.manageExpiredToken)(apiCallParameters, errorContext, this.apiClientOptions.requestPlugins);
119
+ // Capture the JWT used by the failing request so the OAuth2 plugin can
120
+ // refuse to clear a cached token that has since been refreshed by another caller.
121
+ const failingAuth = apiCallParameters.requestOptions.headers.get('Authorization') || '';
122
+ const failingJwt = failingAuth.startsWith('Bearer ') ? failingAuth.slice('Bearer '.length) : undefined;
123
+ const requestOptions = await (0, api_client_helpers_1.manageExpiredToken)(apiCallParameters, errorContext, this.apiClientOptions.requestPlugins, failingJwt);
120
124
  response = await (0, node_fetch_1.default)(apiCallParameters.url, requestOptions);
121
125
  }
122
126
  return response;
@@ -1 +1 @@
1
- {"version":3,"file":"api-fetch-client.js","sourceRoot":"","sources":["../../src/client/api-fetch-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-fetch-client.js","sourceRoot":"","sources":["../../src/client/api-fetch-client.ts"],"names":[],"mappings":";;;;;;AACA,gDAAoD;AACpD,oDAAyD;AACzD,kDAO2B;AAI3B,kDAK2B;AAC3B,4DAAsD;AACtD,6DAA0F;AAC1F,iFAKwC;AAqBxC,4DAA4D;AAC5D,MAAa,cAAe,SAAQ,sBAAS;IAE3C;;;;;;OAMG;IACH,YAAY,OAAyB;QACnC,KAAK,CAAC;YACJ,GAAG,OAAO;YACV,cAAc,EAAE,CAAC,IAAI,wBAAc,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;YACzE,eAAe,EAAE;gBACf,IAAI,6BAAiB,EAAE;gBACvB,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;aACnC;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IACX,KAAK,CAAC,WAAW,CAAI,iBAAoC;QAC9D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,eAAe,CAAI,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,kBAAkB;IACX,KAAK,CAAC,yBAAyB,CACpC,iBAAkD;QAElD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACrE,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAsB,eAAe,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC,eAAe,CAAI,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IACzE,CAAC;IAED,kBAAkB;IACX,KAAK,CAAC,eAAe,CAAC,iBAAoC;QAC/D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB;IACX,KAAK,CAAC,cAAc,CAAC,iBAAoC;QAC9D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,iBAAoC,EACpC,cAAc,GAAG,KAAK;QAEtB,MAAM,YAAY,GAAG,IAAA,sCAAiB,EAAC,iBAAiB,CAAC,CAAC;QAE1D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEhE,OAAO;gBACL,QAAQ;gBACR,IAAI;gBACJ,iBAAiB;gBACjB,YAAY;aACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,OAAwB;QAExB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAE3E,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,aAAa,CAAC,SAAS,CAAC;QAChC,CAAC;QAED,OAAO,IAAA,gCAAW,EAAC,mBAAmB,CAAM,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,OAAwB;QAExB,IAAI,MAAuC,CAAC;QAC5C,IAAI,SAA4B,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,SAAS,GAAG,IAAI,mCAAsB,CACpC,KAAK,CAAC,OAAO,IAAI,+BAA+B,EAChD,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,EAC/B,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,IAAI,CACb,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,OAAwB;QACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,CAAC,eAAe,CACxB,IAAI,KAAK,CAAC,sBAAsB,CAAC,EACjC,OAAO,CAAC,YAAY,CACrB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,OAAwB;QACvD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,CAAC,eAAe,CACxB,IAAI,KAAK,CAAC,sBAAsB,CAAC,EACjC,OAAO,CAAC,YAAY,CACrB,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvE,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,UAAU,CAAC,iBAAoC,EAAE,YAA0B;QACvF,IAAI,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAEpF,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,uEAAuE;YACvE,kFAAkF;YAClF,MAAM,WAAW,GAAG,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACxF,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvG,MAAM,cAAc,GAAG,MAAM,IAAA,uCAAkB,EAC7C,iBAAiB,EACjB,YAAY,EACZ,IAAI,CAAC,gBAAgB,CAAC,cAAc,EACpC,UAAU,CAAC,CAAC;YACd,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,cAAc,CAAC,QAAkB;QACvC,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG;eACzB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAC9E,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,OAAsB;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CACtC,IAAI,CAAC,gBAAgB,CAAC,eAAe,EACrC,OAAO,CAAC,eAAe,CACxB,CAAC;QAEF,OAAO,OAAO,CAAC,MAAM,CACnB,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,EACD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CACtC,CAAC;IACJ,CAAC;IAEO,mBAAmB,CACzB,OAA0C,EAC1C,OAAwB;QAExB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAClC,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,OAAO;YAC1C,WAAW,EAAE,OAAO,CAAC,iBAAiB,CAAC,WAAW;YAClD,GAAG,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG;YAClC,cAAc,EAAE,OAAO,CAAC,iBAAiB,CAAC,cAAc;SACzD,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,eAAe,CACrB,mBAAwB,EACxB,iBAAkD;QAElD,MAAM,YAAY,GAAa,mBAAmB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC9E,MAAM,iBAAiB,GAAG,IAAA,qDAAsB,EAAC,iBAAiB,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAA,gDAAiB,EAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAE3F,OAAO;YACL,IAAI,EAAE,YAAY,IAAI,EAAE;YACxB,WAAW,EAAE,IAAA,sCAAO,EAAC,mBAAmB,EAAE,iBAAiB,CAAC;YAC5D,aAAa,EAAE,QAAQ;YACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,mDAAoB,EAClC,IAAI,EACJ,iBAAiB,EACjB,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;SACF,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,KAAU,EAAE,YAA0B;QAC5D,IAAI,KAAK,YAAY,yBAAY,EAAE,CAAC;YAClC,OAAO,IAAI,yBAAY,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,+BAAkB,CAC3B,KAAK,CAAC,OAAO,IAAI,eAAe,EAChC,YAAY,CACb,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,OAAgB,EAAE,SAAiB;QACzD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC9D,IAAI,QAAQ,GAAG,eAAe,GAAG,SAAS,CAAC;QAC3C,IAAI,kBAAkB,EAAE,CAAC;YACvB,6CAA6C;YAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAChF,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CAEF;AAlPD,wCAkPC"}
@@ -12,5 +12,10 @@ export declare class Oauth2TokenRequest implements RequestPlugin {
12
12
  private buildAuthorizationHeader;
13
13
  private isTokenValid;
14
14
  load(): PluginRunner<RequestOptions, RequestOptions>;
15
- invalidateToken(): void;
15
+ /**
16
+ * Clear the cached token. If `failingJwt` is supplied, the cache is only
17
+ * cleared when it still holds that exact JWT. This prevents a stale-JWT 401
18
+ * retry from wiping a token that another caller already successfully refreshed.
19
+ */
20
+ clearCachedToken(failingJwt?: string): void;
16
21
  }
@@ -7,6 +7,7 @@ const oauth2_api_1 = require("./oauth2-api");
7
7
  const basicAuthentication_1 = require("../basicAuthentication");
8
8
  const api_fetch_client_1 = require("../../client/api-fetch-client");
9
9
  const domain_1 = require("../../domain");
10
+ const EXPIRY_SAFETY_MARGIN_SEC = 60;
10
11
  class Oauth2TokenRequest {
11
12
  getName() {
12
13
  return request_plugin_1.RequestPluginEnum.OAUTH2_TOKEN_REQUEST;
@@ -28,8 +29,7 @@ class Oauth2TokenRequest {
28
29
  return this.buildAuthorizationHeader();
29
30
  }
30
31
  // If a token refresh is already happening, share the same promise.
31
- // This prevents N concurrent requests from making N auth server calls,
32
- // which can cause 401 errors to surface to the SDK user.
32
+ // This prevents N concurrent requests from making N auth server calls.
33
33
  if (this.pendingTokenRefresh) {
34
34
  return this.pendingTokenRefresh;
35
35
  }
@@ -43,41 +43,43 @@ class Oauth2TokenRequest {
43
43
  }
44
44
  async fetchNewToken() {
45
45
  const oauth2Api = new oauth2_api_1.OAuth2Api(this.apiClient);
46
+ let response;
46
47
  try {
47
- const response = await oauth2Api.postAccessToken();
48
- if (response.access_token) {
49
- this.token = {
50
- value: response.access_token,
51
- status: TokenStatus.VALID,
52
- };
53
- return this.buildAuthorizationHeader();
54
- }
55
- else {
56
- this.token = {
57
- value: '',
58
- status: TokenStatus.INVALID,
59
- };
60
- console.error('The authentication server did not return an access_token.'
61
- + ' Response keys: [' + Object.keys(response).join(', ') + ']');
62
- return {};
63
- }
48
+ response = await oauth2Api.postAccessToken();
64
49
  }
65
50
  catch (e) {
66
- this.token = {
67
- value: '',
68
- status: TokenStatus.INVALID,
69
- };
70
- console.error('An error occurred when trying to get the authentication token - ' + e);
71
- return {};
51
+ // Propagate the auth failure to the caller.
52
+ this.token = undefined;
53
+ throw e;
72
54
  }
55
+ if (!response.access_token) {
56
+ this.token = undefined;
57
+ throw new Error('The authentication server did not return an access_token. Response keys: ['
58
+ + Object.keys(response).join(', ') + ']');
59
+ }
60
+ this.token = {
61
+ value: response.access_token,
62
+ status: TokenStatus.VALID,
63
+ exp: decodeJwtExp(response.access_token),
64
+ };
65
+ return this.buildAuthorizationHeader();
73
66
  }
74
67
  buildAuthorizationHeader() {
75
68
  return { Authorization: `Bearer ${this.token.value}` };
76
69
  }
77
70
  isTokenValid() {
78
- return (this.token
79
- && this.token.status === TokenStatus.VALID
80
- && this.token.value.trim().length > 0);
71
+ if (!this.token
72
+ || this.token.status !== TokenStatus.VALID
73
+ || this.token.value.trim().length === 0) {
74
+ return false;
75
+ }
76
+ // Proactive expiry check: if we could decode the JWT's `exp`, refresh ahead of time.
77
+ // This avoids the round-trip-and-retry pattern at every expiry boundary
78
+ if (this.token.exp !== undefined) {
79
+ const nowSec = Math.floor(Date.now() / 1000);
80
+ return this.token.exp > nowSec + EXPIRY_SAFETY_MARGIN_SEC; // 60s safety margin
81
+ }
82
+ return true;
81
83
  }
82
84
  load() {
83
85
  return {
@@ -86,7 +88,15 @@ class Oauth2TokenRequest {
86
88
  }).load().transform,
87
89
  };
88
90
  }
89
- invalidateToken() {
91
+ /**
92
+ * Clear the cached token. If `failingJwt` is supplied, the cache is only
93
+ * cleared when it still holds that exact JWT. This prevents a stale-JWT 401
94
+ * retry from wiping a token that another caller already successfully refreshed.
95
+ */
96
+ clearCachedToken(failingJwt) {
97
+ if (failingJwt !== undefined && this.token && this.token.value !== failingJwt) {
98
+ return;
99
+ }
90
100
  this.token = undefined;
91
101
  }
92
102
  }
@@ -96,4 +106,21 @@ var TokenStatus;
96
106
  TokenStatus[TokenStatus["INVALID"] = 0] = "INVALID";
97
107
  TokenStatus[TokenStatus["VALID"] = 1] = "VALID";
98
108
  })(TokenStatus || (TokenStatus = {}));
109
+ /**
110
+ * Decode the `exp` claim from a JWT without verifying the signature.
111
+ */
112
+ const decodeJwtExp = (jwt) => {
113
+ const parts = jwt.split('.');
114
+ if (parts.length !== 3) {
115
+ return undefined;
116
+ }
117
+ try {
118
+ const decoded = Buffer.from(parts[1], 'base64url').toString('utf8');
119
+ const payload = JSON.parse(decoded);
120
+ return typeof payload.exp === 'number' ? payload.exp : undefined;
121
+ }
122
+ catch {
123
+ return undefined;
124
+ }
125
+ };
99
126
  //# sourceMappingURL=oauth2-token.request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth2-token.request.js","sourceRoot":"","sources":["../../../src/plugins/oauth2/oauth2-token.request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth2-token.request.js","sourceRoot":"","sources":["../../../src/plugins/oauth2/oauth2-token.request.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinch/sdk-client",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Core services related to interacting with Sinch API",
5
5
  "homepage": "",
6
6
  "repository": {