@webex/webex-core 3.12.0-llmrefactor.1 → 3.12.0-llmrefactor.10

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.
Files changed (44) hide show
  1. package/dist/config.js +23 -0
  2. package/dist/config.js.map +1 -1
  3. package/dist/index.js +7 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/interceptors/catalog-url.js +87 -0
  6. package/dist/interceptors/catalog-url.js.map +1 -0
  7. package/dist/interceptors/payload-transformer.js +25 -4
  8. package/dist/interceptors/payload-transformer.js.map +1 -1
  9. package/dist/lib/batcher.js +1 -1
  10. package/dist/lib/credentials/credentials.js +56 -1
  11. package/dist/lib/credentials/credentials.js.map +1 -1
  12. package/dist/lib/credentials/token.js +1 -1
  13. package/dist/lib/services/service-catalog.js +102 -8
  14. package/dist/lib/services/service-catalog.js.map +1 -1
  15. package/dist/lib/services/services.js +74 -44
  16. package/dist/lib/services/services.js.map +1 -1
  17. package/dist/lib/services-v2/service-catalog.js +8 -1
  18. package/dist/lib/services-v2/service-catalog.js.map +1 -1
  19. package/dist/lib/services-v2/services-v2.js +76 -45
  20. package/dist/lib/services-v2/services-v2.js.map +1 -1
  21. package/dist/plugins/logger.js +1 -1
  22. package/dist/webex-core.js +11 -3
  23. package/dist/webex-core.js.map +1 -1
  24. package/package.json +12 -12
  25. package/src/config.js +25 -0
  26. package/src/index.js +1 -0
  27. package/src/interceptors/catalog-url.js +66 -0
  28. package/src/interceptors/payload-transformer.js +23 -1
  29. package/src/lib/credentials/credentials.js +43 -0
  30. package/src/lib/services/service-catalog.js +106 -6
  31. package/src/lib/services/services.js +65 -30
  32. package/src/lib/services-v2/service-catalog.ts +10 -1
  33. package/src/lib/services-v2/services-v2.ts +70 -30
  34. package/src/webex-core.js +8 -0
  35. package/test/integration/spec/services/services.js +148 -113
  36. package/test/integration/spec/services-v2/services-v2.js +134 -99
  37. package/test/unit/spec/credentials/credentials.js +114 -1
  38. package/test/unit/spec/interceptors/catalog-url.js +224 -0
  39. package/test/unit/spec/interceptors/payload-transformer.js +119 -1
  40. package/test/unit/spec/services/service-catalog.js +275 -0
  41. package/test/unit/spec/services/services.js +135 -2
  42. package/test/unit/spec/services-v2/service-catalog.ts +41 -0
  43. package/test/unit/spec/services-v2/services-v2.ts +158 -2
  44. package/test/unit/spec/webex-core.js +77 -1
