@inrupt/solid-client-authn-browser 1.16.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/ClientAuthentication.d.ts +4 -13
  2. package/dist/Session.d.ts +4 -4
  3. package/dist/dependencies.d.ts +1 -1
  4. package/dist/index.js +773 -28
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +746 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/dist/login/oidc/AggregateOidcHandler.d.ts +2 -1
  9. package/dist/login/oidc/AggregateRedirectHandler.d.ts +2 -1
  10. package/dist/login/oidc/ClientRegistrar.d.ts +1 -1
  11. package/dist/login/oidc/IssuerConfigFetcher.d.ts +1 -1
  12. package/dist/login/oidc/OidcLoginHandler.d.ts +1 -1
  13. package/dist/login/oidc/Redirector.d.ts +1 -1
  14. package/dist/login/oidc/incomingRedirectHandler/AuthCodeRedirectHandler.d.ts +3 -6
  15. package/dist/login/oidc/incomingRedirectHandler/ErrorOidcHandler.d.ts +1 -1
  16. package/dist/login/oidc/incomingRedirectHandler/FallbackRedirectHandler.d.ts +1 -1
  17. package/dist/login/oidc/oidcHandlers/AuthorizationCodeWithPkceOidcHandler.d.ts +3 -6
  18. package/dist/login/oidc/oidcHandlers/OidcHandlerCanHandleTest.d.ts +1 -1
  19. package/dist/login/oidc/refresh/TokenRefresher.d.ts +2 -2
  20. package/dist/logout/buildRpInitiatedLogout.d.ts +2 -0
  21. package/dist/sessionInfo/SessionInfoManager.d.ts +4 -13
  22. package/dist/solid-client-authn.bundle.js +32 -2
  23. package/dist/solid-client-authn.bundle.js.map +1 -0
  24. package/dist/storage/BrowserStorage.d.ts +1 -1
  25. package/dist/storage/StorageUtility.d.ts +2 -1
  26. package/package.json +17 -17
  27. package/rollup.config.mjs +46 -0
  28. package/src/ClientAuthentication.spec.ts +4 -4
  29. package/src/ClientAuthentication.ts +8 -45
  30. package/src/Session.spec.ts +4 -4
  31. package/src/Session.ts +44 -13
  32. package/src/__mocks__/ClientAuthentication.ts +3 -3
  33. package/src/constant.ts +1 -1
  34. package/src/defaultSession.spec.ts +1 -1
  35. package/src/defaultSession.ts +5 -3
  36. package/src/dependencies.node.spec.ts +1 -1
  37. package/src/dependencies.spec.ts +1 -1
  38. package/src/dependencies.ts +10 -5
  39. package/src/index.browser.spec.ts +1 -1
  40. package/src/index.browser.ts +1 -1
  41. package/src/index.spec.ts +1 -1
  42. package/src/index.ts +1 -1
  43. package/src/login/__mocks__/LoginHandler.ts +2 -2
  44. package/src/login/oidc/AggregateOidcHandler.spec.ts +3 -5
  45. package/src/login/oidc/AggregateOidcHandler.ts +3 -3
  46. package/src/login/oidc/AggregateRedirectHandler.ts +3 -3
  47. package/src/login/oidc/ClientRegistrar.spec.ts +1 -1
  48. package/src/login/oidc/ClientRegistrar.ts +2 -2
  49. package/src/login/oidc/IssuerConfigFetcher.spec.ts +8 -4
  50. package/src/login/oidc/IssuerConfigFetcher.ts +12 -5
  51. package/src/login/oidc/OidcLoginHandler.spec.ts +3 -5
  52. package/src/login/oidc/OidcLoginHandler.ts +5 -3
  53. package/src/login/oidc/Redirector.spec.ts +1 -1
  54. package/src/login/oidc/Redirector.ts +2 -2
  55. package/src/login/oidc/__mocks__/ClientRegistrar.ts +2 -2
  56. package/src/login/oidc/__mocks__/IOidcHandler.ts +2 -2
  57. package/src/login/oidc/__mocks__/IOidcOptions.ts +2 -2
  58. package/src/login/oidc/__mocks__/IssuerConfigFetcher.ts +2 -2
  59. package/src/login/oidc/__mocks__/Redirector.ts +2 -2
  60. package/src/login/oidc/incomingRedirectHandler/AuthCodeRedirectHandler.spec.ts +37 -39
  61. package/src/login/oidc/incomingRedirectHandler/AuthCodeRedirectHandler.ts +31 -20
  62. package/src/login/oidc/incomingRedirectHandler/ErrorOidcHandler.spec.ts +3 -4
  63. package/src/login/oidc/incomingRedirectHandler/ErrorOidcHandler.ts +3 -3
  64. package/src/login/oidc/incomingRedirectHandler/FallbackRedirectHandler.spec.ts +3 -4
  65. package/src/login/oidc/incomingRedirectHandler/FallbackRedirectHandler.ts +2 -2
  66. package/src/login/oidc/oidcHandlers/AuthorizationCodeWithPkceOidcHandler.spec.ts +3 -3
  67. package/src/login/oidc/oidcHandlers/AuthorizationCodeWithPkceOidcHandler.ts +13 -51
  68. package/src/login/oidc/oidcHandlers/OidcHandlerCanHandleTest.ts +2 -2
  69. package/src/login/oidc/refresh/TokenRefresher.spec.ts +7 -6
  70. package/src/login/oidc/refresh/TokenRefresher.ts +6 -4
  71. package/src/login/oidc/refresh/__mocks__/TokenRefresher.ts +2 -2
  72. package/src/logout/{GeneralLogoutHandler.ts → buildRpInitiatedLogout.ts} +21 -20
  73. package/src/sessionInfo/SessionInfoManager.spec.ts +2 -2
  74. package/src/sessionInfo/SessionInfoManager.ts +13 -91
  75. package/src/sessionInfo/__mocks__/SessionInfoManager.ts +2 -2
  76. package/src/storage/BrowserStorage.spec.ts +1 -1
  77. package/src/storage/BrowserStorage.ts +2 -2
  78. package/src/storage/StorageUtility.ts +3 -2
  79. package/src/storage/__mocks__/LocalStorage.ts +1 -1
  80. package/src/util/UUIDGenerator.spec.ts +1 -1
  81. package/src/util/UuidGenerator.ts +1 -1
  82. package/src/util/__mocks__/UuidGenerator.ts +2 -2
  83. package/dist/ClientAuthentication.js +0 -80
  84. package/dist/ClientAuthentication.js.map +0 -1
  85. package/dist/Session.js +0 -150
  86. package/dist/Session.js.map +0 -1
  87. package/dist/constant.js +0 -7
  88. package/dist/constant.js.map +0 -1
  89. package/dist/defaultSession.js +0 -52
  90. package/dist/defaultSession.js.map +0 -1
  91. package/dist/dependencies.js +0 -41
  92. package/dist/dependencies.js.map +0 -1
  93. package/dist/index.browser.js +0 -28
  94. package/dist/index.browser.js.map +0 -1
  95. package/dist/login/oidc/AggregateOidcHandler.js +0 -10
  96. package/dist/login/oidc/AggregateOidcHandler.js.map +0 -1
  97. package/dist/login/oidc/AggregateRedirectHandler.js +0 -10
  98. package/dist/login/oidc/AggregateRedirectHandler.js.map +0 -1
  99. package/dist/login/oidc/ClientRegistrar.js +0 -47
  100. package/dist/login/oidc/ClientRegistrar.js.map +0 -1
  101. package/dist/login/oidc/IssuerConfigFetcher.js +0 -124
  102. package/dist/login/oidc/IssuerConfigFetcher.js.map +0 -1
  103. package/dist/login/oidc/OidcLoginHandler.js +0 -40
  104. package/dist/login/oidc/OidcLoginHandler.js.map +0 -1
  105. package/dist/login/oidc/Redirector.js +0 -17
  106. package/dist/login/oidc/Redirector.js.map +0 -1
  107. package/dist/login/oidc/__mocks__/IOidcOptions.d.ts +0 -2
  108. package/dist/login/oidc/__mocks__/IOidcOptions.js +0 -25
  109. package/dist/login/oidc/__mocks__/IOidcOptions.js.map +0 -1
  110. package/dist/login/oidc/incomingRedirectHandler/AuthCodeRedirectHandler.js +0 -91
  111. package/dist/login/oidc/incomingRedirectHandler/AuthCodeRedirectHandler.js.map +0 -1
  112. package/dist/login/oidc/incomingRedirectHandler/ErrorOidcHandler.js +0 -26
  113. package/dist/login/oidc/incomingRedirectHandler/ErrorOidcHandler.js.map +0 -1
  114. package/dist/login/oidc/incomingRedirectHandler/FallbackRedirectHandler.js +0 -20
  115. package/dist/login/oidc/incomingRedirectHandler/FallbackRedirectHandler.js.map +0 -1
  116. package/dist/login/oidc/oidcHandlers/AuthorizationCodeWithPkceOidcHandler.js +0 -56
  117. package/dist/login/oidc/oidcHandlers/AuthorizationCodeWithPkceOidcHandler.js.map +0 -1
  118. package/dist/login/oidc/oidcHandlers/OidcHandlerCanHandleTest.js +0 -47
  119. package/dist/login/oidc/oidcHandlers/OidcHandlerCanHandleTest.js.map +0 -1
  120. package/dist/login/oidc/refresh/TokenRefresher.js +0 -31
  121. package/dist/login/oidc/refresh/TokenRefresher.js.map +0 -1
  122. package/dist/logout/GeneralLogoutHandler.d.ts +0 -7
  123. package/dist/logout/GeneralLogoutHandler.js +0 -15
  124. package/dist/logout/GeneralLogoutHandler.js.map +0 -1
  125. package/dist/sessionInfo/SessionInfoManager.js +0 -96
  126. package/dist/sessionInfo/SessionInfoManager.js.map +0 -1
  127. package/dist/solid-client-authn.bundle.js.LICENSE.txt +0 -17
  128. package/dist/storage/BrowserStorage.js +0 -18
  129. package/dist/storage/BrowserStorage.js.map +0 -1
  130. package/dist/storage/StorageUtility.js +0 -10
  131. package/dist/storage/StorageUtility.js.map +0 -1
  132. package/dist/util/UuidGenerator.js +0 -10
  133. package/dist/util/UuidGenerator.js.map +0 -1
  134. package/licenses.csv +0 -147
  135. package/src/logout/GeneralLogoutHandler.spec.ts +0 -72
  136. package/src/logout/__mocks__/LogoutHandler.ts +0 -38
  137. package/webpack.browser.js +0 -39
  138. package/webpack.common.js +0 -42
  139. package/webpack.config.js +0 -28
  140. package/webpack.dev.js +0 -37
  141. package/webpack.prod.js +0 -23
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -21,8 +21,8 @@
21
21
 
