@mcp-abap-adt/auth-providers 2.2.2 → 4.0.0

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 (71) hide show
  1. package/CHANGELOG.md +193 -0
  2. package/README.md +825 -64
  3. package/dist/__tests__/integration/stand/formLogin.d.ts +68 -0
  4. package/dist/__tests__/integration/stand/formLogin.d.ts.map +1 -0
  5. package/dist/__tests__/integration/stand/formLogin.js +194 -0
  6. package/dist/auth/callbackServer.js +2 -2
  7. package/dist/auth/passcodeAuth.d.ts +25 -0
  8. package/dist/auth/passcodeAuth.d.ts.map +1 -0
  9. package/dist/auth/passcodeAuth.js +62 -0
  10. package/dist/auth/saml2Auth.d.ts +6 -2
  11. package/dist/auth/saml2Auth.d.ts.map +1 -1
  12. package/dist/auth/saml2Auth.js +9 -20
  13. package/dist/auth/samlBearerAssertion.d.ts +24 -0
  14. package/dist/auth/samlBearerAssertion.d.ts.map +1 -0
  15. package/dist/auth/samlBearerAssertion.js +102 -0
  16. package/dist/auth/strictXml.d.ts +13 -0
  17. package/dist/auth/strictXml.d.ts.map +1 -0
  18. package/dist/auth/strictXml.js +21 -0
  19. package/dist/errors/AssertionValidationError.d.ts +15 -0
  20. package/dist/errors/AssertionValidationError.d.ts.map +1 -0
  21. package/dist/errors/AssertionValidationError.js +24 -0
  22. package/dist/errors/TokenProviderErrors.d.ts +2 -0
  23. package/dist/errors/TokenProviderErrors.d.ts.map +1 -1
  24. package/dist/errors/TokenProviderErrors.js +3 -1
  25. package/dist/index.d.ts +6 -3
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +13 -2
  28. package/dist/providers/Saml2BearerProvider.d.ts +1 -0
  29. package/dist/providers/Saml2BearerProvider.d.ts.map +1 -1
  30. package/dist/providers/Saml2BearerProvider.js +20 -2
  31. package/dist/providers/Saml2PureProvider.d.ts +1 -0
  32. package/dist/providers/Saml2PureProvider.d.ts.map +1 -1
  33. package/dist/providers/Saml2PureProvider.js +19 -5
  34. package/dist/providers/UaaPasscodeProvider.d.ts +43 -0
  35. package/dist/providers/UaaPasscodeProvider.d.ts.map +1 -0
  36. package/dist/providers/UaaPasscodeProvider.js +86 -0
  37. package/dist/providers/index.d.ts +2 -2
  38. package/dist/providers/index.d.ts.map +1 -1
  39. package/dist/providers/index.js +3 -3
  40. package/dist/providers/saml2Utils.d.ts +49 -2
  41. package/dist/providers/saml2Utils.d.ts.map +1 -1
  42. package/dist/providers/saml2Utils.js +94 -2
  43. package/dist/strategies/index.d.ts +1 -1
  44. package/dist/strategies/index.d.ts.map +1 -1
  45. package/dist/strategies/index.js +2 -1
  46. package/dist/strategies/manualStrategies.d.ts +7 -0
  47. package/dist/strategies/manualStrategies.d.ts.map +1 -1
  48. package/dist/strategies/manualStrategies.js +21 -0
  49. package/dist/validation/assertionValidator.d.ts +28 -0
  50. package/dist/validation/assertionValidator.d.ts.map +1 -0
  51. package/dist/validation/assertionValidator.js +444 -0
  52. package/dist/validation/documentIds.d.ts +15 -0
  53. package/dist/validation/documentIds.d.ts.map +1 -0
  54. package/dist/validation/documentIds.js +32 -0
  55. package/dist/validation/inMemoryReplayStore.d.ts +22 -0
  56. package/dist/validation/inMemoryReplayStore.d.ts.map +1 -0
  57. package/dist/validation/inMemoryReplayStore.js +49 -0
  58. package/dist/validation/signedNode.d.ts +54 -0
  59. package/dist/validation/signedNode.d.ts.map +1 -0
  60. package/dist/validation/signedNode.js +171 -0
  61. package/dist/validation/xsdDateTime.d.ts +17 -0
  62. package/dist/validation/xsdDateTime.d.ts.map +1 -0
  63. package/dist/validation/xsdDateTime.js +67 -0
  64. package/package.json +14 -8
  65. package/bin/auth-device-flow.ts +0 -114
  66. package/dist/auth/deviceFlowAuth.d.ts +0 -43
  67. package/dist/auth/deviceFlowAuth.d.ts.map +0 -1
  68. package/dist/auth/deviceFlowAuth.js +0 -168
  69. package/dist/providers/DeviceFlowProvider.d.ts +0 -32
  70. package/dist/providers/DeviceFlowProvider.d.ts.map +0 -1
  71. package/dist/providers/DeviceFlowProvider.js +0 -86
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * An assertion was refused, and by which check.
4
+ *
5
+ * The check is a field rather than something to read out of the message: a
6
+ * consumer telling "your identity provider declined" from "this was not
7
+ * addressed to us" should not be parsing prose to do it.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.AssertionValidationError = void 0;
11
+ const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
12
+ const TokenProviderErrors_1 = require("./TokenProviderErrors");
13
+ class AssertionValidationError extends TokenProviderErrors_1.TokenProviderError {
14
+ check;
15
+ constructor(check, message) {
16
+ super(message, interfaces_auth_1.ASSERTION_ERROR_CODES.VALIDATION_ERROR);
17
+ this.name = 'AssertionValidationError';
18
+ this.check = check;
19
+ // Every sibling in TokenProviderErrors.ts does this; without it
20
+ // `instanceof` fails across a compiled boundary.
21
+ Object.setPrototypeOf(this, AssertionValidationError.prototype);
22
+ }
23
+ }
24
+ exports.AssertionValidationError = AssertionValidationError;
@@ -46,4 +46,6 @@ export declare class BrowserAuthError extends TokenProviderError {
46
46
  readonly cause?: Error | undefined;
47
47
  constructor(message: string, cause?: Error | undefined);
48
48
  }