package/dist/config.js CHANGED
@@ -37,6 +37,15 @@ var _default = exports.default = {
37
37
  * @type {boolean}
38
38
  */
39
39
  useCatalogOverride: false,
40
+ /**
41
+ * When true, skips fetching the preauth catalog during initialization
42
+ * while the user is unauthenticated (no existing token). The catalog is
43
+ * expected to be collected manually later instead. When false (default),
44
+ * the preauth catalog is collected automatically during init.
45
+ *
46
+ * @type {boolean}
47
+ */
48
+ skipPreauthCatalogOnUnauthenticated: false,
40
49
  /**
41
50
  * Maximum time (in milliseconds) to wait for the initial service catalog
42
51
  * collection when `waitForCatalogInit` is enabled, before letting
@@ -75,6 +84,15 @@ var _default = exports.default = {
75
84
  * @type {boolean}
76
85
  */
77
86
  validateDomains: true,
87
+ /**
88
+ * When true, enables the CatalogUrlInterceptor which validates that all
89
+ * outbound request URLs are in the service catalog or allowed domains.
90
+ * This prevents SSRF attacks where attacker-controlled URLs could be
91
+ * sent to the SDK.
92
+ *
93
+ * @type {boolean}
94
+ */
95
+ validateCatalogUrls: false,
78
96
  /**
79
97
  * services that don't need auth validation
80
98
  */
@@ -105,6 +123,11 @@ var _default = exports.default = {
105
123
  cacheU2C: false
106
124
  },
107
125
  payloadTransformer: {
126
+ /**
127
+ * When true, inbound payload transforms run at most once for the same successful response object.
128
+ * This supports request flows that pass a response through more than one interceptor pipeline.
129
+ */
130
+ skipRepeatedInboundTransforms: false,
108
131
  predicates: [],
109
132
  transforms: []
110
133
  },
@@ -1 +1 @@
1
- {"version":3,"names":["_storage","require","_credentialsConfig","_interopRequireDefault","_default","exports","default","maxAppLevelRedirects","maxLocusRedirects","maxAuthenticationReplays","maxReconnectAttempts","onBeforeLogout","trackingIdPrefix","trackingIdSuffix","AlternateLogger","undefined","credentials","CredentialsConfig","fedramp","process","env","ENABLE_FEDRAMP","services","useUserOnboardingServiceForActivations","useCatalogOverride","catalogInitTimeout","discovery","hydra","HYDRA_SERVICE_URL","sqdiscovery","SQDISCOVERY_SERVICE_URL","u2c","U2C_SERVICE_URL","validateDomains","servicesNotNeedValidation","allowedDomains","device","preDiscoveryServices","hydraServiceUrl","metrics","type","calling","cacheU2C","payloadTransformer","predicates","transforms","storage","boundedAdapter","MemoryStoreAdapter","unboundedAdapter"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport {MemoryStoreAdapter} from './lib/storage';\nimport CredentialsConfig from './credentials-config';\n\nexport default {\n maxAppLevelRedirects: 10,\n maxLocusRedirects: 5,\n maxAuthenticationReplays: 1,\n maxReconnectAttempts: 1,\n onBeforeLogout: [],\n trackingIdPrefix: 'webex-js-sdk',\n trackingIdSuffix: '',\n AlternateLogger: undefined,\n credentials: new CredentialsConfig(),\n fedramp: process.env.ENABLE_FEDRAMP || false,\n services: {\n /**\n * When true, uses the user-onboarding service for user activation.\n * When false (default), uses the license service.\n *\n * @type {boolean}\n */\n useUserOnboardingServiceForActivations: false,\n\n /**\n * When true, requests the U2C catalog override.\n *\n * @type {boolean}\n */\n useCatalogOverride: false,\n\n /**\n * Maximum time (in milliseconds) to wait for the initial service catalog\n * collection when `waitForCatalogInit` is enabled, before letting\n * `services.ready` (and therefore `webex.ready`) fire anyway. Prevents a\n * hung catalog request from leaving the app on a permanent spinner.\n *\n * @type {number}\n */\n catalogInitTimeout: 15000,\n\n /**\n * A list of services that are available prior to catalog collection.\n *\n * @type {Object}\n */\n discovery: {\n /**\n * The hydra discovery url.\n *\n * @type {string}\n */\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n\n /**\n * load balanced region info url\n */\n sqdiscovery: process.env.SQDISCOVERY_SERVICE_URL || 'https://ds.ciscospark.com/v1/region',\n\n /**\n * The u2c discovery url\n *\n * @type {string}\n */\n u2c: process.env.U2C_SERVICE_URL || 'https://u2c.wbx2.com/u2c/api/v1',\n },\n\n /**\n * When true, considers all urls in `allowedDomains` as safe for auth tokens\n *\n * @type {boolean}\n */\n validateDomains: true,\n\n /**\n * services that don't need auth validation\n */\n\n servicesNotNeedValidation: ['webex-appapi-service'],\n\n /**\n * Contains a list of allowed domain host addresses.\n *\n * @type {Array<string>}\n */\n allowedDomains: [],\n },\n device: {\n preDiscoveryServices: {\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n hydraServiceUrl: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n },\n validateDomains: true,\n },\n metrics: {\n type: ['behavioral', 'operational'],\n },\n calling: {\n /**\n * Controls whether U2C service catalogs should be cached and warmed from cache.\n * When false, the services layer will skip reading and writing the U2C cache.\n */\n cacheU2C: false,\n },\n payloadTransformer: {\n predicates: [],\n transforms: [],\n },\n storage: {\n boundedAdapter: MemoryStoreAdapter,\n unboundedAdapter: MemoryStoreAdapter,\n },\n};\n"],"mappings":";;;;;;;;AAMA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAPA;AACA;AACA;AAEA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAKe;EACbC,oBAAoB,EAAE,EAAE;EACxBC,iBAAiB,EAAE,CAAC;EACpBC,wBAAwB,EAAE,CAAC;EAC3BC,oBAAoB,EAAE,CAAC;EACvBC,cAAc,EAAE,EAAE;EAClBC,gBAAgB,EAAE,cAAc;EAChCC,gBAAgB,EAAE,EAAE;EACpBC,eAAe,EAAEC,SAAS;EAC1BC,WAAW,EAAE,IAAIC,0BAAiB,CAAC,CAAC;EACpCC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAI,KAAK;EAC5CC,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;IACIC,sCAAsC,EAAE,KAAK;IAE7C;AACJ;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IAEzB;AACJ;AACA;AACA;AACA;IACIC,SAAS,EAAE;MACT;AACN;AACA;AACA;AACA;MACMC,KAAK,EAAER,OAAO,CAACC,GAAG,CAACQ,iBAAiB,IAAI,+BAA+B;MAEvE;AACN;AACA;MACMC,WAAW,EAAEV,OAAO,CAACC,GAAG,CAACU,uBAAuB,IAAI,qCAAqC;MAEzF;AACN;AACA;AACA;AACA;MACMC,GAAG,EAAEZ,OAAO,CAACC,GAAG,CAACY,eAAe,IAAI;IACtC,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAE,IAAI;IAErB;AACJ;AACA;;IAEIC,yBAAyB,EAAE,CAAC,sBAAsB,CAAC;IAEnD;AACJ;AACA;AACA;AACA;IACIC,cAAc,EAAE;EAClB,CAAC;EACDC,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBV,KAAK,EAAER,OAAO,CAACC,GAAG,CAACQ,iBAAiB,IAAI,+BAA+B;MACvEU,eAAe,EAAEnB,OAAO,CAACC,GAAG,CAACQ,iBAAiB,IAAI;IACpD,CAAC;IACDK,eAAe,EAAE;EACnB,CAAC;EACDM,OAAO,EAAE;IACPC,IAAI,EAAE,CAAC,YAAY,EAAE,aAAa;EACpC,CAAC;EACDC,OAAO,EAAE;IACP;AACJ;AACA;AACA;IACIC,QAAQ,EAAE;EACZ,CAAC;EACDC,kBAAkB,EAAE;IAClBC,UAAU,EAAE,EAAE;IACdC,UAAU,EAAE;EACd,CAAC;EACDC,OAAO,EAAE;IACPC,cAAc,EAAEC,2BAAkB;IAClCC,gBAAgB,EAAED;EACpB;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_storage","require","_credentialsConfig","_interopRequireDefault","_default","exports","default","maxAppLevelRedirects","maxLocusRedirects","maxAuthenticationReplays","maxReconnectAttempts","onBeforeLogout","trackingIdPrefix","trackingIdSuffix","AlternateLogger","undefined","credentials","CredentialsConfig","fedramp","process","env","ENABLE_FEDRAMP","services","useUserOnboardingServiceForActivations","useCatalogOverride","skipPreauthCatalogOnUnauthenticated","catalogInitTimeout","discovery","hydra","HYDRA_SERVICE_URL","sqdiscovery","SQDISCOVERY_SERVICE_URL","u2c","U2C_SERVICE_URL","validateDomains","validateCatalogUrls","servicesNotNeedValidation","allowedDomains","device","preDiscoveryServices","hydraServiceUrl","metrics","type","calling","cacheU2C","payloadTransformer","skipRepeatedInboundTransforms","predicates","transforms","storage","boundedAdapter","MemoryStoreAdapter","unboundedAdapter"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport {MemoryStoreAdapter} from './lib/storage';\nimport CredentialsConfig from './credentials-config';\n\nexport default {\n maxAppLevelRedirects: 10,\n maxLocusRedirects: 5,\n maxAuthenticationReplays: 1,\n maxReconnectAttempts: 1,\n onBeforeLogout: [],\n trackingIdPrefix: 'webex-js-sdk',\n trackingIdSuffix: '',\n AlternateLogger: undefined,\n credentials: new CredentialsConfig(),\n fedramp: process.env.ENABLE_FEDRAMP || false,\n services: {\n /**\n * When true, uses the user-onboarding service for user activation.\n * When false (default), uses the license service.\n *\n * @type {boolean}\n */\n useUserOnboardingServiceForActivations: false,\n\n /**\n * When true, requests the U2C catalog override.\n *\n * @type {boolean}\n */\n useCatalogOverride: false,\n\n /**\n * When true, skips fetching the preauth catalog during initialization\n * while the user is unauthenticated (no existing token). The catalog is\n * expected to be collected manually later instead. When false (default),\n * the preauth catalog is collected automatically during init.\n *\n * @type {boolean}\n */\n skipPreauthCatalogOnUnauthenticated: false,\n\n /**\n * Maximum time (in milliseconds) to wait for the initial service catalog\n * collection when `waitForCatalogInit` is enabled, before letting\n * `services.ready` (and therefore `webex.ready`) fire anyway. Prevents a\n * hung catalog request from leaving the app on a permanent spinner.\n *\n * @type {number}\n */\n catalogInitTimeout: 15000,\n\n /**\n * A list of services that are available prior to catalog collection.\n *\n * @type {Object}\n */\n discovery: {\n /**\n * The hydra discovery url.\n *\n * @type {string}\n */\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n\n /**\n * load balanced region info url\n */\n sqdiscovery: process.env.SQDISCOVERY_SERVICE_URL || 'https://ds.ciscospark.com/v1/region',\n\n /**\n * The u2c discovery url\n *\n * @type {string}\n */\n u2c: process.env.U2C_SERVICE_URL || 'https://u2c.wbx2.com/u2c/api/v1',\n },\n\n /**\n * When true, considers all urls in `allowedDomains` as safe for auth tokens\n *\n * @type {boolean}\n */\n validateDomains: true,\n\n /**\n * When true, enables the CatalogUrlInterceptor which validates that all\n * outbound request URLs are in the service catalog or allowed domains.\n * This prevents SSRF attacks where attacker-controlled URLs could be\n * sent to the SDK.\n *\n * @type {boolean}\n */\n validateCatalogUrls: false,\n\n /**\n * services that don't need auth validation\n */\n\n servicesNotNeedValidation: ['webex-appapi-service'],\n\n /**\n * Contains a list of allowed domain host addresses.\n *\n * @type {Array<string>}\n */\n allowedDomains: [],\n },\n device: {\n preDiscoveryServices: {\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n hydraServiceUrl: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n },\n validateDomains: true,\n },\n metrics: {\n type: ['behavioral', 'operational'],\n },\n calling: {\n /**\n * Controls whether U2C service catalogs should be cached and warmed from cache.\n * When false, the services layer will skip reading and writing the U2C cache.\n */\n cacheU2C: false,\n },\n payloadTransformer: {\n /**\n * When true, inbound payload transforms run at most once for the same successful response object.\n * This supports request flows that pass a response through more than one interceptor pipeline.\n */\n skipRepeatedInboundTransforms: false,\n predicates: [],\n transforms: [],\n },\n storage: {\n boundedAdapter: MemoryStoreAdapter,\n unboundedAdapter: MemoryStoreAdapter,\n },\n};\n"],"mappings":";;;;;;;;AAMA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAPA;AACA;AACA;AAEA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAKe;EACbC,oBAAoB,EAAE,EAAE;EACxBC,iBAAiB,EAAE,CAAC;EACpBC,wBAAwB,EAAE,CAAC;EAC3BC,oBAAoB,EAAE,CAAC;EACvBC,cAAc,EAAE,EAAE;EAClBC,gBAAgB,EAAE,cAAc;EAChCC,gBAAgB,EAAE,EAAE;EACpBC,eAAe,EAAEC,SAAS;EAC1BC,WAAW,EAAE,IAAIC,0BAAiB,CAAC,CAAC;EACpCC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAI,KAAK;EAC5CC,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;IACIC,sCAAsC,EAAE,KAAK;IAE7C;AACJ;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,mCAAmC,EAAE,KAAK;IAE1C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IAEzB;AACJ;AACA;AACA;AACA;IACIC,SAAS,EAAE;MACT;AACN;AACA;AACA;AACA;MACMC,KAAK,EAAET,OAAO,CAACC,GAAG,CAACS,iBAAiB,IAAI,+BAA+B;MAEvE;AACN;AACA;MACMC,WAAW,EAAEX,OAAO,CAACC,GAAG,CAACW,uBAAuB,IAAI,qCAAqC;MAEzF;AACN;AACA;AACA;AACA;MACMC,GAAG,EAAEb,OAAO,CAACC,GAAG,CAACa,eAAe,IAAI;IACtC,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAE,IAAI;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,mBAAmB,EAAE,KAAK;IAE1B;AACJ;AACA;;IAEIC,yBAAyB,EAAE,CAAC,sBAAsB,CAAC;IAEnD;AACJ;AACA;AACA;AACA;IACIC,cAAc,EAAE;EAClB,CAAC;EACDC,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBX,KAAK,EAAET,OAAO,CAACC,GAAG,CAACS,iBAAiB,IAAI,+BAA+B;MACvEW,eAAe,EAAErB,OAAO,CAACC,GAAG,CAACS,iBAAiB,IAAI;IACpD,CAAC;IACDK,eAAe,EAAE;EACnB,CAAC;EACDO,OAAO,EAAE;IACPC,IAAI,EAAE,CAAC,YAAY,EAAE,aAAa;EACpC,CAAC;EACDC,OAAO,EAAE;IACP;AACJ;AACA;AACA;IACIC,QAAQ,EAAE;EACZ,CAAC;EACDC,kBAAkB,EAAE;IAClB;AACJ;AACA;AACA;IACIC,6BAA6B,EAAE,KAAK;IACpCC,UAAU,EAAE,EAAE;IACdC,UAAU,EAAE;EACd,CAAC;EACDC,OAAO,EAAE;IACPC,cAAc,EAAEC,2BAAkB;IAClCC,gBAAgB,EAAED;EACpB;AACF,CAAC","ignoreList":[]}
package/dist/index.js CHANGED
@@ -20,6 +20,12 @@ _Object$defineProperty(exports, "Batcher", {
20
20
  return _batcher.default;
21
21
  }
22
22
  });