22
22
  import { jest, it, describe, expect } from "@jest/globals";
23
23
  import { mockStorageUtility } from "@inrupt/solid-client-authn-core";
24
- import { fetch, Response as NodeResponse } from "@inrupt/universal-fetch";
25
- import * as UniversalFetch from "@inrupt/universal-fetch";
24
+ import { Response as NodeResponse } from "@inrupt/universal-fetch";
25
+ import type * as UniversalFetch from "@inrupt/universal-fetch";
26
26
  import IssuerConfigFetcher from "./IssuerConfigFetcher";
27
27
 
28
28
  jest.mock("@inrupt/universal-fetch", () => {
@@ -31,7 +31,7 @@ jest.mock("@inrupt/universal-fetch", () => {
31
31
  ) as typeof UniversalFetch;
32
32
  return {
33
33
  ...fetchModule,
34
- fetch: jest.fn<typeof fetch>(),
34
+ fetch: jest.fn<(typeof UniversalFetch)["fetch"]>(),
35
35
  };
36
36
  });
37
37
 
@@ -65,6 +65,7 @@ describe("IssuerConfigFetcher", () => {
65
65
  // eslint-disable-next-line camelcase
66
66
  claim_types_supported: "oidc",
67
67
  bleepBloop: "Meep Moop",
68
+ end_session_endpoint: "https://example.com/endSessionEndpoint",
68
69
  })
69
70
  )