49
+ export type { AssertionCheck } from './AssertionValidationError';
50
+ export { AssertionValidationError } from './AssertionValidationError';
49
51
  //# sourceMappingURL=TokenProviderErrors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TokenProviderErrors.d.ts","sourceRoot":"","sources":["../../src/errors/TokenProviderErrors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAM/B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,kBAAkB;aAGhC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC"}
1
+ {"version":3,"file":"TokenProviderErrors.d.ts","sourceRoot":"","sources":["../../src/errors/TokenProviderErrors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAM/B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,kBAAkB;aAGhC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC;AAED,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * to enable better error handling and debugging.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.BrowserAuthError = exports.ServiceKeyError = exports.SessionDataError = exports.RefreshError = exports.ValidationError = exports.TokenProviderError = void 0;
9
+ exports.AssertionValidationError = exports.BrowserAuthError = exports.ServiceKeyError = exports.SessionDataError = exports.RefreshError = exports.ValidationError = exports.TokenProviderError = void 0;
10
10
  const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
11
11
  /**
12
12
  * Base class for all token provider errors
@@ -86,3 +86,5 @@ class BrowserAuthError extends TokenProviderError {
86
86
  }
87
87
  }
88
88
  exports.BrowserAuthError = BrowserAuthError;
89
+ var AssertionValidationError_1 = require("./AssertionValidationError");
90
+ Object.defineProperty(exports, "AssertionValidationError", { enumerable: true, get: function () { return AssertionValidationError_1.AssertionValidationError; } });
package/dist/index.d.ts CHANGED
@@ -8,11 +8,14 @@ export { withBrowserCallbackServer } from './auth/callbackServer';
8
8
  export type { OidcCallbackResult } from './auth/oidcBrowserAuth';
9
9
  export { withOidcCallbackServer } from './auth/oidcBrowserAuth';
10
10
  export { withSamlCallbackServer } from './auth/saml2Auth';
11
+ export { type AssertionCheck, AssertionValidationError, } from './errors/AssertionValidationError';
11
12
  export { BrowserAuthError, RefreshError, ServiceKeyError, SessionDataError, TokenProviderError, ValidationError, } from './errors/TokenProviderErrors';
12
- export type { AuthorizationCodeProviderConfig, ClientCredentialsProviderConfig, DeviceFlowProviderConfig, OidcBrowserProviderConfig, OidcDeviceFlowProviderConfig, OidcPasswordProviderConfig, OidcTokenExchangeProviderConfig, Saml2BearerProviderConfig, Saml2PureProviderConfig, } from './providers';
13
- export { AuthorizationCodeProvider, BaseTokenProvider, ClientCredentialsProvider, DeviceFlowProvider, OidcBrowserProvider, OidcDeviceFlowProvider, OidcPasswordProvider, OidcTokenExchangeProvider, Saml2BearerProvider, Saml2PureProvider, } from './providers';
13
+ export type { AuthorizationCodeProviderConfig, ClientCredentialsProviderConfig, OidcBrowserProviderConfig, OidcDeviceFlowProviderConfig, OidcPasswordProviderConfig, OidcTokenExchangeProviderConfig, Saml2BearerProviderConfig, Saml2PureProviderConfig, UaaPasscodeProviderConfig, } from './providers';
14
+ export { AuthorizationCodeProvider, BaseTokenProvider, ClientCredentialsProvider, OidcBrowserProvider, OidcDeviceFlowProvider, OidcPasswordProvider, OidcTokenExchangeProvider, Saml2BearerProvider, Saml2PureProvider, UaaPasscodeProvider, } from './providers';
14
15
  export { SsoProviderFactory } from './sso/SsoProviderFactory';
15
16
  export type { SsoProviderConfig, SsoProviderInstance } from './sso/types';
16
17
  export type { BrowserCallbackStrategyOptions, CallbackStrategyOptions, ExternalCodeStrategyOptions, ManualStrategyOptions, StaticCodeStrategyOptions, } from './strategies';
17
- export { asOidcResult, BrowserCallbackStrategy, browserCallbackStrategy, DEFAULT_CALLBACK_PORT, DEFAULT_LOGIN_TIMEOUT_MS, externalCodeStrategy, manualPasteStrategy, manualSamlResponseStrategy, oidcCallbackStrategy, samlCallbackStrategy, staticCodeStrategy, } from './strategies';
18
+ export { asOidcResult, BrowserCallbackStrategy, browserCallbackStrategy, DEFAULT_CALLBACK_PORT, DEFAULT_LOGIN_TIMEOUT_MS, externalCodeStrategy, manualPasscodeStrategy, manualPasteStrategy, manualSamlResponseStrategy, oidcCallbackStrategy, samlCallbackStrategy, staticCodeStrategy, } from './strategies';
19
+ export { createSignedAssertionValidator, createSignedResponseValidator, type ShippedValidatorOptions, } from './validation/assertionValidator';
20
+ export { createInMemoryReplayStore, defaultReplayStore, } from './validation/inMemoryReplayStore';
18
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,KAAK,cAAc,EACnB,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,kCAAkC,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * Provides token providers
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.staticCodeStrategy = exports.samlCallbackStrategy = exports.oidcCallbackStrategy = exports.manualSamlResponseStrategy = exports.manualPasteStrategy = exports.externalCodeStrategy = exports.DEFAULT_LOGIN_TIMEOUT_MS = exports.DEFAULT_CALLBACK_PORT = exports.browserCallbackStrategy = exports.BrowserCallbackStrategy = exports.asOidcResult = exports.SsoProviderFactory = exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.DeviceFlowProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = exports.ValidationError = exports.TokenProviderError = exports.SessionDataError = exports.ServiceKeyError = exports.RefreshError = exports.BrowserAuthError = exports.withSamlCallbackServer = exports.withOidcCallbackServer = exports.withBrowserCallbackServer = void 0;
9
+ exports.defaultReplayStore = exports.createInMemoryReplayStore = exports.createSignedResponseValidator = exports.createSignedAssertionValidator = exports.staticCodeStrategy = exports.samlCallbackStrategy = exports.oidcCallbackStrategy = exports.manualSamlResponseStrategy = exports.manualPasteStrategy = exports.manualPasscodeStrategy = exports.externalCodeStrategy = exports.DEFAULT_LOGIN_TIMEOUT_MS = exports.DEFAULT_CALLBACK_PORT = exports.browserCallbackStrategy = exports.BrowserCallbackStrategy = exports.asOidcResult = exports.SsoProviderFactory = exports.UaaPasscodeProvider = exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = exports.ValidationError = exports.TokenProviderError = exports.SessionDataError = exports.ServiceKeyError = exports.RefreshError = exports.BrowserAuthError = exports.AssertionValidationError = exports.withSamlCallbackServer = exports.withOidcCallbackServer = exports.withBrowserCallbackServer = void 0;
10
10
  // Callback server factories — "take the transport this package gives".
11
11
  var callbackServer_1 = require("./auth/callbackServer");
12
12
  Object.defineProperty(exports, "withBrowserCallbackServer", { enumerable: true, get: function () { return callbackServer_1.withBrowserCallbackServer; } });
@@ -15,6 +15,8 @@ Object.defineProperty(exports, "withOidcCallbackServer", { enumerable: true, get
15
15
  var saml2Auth_1 = require("./auth/saml2Auth");
16
16
  Object.defineProperty(exports, "withSamlCallbackServer", { enumerable: true, get: function () { return saml2Auth_1.withSamlCallbackServer; } });
17
17
  // Errors
18
+ var AssertionValidationError_1 = require("./errors/AssertionValidationError");
19
+ Object.defineProperty(exports, "AssertionValidationError", { enumerable: true, get: function () { return AssertionValidationError_1.AssertionValidationError; } });
18
20
  var TokenProviderErrors_1 = require("./errors/TokenProviderErrors");
19
21
  Object.defineProperty(exports, "BrowserAuthError", { enumerable: true, get: function () { return TokenProviderErrors_1.BrowserAuthError; } });
20
22
  Object.defineProperty(exports, "RefreshError", { enumerable: true, get: function () { return TokenProviderErrors_1.RefreshError; } });
@@ -27,13 +29,13 @@ var providers_1 = require("./providers");
27
29
  Object.defineProperty(exports, "AuthorizationCodeProvider", { enumerable: true, get: function () { return providers_1.AuthorizationCodeProvider; } });
28
30
  Object.defineProperty(exports, "BaseTokenProvider", { enumerable: true, get: function () { return providers_1.BaseTokenProvider; } });
29
31
  Object.defineProperty(exports, "ClientCredentialsProvider", { enumerable: true, get: function () { return providers_1.ClientCredentialsProvider; } });
30
- Object.defineProperty(exports, "DeviceFlowProvider", { enumerable: true, get: function () { return providers_1.DeviceFlowProvider; } });
31
32
  Object.defineProperty(exports, "OidcBrowserProvider", { enumerable: true, get: function () { return providers_1.OidcBrowserProvider; } });
32
33
  Object.defineProperty(exports, "OidcDeviceFlowProvider", { enumerable: true, get: function () { return providers_1.OidcDeviceFlowProvider; } });
33
34
  Object.defineProperty(exports, "OidcPasswordProvider", { enumerable: true, get: function () { return providers_1.OidcPasswordProvider; } });
34
35
  Object.defineProperty(exports, "OidcTokenExchangeProvider", { enumerable: true, get: function () { return providers_1.OidcTokenExchangeProvider; } });
35
36
  Object.defineProperty(exports, "Saml2BearerProvider", { enumerable: true, get: function () { return providers_1.Saml2BearerProvider; } });
36
37
  Object.defineProperty(exports, "Saml2PureProvider", { enumerable: true, get: function () { return providers_1.Saml2PureProvider; } });
38
+ Object.defineProperty(exports, "UaaPasscodeProvider", { enumerable: true, get: function () { return providers_1.UaaPasscodeProvider; } });
37
39
  // SSO factory
38
40
  var SsoProviderFactory_1 = require("./sso/SsoProviderFactory");
39
41
  Object.defineProperty(exports, "SsoProviderFactory", { enumerable: true, get: function () { return SsoProviderFactory_1.SsoProviderFactory; } });
@@ -45,8 +47,17 @@ Object.defineProperty(exports, "browserCallbackStrategy", { enumerable: true, ge
45
47
  Object.defineProperty(exports, "DEFAULT_CALLBACK_PORT", { enumerable: true, get: function () { return strategies_1.DEFAULT_CALLBACK_PORT; } });
46
48
  Object.defineProperty(exports, "DEFAULT_LOGIN_TIMEOUT_MS", { enumerable: true, get: function () { return strategies_1.DEFAULT_LOGIN_TIMEOUT_MS; } });
47
49
  Object.defineProperty(exports, "externalCodeStrategy", { enumerable: true, get: function () { return strategies_1.externalCodeStrategy; } });
50
+ Object.defineProperty(exports, "manualPasscodeStrategy", { enumerable: true, get: function () { return strategies_1.manualPasscodeStrategy; } });
48
51
  Object.defineProperty(exports, "manualPasteStrategy", { enumerable: true, get: function () { return strategies_1.manualPasteStrategy; } });
49
52
  Object.defineProperty(exports, "manualSamlResponseStrategy", { enumerable: true, get: function () { return strategies_1.manualSamlResponseStrategy; } });
50
53
  Object.defineProperty(exports, "oidcCallbackStrategy", { enumerable: true, get: function () { return strategies_1.oidcCallbackStrategy; } });
51
54
  Object.defineProperty(exports, "samlCallbackStrategy", { enumerable: true, get: function () { return strategies_1.samlCallbackStrategy; } });
52
55
  Object.defineProperty(exports, "staticCodeStrategy", { enumerable: true, get: function () { return strategies_1.staticCodeStrategy; } });
56
+ // SAML assertion validation — the two shipped validators and the replay store,
57
+ // or bring your own IAssertionValidator / IAssertionReplayStore.
58
+ var assertionValidator_1 = require("./validation/assertionValidator");
59
+ Object.defineProperty(exports, "createSignedAssertionValidator", { enumerable: true, get: function () { return assertionValidator_1.createSignedAssertionValidator; } });
60
+ Object.defineProperty(exports, "createSignedResponseValidator", { enumerable: true, get: function () { return assertionValidator_1.createSignedResponseValidator; } });
61
+ var inMemoryReplayStore_1 = require("./validation/inMemoryReplayStore");
62
+ Object.defineProperty(exports, "createInMemoryReplayStore", { enumerable: true, get: function () { return inMemoryReplayStore_1.createInMemoryReplayStore; } });
63
+ Object.defineProperty(exports, "defaultReplayStore", { enumerable: true, get: function () { return inMemoryReplayStore_1.defaultReplayStore; } });
@@ -14,6 +14,7 @@ export interface Saml2BearerProviderConfig extends Saml2CommonConfig, Saml2Beare
14
14
  }
15
15
  export declare class Saml2BearerProvider extends BaseTokenProvider {
16
16
  private config;
17
+ private readonly validator;
17
18
  constructor(config: Saml2BearerProviderConfig);
18
19
  protected getAuthType(): OAuth2GrantType;
19
20
  protected performLogin(): Promise<ITokenResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"Saml2BearerProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2BearerProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAK9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAOtB,MAAM,WAAW,yBACf,SAAQ,iBAAiB,EACvB,yBAAyB;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,EAAE,yBAAyB;IAiB7C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAoBrD;;;;OAIG;cACa,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAqBxD"}
1
+ {"version":3,"file":"Saml2BearerProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2BearerProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAM9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAQtB,MAAM,WAAW,yBACf,SAAQ,iBAAiB,EACvB,yBAAyB;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;gBAEpC,MAAM,EAAE,yBAAyB;IAqB7C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAgCrD;;;;OAIG;cACa,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAqBxD"}
@@ -8,15 +8,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.Saml2BearerProvider = void 0;
9
9
  const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
10
10
  const saml2TokenExchange_1 = require("../auth/saml2TokenExchange");
11
+ const samlBearerAssertion_1 = require("../auth/samlBearerAssertion");
11
12
  const BaseTokenProvider_1 = require("./BaseTokenProvider");
12
13
  const saml2Utils_1 = require("./saml2Utils");
13
14
  class Saml2BearerProvider extends BaseTokenProvider_1.BaseTokenProvider {
14
15
  config;
16
+ validator;
15
17
  constructor(config) {
16
18
  super();
17
19
  // A pre-built URL with no declared ACS cannot be verified against whatever
18
20
  // the strategy binds, so it is refused here rather than at login time.
19
21
  (0, saml2Utils_1.validateSamlConfig)(config);
22
+ // Before anything reaches a browser or a network: a missing certificate is
23
+ // the consumer's mistake, and finding it after a completed login wastes
24
+ // theirs.
25
+ this.validator = (0, saml2Utils_1.resolveAssertionValidator)(config, 'bearer');
20
26
  this.config = config;
21
27
  this.logger = config.logger;
22
28
  if (config.accessToken) {
@@ -31,9 +37,21 @@ class Saml2BearerProvider extends BaseTokenProvider_1.BaseTokenProvider {
31
37
  return interfaces_auth_1.AUTH_TYPE_SAML2_BEARER;
32
38
  }
33
39
  async performLogin() {
34
- const samlResponse = await (0, saml2Utils_1.getSamlAssertion)(this.config);
40
+ const { payload, requestId, acsUrl } = await (0, saml2Utils_1.getSamlAssertion)(this.config);
41
+ // Validation establishes trust before anything reaches the token
42
+ // endpoint; it does not change what is sent beyond toBearerAssertion's
43
+ // conversion below.
44
+ await this.validator.validate(payload, {
45
+ expectedInResponseTo: requestId,
46
+ audience: this.config.spEntityId,
47
+ acsUrl,
48
+ expectedIssuer: this.config.idpEntityId,
49
+ logger: this.logger,
50
+ });
35
51
  const tokenUrl = (0, saml2Utils_1.resolveTokenUrl)(this.config);
36
- const tokens = await (0, saml2TokenExchange_1.exchangeSamlAssertion)(samlResponse, tokenUrl, this.config.clientId, this.config.clientSecret, this.logger);
52
+ // RFC 7522 takes one base64url Assertion; a login delivers the whole
53
+ // Response in standard base64, which a conforming endpoint refuses.
54
+ const tokens = await (0, saml2TokenExchange_1.exchangeSamlAssertion)((0, samlBearerAssertion_1.toBearerAssertion)(payload), tokenUrl, this.config.clientId, this.config.clientSecret, this.logger);
37
55
  return {
38
56
  authorizationToken: tokens.accessToken,
39
57
  refreshToken: tokens.refreshToken,
@@ -13,6 +13,7 @@ export interface Saml2PureProviderConfig extends Saml2CommonConfig {
13
13
  }
14
14
  export declare class Saml2PureProvider extends BaseTokenProvider {
15
15
  private config;
16
+ private readonly validator;
16
17
  constructor(config: Saml2PureProviderConfig);
17
18
  protected getAuthType(): OAuth2GrantType;
18
19
  protected performLogin(): Promise<ITokenResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"Saml2PureProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2PureProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3D;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,EAAE,uBAAuB;IAU3C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;cAarC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAGxD"}
1
+ {"version":3,"file":"Saml2PureProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2PureProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAOtD,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3D;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;gBAEpC,MAAM,EAAE,uBAAuB;IAc3C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;cAuBrC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAGxD"}
@@ -7,16 +7,20 @@
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.Saml2PureProvider = void 0;
9
9
  const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
10
- const saml2Auth_1 = require("../auth/saml2Auth");
11
10
  const BaseTokenProvider_1 = require("./BaseTokenProvider");
12
11
  const saml2Utils_1 = require("./saml2Utils");
13
12
  class Saml2PureProvider extends BaseTokenProvider_1.BaseTokenProvider {
14
13
  config;
14
+ validator;
15
15
  constructor(config) {
16
16
  super();
17
17
  // A pre-built URL with no declared ACS cannot be verified against whatever
18
18
  // the strategy binds, so it is refused here rather than at login time.
19
19
  (0, saml2Utils_1.validateSamlConfig)(config);
20
+ // Before anything reaches a browser or a network: a missing certificate is
21
+ // the consumer's mistake, and finding it after a completed login wastes
22
+ // theirs.
23
+ this.validator = (0, saml2Utils_1.resolveAssertionValidator)(config, 'pure');
20
24
  this.config = config;
21
25
  this.logger = config.logger;
22
26
  this.tokenType = 'saml';
@@ -25,14 +29,24 @@ class Saml2PureProvider extends BaseTokenProvider_1.BaseTokenProvider {
25
29
  return interfaces_auth_1.AUTH_TYPE_USER_TOKEN;
26
30
  }
27
31
  async performLogin() {
28
- const samlResponse = await (0, saml2Utils_1.getSamlAssertion)(this.config);
29
- const expiresAt = (0, saml2Auth_1.parseSamlNotOnOrAfter)(samlResponse);
30
- const sessionCookies = await this.config.cookieProvider(samlResponse);
32
+ const { payload, requestId, acsUrl } = await (0, saml2Utils_1.getSamlAssertion)(this.config);
33
+ // acsUrl is where the strategy actually listened — with an ephemeral port
34
+ // the configured value is usually absent and never authoritative.
35
+ const validated = await this.validator.validate(payload, {
36
+ expectedInResponseTo: requestId,
37
+ audience: this.config.spEntityId,
38
+ acsUrl,
39
+ expectedIssuer: this.config.idpEntityId,
40
+ logger: this.logger,
41
+ });
42
+ const sessionCookies = await this.config.cookieProvider(payload);
31
43
  return {
32
44
  authorizationToken: sessionCookies,
33
45
  authType: interfaces_auth_1.AUTH_TYPE_USER_TOKEN,
34
46
  tokenType: 'saml',
35
- expiresAt,
47
+ // ITokenResult.expiresAt is an epoch-ms number, unlike
48
+ // ValidatedAssertion.expiresAt, which is a Date.
49
+ expiresAt: validated.expiresAt.getTime(),
36
50
  };
37
51
  }
38
52
  async performRefresh() {
@@ -0,0 +1,43 @@
1
+ /**
2
+ * UAA / XSUAA one-time passcode provider — the login `cf login --sso` uses.
3
+ *
4
+ * Nothing is opened and nothing listens on this machine: the user fetches a
5
+ * code from `<uaaUrl>/passcode` in any browser, anywhere, logging in however
6
+ * the identity zone asks (SSO through a corporate IdP, MFA), and hands it to
7
+ * the strategy. The provider exchanges it for tokens and refreshes them
8
+ * afterwards, so the user is asked again only when the refresh token is gone.
9
+ */
10
+ import type { IAuthorizationStrategy, ITokenResult, OAuth2GrantType } from '@mcp-abap-adt/interfaces-auth';
11
+ import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
12
+ import { BaseTokenProvider } from './BaseTokenProvider';
13
+ export interface UaaPasscodeProviderConfig {
14
+ /** UAA / XSUAA base URL, e.g. `https://<subdomain>.authentication.<region>.hana.ondemand.com`. */
15
+ uaaUrl: string;
16
+ /** A client allowed the `password` grant; add `refresh_token` to keep the session. */
17
+ clientId: string;
18
+ /** Omitted for a public client, which authenticates with an empty secret. */
19
+ clientSecret?: string;
20
+ /**
21
+ * How the user's code reaches the provider. The strategy is handed
22
+ * `<uaaUrl>/passcode` as the URL to send the user to, and returns the code.
23
+ * Defaults to `manualPasscodeStrategy()`: announce the URL, read the code
24
+ * from the terminal.
25
+ */
26
+ authorization?: IAuthorizationStrategy<string>;
27
+ accessToken?: string;
28
+ refreshToken?: string;
29
+ logger?: ILogger;
30
+ }
31
+ export declare class UaaPasscodeProvider extends BaseTokenProvider {
32
+ private readonly config;
33
+ constructor(config: UaaPasscodeProviderConfig);
34
+ protected getAuthType(): OAuth2GrantType;
35
+ private get baseUrl();
36
+ protected performLogin(): Promise<ITokenResult>;
37
+ /**
38
+ * A failure is thrown, not handled: BaseTokenProvider drops the refresh
39
+ * token and asks for a new passcode through performLogin().
40
+ */
41
+ protected performRefresh(): Promise<ITokenResult>;
42
+ }
43
+ //# sourceMappingURL=UaaPasscodeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UaaPasscodeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/UaaPasscodeProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAI9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;gBAEvC,MAAM,EAAE,yBAAyB;IAa7C,SAAS,CAAC,WAAW,IAAI,eAAe;IAIxC,OAAO,KAAK,OAAO,GAElB;cAEe,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAqCrD;;;OAGG;cACa,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAkBxD"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * UAA / XSUAA one-time passcode provider — the login `cf login --sso` uses.
4
+ *
5
+ * Nothing is opened and nothing listens on this machine: the user fetches a
6
+ * code from `<uaaUrl>/passcode` in any browser, anywhere, logging in however
7
+ * the identity zone asks (SSO through a corporate IdP, MFA), and hands it to
8
+ * the strategy. The provider exchanges it for tokens and refreshes them
9
+ * afterwards, so the user is asked again only when the refresh token is gone.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UaaPasscodeProvider = void 0;
13
+ const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
14
+ const passcodeAuth_1 = require("../auth/passcodeAuth");
15
+ const tokenRefresher_1 = require("../auth/tokenRefresher");
16
+ const manualStrategies_1 = require("../strategies/manualStrategies");
17
+ const BaseTokenProvider_1 = require("./BaseTokenProvider");
18
+ class UaaPasscodeProvider extends BaseTokenProvider_1.BaseTokenProvider {
19
+ config;
20
+ constructor(config) {
21
+ super();
22
+ this.config = config;
23
+ this.logger = config.logger;
24
+ if (config.accessToken) {
25
+ this.authorizationToken = config.accessToken;
26
+ this.expiresAt = this.parseExpirationFromJWT(config.accessToken);
27
+ }
28
+ if (config.refreshToken) {
29
+ this.refreshToken = config.refreshToken;
30
+ }
31
+ }
32
+ getAuthType() {
33
+ return interfaces_auth_1.AUTH_TYPE_PASSWORD;
34
+ }
35
+ get baseUrl() {
36
+ return this.config.uaaUrl.replace(/\/+$/, '');
37
+ }
38
+ async performLogin() {
39
+ const supplied = this.config.authorization;
40
+ const strategy = supplied ?? (0, manualStrategies_1.manualPasscodeStrategy)();
41
+ let passcode;
42
+ try {
43
+ // The passcode page takes no redirect: the code travels by hand.
44
+ const outcome = await strategy.authorize({
45
+ logger: this.logger,
46
+ buildAuthorizationUrl: async () => `${this.baseUrl}/passcode`,
47
+ });
48
+ passcode = outcome.payload;
49
+ }
50
+ finally {
51
+ if (!supplied) {
52
+ await strategy.dispose?.().catch((error) => {
53
+ this.logger?.warn('[UaaPasscodeProvider] dispose failed', {
54
+ error: error instanceof Error ? error.message : String(error),
55
+ });
56
+ });
57
+ }
58
+ }
59
+ const tokens = await (0, passcodeAuth_1.exchangePasscode)(this.baseUrl, this.config.clientId, this.config.clientSecret, passcode, this.logger);
60
+ return {
61
+ authorizationToken: tokens.accessToken,
62
+ refreshToken: tokens.refreshToken,
63
+ authType: interfaces_auth_1.AUTH_TYPE_PASSWORD,
64
+ expiresIn: tokens.expiresIn,
65
+ tokenType: 'jwt',
66
+ };
67
+ }
68
+ /**
69
+ * A failure is thrown, not handled: BaseTokenProvider drops the refresh
70
+ * token and asks for a new passcode through performLogin().
71
+ */
72
+ async performRefresh() {
73
+ if (!this.refreshToken) {
74
+ throw new Error('Refresh token is required for refresh');
75
+ }
76
+ const result = await (0, tokenRefresher_1.refreshJwtToken)(this.refreshToken, this.baseUrl, this.config.clientId, this.config.clientSecret ?? '');
77
+ return {
78
+ authorizationToken: result.accessToken,
79
+ refreshToken: result.refreshToken || this.refreshToken,
80
+ authType: interfaces_auth_1.AUTH_TYPE_PASSWORD,
81
+ expiresIn: result.expiresIn,
82
+ tokenType: 'jwt',
83
+ };
84
+ }
85
+ }
86
+ exports.UaaPasscodeProvider = UaaPasscodeProvider;
@@ -9,8 +9,6 @@ export { AuthorizationCodeProvider } from './AuthorizationCodeProvider';
9
9
  export { BaseTokenProvider } from './BaseTokenProvider';
10
10
  export type { ClientCredentialsProviderConfig } from './ClientCredentialsProvider';
11
11
  export { ClientCredentialsProvider } from './ClientCredentialsProvider';
12
- export type { DeviceFlowProviderConfig } from './DeviceFlowProvider';
13
- export { DeviceFlowProvider } from './DeviceFlowProvider';
14
12
  export type { OidcBrowserProviderConfig } from './OidcBrowserProvider';
15
13
  export { OidcBrowserProvider } from './OidcBrowserProvider';
16
14
  export type { OidcDeviceFlowProviderConfig } from './OidcDeviceFlowProvider';
@@ -23,4 +21,6 @@ export type { Saml2BearerProviderConfig } from './Saml2BearerProvider';
23
21
  export { Saml2BearerProvider } from './Saml2BearerProvider';
24
22
  export type { Saml2PureProviderConfig } from './Saml2PureProvider';
25
23
  export { Saml2PureProvider } from './Saml2PureProvider';
24
+ export type { UaaPasscodeProviderConfig } from './UaaPasscodeProvider';
25
+ export { UaaPasscodeProvider } from './UaaPasscodeProvider';
26
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -6,15 +6,13 @@
6
6
  * All providers extend BaseTokenProvider and implement ITokenProvider.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.DeviceFlowProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = void 0;
9
+ exports.UaaPasscodeProvider = exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = void 0;
10
10
  var AuthorizationCodeProvider_1 = require("./AuthorizationCodeProvider");
11
11
  Object.defineProperty(exports, "AuthorizationCodeProvider", { enumerable: true, get: function () { return AuthorizationCodeProvider_1.AuthorizationCodeProvider; } });
12
12
  var BaseTokenProvider_1 = require("./BaseTokenProvider");
13
13
  Object.defineProperty(exports, "BaseTokenProvider", { enumerable: true, get: function () { return BaseTokenProvider_1.BaseTokenProvider; } });
14
14
  var ClientCredentialsProvider_1 = require("./ClientCredentialsProvider");
15
15
  Object.defineProperty(exports, "ClientCredentialsProvider", { enumerable: true, get: function () { return ClientCredentialsProvider_1.ClientCredentialsProvider; } });
16
- var DeviceFlowProvider_1 = require("./DeviceFlowProvider");
17
- Object.defineProperty(exports, "DeviceFlowProvider", { enumerable: true, get: function () { return DeviceFlowProvider_1.DeviceFlowProvider; } });
18
16
  var OidcBrowserProvider_1 = require("./OidcBrowserProvider");
19
17
  Object.defineProperty(exports, "OidcBrowserProvider", { enumerable: true, get: function () { return OidcBrowserProvider_1.OidcBrowserProvider; } });
20
18
  var OidcDeviceFlowProvider_1 = require("./OidcDeviceFlowProvider");
@@ -27,3 +25,5 @@ var Saml2BearerProvider_1 = require("./Saml2BearerProvider");
27
25
  Object.defineProperty(exports, "Saml2BearerProvider", { enumerable: true, get: function () { return Saml2BearerProvider_1.Saml2BearerProvider; } });
28
26
  var Saml2PureProvider_1 = require("./Saml2PureProvider");
29
27
  Object.defineProperty(exports, "Saml2PureProvider", { enumerable: true, get: function () { return Saml2PureProvider_1.Saml2PureProvider; } });
28
+ var UaaPasscodeProvider_1 = require("./UaaPasscodeProvider");
29
+ Object.defineProperty(exports, "UaaPasscodeProvider", { enumerable: true, get: function () { return UaaPasscodeProvider_1.UaaPasscodeProvider; } });
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * SAML2 provider shared helpers.
3
3
  */
4
- import type { IAuthorizationStrategy } from '@mcp-abap-adt/interfaces-auth';
4
+ import type { IAssertionReplayStore, IAssertionValidator, IAuthorizationStrategy } from '@mcp-abap-adt/interfaces-auth';
5
5
  import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
6
6
  export interface Saml2CommonConfig {
7
7
  idpSsoUrl: string;
@@ -17,6 +17,32 @@ export interface Saml2CommonConfig {
17
17
  /** How the login is conducted. Omitted means a browser callback. */
18
18
  authorization?: IAuthorizationStrategy<string>;
19
19
  logger?: ILogger;
20
+ /** PEM or bare base64 DER. Required when no `assertionValidator` is supplied. */
21
+ idpCertificates?: string[];
22
+ /**
23
+ * The `Issuer` the assertion must name. Required unless the supplied
24
+ * `assertionValidator` is a custom one: a shipped validator supplied there
25
+ * still needs it, since it fails closed without an expected issuer.
26
+ */
27
+ idpEntityId?: string;
28
+ /** Finite, non-negative, integer. Defaults to 0. */
29
+ clockSkewMs?: number;
30
+ /**
31
+ * The AuthnRequest ID this login answers, when this package did not mint one
32
+ * itself — a pre-built `authorizationUrl`, or a strategy that obtained the
33
+ * response some other way after a request the consumer sent.
34
+ */
35
+ authnRequestId?: string;
36
+ /**
37
+ * Declares that no AuthnRequest is sent: the assertion must carry no
38
+ * `InResponseTo`. Default `false`. Combining this with a minted or declared
39
+ * request ID is a configuration error: the two describe different logins.
40
+ */
41
+ idpInitiated?: boolean;
42
+ /** Which validator to use. Omitted means the provider's own default. */
43
+ assertionValidator?: IAssertionValidator;
44
+ /** A consumer's own replay store, for a deployment running more than one process. */
45
+ assertionReplayStore?: IAssertionReplayStore;
20
46
  }
21
47
  export interface Saml2BearerExchangeConfig {
22
48
  tokenUrl?: string;
@@ -26,6 +52,27 @@ export interface Saml2BearerExchangeConfig {
26
52
  }
27
53
  /** Throw at construction rather than half-verify at runtime. */
28
54
  export declare function validateSamlConfig(config: Saml2CommonConfig): void;
55
+ /**
56
+ * The consumer's validator when supplied, otherwise the provider's default —
57
+ * `createSignedAssertionValidator` for `"bearer"`, since the token endpoint
58
+ * receives the Assertion alone (#40) and its own signature is what that
59
+ * endpoint verifies; `createSignedResponseValidator` for `"pure"`, since the
60
+ * whole response is handed on and `Status`/`Destination` must be inside a
61
+ * signature. See the spec's "A bare Assertion, and which validator each
62
+ * provider defaults to".
63
+ */
64
+ export declare function resolveAssertionValidator(config: Saml2CommonConfig, provider: 'bearer' | 'pure'): IAssertionValidator;
29
65
  export declare function resolveTokenUrl(config: Saml2BearerExchangeConfig): string;
30
- export declare function getSamlAssertion(config: Saml2CommonConfig): Promise<string>;
66
+ /** What `getSamlAssertion` hands back: the wire payload, plus what it knows about the login. */
67
+ export interface SamlAssertionResult {
68
+ readonly payload: string;
69
+ /**
70
+ * `undefined` exactly when the login is declared `idpInitiated` and no ID
71
+ * was minted or declared for it.
72
+ */
73
+ readonly requestId?: string;
74
+ /** Where the strategy actually listened — `outcome.redirectUri`, never `config.acsUrl`. */
75
+ readonly acsUrl: string;
76
+ }
77
+ export declare function getSamlAssertion(config: Saml2CommonConfig): Promise<SamlAssertionResult>;
31
78
  //# sourceMappingURL=saml2Utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"saml2Utils.d.ts","sourceRoot":"","sources":["../../src/providers/saml2Utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAI9D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,aAAa,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAOlE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAQzE;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
1
+ {"version":3,"file":"saml2Utils.d.ts","sourceRoot":"","sources":["../../src/providers/saml2Utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAU9D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,aAAa,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAOlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAC1B,mBAAmB,CAsCrB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAQzE;AAED,gGAAgG;AAChG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAuE9B"}