23
+ _Object$defineProperty(exports, "CatalogUrlInterceptor", {
24
+ enumerable: true,
25
+ get: function get() {
26
+ return _catalogUrl.default;
27
+ }
28
+ });
23
29
  _Object$defineProperty(exports, "Credentials", {
24
30
  enumerable: true,
25
31
  get: function get() {
@@ -315,6 +321,7 @@ var _webexHttpError = _interopRequireDefault(require("./lib/webex-http-error"));
315
321
  var _statelessWebexPlugin = _interopRequireDefault(require("./lib/stateless-webex-plugin"));
316
322
  var _webexPlugin = _interopRequireDefault(require("./lib/webex-plugin"));
317
323
  var _auth = _interopRequireDefault(require("./interceptors/auth"));
324
+ var _catalogUrl = _interopRequireDefault(require("./interceptors/catalog-url"));
318
325
  var _networkTiming = _interopRequireDefault(require("./interceptors/network-timing"));
319
326
  var _payloadTransformer = _interopRequireDefault(require("./interceptors/payload-transformer"));
320
327
  var _redirect = _interopRequireDefault(require("./interceptors/redirect"));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["require","_credentials","_services","_servicesV","_serviceConstants","_interopRequireWildcard","exports","serviceConstants","_storage","_webexCore","_webexHttpError","_interopRequireDefault","_statelessWebexPlugin","_webexPlugin","_auth","_networkTiming","_payloadTransformer","_redirect","_responseLogger","_requestEvent","_requestLogger","_requestTiming","_userAgent","_proxy","_webexTrackingId","_webexUserAgent","_rateLimit","_embargo","_defaultOptions","_hostmap","_service","_serverError","_batcher","_page","_config","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n *\n * Services is currently a part of webex-core due to how the contents of\n * the original internal-plugin-services needed to be accessed when webex-core\n * is initialized. As a plugin outside of webex-core, it would initialize after\n * credentials, causing all requests prior to its initialization to fail\n * federation requirements, and instead send requests to the environmentally-\n * assigned urls.\n */\n\nimport './plugins/logger';\nimport './lib/credentials';\nimport './lib/services';\n\nexport {Credentials, filterScope, grantErrors, sortScope, Token} from './lib/credentials';\n\nexport {\n ServiceCatalog,\n ServiceRegistry,\n ServiceState,\n Services,\n ServiceHost,\n ServiceUrl,\n} from './lib/services';\n\nexport {ServiceCatalogV2, ServicesV2, ServiceDetail} from './lib/services-v2';\nexport * as serviceConstants from './lib/constants';\nexport {\n makeWebexStore,\n makeWebexPluginStore,\n MemoryStoreAdapter,\n NotFoundError,\n persist,\n StorageError,\n waitForValue,\n} from './lib/storage';\n\nexport {default, registerPlugin, registerInternalPlugin} from './webex-core';\n\nexport {default as WebexHttpError} from './lib/webex-http-error';\nexport {default as StatelessWebexPlugin} from './lib/stateless-webex-plugin';\nexport {default as WebexPlugin} from './lib/webex-plugin';\nexport {default as AuthInterceptor} from './interceptors/auth';\nexport {default as NetworkTimingInterceptor} from './interceptors/network-timing';\nexport {default as PayloadTransformerInterceptor} from './interceptors/payload-transformer';\nexport {default as RedirectInterceptor} from './interceptors/redirect';\nexport {default as ResponseLoggerInterceptor} from './interceptors/response-logger';\nexport {default as RequestEventInterceptor} from './interceptors/request-event';\nexport {default as RequestLoggerInterceptor} from './interceptors/request-logger';\nexport {default as RequestTimingInterceptor} from './interceptors/request-timing';\nexport {default as UserAgentInterceptor} from './interceptors/user-agent';\nexport {default as ProxyInterceptor} from './interceptors/proxy';\nexport {default as WebexTrackingIdInterceptor} from './interceptors/webex-tracking-id';\nexport {sequenceNumbers as webexTrackingIdSequenceNumbers} from './interceptors/webex-tracking-id';\nexport {default as WebexUserAgentInterceptor} from './interceptors/webex-user-agent';\nexport {default as RateLimitInterceptor} from './interceptors/rate-limit';\nexport {default as EmbargoInterceptor} from './interceptors/embargo';\nexport {default as DefaultOptionsInterceptor} from './interceptors/default-options';\nexport {default as HostMapInterceptor} from './lib/interceptors/hostmap';\nexport {default as ServiceInterceptor} from './lib/interceptors/service';\nexport {default as ServerErrorInterceptor} from './lib/interceptors/server-error';\n\nexport {default as Batcher} from './lib/batcher';\nexport {default as Page} from './lib/page';\nexport {default as config} from './config';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["require","_credentials","_services","_servicesV","_serviceConstants","_interopRequireWildcard","exports","serviceConstants","_storage","_webexCore","_webexHttpError","_interopRequireDefault","_statelessWebexPlugin","_webexPlugin","_auth","_catalogUrl","_networkTiming","_payloadTransformer","_redirect","_responseLogger","_requestEvent","_requestLogger","_requestTiming","_userAgent","_proxy","_webexTrackingId","_webexUserAgent","_rateLimit","_embargo","_defaultOptions","_hostmap","_service","_serverError","_batcher","_page","_config","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n *\n * Services is currently a part of webex-core due to how the contents of\n * the original internal-plugin-services needed to be accessed when webex-core\n * is initialized. As a plugin outside of webex-core, it would initialize after\n * credentials, causing all requests prior to its initialization to fail\n * federation requirements, and instead send requests to the environmentally-\n * assigned urls.\n */\n\nimport './plugins/logger';\nimport './lib/credentials';\nimport './lib/services';\n\nexport {Credentials, filterScope, grantErrors, sortScope, Token} from './lib/credentials';\n\nexport {\n ServiceCatalog,\n ServiceRegistry,\n ServiceState,\n Services,\n ServiceHost,\n ServiceUrl,\n} from './lib/services';\n\nexport {ServiceCatalogV2, ServicesV2, ServiceDetail} from './lib/services-v2';\nexport * as serviceConstants from './lib/constants';\nexport {\n makeWebexStore,\n makeWebexPluginStore,\n MemoryStoreAdapter,\n NotFoundError,\n persist,\n StorageError,\n waitForValue,\n} from './lib/storage';\n\nexport {default, registerPlugin, registerInternalPlugin} from './webex-core';\n\nexport {default as WebexHttpError} from './lib/webex-http-error';\nexport {default as StatelessWebexPlugin} from './lib/stateless-webex-plugin';\nexport {default as WebexPlugin} from './lib/webex-plugin';\nexport {default as AuthInterceptor} from './interceptors/auth';\nexport {default as CatalogUrlInterceptor} from './interceptors/catalog-url';\nexport {default as NetworkTimingInterceptor} from './interceptors/network-timing';\nexport {default as PayloadTransformerInterceptor} from './interceptors/payload-transformer';\nexport {default as RedirectInterceptor} from './interceptors/redirect';\nexport {default as ResponseLoggerInterceptor} from './interceptors/response-logger';\nexport {default as RequestEventInterceptor} from './interceptors/request-event';\nexport {default as RequestLoggerInterceptor} from './interceptors/request-logger';\nexport {default as RequestTimingInterceptor} from './interceptors/request-timing';\nexport {default as UserAgentInterceptor} from './interceptors/user-agent';\nexport {default as ProxyInterceptor} from './interceptors/proxy';\nexport {default as WebexTrackingIdInterceptor} from './interceptors/webex-tracking-id';\nexport {sequenceNumbers as webexTrackingIdSequenceNumbers} from './interceptors/webex-tracking-id';\nexport {default as WebexUserAgentInterceptor} from './interceptors/webex-user-agent';\nexport {default as RateLimitInterceptor} from './interceptors/rate-limit';\nexport {default as EmbargoInterceptor} from './interceptors/embargo';\nexport {default as DefaultOptionsInterceptor} from './interceptors/default-options';\nexport {default as HostMapInterceptor} from './lib/interceptors/hostmap';\nexport {default as ServiceInterceptor} from './lib/interceptors/service';\nexport {default as ServerErrorInterceptor} from './lib/interceptors/server-error';\n\nexport {default as Batcher} from './lib/batcher';\nexport {default as Page} from './lib/page';\nexport {default as config} from './config';\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
+ _Object$defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.default = void 0;
10
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
13
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
14
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
16
+ var _httpCore = require("@webex/http-core");
17
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
18
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /*!
19
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
20
+ */
21
+ /**
22
+ * Validates that request URLs are in the service catalog.
23
+ * Prevents SSRF attacks by blocking requests to unknown hosts.
24
+ * @class
25
+ */
26
+ var CatalogUrlInterceptor = exports.default = /*#__PURE__*/function (_Interceptor) {
27
+ function CatalogUrlInterceptor() {
28
+ (0, _classCallCheck2.default)(this, CatalogUrlInterceptor);
29
+ return _callSuper(this, CatalogUrlInterceptor, arguments);
30
+ }
31
+ (0, _inherits2.default)(CatalogUrlInterceptor, _Interceptor);
32
+ return (0, _createClass2.default)(CatalogUrlInterceptor, [{
33
+ key: "onRequest",
34
+ value:
35
+ /**
36
+ * @see {@link Interceptor#onRequest}
37
+ * @param {Object} options
38
+ * @returns {Object}
39
+ */
40
+ function onRequest(options) {
41
+ var _this$webex$internal;
42
+ if (options.service && !options.uri && !options.url) {
43
+ return _promise.default.resolve(options);
44
+ }
45
+ var url = options.uri || options.url;
46
+
47
+ // No URL to validate
48
+ if (!url) {
49
+ return _promise.default.resolve(options);
50
+ }
51
+
52
+ // Check if services plugin is available
53
+ if (!((_this$webex$internal = this.webex.internal) !== null && _this$webex$internal !== void 0 && _this$webex$internal.services)) {
54
+ var _this$webex$logger, _this$webex$logger$wa;
55
+ // Services not loaded yet - allow but log
56
+ (_this$webex$logger = this.webex.logger) === null || _this$webex$logger === void 0 ? void 0 : (_this$webex$logger$wa = _this$webex$logger.warn) === null || _this$webex$logger$wa === void 0 ? void 0 : _this$webex$logger$wa.call(_this$webex$logger, "catalog-url: Cannot validate URL (services not loaded): ".concat(url));
57
+ return _promise.default.resolve(options);
58
+ }
59
+ var services = this.webex.internal.services;
60
+
61
+ // Check if URL is in service catalog
62
+ if (services.getServiceFromUrl(url)) {
63
+ return _promise.default.resolve(options);
64
+ }
65
+
66
+ // Honor allowedDomains (same policy as auth interceptor)
67
+ if (services.validateDomains && services.hasAllowedDomains() && services.isAllowedDomainUrl(url)) {
68
+ return _promise.default.resolve(options);
69
+ }
70
+
71
+ // URL not in catalog or allowed domains - block the request
72
+ return _promise.default.reject(new Error("Request blocked: URL not in service catalog or allowed domains: ".concat(url, ".")));
73
+ }
74
+ }], [{
75
+ key: "create",
76
+ value:
77
+ /**
78
+ * @returns {CatalogUrlInterceptor}
79
+ */
80
+ function create() {
81
+ return new CatalogUrlInterceptor({
82
+ webex: this
83
+ });
84
+ }
85
+ }]);
86
+ }(_httpCore.Interceptor);
87
+ //# sourceMappingURL=catalog-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_httpCore","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","CatalogUrlInterceptor","exports","_Interceptor","_classCallCheck2","arguments","_inherits2","_createClass2","key","value","onRequest","options","_this$webex$internal","service","uri","url","_promise","resolve","webex","internal","services","_this$webex$logger","_this$webex$logger$wa","logger","warn","concat","getServiceFromUrl","validateDomains","hasAllowedDomains","isAllowedDomainUrl","reject","Error","create","Interceptor"],"sources":["catalog-url.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * Validates that request URLs are in the service catalog.\n * Prevents SSRF attacks by blocking requests to unknown hosts.\n * @class\n */\nexport default class CatalogUrlInterceptor extends Interceptor {\n /**\n * @returns {CatalogUrlInterceptor}\n */\n static create() {\n return new CatalogUrlInterceptor({webex: this});\n }\n\n /**\n * @see {@link Interceptor#onRequest}\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options.service && !options.uri && !options.url) {\n return Promise.resolve(options);\n }\n\n const url = options.uri || options.url;\n\n // No URL to validate\n if (!url) {\n return Promise.resolve(options);\n }\n\n // Check if services plugin is available\n if (!this.webex.internal?.services) {\n // Services not loaded yet - allow but log\n this.webex.logger?.warn?.(`catalog-url: Cannot validate URL (services not loaded): ${url}`);\n\n return Promise.resolve(options);\n }\n\n const {services} = this.webex.internal;\n\n // Check if URL is in service catalog\n if (services.getServiceFromUrl(url)) {\n return Promise.resolve(options);\n }\n\n // Honor allowedDomains (same policy as auth interceptor)\n if (\n services.validateDomains &&\n services.hasAllowedDomains() &&\n services.isAllowedDomainUrl(url)\n ) {\n return Promise.resolve(options);\n }\n\n // URL not in catalog or allowed domains - block the request\n return Promise.reject(\n new Error(`Request blocked: URL not in service catalog or allowed domains: ${url}.`)\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,23 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _Object$defineProperty2 = require("@babel/runtime-corejs2/core-js/object/define-property");
5
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
- _Object$defineProperty(exports, "__esModule", {
6
+ _Object$defineProperty2(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
9
  exports.default = void 0;
10
- var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
11
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
12
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
13
12
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
14
13
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
15
14
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
15
+ var _symbol = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/symbol"));
16
+ var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
17
+ var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
18
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
19
  var _httpCore = require("@webex/http-core");
17
20
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
18
21
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /*!
19
22
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
20
23
  */
24
+ var inboundTransformPromise = (0, _symbol.default)('inboundTransformPromise');
25
+
21
26
  /**
22
27
  * @class
23
28
  */
@@ -54,7 +59,23 @@ var PayloadTransformerInterceptor = exports.default = /*#__PURE__*/function (_In
54
59
  if (options.disableTransform) {
55
60
  return response;
56
61
  }
57
- return this.webex.transform('inbound', response);
62
+ if (!this.webex.config.payloadTransformer.skipRepeatedInboundTransforms) {
63
+ return this.webex.transform('inbound', response);
64
+ }
65
+ if (response[inboundTransformPromise]) {
66
+ return response[inboundTransformPromise];
67
+ }
68
+ var transformPromise = this.webex.transform('inbound', response).catch(function (error) {
69
+ (0, _deleteProperty.default)(response, inboundTransformPromise);
70
+ throw error;
71
+ });
72
+
73
+ // Store the in-flight promise so concurrent interceptor pipelines share the same transform.
74
+ (0, _defineProperty.default)(response, inboundTransformPromise, {
75
+ configurable: true,
76
+ value: transformPromise
77
+ });
78
+ return transformPromise;
58
79
  }
59
80
 
60
81
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["_httpCore","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","PayloadTransformerInterceptor","exports","_Interceptor","_classCallCheck2","arguments","_inherits2","_createClass2","key","value","onRequest","options","noTransform","webex","transform","onResponse","response","disableTransform","onResponseError","reason","then","r","_promise","reject","create","Interceptor"],"sources":["payload-transformer.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class PayloadTransformerInterceptor extends Interceptor {\n /**\n * @param {Object} options\n * @returns {PayloadTransformerInterceptor}\n */\n static create() {\n return new PayloadTransformerInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options.noTransform) {\n return options;\n }\n\n return this.webex.transform('outbound', options);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n if (options.disableTransform) {\n return response;\n }\n\n return this.webex.transform('inbound', response);\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n return this.webex.transform('inbound', reason).then((r) => Promise.reject(r || reason));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,OAAA;AAA6C,SAAAC,WAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,WAAAD,CAAA,OAAAE,gBAAA,CAAAC,OAAA,EAAAH,CAAA,OAAAI,2BAAA,CAAAD,OAAA,EAAAJ,CAAA,EAAAM,yBAAA,KAAAC,kBAAA,CAAAN,CAAA,EAAAC,CAAA,YAAAC,gBAAA,CAAAC,OAAA,EAAAJ,CAAA,EAAAQ,WAAA,IAAAP,CAAA,CAAAQ,KAAA,CAAAT,CAAA,EAAAE,CAAA;AAAA,SAAAI,0BAAA,cAAAN,CAAA,IAAAU,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAN,kBAAA,CAAAG,OAAA,iCAAAV,CAAA,aAAAM,yBAAA,YAAAA,0BAAA,aAAAN,CAAA,UAJ7C;AACA;AACA;AAIA;AACA;AACA;AAFA,IAGqBc,6BAA6B,GAAAC,OAAA,CAAAX,OAAA,0BAAAY,YAAA;EAAA,SAAAF,8BAAA;IAAA,IAAAG,gBAAA,CAAAb,OAAA,QAAAU,6BAAA;IAAA,OAAAf,UAAA,OAAAe,6BAAA,EAAAI,SAAA;EAAA;EAAA,IAAAC,UAAA,CAAAf,OAAA,EAAAU,6BAAA,EAAAE,YAAA;EAAA,WAAAI,aAAA,CAAAhB,OAAA,EAAAU,6BAAA;IAAAO,GAAA;IAAAC,KAAA;IAShD;AACF;AACA;AACA;AACA;IACE,SAAAC,SAASA,CAACC,OAAO,EAAE;MACjB,IAAIA,OAAO,CAACC,WAAW,EAAE;QACvB,OAAOD,OAAO;MAChB;MAEA,OAAO,IAAI,CAACE,KAAK,CAACC,SAAS,CAAC,UAAU,EAAEH,OAAO,CAAC;IAClD;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAH,GAAA;IAAAC,KAAA,EAMA,SAAAM,UAAUA,CAACJ,OAAO,EAAEK,QAAQ,EAAE;MAC5B,IAAIL,OAAO,CAACM,gBAAgB,EAAE;QAC5B,OAAOD,QAAQ;MACjB;MAEA,OAAO,IAAI,CAACH,KAAK,CAACC,SAAS,CAAC,SAAS,EAAEE,QAAQ,CAAC;IAClD;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAR,GAAA;IAAAC,KAAA,EAMA,SAAAS,eAAeA,CAACP,OAAO,EAAEQ,MAAM,EAAE;MAC/B,OAAO,IAAI,CAACN,KAAK,CAACC,SAAS,CAAC,SAAS,EAAEK,MAAM,CAAC,CAACC,IAAI,CAAC,UAACC,CAAC;QAAA,OAAKC,QAAA,CAAA/B,OAAA,CAAQgC,MAAM,CAACF,CAAC,IAAIF,MAAM,CAAC;MAAA,EAAC;IACzF;EAAC;IAAAX,GAAA;IAAAC,KAAA;IA3CD;AACF;AACA;AACA;IACE,SAAOe,MAAMA,CAAA,EAAG;MACd,OAAO,IAAIvB,6BAA6B,CAAC;QAACY,KAAK,EAAE;MAAI,CAAC,CAAC;IACzD;EAAC;AAAA,EAPwDY,qBAAW","ignoreList":[]}
1
+ {"version":3,"names":["_httpCore","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","inboundTransformPromise","_symbol","PayloadTransformerInterceptor","exports","_Interceptor","_classCallCheck2","arguments","_inherits2","_createClass2","key","value","onRequest","options","noTransform","webex","transform","onResponse","response","disableTransform","config","payloadTransformer","skipRepeatedInboundTransforms","transformPromise","catch","error","_deleteProperty","_defineProperty","configurable","onResponseError","reason","then","r","_promise","reject","create","Interceptor"],"sources":["payload-transformer.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst inboundTransformPromise = Symbol('inboundTransformPromise');\n\n/**\n * @class\n */\nexport default class PayloadTransformerInterceptor extends Interceptor {\n /**\n * @param {Object} options\n * @returns {PayloadTransformerInterceptor}\n */\n static create() {\n return new PayloadTransformerInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options.noTransform) {\n return options;\n }\n\n return this.webex.transform('outbound', options);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n if (options.disableTransform) {\n return response;\n }\n\n if (!this.webex.config.payloadTransformer.skipRepeatedInboundTransforms) {\n return this.webex.transform('inbound', response);\n }\n\n if (response[inboundTransformPromise]) {\n return response[inboundTransformPromise];\n }\n\n const transformPromise = this.webex.transform('inbound', response).catch((error) => {\n Reflect.deleteProperty(response, inboundTransformPromise);\n\n throw error;\n });\n\n // Store the in-flight promise so concurrent interceptor pipelines share the same transform.\n Object.defineProperty(response, inboundTransformPromise, {\n configurable: true,\n value: transformPromise,\n });\n\n return transformPromise;\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n return this.webex.transform('inbound', reason).then((r) => Promise.reject(r || reason));\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -302,7 +302,7 @@ var Batcher = _webexPlugin.default.extend({
302
302
  fingerprintResponse: function fingerprintResponse(item) {
303
303
  throw new Error('fingerprintResponse() must be implemented');
304
304
  },
305
- version: "3.12.0-llmrefactor.1"
305
+ version: "3.12.0-llmrefactor.10"
306
306
  });
307
307
  var _default2 = exports.default = Batcher;
308
308
  //# sourceMappingURL=batcher.js.map
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
+ var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
5
+ var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
6
+ var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
7
+ var _Array$isArray = require("@babel/runtime-corejs2/core-js/array/is-array");
4
8
  var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
5
9
  var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
10
  var _Object$getOwnPropertyDescriptor2 = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
@@ -20,6 +24,7 @@ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/pr
20
24
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
21
25
  var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor"));
22
26
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
27
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
23
28
  var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/applyDecoratedDescriptor"));
24
29
  var _querystring = _interopRequireDefault(require("querystring"));
25
30
  var _url = _interopRequireDefault(require("url"));
@@ -41,6 +46,9 @@ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _obj;
41
46
  function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor2(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
42
47
  function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor2(e, r).enumerable; })), t.push.apply(t, o); } return t; }
43
48
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor2(t, r)); }); } return e; }
49
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof _Symbol && r[_Symbol$iterator] || r["@@iterator"]; if (!t) { if (_Array$isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
50
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
51
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
44
52
  /**
45
53
  * @class
46
54
  */
@@ -219,6 +227,53 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
219
227
  // Return the token section that contains the OrgId.
220
228
  return fields[2];
221
229
  },
230
+ /**
231
+ * Extract the CI user ID [cis_uuid] from a provided token.
232
+ *
233
+ * @private
234
+ * @param {string} token - The access token to extract the user ID from.
235
+ * @throws {Error} - If the token cannot be parsed or does not contain a user ID.
236
+ * @returns {string} - The CI user ID.
237
+ */
238
+ extractUserIdFromToken: function extractUserIdFromToken() {
239
+ var token = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
240
+ // User tokens are JWT-like; the middle section holds a base64-encoded JSON payload.
241
+ var payload = JSON.parse(_common.base64.decode(token.split('.')[1]));
242
+ if (!payload.cis_uuid) {
243
+ throw new Error('the provided token does not contain a user ID');
244
+ }
245
+ return payload.cis_uuid;
246
+ },
247
+ /**
248
+ * Get the CI user ID [cis_uuid] of the currently authenticated user.
249
+ *
250
+ * Checks the supertoken first, then falls back to any stored user tokens.
251
+ *
252
+ * @throws {Error} - If the user ID could not be determined from any token.
253
+ * @returns {string} - The CI user ID.
254
+ */
255
+ getUserId: function getUserId() {
256
+ var tokens = [this.supertoken].concat((0, _toConsumableArray2.default)(this.userTokens.models));
257
+ var _iterator = _createForOfIteratorHelper(tokens),
258
+ _step;
259
+ try {
260
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
261
+ var token = _step.value;
262
+ if (token && token.access_token) {
263
+ try {
264
+ return this.extractUserIdFromToken(token.access_token);
265
+ } catch (_unused2) {
266
+ // token wasn't parseable or lacked a user ID; try the next one
267
+ }
268
+ }
269
+ }
270
+ } catch (err) {
271
+ _iterator.e(err);
272
+ } finally {
273
+ _iterator.f();
274
+ }
275
+ throw new Error('could not extract the user ID from any available token');
276
+ },
222
277
  /**
223
278
  * Generates a Third-Party Login URL pointing at IdBroker's
224
279
  * `/idb/ThirdPartyLogin` endpoint. Used by the social-provider sign-in
@@ -600,7 +655,7 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
600
655
  this.refresh();
601
656
  }
602
657
  },
603
- version: "3.12.0-llmrefactor.1"
658
+ version: "3.12.0-llmrefactor.10"
604
659
  }, (0, _applyDecoratedDescriptor2.default)(_obj, "getUserToken", [_dec, _dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "getUserToken"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "initialize", [_dec3], (0, _getOwnPropertyDescriptor.default)(_obj, "initialize"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "invalidate", [_common.oneFlight, _dec4], (0, _getOwnPropertyDescriptor.default)(_obj, "invalidate"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "refresh", [_common.oneFlight, _dec5, _dec6], (0, _getOwnPropertyDescriptor.default)(_obj, "refresh"), _obj), _obj));
605
660
  var _default = exports.default = Credentials;
606
661
  //# sourceMappingURL=credentials.js.map