70
71
  );
@@ -75,6 +76,9 @@ describe("IssuerConfigFetcher", () => {
75
76
  expect(fetchedConfig.issuer).toBe("https://example.com");
76
77
  expect((fetchedConfig as any).claim_types_supported).toBeUndefined();
77
78
  expect(fetchedConfig.claimTypesSupported).toBe("oidc");
79
+ expect(fetchedConfig.endSessionEndpoint).toBe(
80
+ "https://example.com/endSessionEndpoint"
81
+ );
78
82
  expect((fetchedConfig as any).bleepBloop).toBeUndefined();
79
83
  });
80
84
 
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -27,13 +27,13 @@
27
27
  /**
28
28
  * Responsible for fetching an IDP configuration
29
29
  */
30
- import {
30
+ import type {
31
31
  IIssuerConfig,
32
32
  IIssuerConfigFetcher,
33
33
  IStorageUtility,
34
- ConfigurationError,
35
34
  } from "@inrupt/solid-client-authn-core";
36
- import { fetch } from "@inrupt/universal-fetch";
35
+ import { ConfigurationError } from "@inrupt/solid-client-authn-core";
36
+ import { fetch as uniFetch } from "@inrupt/universal-fetch";
37
37
 
38
38
  export const WELL_KNOWN_OPENID_CONFIG = ".well-known/openid-configuration";
39
39
 
@@ -66,6 +66,10 @@ const issuerConfigKeyMap: Record<
66
66
  toKey: "registrationEndpoint",
67
67
  convertToUrl: true,
68
68
  },
