@osdk/oauth 1.0.0 → 1.1.0-beta.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @osdk/oauth
2
2
 
3
+ ## 1.1.0-beta.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d12c92b: Fixes process.env.NODE_ENV handling
8
+
3
9
  ## 1.0.0
4
10
 
5
11
  ### Major Changes
@@ -43,7 +43,7 @@ export function common(client, as, _signIn, oauthHttpOptions, refresh) {
43
43
  expires_in,
44
44
  access_token
45
45
  } = resp;
46
- !(expires_in != null) ? undefined !== "production" ? invariant(false) : invariant(false) : void 0;
46
+ !(expires_in != null) ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
47
47
  saveLocal(client, {
48
48
  refresh_token
49
49
  });
@@ -97,7 +97,7 @@ export function common(client, as, _signIn, oauthHttpOptions, refresh) {
97
97
  signIn,
98
98
  refresh,
99
99
  signOut: async function signOut() {
100
- !token ? undefined !== "production" ? invariant(false, "not signed in") : invariant(false) : void 0;
100
+ !token ? process.env.NODE_ENV !== "production" ? invariant(false, "not signed in") : invariant(false) : void 0;
101
101
  const result = await processRevocationResponse(await revocationRequest(as, client, token.access_token, oauthHttpOptions));
102
102
  rmTimeout();
103
103
  // Clean up
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":["processRevocationResponse","revocationRequest","invariant","TypedEventTarget","throwIfError","CustomEvent","globalThis","localStorage","saveLocal","client","x","setItem","client_id","JSON","stringify","removeLocal","removeItem","readLocal","parse","getItem","common","as","_signIn","oauthHttpOptions","refresh","token","eventTarget","makeTokenAndSaveRefresh","resp","type","refresh_token","expires_in","access_token","undefined","expires_at","Date","now","dispatchTypedEvent","detail","refreshTimeout","rmTimeout","clearTimeout","restartRefreshTimer","evt","setTimeout","pendingSignIn","signIn","addEventListener","getTokenOrUndefined","getToken","Object","assign","signOut","result","Event","bind","removeEventListener","createAuthorizationServer","ctxPath","url","issuer","URL","token_endpoint","authorization_endpoint","revocation_endpoint"],"sources":["common.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { processRevocationResponse, revocationRequest } from \"oauth4webapi\";\nimport invariant from \"tiny-invariant\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nimport { throwIfError } from \"./throwIfError.js\";\n// Node 18 is supposed to have a `CustomEvent` but it is not exposed on `globalThis`\n// which creates a problem for making a single codebase for node and browser. This polyfill works around it\nconst CustomEvent = process.env.TARGET === \"browser\"\n ? globalThis.CustomEvent\n : globalThis.CustomEvent\n ?? class CustomEvent extends Event {\n #detail;\n constructor(type, options) {\n super(type, options);\n this.#detail = options?.detail ?? null;\n }\n get detail() {\n return this.#detail;\n }\n };\nconst localStorage = globalThis.localStorage;\nexport function saveLocal(client, x) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.setItem(`@osdk/oauth : refresh : ${client.client_id}`, JSON.stringify(x));\n}\nexport function removeLocal(client) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.removeItem(`@osdk/oauth : refresh : ${client.client_id}`);\n}\nexport function readLocal(client) {\n return JSON.parse(\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.getItem(`@osdk/oauth : refresh : ${client.client_id}`)\n ?? \"{}\");\n}\nexport function common(client, as, _signIn, oauthHttpOptions, refresh) {\n let token;\n const eventTarget = new TypedEventTarget();\n function makeTokenAndSaveRefresh(resp, type) {\n const { refresh_token, expires_in, access_token } = resp;\n invariant(expires_in != null);\n saveLocal(client, { refresh_token });\n token = {\n refresh_token,\n expires_in,\n access_token,\n expires_at: Date.now() + expires_in * 1000,\n };\n eventTarget.dispatchTypedEvent(type, new CustomEvent(type, { detail: token }));\n return token;\n }\n let refreshTimeout;\n function rmTimeout() {\n if (refreshTimeout)\n clearTimeout(refreshTimeout);\n }\n function restartRefreshTimer(evt) {\n if (refresh) {\n rmTimeout();\n refreshTimeout = setTimeout(refresh, evt.detail.expires_in * 1000 - 60 * 1000);\n }\n }\n async function signOut() {\n invariant(token, \"not signed in\");\n const result = await processRevocationResponse(await revocationRequest(as, client, token.access_token, oauthHttpOptions));\n rmTimeout();\n // Clean up\n removeLocal(client);\n token = undefined;\n throwIfError(result);\n eventTarget.dispatchTypedEvent(\"signOut\", new Event(\"signOut\"));\n }\n let pendingSignIn;\n async function signIn() {\n if (pendingSignIn) {\n return pendingSignIn;\n }\n try {\n pendingSignIn = _signIn();\n return await pendingSignIn;\n }\n finally {\n pendingSignIn = undefined;\n }\n }\n eventTarget.addEventListener(\"signIn\", restartRefreshTimer);\n eventTarget.addEventListener(\"refresh\", restartRefreshTimer);\n function getTokenOrUndefined() {\n if (!token || Date.now() >= token.expires_at) {\n return undefined;\n }\n return token?.access_token;\n }\n const getToken = Object.assign(async function getToken() {\n if (!token || Date.now() >= token.expires_at) {\n token = await signIn();\n }\n return token?.access_token;\n }, {\n signIn,\n refresh,\n signOut,\n rmTimeout,\n getTokenOrUndefined,\n addEventListener: eventTarget.addEventListener.bind(eventTarget),\n removeEventListener: eventTarget.removeEventListener.bind(eventTarget),\n });\n return { getToken, makeTokenAndSaveRefresh };\n}\nexport function createAuthorizationServer(ctxPath, url) {\n const issuer = `${new URL(ctxPath, url)}`;\n return {\n token_endpoint: `${issuer}/api/oauth2/token`,\n authorization_endpoint: `${issuer}/api/oauth2/authorize`,\n revocation_endpoint: `${issuer}/api/oauth2/revoke_token`,\n issuer,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"common.js","names":["processRevocationResponse","revocationRequest","invariant","TypedEventTarget","throwIfError","CustomEvent","globalThis","localStorage","saveLocal","client","x","setItem","client_id","JSON","stringify","removeLocal","removeItem","readLocal","parse","getItem","common","as","_signIn","oauthHttpOptions","refresh","token","eventTarget","makeTokenAndSaveRefresh","resp","type","refresh_token","expires_in","access_token","process","env","NODE_ENV","expires_at","Date","now","dispatchTypedEvent","detail","refreshTimeout","rmTimeout","clearTimeout","restartRefreshTimer","evt","setTimeout","pendingSignIn","signIn","undefined","addEventListener","getTokenOrUndefined","getToken","Object","assign","signOut","result","Event","bind","removeEventListener","createAuthorizationServer","ctxPath","url","issuer","URL","token_endpoint","authorization_endpoint","revocation_endpoint"],"sources":["common.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { processRevocationResponse, revocationRequest } from \"oauth4webapi\";\nimport invariant from \"tiny-invariant\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nimport { throwIfError } from \"./throwIfError.js\";\n// Node 18 is supposed to have a `CustomEvent` but it is not exposed on `globalThis`\n// which creates a problem for making a single codebase for node and browser. This polyfill works around it\nconst CustomEvent = process.env.TARGET === \"browser\"\n ? globalThis.CustomEvent\n : globalThis.CustomEvent\n ?? class CustomEvent extends Event {\n #detail;\n constructor(type, options) {\n super(type, options);\n this.#detail = options?.detail ?? null;\n }\n get detail() {\n return this.#detail;\n }\n };\nconst localStorage = globalThis.localStorage;\nexport function saveLocal(client, x) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.setItem(`@osdk/oauth : refresh : ${client.client_id}`, JSON.stringify(x));\n}\nexport function removeLocal(client) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.removeItem(`@osdk/oauth : refresh : ${client.client_id}`);\n}\nexport function readLocal(client) {\n return JSON.parse(\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.getItem(`@osdk/oauth : refresh : ${client.client_id}`)\n ?? \"{}\");\n}\nexport function common(client, as, _signIn, oauthHttpOptions, refresh) {\n let token;\n const eventTarget = new TypedEventTarget();\n function makeTokenAndSaveRefresh(resp, type) {\n const { refresh_token, expires_in, access_token } = resp;\n invariant(expires_in != null);\n saveLocal(client, { refresh_token });\n token = {\n refresh_token,\n expires_in,\n access_token,\n expires_at: Date.now() + expires_in * 1000,\n };\n eventTarget.dispatchTypedEvent(type, new CustomEvent(type, { detail: token }));\n return token;\n }\n let refreshTimeout;\n function rmTimeout() {\n if (refreshTimeout)\n clearTimeout(refreshTimeout);\n }\n function restartRefreshTimer(evt) {\n if (refresh) {\n rmTimeout();\n refreshTimeout = setTimeout(refresh, evt.detail.expires_in * 1000 - 60 * 1000);\n }\n }\n async function signOut() {\n invariant(token, \"not signed in\");\n const result = await processRevocationResponse(await revocationRequest(as, client, token.access_token, oauthHttpOptions));\n rmTimeout();\n // Clean up\n removeLocal(client);\n token = undefined;\n throwIfError(result);\n eventTarget.dispatchTypedEvent(\"signOut\", new Event(\"signOut\"));\n }\n let pendingSignIn;\n async function signIn() {\n if (pendingSignIn) {\n return pendingSignIn;\n }\n try {\n pendingSignIn = _signIn();\n return await pendingSignIn;\n }\n finally {\n pendingSignIn = undefined;\n }\n }\n eventTarget.addEventListener(\"signIn\", restartRefreshTimer);\n eventTarget.addEventListener(\"refresh\", restartRefreshTimer);\n function getTokenOrUndefined() {\n if (!token || Date.now() >= token.expires_at) {\n return undefined;\n }\n return token?.access_token;\n }\n const getToken = Object.assign(async function getToken() {\n if (!token || Date.now() >= token.expires_at) {\n token = await signIn();\n }\n return token?.access_token;\n }, {\n signIn,\n refresh,\n signOut,\n rmTimeout,\n getTokenOrUndefined,\n addEventListener: eventTarget.addEventListener.bind(eventTarget),\n removeEventListener: eventTarget.removeEventListener.bind(eventTarget),\n });\n return { getToken, makeTokenAndSaveRefresh };\n}\nexport function createAuthorizationServer(ctxPath, url) {\n const issuer = `${new URL(ctxPath, url)}`;\n return {\n token_endpoint: `${issuer}/api/oauth2/token`,\n authorization_endpoint: `${issuer}/api/oauth2/authorize`,\n revocation_endpoint: `${issuer}/api/oauth2/revoke_token`,\n issuer,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -78,7 +78,7 @@ export function createPublicOauthClient(client_id, url, redirectUrl, useHistory
78
78
  }
79
79
  return result;
80
80
  } catch (e) {
81
- if (process?.env?.NODE_ENV !== "production") {
81
+ if (process.env.NODE_ENV !== "production") {
82
82
  // eslint-disable-next-line no-console
83
83
  console.warn("Failed to get OAuth2 refresh token. Removing refresh token", e);
84
84
  }
@@ -100,7 +100,7 @@ export function createPublicOauthClient(client_id, url, redirectUrl, useHistory
100
100
  go(oldUrl);
101
101
  return ret;
102
102
  } catch (e) {
103
- if (process?.env?.NODE_ENV !== "production") {
103
+ if (process.env.NODE_ENV !== "production") {
104
104
  // eslint-disable-next-line no-console
105
105
  console.warn("Failed to get OAuth2 token using PKCE, removing PKCE and starting a new auth flow", e);
106
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createPublicOauthClient.js","names":["delay","authorizationCodeGrantRequest","calculatePKCECodeChallenge","customFetch","generateRandomCodeVerifier","generateRandomState","processAuthorizationCodeOAuth2Response","refreshTokenGrantRequest","validateAuthResponse","common","createAuthorizationServer","readLocal","removeLocal","saveLocal","throwIfError","createPublicOauthClient","client_id","url","redirectUrl","useHistory","loginPage","postLoginPage","window","location","toString","scopes","fetchFn","globalThis","fetch","ctxPath","client","token_endpoint_auth_method","authServer","oauthHttpOptions","length","makeTokenAndSaveRefresh","getToken","_signIn","maybeRefresh","maybeHandleAuthReturn","initiateLoginRedirect","bind","go","x","history","replaceState","assign","Error","expectRefreshToken","refresh_token","result","pathname","URL","oldUrl","e","process","env","NODE_ENV","console","warn","codeVerifier","state","ret","href","authorization_endpoint","URLSearchParams","response_type","redirect_uri","code_challenge","code_challenge_method","scope","join"],"sources":["createPublicOauthClient.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport delay from \"delay\";\nimport { authorizationCodeGrantRequest, calculatePKCECodeChallenge, customFetch, generateRandomCodeVerifier, generateRandomState, processAuthorizationCodeOAuth2Response, refreshTokenGrantRequest, validateAuthResponse, } from \"oauth4webapi\";\nimport { common, createAuthorizationServer, readLocal, removeLocal, saveLocal, } from \"./common.js\";\nimport { throwIfError } from \"./throwIfError.js\";\n/**\n * @param client_id\n * @param url the base url of your foundry server\n * @param redirectUrl the url configured for redirect in the oauth configuration on the server\n * @param useHistory if true, when possible uses `history.replaceState()`, otherwise uses `window.location.assign()`\n * @param loginPage if you want a custom landing page prior to logging in, set this to that url\n * @param postLoginPage if you want to customize where you return to after a completed authentication cycle. defaults to the url when the page loaded\n * @param scopes\n * @param fetchFn\n * @param ctxPath\n * @returns {PublicOauthClient} which can be used as a token provider\n */\nexport function createPublicOauthClient(client_id, url, redirectUrl, useHistory = true, loginPage, postLoginPage = window.location.toString(), scopes = [], fetchFn = globalThis.fetch, ctxPath = \"/multipass\") {\n const client = { client_id, token_endpoint_auth_method: \"none\" };\n const authServer = createAuthorizationServer(ctxPath, url);\n const oauthHttpOptions = { [customFetch]: fetchFn };\n if (scopes.length === 0) {\n scopes = [\"api:read-data\", \"api:write-data\"];\n }\n const { makeTokenAndSaveRefresh, getToken } = common(client, authServer, _signIn, oauthHttpOptions, maybeRefresh.bind(globalThis, true));\n async function go(x) {\n if (useHistory)\n return window.history.replaceState({}, \"\", x);\n else\n window.location.assign(x);\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n async function maybeRefresh(expectRefreshToken) {\n const { refresh_token } = readLocal(client);\n if (!refresh_token) {\n if (expectRefreshToken)\n throw new Error(\"No refresh token found\");\n return;\n }\n try {\n // note, we don't use processRefreshTokenResponse because the mp oauth implementation\n // doesn't do refresh tokens quite right and this lets us skip the id check\n const result = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await refreshTokenGrantRequest(authServer, client, refresh_token, oauthHttpOptions))), \"refresh\");\n if (result && window.location.pathname === new URL(redirectUrl).pathname) {\n const { oldUrl } = readLocal(client);\n go(oldUrl ?? \"/\");\n }\n return result;\n }\n catch (e) {\n if (process?.env?.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 refresh token. Removing refresh token\", e);\n }\n removeLocal(client);\n if (expectRefreshToken) {\n throw new Error(\"Could not refresh token\");\n }\n }\n }\n async function maybeHandleAuthReturn() {\n const { codeVerifier, state, oldUrl } = readLocal(client);\n if (!codeVerifier)\n return;\n try {\n const ret = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await authorizationCodeGrantRequest(authServer, client, throwIfError(validateAuthResponse(authServer, client, new URL(window.location.href), state)), redirectUrl, codeVerifier, oauthHttpOptions))), \"signIn\");\n go(oldUrl);\n return ret;\n }\n catch (e) {\n if (process?.env?.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 token using PKCE, removing PKCE and starting a new auth flow\", e);\n }\n removeLocal(client);\n }\n }\n async function initiateLoginRedirect() {\n if (loginPage\n && window.location.href !== loginPage\n && window.location.pathname !== loginPage) {\n saveLocal(client, { oldUrl: postLoginPage });\n return await go(loginPage);\n }\n const state = generateRandomState();\n const codeVerifier = generateRandomCodeVerifier();\n const oldUrl = readLocal(client).oldUrl ?? window.location.toString();\n saveLocal(client, { codeVerifier, state, oldUrl });\n window.location.assign(`${authServer\n .authorization_endpoint}?${new URLSearchParams({\n client_id,\n response_type: \"code\",\n state,\n redirect_uri: redirectUrl,\n code_challenge: await calculatePKCECodeChallenge(codeVerifier),\n code_challenge_method: \"S256\",\n scope: [\"offline_access\", ...scopes].join(\" \"),\n })}`);\n // Give time for redirect to happen\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n /** Will throw if there is no token! */\n async function _signIn() {\n // 1. Check if we have a refresh token in local storage\n return await maybeRefresh()\n // 2. If there is no refresh token we are likely trying to perform the callback\n ?? await maybeHandleAuthReturn()\n // 3. If we haven't been able to load the token from one of the two above ways, we need to make the initial auth request\n ?? await initiateLoginRedirect();\n }\n return getToken;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createPublicOauthClient.js","names":["delay","authorizationCodeGrantRequest","calculatePKCECodeChallenge","customFetch","generateRandomCodeVerifier","generateRandomState","processAuthorizationCodeOAuth2Response","refreshTokenGrantRequest","validateAuthResponse","common","createAuthorizationServer","readLocal","removeLocal","saveLocal","throwIfError","createPublicOauthClient","client_id","url","redirectUrl","useHistory","loginPage","postLoginPage","window","location","toString","scopes","fetchFn","globalThis","fetch","ctxPath","client","token_endpoint_auth_method","authServer","oauthHttpOptions","length","makeTokenAndSaveRefresh","getToken","_signIn","maybeRefresh","maybeHandleAuthReturn","initiateLoginRedirect","bind","go","x","history","replaceState","assign","Error","expectRefreshToken","refresh_token","result","pathname","URL","oldUrl","e","process","env","NODE_ENV","console","warn","codeVerifier","state","ret","href","authorization_endpoint","URLSearchParams","response_type","redirect_uri","code_challenge","code_challenge_method","scope","join"],"sources":["createPublicOauthClient.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport delay from \"delay\";\nimport { authorizationCodeGrantRequest, calculatePKCECodeChallenge, customFetch, generateRandomCodeVerifier, generateRandomState, processAuthorizationCodeOAuth2Response, refreshTokenGrantRequest, validateAuthResponse, } from \"oauth4webapi\";\nimport { common, createAuthorizationServer, readLocal, removeLocal, saveLocal, } from \"./common.js\";\nimport { throwIfError } from \"./throwIfError.js\";\n/**\n * @param client_id\n * @param url the base url of your foundry server\n * @param redirectUrl the url configured for redirect in the oauth configuration on the server\n * @param useHistory if true, when possible uses `history.replaceState()`, otherwise uses `window.location.assign()`\n * @param loginPage if you want a custom landing page prior to logging in, set this to that url\n * @param postLoginPage if you want to customize where you return to after a completed authentication cycle. defaults to the url when the page loaded\n * @param scopes\n * @param fetchFn\n * @param ctxPath\n * @returns {PublicOauthClient} which can be used as a token provider\n */\nexport function createPublicOauthClient(client_id, url, redirectUrl, useHistory = true, loginPage, postLoginPage = window.location.toString(), scopes = [], fetchFn = globalThis.fetch, ctxPath = \"/multipass\") {\n const client = { client_id, token_endpoint_auth_method: \"none\" };\n const authServer = createAuthorizationServer(ctxPath, url);\n const oauthHttpOptions = { [customFetch]: fetchFn };\n if (scopes.length === 0) {\n scopes = [\"api:read-data\", \"api:write-data\"];\n }\n const { makeTokenAndSaveRefresh, getToken } = common(client, authServer, _signIn, oauthHttpOptions, maybeRefresh.bind(globalThis, true));\n async function go(x) {\n if (useHistory)\n return window.history.replaceState({}, \"\", x);\n else\n window.location.assign(x);\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n async function maybeRefresh(expectRefreshToken) {\n const { refresh_token } = readLocal(client);\n if (!refresh_token) {\n if (expectRefreshToken)\n throw new Error(\"No refresh token found\");\n return;\n }\n try {\n // note, we don't use processRefreshTokenResponse because the mp oauth implementation\n // doesn't do refresh tokens quite right and this lets us skip the id check\n const result = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await refreshTokenGrantRequest(authServer, client, refresh_token, oauthHttpOptions))), \"refresh\");\n if (result && window.location.pathname === new URL(redirectUrl).pathname) {\n const { oldUrl } = readLocal(client);\n go(oldUrl ?? \"/\");\n }\n return result;\n }\n catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 refresh token. Removing refresh token\", e);\n }\n removeLocal(client);\n if (expectRefreshToken) {\n throw new Error(\"Could not refresh token\");\n }\n }\n }\n async function maybeHandleAuthReturn() {\n const { codeVerifier, state, oldUrl } = readLocal(client);\n if (!codeVerifier)\n return;\n try {\n const ret = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await authorizationCodeGrantRequest(authServer, client, throwIfError(validateAuthResponse(authServer, client, new URL(window.location.href), state)), redirectUrl, codeVerifier, oauthHttpOptions))), \"signIn\");\n go(oldUrl);\n return ret;\n }\n catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 token using PKCE, removing PKCE and starting a new auth flow\", e);\n }\n removeLocal(client);\n }\n }\n async function initiateLoginRedirect() {\n if (loginPage\n && window.location.href !== loginPage\n && window.location.pathname !== loginPage) {\n saveLocal(client, { oldUrl: postLoginPage });\n return await go(loginPage);\n }\n const state = generateRandomState();\n const codeVerifier = generateRandomCodeVerifier();\n const oldUrl = readLocal(client).oldUrl ?? window.location.toString();\n saveLocal(client, { codeVerifier, state, oldUrl });\n window.location.assign(`${authServer\n .authorization_endpoint}?${new URLSearchParams({\n client_id,\n response_type: \"code\",\n state,\n redirect_uri: redirectUrl,\n code_challenge: await calculatePKCECodeChallenge(codeVerifier),\n code_challenge_method: \"S256\",\n scope: [\"offline_access\", ...scopes].join(\" \"),\n })}`);\n // Give time for redirect to happen\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n /** Will throw if there is no token! */\n async function _signIn() {\n // 1. Check if we have a refresh token in local storage\n return await maybeRefresh()\n // 2. If there is no refresh token we are likely trying to perform the callback\n ?? await maybeHandleAuthReturn()\n // 3. If we haven't been able to load the token from one of the two above ways, we need to make the initial auth request\n ?? await initiateLoginRedirect();\n }\n return getToken;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -52,7 +52,7 @@ export function common(client, as, _signIn, oauthHttpOptions, refresh) {
52
52
  expires_in,
53
53
  access_token
54
54
  } = resp;
55
- !(expires_in != null) ? undefined !== "production" ? invariant(false) : invariant(false) : void 0;
55
+ !(expires_in != null) ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
56
56
  saveLocal(client, {
57
57
  refresh_token
58
58
  });
@@ -106,7 +106,7 @@ export function common(client, as, _signIn, oauthHttpOptions, refresh) {
106
106
  signIn,
107
107
  refresh,
108
108
  signOut: async function signOut() {
109
- !token ? undefined !== "production" ? invariant(false, "not signed in") : invariant(false) : void 0;
109
+ !token ? process.env.NODE_ENV !== "production" ? invariant(false, "not signed in") : invariant(false) : void 0;
110
110
  const result = await processRevocationResponse(await revocationRequest(as, client, token.access_token, oauthHttpOptions));
111
111
  rmTimeout();
112
112
  // Clean up
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":["processRevocationResponse","revocationRequest","invariant","TypedEventTarget","throwIfError","CustomEvent","globalThis","Event","detail","constructor","type","options","localStorage","saveLocal","client","x","setItem","client_id","JSON","stringify","removeLocal","removeItem","readLocal","parse","getItem","common","as","_signIn","oauthHttpOptions","refresh","token","eventTarget","makeTokenAndSaveRefresh","resp","refresh_token","expires_in","access_token","undefined","expires_at","Date","now","dispatchTypedEvent","refreshTimeout","rmTimeout","clearTimeout","restartRefreshTimer","evt","setTimeout","pendingSignIn","signIn","addEventListener","getTokenOrUndefined","getToken","Object","assign","signOut","result","bind","removeEventListener","createAuthorizationServer","ctxPath","url","issuer","URL","token_endpoint","authorization_endpoint","revocation_endpoint"],"sources":["common.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { processRevocationResponse, revocationRequest } from \"oauth4webapi\";\nimport invariant from \"tiny-invariant\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nimport { throwIfError } from \"./throwIfError.js\";\n// Node 18 is supposed to have a `CustomEvent` but it is not exposed on `globalThis`\n// which creates a problem for making a single codebase for node and browser. This polyfill works around it\nconst CustomEvent = process.env.TARGET === \"browser\"\n ? globalThis.CustomEvent\n : globalThis.CustomEvent\n ?? class CustomEvent extends Event {\n #detail;\n constructor(type, options) {\n super(type, options);\n this.#detail = options?.detail ?? null;\n }\n get detail() {\n return this.#detail;\n }\n };\nconst localStorage = globalThis.localStorage;\nexport function saveLocal(client, x) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.setItem(`@osdk/oauth : refresh : ${client.client_id}`, JSON.stringify(x));\n}\nexport function removeLocal(client) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.removeItem(`@osdk/oauth : refresh : ${client.client_id}`);\n}\nexport function readLocal(client) {\n return JSON.parse(\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.getItem(`@osdk/oauth : refresh : ${client.client_id}`)\n ?? \"{}\");\n}\nexport function common(client, as, _signIn, oauthHttpOptions, refresh) {\n let token;\n const eventTarget = new TypedEventTarget();\n function makeTokenAndSaveRefresh(resp, type) {\n const { refresh_token, expires_in, access_token } = resp;\n invariant(expires_in != null);\n saveLocal(client, { refresh_token });\n token = {\n refresh_token,\n expires_in,\n access_token,\n expires_at: Date.now() + expires_in * 1000,\n };\n eventTarget.dispatchTypedEvent(type, new CustomEvent(type, { detail: token }));\n return token;\n }\n let refreshTimeout;\n function rmTimeout() {\n if (refreshTimeout)\n clearTimeout(refreshTimeout);\n }\n function restartRefreshTimer(evt) {\n if (refresh) {\n rmTimeout();\n refreshTimeout = setTimeout(refresh, evt.detail.expires_in * 1000 - 60 * 1000);\n }\n }\n async function signOut() {\n invariant(token, \"not signed in\");\n const result = await processRevocationResponse(await revocationRequest(as, client, token.access_token, oauthHttpOptions));\n rmTimeout();\n // Clean up\n removeLocal(client);\n token = undefined;\n throwIfError(result);\n eventTarget.dispatchTypedEvent(\"signOut\", new Event(\"signOut\"));\n }\n let pendingSignIn;\n async function signIn() {\n if (pendingSignIn) {\n return pendingSignIn;\n }\n try {\n pendingSignIn = _signIn();\n return await pendingSignIn;\n }\n finally {\n pendingSignIn = undefined;\n }\n }\n eventTarget.addEventListener(\"signIn\", restartRefreshTimer);\n eventTarget.addEventListener(\"refresh\", restartRefreshTimer);\n function getTokenOrUndefined() {\n if (!token || Date.now() >= token.expires_at) {\n return undefined;\n }\n return token?.access_token;\n }\n const getToken = Object.assign(async function getToken() {\n if (!token || Date.now() >= token.expires_at) {\n token = await signIn();\n }\n return token?.access_token;\n }, {\n signIn,\n refresh,\n signOut,\n rmTimeout,\n getTokenOrUndefined,\n addEventListener: eventTarget.addEventListener.bind(eventTarget),\n removeEventListener: eventTarget.removeEventListener.bind(eventTarget),\n });\n return { getToken, makeTokenAndSaveRefresh };\n}\nexport function createAuthorizationServer(ctxPath, url) {\n const issuer = `${new URL(ctxPath, url)}`;\n return {\n token_endpoint: `${issuer}/api/oauth2/token`,\n authorization_endpoint: `${issuer}/api/oauth2/authorize`,\n revocation_endpoint: `${issuer}/api/oauth2/revoke_token`,\n issuer,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"common.js","names":["processRevocationResponse","revocationRequest","invariant","TypedEventTarget","throwIfError","CustomEvent","globalThis","Event","detail","constructor","type","options","localStorage","saveLocal","client","x","setItem","client_id","JSON","stringify","removeLocal","removeItem","readLocal","parse","getItem","common","as","_signIn","oauthHttpOptions","refresh","token","eventTarget","makeTokenAndSaveRefresh","resp","refresh_token","expires_in","access_token","process","env","NODE_ENV","expires_at","Date","now","dispatchTypedEvent","refreshTimeout","rmTimeout","clearTimeout","restartRefreshTimer","evt","setTimeout","pendingSignIn","signIn","undefined","addEventListener","getTokenOrUndefined","getToken","Object","assign","signOut","result","bind","removeEventListener","createAuthorizationServer","ctxPath","url","issuer","URL","token_endpoint","authorization_endpoint","revocation_endpoint"],"sources":["common.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { processRevocationResponse, revocationRequest } from \"oauth4webapi\";\nimport invariant from \"tiny-invariant\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nimport { throwIfError } from \"./throwIfError.js\";\n// Node 18 is supposed to have a `CustomEvent` but it is not exposed on `globalThis`\n// which creates a problem for making a single codebase for node and browser. This polyfill works around it\nconst CustomEvent = process.env.TARGET === \"browser\"\n ? globalThis.CustomEvent\n : globalThis.CustomEvent\n ?? class CustomEvent extends Event {\n #detail;\n constructor(type, options) {\n super(type, options);\n this.#detail = options?.detail ?? null;\n }\n get detail() {\n return this.#detail;\n }\n };\nconst localStorage = globalThis.localStorage;\nexport function saveLocal(client, x) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.setItem(`@osdk/oauth : refresh : ${client.client_id}`, JSON.stringify(x));\n}\nexport function removeLocal(client) {\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.removeItem(`@osdk/oauth : refresh : ${client.client_id}`);\n}\nexport function readLocal(client) {\n return JSON.parse(\n // MUST `localStorage?` as nodejs does not have localStorage\n localStorage?.getItem(`@osdk/oauth : refresh : ${client.client_id}`)\n ?? \"{}\");\n}\nexport function common(client, as, _signIn, oauthHttpOptions, refresh) {\n let token;\n const eventTarget = new TypedEventTarget();\n function makeTokenAndSaveRefresh(resp, type) {\n const { refresh_token, expires_in, access_token } = resp;\n invariant(expires_in != null);\n saveLocal(client, { refresh_token });\n token = {\n refresh_token,\n expires_in,\n access_token,\n expires_at: Date.now() + expires_in * 1000,\n };\n eventTarget.dispatchTypedEvent(type, new CustomEvent(type, { detail: token }));\n return token;\n }\n let refreshTimeout;\n function rmTimeout() {\n if (refreshTimeout)\n clearTimeout(refreshTimeout);\n }\n function restartRefreshTimer(evt) {\n if (refresh) {\n rmTimeout();\n refreshTimeout = setTimeout(refresh, evt.detail.expires_in * 1000 - 60 * 1000);\n }\n }\n async function signOut() {\n invariant(token, \"not signed in\");\n const result = await processRevocationResponse(await revocationRequest(as, client, token.access_token, oauthHttpOptions));\n rmTimeout();\n // Clean up\n removeLocal(client);\n token = undefined;\n throwIfError(result);\n eventTarget.dispatchTypedEvent(\"signOut\", new Event(\"signOut\"));\n }\n let pendingSignIn;\n async function signIn() {\n if (pendingSignIn) {\n return pendingSignIn;\n }\n try {\n pendingSignIn = _signIn();\n return await pendingSignIn;\n }\n finally {\n pendingSignIn = undefined;\n }\n }\n eventTarget.addEventListener(\"signIn\", restartRefreshTimer);\n eventTarget.addEventListener(\"refresh\", restartRefreshTimer);\n function getTokenOrUndefined() {\n if (!token || Date.now() >= token.expires_at) {\n return undefined;\n }\n return token?.access_token;\n }\n const getToken = Object.assign(async function getToken() {\n if (!token || Date.now() >= token.expires_at) {\n token = await signIn();\n }\n return token?.access_token;\n }, {\n signIn,\n refresh,\n signOut,\n rmTimeout,\n getTokenOrUndefined,\n addEventListener: eventTarget.addEventListener.bind(eventTarget),\n removeEventListener: eventTarget.removeEventListener.bind(eventTarget),\n });\n return { getToken, makeTokenAndSaveRefresh };\n}\nexport function createAuthorizationServer(ctxPath, url) {\n const issuer = `${new URL(ctxPath, url)}`;\n return {\n token_endpoint: `${issuer}/api/oauth2/token`,\n authorization_endpoint: `${issuer}/api/oauth2/authorize`,\n revocation_endpoint: `${issuer}/api/oauth2/revoke_token`,\n issuer,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -78,7 +78,7 @@ export function createPublicOauthClient(client_id, url, redirectUrl, useHistory
78
78
  }
79
79
  return result;
80
80
  } catch (e) {
81
- if (process?.env?.NODE_ENV !== "production") {
81
+ if (process.env.NODE_ENV !== "production") {
82
82
  // eslint-disable-next-line no-console
83
83
  console.warn("Failed to get OAuth2 refresh token. Removing refresh token", e);
84
84
  }
@@ -100,7 +100,7 @@ export function createPublicOauthClient(client_id, url, redirectUrl, useHistory
100
100
  go(oldUrl);
101
101
  return ret;
102
102
  } catch (e) {
103
- if (process?.env?.NODE_ENV !== "production") {
103
+ if (process.env.NODE_ENV !== "production") {
104
104
  // eslint-disable-next-line no-console
105
105
  console.warn("Failed to get OAuth2 token using PKCE, removing PKCE and starting a new auth flow", e);
106
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createPublicOauthClient.js","names":["delay","authorizationCodeGrantRequest","calculatePKCECodeChallenge","customFetch","generateRandomCodeVerifier","generateRandomState","processAuthorizationCodeOAuth2Response","refreshTokenGrantRequest","validateAuthResponse","common","createAuthorizationServer","readLocal","removeLocal","saveLocal","throwIfError","createPublicOauthClient","client_id","url","redirectUrl","useHistory","loginPage","postLoginPage","window","location","toString","scopes","fetchFn","globalThis","fetch","ctxPath","client","token_endpoint_auth_method","authServer","oauthHttpOptions","length","makeTokenAndSaveRefresh","getToken","_signIn","maybeRefresh","maybeHandleAuthReturn","initiateLoginRedirect","bind","go","x","history","replaceState","assign","Error","expectRefreshToken","refresh_token","result","pathname","URL","oldUrl","e","process","env","NODE_ENV","console","warn","codeVerifier","state","ret","href","authorization_endpoint","URLSearchParams","response_type","redirect_uri","code_challenge","code_challenge_method","scope","join"],"sources":["createPublicOauthClient.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport delay from \"delay\";\nimport { authorizationCodeGrantRequest, calculatePKCECodeChallenge, customFetch, generateRandomCodeVerifier, generateRandomState, processAuthorizationCodeOAuth2Response, refreshTokenGrantRequest, validateAuthResponse, } from \"oauth4webapi\";\nimport { common, createAuthorizationServer, readLocal, removeLocal, saveLocal, } from \"./common.js\";\nimport { throwIfError } from \"./throwIfError.js\";\n/**\n * @param client_id\n * @param url the base url of your foundry server\n * @param redirectUrl the url configured for redirect in the oauth configuration on the server\n * @param useHistory if true, when possible uses `history.replaceState()`, otherwise uses `window.location.assign()`\n * @param loginPage if you want a custom landing page prior to logging in, set this to that url\n * @param postLoginPage if you want to customize where you return to after a completed authentication cycle. defaults to the url when the page loaded\n * @param scopes\n * @param fetchFn\n * @param ctxPath\n * @returns {PublicOauthClient} which can be used as a token provider\n */\nexport function createPublicOauthClient(client_id, url, redirectUrl, useHistory = true, loginPage, postLoginPage = window.location.toString(), scopes = [], fetchFn = globalThis.fetch, ctxPath = \"/multipass\") {\n const client = { client_id, token_endpoint_auth_method: \"none\" };\n const authServer = createAuthorizationServer(ctxPath, url);\n const oauthHttpOptions = { [customFetch]: fetchFn };\n if (scopes.length === 0) {\n scopes = [\"api:read-data\", \"api:write-data\"];\n }\n const { makeTokenAndSaveRefresh, getToken } = common(client, authServer, _signIn, oauthHttpOptions, maybeRefresh.bind(globalThis, true));\n async function go(x) {\n if (useHistory)\n return window.history.replaceState({}, \"\", x);\n else\n window.location.assign(x);\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n async function maybeRefresh(expectRefreshToken) {\n const { refresh_token } = readLocal(client);\n if (!refresh_token) {\n if (expectRefreshToken)\n throw new Error(\"No refresh token found\");\n return;\n }\n try {\n // note, we don't use processRefreshTokenResponse because the mp oauth implementation\n // doesn't do refresh tokens quite right and this lets us skip the id check\n const result = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await refreshTokenGrantRequest(authServer, client, refresh_token, oauthHttpOptions))), \"refresh\");\n if (result && window.location.pathname === new URL(redirectUrl).pathname) {\n const { oldUrl } = readLocal(client);\n go(oldUrl ?? \"/\");\n }\n return result;\n }\n catch (e) {\n if (process?.env?.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 refresh token. Removing refresh token\", e);\n }\n removeLocal(client);\n if (expectRefreshToken) {\n throw new Error(\"Could not refresh token\");\n }\n }\n }\n async function maybeHandleAuthReturn() {\n const { codeVerifier, state, oldUrl } = readLocal(client);\n if (!codeVerifier)\n return;\n try {\n const ret = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await authorizationCodeGrantRequest(authServer, client, throwIfError(validateAuthResponse(authServer, client, new URL(window.location.href), state)), redirectUrl, codeVerifier, oauthHttpOptions))), \"signIn\");\n go(oldUrl);\n return ret;\n }\n catch (e) {\n if (process?.env?.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 token using PKCE, removing PKCE and starting a new auth flow\", e);\n }\n removeLocal(client);\n }\n }\n async function initiateLoginRedirect() {\n if (loginPage\n && window.location.href !== loginPage\n && window.location.pathname !== loginPage) {\n saveLocal(client, { oldUrl: postLoginPage });\n return await go(loginPage);\n }\n const state = generateRandomState();\n const codeVerifier = generateRandomCodeVerifier();\n const oldUrl = readLocal(client).oldUrl ?? window.location.toString();\n saveLocal(client, { codeVerifier, state, oldUrl });\n window.location.assign(`${authServer\n .authorization_endpoint}?${new URLSearchParams({\n client_id,\n response_type: \"code\",\n state,\n redirect_uri: redirectUrl,\n code_challenge: await calculatePKCECodeChallenge(codeVerifier),\n code_challenge_method: \"S256\",\n scope: [\"offline_access\", ...scopes].join(\" \"),\n })}`);\n // Give time for redirect to happen\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n /** Will throw if there is no token! */\n async function _signIn() {\n // 1. Check if we have a refresh token in local storage\n return await maybeRefresh()\n // 2. If there is no refresh token we are likely trying to perform the callback\n ?? await maybeHandleAuthReturn()\n // 3. If we haven't been able to load the token from one of the two above ways, we need to make the initial auth request\n ?? await initiateLoginRedirect();\n }\n return getToken;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createPublicOauthClient.js","names":["delay","authorizationCodeGrantRequest","calculatePKCECodeChallenge","customFetch","generateRandomCodeVerifier","generateRandomState","processAuthorizationCodeOAuth2Response","refreshTokenGrantRequest","validateAuthResponse","common","createAuthorizationServer","readLocal","removeLocal","saveLocal","throwIfError","createPublicOauthClient","client_id","url","redirectUrl","useHistory","loginPage","postLoginPage","window","location","toString","scopes","fetchFn","globalThis","fetch","ctxPath","client","token_endpoint_auth_method","authServer","oauthHttpOptions","length","makeTokenAndSaveRefresh","getToken","_signIn","maybeRefresh","maybeHandleAuthReturn","initiateLoginRedirect","bind","go","x","history","replaceState","assign","Error","expectRefreshToken","refresh_token","result","pathname","URL","oldUrl","e","process","env","NODE_ENV","console","warn","codeVerifier","state","ret","href","authorization_endpoint","URLSearchParams","response_type","redirect_uri","code_challenge","code_challenge_method","scope","join"],"sources":["createPublicOauthClient.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport delay from \"delay\";\nimport { authorizationCodeGrantRequest, calculatePKCECodeChallenge, customFetch, generateRandomCodeVerifier, generateRandomState, processAuthorizationCodeOAuth2Response, refreshTokenGrantRequest, validateAuthResponse, } from \"oauth4webapi\";\nimport { common, createAuthorizationServer, readLocal, removeLocal, saveLocal, } from \"./common.js\";\nimport { throwIfError } from \"./throwIfError.js\";\n/**\n * @param client_id\n * @param url the base url of your foundry server\n * @param redirectUrl the url configured for redirect in the oauth configuration on the server\n * @param useHistory if true, when possible uses `history.replaceState()`, otherwise uses `window.location.assign()`\n * @param loginPage if you want a custom landing page prior to logging in, set this to that url\n * @param postLoginPage if you want to customize where you return to after a completed authentication cycle. defaults to the url when the page loaded\n * @param scopes\n * @param fetchFn\n * @param ctxPath\n * @returns {PublicOauthClient} which can be used as a token provider\n */\nexport function createPublicOauthClient(client_id, url, redirectUrl, useHistory = true, loginPage, postLoginPage = window.location.toString(), scopes = [], fetchFn = globalThis.fetch, ctxPath = \"/multipass\") {\n const client = { client_id, token_endpoint_auth_method: \"none\" };\n const authServer = createAuthorizationServer(ctxPath, url);\n const oauthHttpOptions = { [customFetch]: fetchFn };\n if (scopes.length === 0) {\n scopes = [\"api:read-data\", \"api:write-data\"];\n }\n const { makeTokenAndSaveRefresh, getToken } = common(client, authServer, _signIn, oauthHttpOptions, maybeRefresh.bind(globalThis, true));\n async function go(x) {\n if (useHistory)\n return window.history.replaceState({}, \"\", x);\n else\n window.location.assign(x);\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n async function maybeRefresh(expectRefreshToken) {\n const { refresh_token } = readLocal(client);\n if (!refresh_token) {\n if (expectRefreshToken)\n throw new Error(\"No refresh token found\");\n return;\n }\n try {\n // note, we don't use processRefreshTokenResponse because the mp oauth implementation\n // doesn't do refresh tokens quite right and this lets us skip the id check\n const result = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await refreshTokenGrantRequest(authServer, client, refresh_token, oauthHttpOptions))), \"refresh\");\n if (result && window.location.pathname === new URL(redirectUrl).pathname) {\n const { oldUrl } = readLocal(client);\n go(oldUrl ?? \"/\");\n }\n return result;\n }\n catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 refresh token. Removing refresh token\", e);\n }\n removeLocal(client);\n if (expectRefreshToken) {\n throw new Error(\"Could not refresh token\");\n }\n }\n }\n async function maybeHandleAuthReturn() {\n const { codeVerifier, state, oldUrl } = readLocal(client);\n if (!codeVerifier)\n return;\n try {\n const ret = makeTokenAndSaveRefresh(throwIfError(await processAuthorizationCodeOAuth2Response(authServer, client, await authorizationCodeGrantRequest(authServer, client, throwIfError(validateAuthResponse(authServer, client, new URL(window.location.href), state)), redirectUrl, codeVerifier, oauthHttpOptions))), \"signIn\");\n go(oldUrl);\n return ret;\n }\n catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to get OAuth2 token using PKCE, removing PKCE and starting a new auth flow\", e);\n }\n removeLocal(client);\n }\n }\n async function initiateLoginRedirect() {\n if (loginPage\n && window.location.href !== loginPage\n && window.location.pathname !== loginPage) {\n saveLocal(client, { oldUrl: postLoginPage });\n return await go(loginPage);\n }\n const state = generateRandomState();\n const codeVerifier = generateRandomCodeVerifier();\n const oldUrl = readLocal(client).oldUrl ?? window.location.toString();\n saveLocal(client, { codeVerifier, state, oldUrl });\n window.location.assign(`${authServer\n .authorization_endpoint}?${new URLSearchParams({\n client_id,\n response_type: \"code\",\n state,\n redirect_uri: redirectUrl,\n code_challenge: await calculatePKCECodeChallenge(codeVerifier),\n code_challenge_method: \"S256\",\n scope: [\"offline_access\", ...scopes].join(\" \"),\n })}`);\n // Give time for redirect to happen\n await delay(1000);\n throw new Error(\"Unable to redirect\");\n }\n /** Will throw if there is no token! */\n async function _signIn() {\n // 1. Check if we have a refresh token in local storage\n return await maybeRefresh()\n // 2. If there is no refresh token we are likely trying to perform the callback\n ?? await maybeHandleAuthReturn()\n // 3. If we haven't been able to load the token from one of the two above ways, we need to make the initial auth request\n ?? await initiateLoginRedirect();\n }\n return getToken;\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/oauth",
3
- "version": "1.0.0",
3
+ "version": "1.1.0-beta.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",