@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
@@ -4,10 +4,13 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.validateSamlConfig = validateSamlConfig;
7
+ exports.resolveAssertionValidator = resolveAssertionValidator;
7
8
  exports.resolveTokenUrl = resolveTokenUrl;
8
9
  exports.getSamlAssertion = getSamlAssertion;
9
10
  const saml2Auth_1 = require("../auth/saml2Auth");
11
+ const TokenProviderErrors_1 = require("../errors/TokenProviderErrors");
10
12
  const strategies_1 = require("../strategies");
13
+ const assertionValidator_1 = require("../validation/assertionValidator");
11
14
  /** Throw at construction rather than half-verify at runtime. */
12
15
  function validateSamlConfig(config) {
13
16
  if (config.authorizationUrl && !config.acsUrl) {
@@ -15,6 +18,48 @@ function validateSamlConfig(config) {
15
18
  'pre-built SAML request cannot be read, so it must be declared.');
16
19
  }
17
20
  }
21
+ /**
22
+ * The consumer's validator when supplied, otherwise the provider's default —
23
+ * `createSignedAssertionValidator` for `"bearer"`, since the token endpoint
24
+ * receives the Assertion alone (#40) and its own signature is what that
25
+ * endpoint verifies; `createSignedResponseValidator` for `"pure"`, since the
26
+ * whole response is handed on and `Status`/`Destination` must be inside a
27
+ * signature. See the spec's "A bare Assertion, and which validator each
28
+ * provider defaults to".
29
+ */
30
+ function resolveAssertionValidator(config, provider) {
31
+ if (config.assertionValidator) {
32
+ // A shipped validator fails closed without expectedIssuer, so supplying
33
+ // one without idpEntityId would construct fine and then refuse every
34
+ // login at `issuer` — after the browser step. A custom validator needs
35
+ // no idpEntityId: it may establish trust some other way.
36
+ if ((0, assertionValidator_1.isShippedValidator)(config.assertionValidator) && !config.idpEntityId) {
37
+ throw new TokenProviderErrors_1.ValidationError('The supplied assertionValidator is a shipped one ' +
38
+ '(createSignedResponseValidator or createSignedAssertionValidator), ' +
39
+ 'which refuses every assertion without an expected issuer: missing ' +
40
+ 'idpEntityId.', ['idpEntityId']);
41
+ }
42
+ return config.assertionValidator;
43
+ }
44
+ const missing = [];
45
+ if (!config.idpCertificates?.length)
46
+ missing.push('idpCertificates');
47
+ if (!config.idpEntityId)
48
+ missing.push('idpEntityId');
49
+ if (missing.length > 0) {
50
+ throw new TokenProviderErrors_1.ValidationError(`The default assertion validator needs the identity provider it should ` +
51
+ `trust: missing ${missing.join(', ')}. Supply these, or supply an ` +
52
+ `assertionValidator of your own.`, missing);
53
+ }
54
+ const options = {
55
+ idpCertificates: config.idpCertificates,
56
+ clockSkewMs: config.clockSkewMs,
57
+ replayStore: config.assertionReplayStore,
58
+ };
59
+ return provider === 'bearer'
60
+ ? (0, assertionValidator_1.createSignedAssertionValidator)(options)
61
+ : (0, assertionValidator_1.createSignedResponseValidator)(options);
62
+ }
18
63
  function resolveTokenUrl(config) {
19
64
  if (config.tokenUrl) {
20
65
  return config.tokenUrl;
@@ -26,9 +71,21 @@ function resolveTokenUrl(config) {
26
71
  }
27
72
  async function getSamlAssertion(config) {
28
73
  const declaredAcs = config.acsUrl;
74
+ let mintedRequestId;
29
75
  const request = {
30
76
  logger: config.logger,
31
77
  buildAuthorizationUrl: async (redirectUri) => {
78
+ // An IdP-initiated login sends no AuthnRequest, and without a pre-built
79
+ // authorizationUrl the only URL this could produce is one carrying a
80
+ // freshly minted request. Refused here, before any URL exists, so the
81
+ // mistake surfaces before a browser opens rather than after a login.
82
+ if (config.idpInitiated && !config.authorizationUrl) {
83
+ throw new TokenProviderErrors_1.ValidationError('SAML idpInitiated is true and no authorizationUrl is configured, ' +
84
+ 'but the authorization strategy asked for an authorization URL: ' +
85
+ 'the only one this package can build carries an AuthnRequest. ' +
86
+ 'Configure the IdP-initiated SSO URL as authorizationUrl, or use a ' +
87
+ 'strategy that does not call buildAuthorizationUrl.', ['authorizationUrl']);
88
+ }
32
89
  // A declared ACS is registered with the IdP; the strategy must be
33
90
  // listening exactly there, and an ephemeral port cannot be.
34
91
  const acsUrl = declaredAcs ?? redirectUri;
@@ -36,13 +93,15 @@ async function getSamlAssertion(config) {
36
93
  throw new Error(`SAML acsUrl is ${declaredAcs}, but the authorization strategy is ` +
37
94
  `listening on ${redirectUri}. They must match.`);
38
95
  }
39
- return (0, saml2Auth_1.buildSamlAuthorizationUrl)({
96
+ const built = (0, saml2Auth_1.buildSamlAuthorizationUrl)({
40
97
  idpSsoUrl: config.idpSsoUrl,
41
98
  spEntityId: config.spEntityId,
42
99
  acsUrl,
43
100
  relayState: config.relayState,
44
101
  authorizationUrl: config.authorizationUrl,
45
102
  });
103
+ mintedRequestId = built.requestId;
104
+ return built.url;
46
105
  },
47
106
  };
48
107
  const supplied = config.authorization;
@@ -55,7 +114,12 @@ async function getSamlAssertion(config) {
55
114
  throw new Error(`SAML acsUrl is ${declaredAcs}, but the authorization strategy used ` +
56
115
  `${outcome.redirectUri}. They must match.`);
57
116
  }
58
- return outcome.payload;
117
+ const requestId = resolveExpectedRequestId(config, mintedRequestId);
118
+ return {
119
+ payload: outcome.payload,
120
+ requestId,
121
+ acsUrl: outcome.redirectUri,
122
+ };
59
123
  }
60
124
  finally {
61
125
  if (!supplied) {
@@ -67,3 +131,31 @@ async function getSamlAssertion(config) {
67
131
  }
68
132
  }
69
133
  }
134
+ /**
135
+ * The ID `InResponseTo` must answer, from the three sources the spec allows:
136
+ * minted, declared, or none by explicit `idpInitiated: true`. Anything else —
137
+ * no ID and no declaration, or `idpInitiated` combined with an ID from either
138
+ * of the other two sources — is a configuration error, not a validation
139
+ * failure blamed on the assertion.
140
+ */
141
+ function resolveExpectedRequestId(config, mintedRequestId) {
142
+ const declaredRequestId = config.authnRequestId;
143
+ if (config.idpInitiated) {
144
+ if (mintedRequestId || declaredRequestId) {
145
+ throw new TokenProviderErrors_1.ValidationError('SAML idpInitiated is true, but a request ID was also minted or ' +
146
+ 'configured (an authorization strategy called buildAuthorizationUrl, ' +
147
+ 'or authnRequestId is set). An IdP-initiated login sends no request, ' +
148
+ 'so an ID means the configuration describes two different logins.', ['idpInitiated']);
149
+ }
150
+ return undefined;
151
+ }
152
+ const requestId = mintedRequestId ?? declaredRequestId;
153
+ if (!requestId) {
154
+ throw new TokenProviderErrors_1.ValidationError('Cannot validate InResponseTo: this login did not build its own AuthnRequest, ' +
155
+ 'so authnRequestId must be configured — or, if the identity provider ' +
156
+ 'starts this login itself, idpInitiated: true. This happens with a ' +
157
+ 'pre-built authorizationUrl, or an authorization strategy that supplies an ' +
158
+ 'assertion without asking for a URL.', ['authnRequestId']);
159
+ }
160
+ return requestId;
161
+ }
@@ -4,5 +4,5 @@ export { BrowserCallbackStrategy, browserCallbackStrategy, DEFAULT_CALLBACK_PORT
4
4
  export type { ExternalCodeStrategyOptions, StaticCodeStrategyOptions, } from './codeStrategies';
5
5
  export { externalCodeStrategy, staticCodeStrategy, } from './codeStrategies';
6
6
  export type { ManualStrategyOptions } from './manualStrategies';
7
- export { manualPasteStrategy, manualSamlResponseStrategy, } from './manualStrategies';
7
+ export { manualPasscodeStrategy, manualPasteStrategy, manualSamlResponseStrategy, } from './manualStrategies';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.manualSamlResponseStrategy = exports.manualPasteStrategy = exports.staticCodeStrategy = exports.externalCodeStrategy = exports.samlCallbackStrategy = exports.oidcCallbackStrategy = exports.DEFAULT_LOGIN_TIMEOUT_MS = exports.DEFAULT_CALLBACK_PORT = exports.browserCallbackStrategy = exports.BrowserCallbackStrategy = exports.asOidcResult = void 0;
3
+ exports.manualSamlResponseStrategy = exports.manualPasteStrategy = exports.manualPasscodeStrategy = exports.staticCodeStrategy = exports.externalCodeStrategy = exports.samlCallbackStrategy = exports.oidcCallbackStrategy = exports.DEFAULT_LOGIN_TIMEOUT_MS = exports.DEFAULT_CALLBACK_PORT = exports.browserCallbackStrategy = exports.BrowserCallbackStrategy = exports.asOidcResult = void 0;
4
4
  var asOidcResult_1 = require("./asOidcResult");
5
5
  Object.defineProperty(exports, "asOidcResult", { enumerable: true, get: function () { return asOidcResult_1.asOidcResult; } });
6
6
  var BrowserCallbackStrategy_1 = require("./BrowserCallbackStrategy");
@@ -14,5 +14,6 @@ var codeStrategies_1 = require("./codeStrategies");
14
14
  Object.defineProperty(exports, "externalCodeStrategy", { enumerable: true, get: function () { return codeStrategies_1.externalCodeStrategy; } });
15
15
  Object.defineProperty(exports, "staticCodeStrategy", { enumerable: true, get: function () { return codeStrategies_1.staticCodeStrategy; } });
16
16
  var manualStrategies_1 = require("./manualStrategies");
17
+ Object.defineProperty(exports, "manualPasscodeStrategy", { enumerable: true, get: function () { return manualStrategies_1.manualPasscodeStrategy; } });
17
18
  Object.defineProperty(exports, "manualPasteStrategy", { enumerable: true, get: function () { return manualStrategies_1.manualPasteStrategy; } });
18
19
  Object.defineProperty(exports, "manualSamlResponseStrategy", { enumerable: true, get: function () { return manualStrategies_1.manualSamlResponseStrategy; } });
@@ -17,4 +17,11 @@ export interface ManualStrategyOptions {
17
17
  export declare function manualPasteStrategy(options?: ManualStrategyOptions): IAuthorizationStrategy<string>;
18
18
  /** The user lifts `SAMLResponse` from the POST body — it never reaches the URL. */
19
19
  export declare function manualSamlResponseStrategy(options?: ManualStrategyOptions): IAuthorizationStrategy<string>;
20
+ /**
21
+ * The UAA passcode, typed in by the user: shows where to fetch it —
22
+ * `<uaa>/passcode`, opened in any browser, on any machine — and reads the
23
+ * code they copy from that page. The default for `UaaPasscodeProvider`, so a
24
+ * login works on a machine with no browser at all, as `cf login --sso` does.
25
+ */
26
+ export declare function manualPasscodeStrategy(options?: ManualStrategyOptions): IAuthorizationStrategy<string>;
20
27
  //# sourceMappingURL=manualStrategies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manualStrategies.d.ts","sourceRoot":"","sources":["../../src/strategies/manualStrategies.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAGV,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,WAAW,qBAAqB;IACpC,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAiCD,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,qBAA0B,GAClC,sBAAsB,CAAC,MAAM,CAAC,CAmBhC;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,qBAA0B,GAClC,sBAAsB,CAAC,MAAM,CAAC,CAiBhC"}
1
+ {"version":3,"file":"manualStrategies.d.ts","sourceRoot":"","sources":["../../src/strategies/manualStrategies.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAGV,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,WAAW,qBAAqB;IACpC,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAiCD,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,qBAA0B,GAClC,sBAAsB,CAAC,MAAM,CAAC,CAmBhC;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,qBAA0B,GAClC,sBAAsB,CAAC,MAAM,CAAC,CAiBhC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,qBAA0B,GAClC,sBAAsB,CAAC,MAAM,CAAC,CAgBhC"}
@@ -10,6 +10,7 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.manualPasteStrategy = manualPasteStrategy;
12
12
  exports.manualSamlResponseStrategy = manualSamlResponseStrategy;
13
+ exports.manualPasscodeStrategy = manualPasscodeStrategy;
13
14
  const node_readline_1 = require("node:readline");
14
15
  const browserAuth_1 = require("../auth/browserAuth");
15
16
  const BrowserCallbackStrategy_1 = require("./BrowserCallbackStrategy");
@@ -75,3 +76,23 @@ function manualSamlResponseStrategy(options = {}) {
75
76
  },
76
77
  };
77
78
  }
79
+ /**
80
+ * The UAA passcode, typed in by the user: shows where to fetch it —
81
+ * `<uaa>/passcode`, opened in any browser, on any machine — and reads the
82
+ * code they copy from that page. The default for `UaaPasscodeProvider`, so a
83
+ * login works on a machine with no browser at all, as `cf login --sso` does.
84
+ */
85
+ function manualPasscodeStrategy(options = {}) {
86
+ const redirectUri = options.redirectUri ?? defaultRedirectUri();
87
+ const read = options.read ?? readFromTerminal;
88
+ return {
89
+ async authorize(request) {
90
+ const url = await request.buildAuthorizationUrl(redirectUri);
91
+ announce(request, url);
92
+ const code = (await read('Paste the Temporary Authentication Code (passcode): ')).trim();
93
+ if (!code)
94
+ throw new Error('No passcode was provided');
95
+ return { payload: code, redirectUri };
96
+ },
97
+ };
98
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The shipped assertion validator: the spec's check table, in order.
3
+ *
4
+ * Two properties matter more than any individual check. First, the signature
5
+ * is resolved to an element and every assertion-level field is read *from that
6
+ * element* — a document holding a validly signed fragment beside a forged one
7
+ * is the wrapping attack, and reading the wrong node is how it succeeds.
8
+ * Second, no two refusals share a distinguishing phrase, so a test cannot pass
9
+ * for a neighbouring check's reason.
10
+ *
11
+ * Three fields live on the Response rather than the assertion: Status,
12
+ * Response/Issuer and Destination. The signed-Response validator reads them,
13
+ * because there they are inside the signature. The assertion-only validator
14
+ * does not read them at all — not weakly. That is safe because a declined
15
+ * login carries no assertion, so flipping Status buys an attacker nothing they
16
+ * can sign, and addressing rests on Recipient inside the signed assertion.
17
+ */
18
+ import type { IAssertionReplayStore, IAssertionValidator } from '@mcp-abap-adt/interfaces-auth';
19
+ export interface ShippedValidatorOptions {
20
+ readonly idpCertificates: readonly string[];
21
+ readonly clockSkewMs?: number;
22
+ readonly replayStore?: IAssertionReplayStore;
23
+ }
24
+ /** Whether this validator came from one of the two shipped factories. */
25
+ export declare function isShippedValidator(validator: IAssertionValidator): boolean;
26
+ export declare const createSignedResponseValidator: (options: ShippedValidatorOptions) => IAssertionValidator;
27
+ export declare const createSignedAssertionValidator: (options: ShippedValidatorOptions) => IAssertionValidator;
28
+ //# sourceMappingURL=assertionValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertionValidator.d.ts","sourceRoot":"","sources":["../../src/validation/assertionValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,+BAA+B,CAAC;AAiBvC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC;CAC9C;AAgCD,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAE1E;AAED,eAAO,MAAM,6BAA6B,GACxC,SAAS,uBAAuB,KAC/B,mBAAkE,CAAC;AAEtE,eAAO,MAAM,8BAA8B,GACzC,SAAS,uBAAuB,KAC/B,mBAAmE,CAAC"}