69
+ end_session_endpoint: {
70
+ toKey: "endSessionEndpoint",
71
+ convertToUrl: true,
72
+ },
69
73
  scopes_supported: { toKey: "scopesSupported" },
70
74
  response_types_supported: { toKey: "responseTypesSupported" },
71
75
  response_modes_supported: { toKey: "responseModesSupported" },
@@ -166,7 +170,10 @@ export default class IssuerConfigFetcher implements IIssuerConfigFetcher {
166
170
  // includes the full issuer path. See https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig.
167
171
  issuer.endsWith("/") ? issuer : `${issuer}/`
168
172
  ).href;
169
- const issuerConfigRequestBody = await fetch(openIdConfigUrl);
173
+ const issuerConfigRequestBody = await uniFetch.call(
174
+ globalThis,
175
+ openIdConfigUrl
176
+ );
170
177
  // Check the validity of the fetched config
171
178
  try {
172
179
  issuerConfig = processConfig(await issuerConfigRequestBody.json());
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -20,10 +20,8 @@
20
20
  //
21
21
 
22
22
  import { jest, it, describe, expect } from "@jest/globals";
23
- import {
24
- IIssuerConfigFetcher,
25
- StorageUtility,
26
- } from "@inrupt/solid-client-authn-core";
23
+ import type { IIssuerConfigFetcher } from "@inrupt/solid-client-authn-core";
24
+ import { StorageUtility } from "@inrupt/solid-client-authn-core";
27
25
  import {
28
26
  StorageUtilityMock,
29
27
  mockStorage,
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -28,7 +28,7 @@
28
28
  * Handles Common Oidc login functions (Like fetching the configuration)
29
29
  */
30
30
 
31
- import {
31
+ import type {
32
32
  IClientRegistrar,
33
33
  IIssuerConfig,
34
34
  IIssuerConfigFetcher,
@@ -37,8 +37,10 @@ import {
37
37
  IOidcHandler,
38
38
  IOidcOptions,
39
39
  IStorageUtility,
40
- ConfigurationError,
41
40
  LoginResult,
41
+ } from "@inrupt/solid-client-authn-core";
42
+ import {
43
+ ConfigurationError,
42
44
  handleRegistration,
43
45
  } from "@inrupt/solid-client-authn-core";
44
46
 
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -24,7 +24,7 @@
24
24
  * @packageDocumentation
25
25
  */
26
26
 
27
- import {
27
+ import type {
28
28
  IRedirector,
29
29
  IRedirectorOptions,
30
30
  } from "@inrupt/solid-client-authn-core";
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -19,7 +19,7 @@
19
19
  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  //
21
21
 
22
- import {
22
+ import type {
23
23
  IClient,
24
24
  IClientRegistrar,
25
25
  IClientRegistrarOptions,
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -19,7 +19,7 @@
19
19
  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  //
21
21
 
22
- import {
22
+ import type {
23
23
  IOidcHandler,
24
24
  IOidcOptions,
25
25
  ISessionInfo,
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -19,7 +19,7 @@
19
19
  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  //
21
21
 
22
- import { IOidcOptions } from "@inrupt/solid-client-authn-core";
22
+ import type { IOidcOptions } from "@inrupt/solid-client-authn-core";
23
23
  import { jest } from "@jest/globals";
24
24
 
25
25
  export const standardOidcOptions: IOidcOptions = {
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -19,7 +19,7 @@
19
19
  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  //
21
21
 
22
- import {
22
+ import type {
23
23
  IIssuerConfig,
24
24
  IIssuerConfigFetcher,
25
25
  } from "@inrupt/solid-client-authn-core";
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -19,7 +19,7 @@
19
19
  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  //
21
21
 
22
- import {
22
+ import type {
23
23
  IRedirector,
24
24
  IRedirectorOptions,
25
25
  } from "@inrupt/solid-client-authn-core";
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -19,26 +19,27 @@
19
19
  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  //
21
21
 
22
- import {
22
+ import type {
23
23
  IClient,
24
24
  IClientRegistrar,
25
25
  IClientRegistrarOptions,
26
26
  IIssuerConfigFetcher,
27
- USER_SESSION_PREFIX,
28
27
  IIssuerConfig,
28
+ buildAuthenticatedFetch,
29
29
  } from "@inrupt/solid-client-authn-core";
30
+ import { USER_SESSION_PREFIX } from "@inrupt/solid-client-authn-core";
30
31
  import {
31
32
  StorageUtilityMock,
32
33
  mockStorageUtility,
33
34
  } from "@inrupt/solid-client-authn-core/mocks";
34
- import type * as SolidClientAuthnCore from "@inrupt/solid-client-authn-core";
35
35
  import { jest, it, describe, expect } from "@jest/globals";
36
- import { CodeExchangeResult, getBearerToken } from "@inrupt/oidc-client-ext";
36
+ import { getBearerToken } from "@inrupt/oidc-client-ext";
37
37
  import type * as OidcClientExt from "@inrupt/oidc-client-ext";
38
38
  import { fetch, Response, Headers } from "@inrupt/universal-fetch";
39
- import * as UniversalFetch from "@inrupt/universal-fetch";
40
- import { JWK, importJWK } from "jose";
41
- import { KeyObject } from "crypto";
39
+ import type * as UniversalFetch from "@inrupt/universal-fetch";
40
+ import type { JWK } from "jose";
41
+ import { importJWK } from "jose";
42
+ import type { KeyObject } from "crypto";
42
43
  import { AuthCodeRedirectHandler } from "./AuthCodeRedirectHandler";
43
44
  import { SessionInfoManagerMock } from "../../../sessionInfo/__mocks__/SessionInfoManager";
44
45
  import { LocalStorageMock } from "../../../storage/__mocks__/LocalStorage";
@@ -116,31 +117,33 @@ const mockAccessTokenDpop = (): AccessJwt => {
116
117
  const mockAccessTokenBearer = (): string => "some token";
117
118
 
118
119
  const MOCK_EXPIRE_TIME = 1337;
119
- const mockTokenEndpointBearerResponse = (): CodeExchangeResult => {
120
- return {
121
- accessToken: mockAccessTokenBearer(),
122
- idToken: mockIdToken(),
123
- webId: mockWebId(),
124
- expiresIn: MOCK_EXPIRE_TIME,
125
- refreshToken: "some refresh token",
120
+ const mockTokenEndpointBearerResponse =
121
+ (): OidcClientExt.CodeExchangeResult => {
122
+ return {
123
+ accessToken: mockAccessTokenBearer(),
124
+ idToken: mockIdToken(),
125
+ webId: mockWebId(),
126
+ expiresIn: MOCK_EXPIRE_TIME,
127
+ refreshToken: "some refresh token",
128
+ };
126
129
  };
127
- };
128
130
 
129
- const mockTokenEndpointDpopResponse = async (): Promise<CodeExchangeResult> => {
130
- return {
131
- accessToken: JSON.stringify(mockAccessTokenDpop()),
132
- idToken: mockIdToken(),
133
- webId: mockWebId(),
134
- dpopKey: {
135
- privateKey: (await importJWK(mockJwk())) as KeyObject,
136
- // Note that here for convenience the private key is also used as public key.
137
- // Obviously, this should never be done in non-test code.
138
- publicKey: mockJwk(),
139
- },
140
- expiresIn: MOCK_EXPIRE_TIME,
141
- refreshToken: "some DPoP-bound refresh token",
131
+ const mockTokenEndpointDpopResponse =
132
+ async (): Promise<OidcClientExt.CodeExchangeResult> => {
133
+ return {
134
+ accessToken: JSON.stringify(mockAccessTokenDpop()),
135
+ idToken: mockIdToken(),
136
+ webId: mockWebId(),
137
+ dpopKey: {
138
+ privateKey: (await importJWK(mockJwk())) as KeyObject,
139
+ // Note that here for convenience the private key is also used as public key.
140
+ // Obviously, this should never be done in non-test code.
141
+ publicKey: mockJwk(),
142
+ },
143
+ expiresIn: MOCK_EXPIRE_TIME,
144
+ refreshToken: "some DPoP-bound refresh token",
145
+ };
142
146
  };
143
- };
144
147
 
145
148
  const mockLocalStorage = (stored: Record<string, string>) => {
146
149
  // Kinda weird: `(window as any).localStorage = new LocalStorageMock(stored)` does
@@ -154,11 +157,6 @@ const mockLocalStorage = (stored: Record<string, string>) => {
154
157
  };
155
158
 
156
159
  jest.mock("@inrupt/oidc-client-ext");
157
- // jest.mock("cross-fetch", () => ({
158
- // ...(jest.requireActual("cross-fetch") as typeof CrossFetch),
159
- // default: jest.fn<typeof fetch>(),
160
- // fetch: jest.fn<typeof fetch>(),
161
- // }));
162
160
 
163
161
  jest.useFakeTimers();
164
162
 
@@ -558,7 +556,7 @@ describe("AuthCodeRedirectHandler", () => {
558
556
  mockRedirectUrl()
559
557
  );
560
558
 
561
- expect(sessionInfo.expirationDate).toBeNull();
559
+ expect(sessionInfo.expirationDate).toBeUndefined();
562
560
  });
563
561
 
564
562
  it("clears the oidc-client specific session information", async () => {
@@ -580,9 +578,9 @@ describe("AuthCodeRedirectHandler", () => {
580
578
  it("returns a fetch that supports the refresh flow", async () => {
581
579
  mockOidcClient();
582
580
  const mockedStorage = mockDefaultStorageUtility();
583
- const coreModule = jest.requireActual<typeof SolidClientAuthnCore>(
584
- "@inrupt/solid-client-authn-core"
585
- );
581
+ const coreModule = jest.requireActual<{
582
+ buildAuthenticatedFetch: typeof buildAuthenticatedFetch;
583
+ }>("@inrupt/solid-client-authn-core");
586
584
  const mockAuthenticatedFetchBuild = jest.spyOn(
587
585
  coreModule,
588
586
  "buildAuthenticatedFetch"
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -27,27 +27,30 @@
27
27
  // being unauthenticated. This should be looked into when migrating to universal-fetch.
28
28
  // import { fetch } from "cross-fetch";
29
29
 
30
- import { fetch } from "@inrupt/universal-fetch";
30
+ import { fetch as uniFetch } from "@inrupt/universal-fetch";
31
31
 
32
- import {
33
- buildAuthenticatedFetch,
32
+ import type {
34
33
  IClient,
35
34
  IClientRegistrar,
36
35
  IIssuerConfigFetcher,
37
36
  IIncomingRedirectHandler,
38
- ISessionInfo,
39
37
  ISessionInfoManager,
40
38
  IStorageUtility,
41
39
  ITokenRefresher,
42
- loadOidcContextFromStorage,
43
40
  RefreshOptions,
41
+ IncomingRedirectResult,
44
42
  } from "@inrupt/solid-client-authn-core";
45
43
  import {
46
- getDpopToken,
47
- getBearerToken,
48
- CodeExchangeResult,
49
- } from "@inrupt/oidc-client-ext";
50
- import { EventEmitter } from "events";
44
+ buildAuthenticatedFetch,
45
+ loadOidcContextFromStorage,
46
+ maybeBuildRpInitiatedLogout,
47
+ } from "@inrupt/solid-client-authn-core";
48
+ import type { CodeExchangeResult } from "@inrupt/oidc-client-ext";
49
+ import { getDpopToken, getBearerToken } from "@inrupt/oidc-client-ext";
50
+ import type { EventEmitter } from "events";
51
+
52
+ const globalFetch: typeof uniFetch = (...args) =>
53
+ uniFetch.call(globalThis, ...args);
51
54
 
52
55
  /**
53
56
  * @hidden
@@ -78,7 +81,7 @@ export class AuthCodeRedirectHandler implements IIncomingRedirectHandler {
78
81
  async handle(
79
82
  redirectUrl: string,
80
83
  eventEmitter?: EventEmitter
81
- ): Promise<ISessionInfo & { fetch: typeof fetch }> {
84
+ ): Promise<IncomingRedirectResult> {
82
85
  if (!(await this.canHandle(redirectUrl))) {
83
86
  throw new Error(
84
87
  `AuthCodeRedirectHandler cannot handle [${redirectUrl}]: it is missing one of [code, state].`
@@ -162,12 +165,16 @@ export class AuthCodeRedirectHandler implements IIncomingRedirectHandler {
162
165
  };
163
166
  }
164
167
 
165
- const authFetch = await buildAuthenticatedFetch(fetch, tokens.accessToken, {
166
- dpopKey: tokens.dpopKey,
167
- refreshOptions,
168
- eventEmitter,
169
- expiresIn: tokens.expiresIn,
170
- });
168
+ const authFetch = await buildAuthenticatedFetch(
169
+ globalFetch,
170
+ tokens.accessToken,
171
+ {
172
+ dpopKey: tokens.dpopKey,
173
+ refreshOptions,
174
+ eventEmitter,
175
+ expiresIn: tokens.expiresIn,
176
+ }
177
+ );
171
178
 
172
179
  await this.storageUtility.setForUser(
173
180
  storedSessionId,
@@ -185,10 +192,14 @@ export class AuthCodeRedirectHandler implements IIncomingRedirectHandler {
185
192
 
186
193
  return Object.assign(sessionInfo, {
187
194
  fetch: authFetch,
195
+ getLogoutUrl: maybeBuildRpInitiatedLogout({
196
+ idTokenHint: tokens.idToken,
197
+ endSessionEndpoint: issuerConfig.endSessionEndpoint,
198
+ }),
188
199
  expirationDate:
189
200
  typeof tokens.expiresIn === "number"
190
201
  ? tokenCreatedAt + tokens.expiresIn * 1000
191
- : null,
192
- });
202
+ : undefined,
203
+ } as IncomingRedirectResult);
193
204
  }
194
205
  }
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -22,8 +22,7 @@
22
22
  import { jest, it, describe, expect } from "@jest/globals";
23
23
  import { EventEmitter } from "events";
24
24
  import { EVENTS } from "@inrupt/solid-client-authn-core";
25
- import { fetch } from "@inrupt/universal-fetch";
26
- import * as UniversalFetch from "@inrupt/universal-fetch";
25
+ import type * as UniversalFetch from "@inrupt/universal-fetch";
27
26
  import { ErrorOidcHandler } from "./ErrorOidcHandler";
28
27
 
29
28
  jest.mock("@inrupt/universal-fetch", () => {
@@ -32,7 +31,7 @@ jest.mock("@inrupt/universal-fetch", () => {
32
31
  ) as typeof UniversalFetch;
33
32
  return {
34
33
  ...fetchModule,
35
- fetch: jest.fn<typeof fetch>(),
34
+ fetch: jest.fn<(typeof UniversalFetch)["fetch"]>(),
36
35
  };
37
36
  });
38
37
 
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -24,11 +24,11 @@
24
24
  * @packageDocumentation
25
25
  */
26
26
 
27
- import {
28
- EVENTS,
27
+ import type {
29
28
  IIncomingRedirectHandler,
30
29
  ISessionInfo,
31
30
  } from "@inrupt/solid-client-authn-core";
31
+ import { EVENTS } from "@inrupt/solid-client-authn-core";
32
32
  import type { EventEmitter } from "events";
33
33
 
34
34
  import { getUnauthenticatedSession } from "../../../sessionInfo/SessionInfoManager";
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -20,8 +20,7 @@
20
20
  //
21
21
 
22
22
  import { jest, it, describe, expect } from "@jest/globals";
23
- import { fetch } from "@inrupt/universal-fetch";
24
- import * as UniversalFetch from "@inrupt/universal-fetch";
23
+ import type * as UniversalFetch from "@inrupt/universal-fetch";
25
24
  import { FallbackRedirectHandler } from "./FallbackRedirectHandler";
26
25
 
27
26
  jest.mock("@inrupt/universal-fetch", () => {
@@ -30,7 +29,7 @@ jest.mock("@inrupt/universal-fetch", () => {
30
29
  ) as typeof UniversalFetch;
31
30
  return {
32
31
  ...fetchModule,
33
- fetch: jest.fn<typeof fetch>(),
32
+ fetch: jest.fn<(typeof UniversalFetch)["fetch"]>(),
34
33
  };
35
34
  });
36
35
 
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -24,7 +24,7 @@
24
24
  * @packageDocumentation
25
25
  */
26
26
 
27
- import {
27
+ import type {
28
28
  IIncomingRedirectHandler,
29
29
  ISessionInfo,
30
30
  } from "@inrupt/solid-client-authn-core";
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2022 Inrupt Inc.
2
+ // Copyright Inrupt Inc.
3
3
  //
4
4
  // Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  // of this software and associated documentation files (the "Software"), to deal in
@@ -25,11 +25,11 @@ import mockConsole from "jest-mock-console";
25
25
  /**
26
26
  * Test for AuthorizationCodeWithPkceOidcHandler
27
27
  */
28
- import {
28
+ import type {
29
29
  IOidcOptions,
30
30
  IRedirectorOptions,
31
- StorageUtility,
32
31
  } from "@inrupt/solid-client-authn-core";
32
+ import { StorageUtility } from "@inrupt/solid-client-authn-core";
33
33
  import {
34
34
  StorageUtilityMock,
35
35
  mockStorage,