@palantir/pack.auth.foundry 0.0.1-beta.1 → 0.0.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.
- package/.turbo/turbo-lint.log +3 -3
- package/.turbo/turbo-transpileBrowser.log +1 -1
- package/.turbo/turbo-transpileCjs.log +1 -1
- package/.turbo/turbo-transpileEsm.log +1 -1
- package/.turbo/turbo-transpileTypes.log +1 -1
- package/.turbo/turbo-typecheck.log +1 -1
- package/CHANGELOG.md +16 -0
- package/build/browser/index.js +25 -6
- package/build/browser/index.js.map +1 -1
- package/build/cjs/index.cjs +25 -6
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/index.d.cts +1 -1
- package/build/esm/index.js +25 -6
- package/build/esm/index.js.map +1 -1
- package/build/types/auth/AuthServiceBase.d.ts +1 -1
- package/build/types/auth/AuthServiceBase.d.ts.map +1 -1
- package/build/types/utils/jwtUtils.d.ts.map +1 -1
- package/package.json +7 -8
- package/src/__tests__/AuthServiceConfidential.test.ts +1 -1
- package/src/__tests__/AuthServicePublic.test.ts +1 -1
- package/src/__tests__/AuthServiceStatic.test.ts +3 -2
- package/src/auth/AuthServiceBase.ts +13 -2
- package/src/utils/jwtUtils.ts +15 -6
package/.turbo/turbo-lint.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
> @palantir/pack.auth.foundry@0.0.1
|
|
3
|
-
> eslint ./src
|
|
2
|
+
> @palantir/pack.auth.foundry@0.0.1 lint /home/runner/work/pack/pack/packages/auth/foundry
|
|
3
|
+
> eslint ./src && dprint check --config $(find-up dprint.json) --allow-no-files
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
/home/runner/work/pack/pack/packages/auth/foundry/src/__tests__/AuthServiceConfidential.test.ts
|
|
@@ -12,7 +12,7 @@ Consider using an arrow function or explicitly `.bind()`ing the method to avoid
|
|
|
12
12
|
If a function does not access `this`, it can be annotated with `this: void` @typescript-eslint/unbound-method
|
|
13
13
|
|
|
14
14
|
/home/runner/work/pack/pack/packages/auth/foundry/src/__tests__/AuthServiceStatic.test.ts
|
|
15
|
-
|
|
15
|
+
147:14 warning A method that is not declared with `this: void` may cause unintentional scoping of `this` when separated from its object.
|
|
16
16
|
Consider using an arrow function or explicitly `.bind()`ing the method to avoid calling the method with an unintended `this` value.
|
|
17
17
|
If a function does not access `this`, it can be annotated with `this: void` @typescript-eslint/unbound-method
|
|
18
18
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @palantir/pack.auth.foundry@0.0.1
|
|
2
|
+
> @palantir/pack.auth.foundry@0.0.1 transpileBrowser /home/runner/work/pack/pack/packages/auth/foundry
|
|
3
3
|
> monorepo-transpile -f esm -m bundle -t browser
|
|
4
4
|
|
|
5
5
|
👍
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# @palantir/pack.auth.foundry
|
|
2
|
+
|
|
3
|
+
## 0.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8ed48e6: Initial release of auth packages
|
|
8
|
+
- 09f7acd: Add activity & presence custom event subscriptions
|
|
9
|
+
- fe9891e: Add new state packages
|
|
10
|
+
- Updated dependencies [8ed48e6]
|
|
11
|
+
- Updated dependencies [8698373]
|
|
12
|
+
- Updated dependencies [09f7acd]
|
|
13
|
+
- Updated dependencies [77c07c4]
|
|
14
|
+
- Updated dependencies [3ebc927]
|
|
15
|
+
- @palantir/pack.auth@0.0.1
|
|
16
|
+
- @palantir/pack.core@0.1.0
|
package/build/browser/index.js
CHANGED
|
@@ -6,11 +6,21 @@ import { Users } from '@osdk/foundry.admin';
|
|
|
6
6
|
|
|
7
7
|
// src/utils/jwtUtils.ts
|
|
8
8
|
function maybeDecodeUuidClaim(value) {
|
|
9
|
-
if (
|
|
10
|
-
|
|
9
|
+
if (typeof value === "string") {
|
|
10
|
+
try {
|
|
11
|
+
const decoded = atob(value);
|
|
12
|
+
if (decoded.length === 16) {
|
|
13
|
+
const bytes = Array.from(decoded, (char) => char.charCodeAt(0));
|
|
14
|
+
return decodeUuidBytes(bytes);
|
|
15
|
+
}
|
|
16
|
+
} catch {
|
|
17
|
+
return void 0;
|
|
18
|
+
}
|
|
11
19
|
}
|
|
12
|
-
if (
|
|
13
|
-
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
if (value.length === 16 && value.every((v) => typeof v === "number")) {
|
|
22
|
+
return decodeUuidBytes(value);
|
|
23
|
+
}
|
|
14
24
|
}
|
|
15
25
|
return void 0;
|
|
16
26
|
}
|
|
@@ -73,8 +83,17 @@ var AuthServiceBase = class {
|
|
|
73
83
|
isAuthenticated() {
|
|
74
84
|
return this.getTokenOrUndefined() != null;
|
|
75
85
|
}
|
|
76
|
-
getCurrentUserId() {
|
|
77
|
-
|
|
86
|
+
getCurrentUserId(allowUnverified = false) {
|
|
87
|
+
if (this.isTokenValidated) {
|
|
88
|
+
return this.currentUserId;
|
|
89
|
+
}
|
|
90
|
+
if (allowUnverified) {
|
|
91
|
+
const token = this.getTokenOrUndefined();
|
|
92
|
+
if (token != null) {
|
|
93
|
+
return parseJwtToken(token)?.userId;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return void 0;
|
|
78
97
|
}
|
|
79
98
|
isValidated() {
|
|
80
99
|
return this.isTokenValidated;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/jwtUtils.ts","../../src/auth/AuthServiceBase.ts","../../src/auth/AuthServiceConfidential.ts","../../src/auth/AuthServicePublic.ts","../../src/auth/AuthServiceStatic.ts"],"names":["AuthState"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 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 */\n\n/**\n * Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays.\n * These are the sub, sid, jti, and org claims.\n */\nfunction maybeDecodeUuidClaim(value) {\n if (!Array.isArray(value)) {\n return undefined;\n }\n if (value.length === 16 && value.every(v => typeof v === \"number\")) {\n // Convert 16-byte array to UUID string\n return decodeUuidBytes(value);\n }\n return undefined;\n}\n\n/**\n * Convert a 16-byte array to UUID string format.\n * Based on Palantir's UUID encoding format.\n */\nfunction decodeUuidBytes(bytes) {\n if (bytes.length !== 16) {\n return \"\";\n }\n\n // Convert bytes to hex string\n const hex = bytes.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n // Format as UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n return [hex.slice(0, 8), hex.slice(8, 12), hex.slice(12, 16), hex.slice(16, 20), hex.slice(20, 32)].join(\"-\");\n}\n\n/**\n * Represents the parsed payload from a JWT token (unverified).\n * The information provided should not be used for security-sensitive\n * applications unless verified through some other process.\n */\n\n/**\n * Parse JWT token to extract unverified claims including userId, sessionId, tokenId, organizationId, and expiry.\n * This does NOT verify the token signature - it only extracts payload data.\n *\n * @param token - JWT token string\n * @returns Unverified token info or undefined if parsing fails\n */\nexport function parseJwtToken(token) {\n if (!token) {\n return undefined;\n }\n try {\n // JWT tokens have 3 parts separated by dots: header.payload.signature\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n return undefined;\n }\n\n // Decode the payload (second part)\n const payload = parts[1];\n if (!payload) {\n return undefined;\n }\n\n // Add padding if needed for base64 decoding\n const paddedPayload = payload.padEnd(payload.length + (4 - payload.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(paddedPayload));\n return {\n // JWT exp is seconds since epoch, convert to ms\n expiryInstantUtc: typeof decoded.exp === \"number\" ? decoded.exp * 1000 : undefined,\n orgId: maybeDecodeUuidClaim(decoded.org),\n sessionId: maybeDecodeUuidClaim(decoded.sid),\n tokenId: maybeDecodeUuidClaim(decoded.jti),\n userId: maybeDecodeUuidClaim(decoded.sub)\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check if a JWT token is expired based on its exp claim (unverified).\n *\n * @param tokenInfo - Unverified token info\n * @returns true if token is expired, false if valid or no expiry info\n */\nexport function isTokenExpired(tokenInfo) {\n if (!tokenInfo.expiryInstantUtc) {\n return false; // No expiry info, assume valid\n }\n const now = Date.now();\n return tokenInfo.expiryInstantUtc < now;\n}","/*\n * Copyright 2025 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 */\n\nimport { Users } from \"@osdk/foundry.admin\";\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { parseJwtToken } from \"../utils/jwtUtils.js\";\nexport class AuthServiceBase {\n currentState;\n isTokenValidated = false;\n currentUserId;\n cachedUserData;\n stateCallbacks = new Set();\n tokenChangeCallbacks = new Set();\n currentToken;\n app;\n logger;\n constructor(app, logger, initialState = AuthState.Unauthenticated) {\n this.app = app;\n this.logger = logger;\n this.currentState = initialState;\n }\n clearUserState() {\n this.isTokenValidated = false;\n this.currentUserId = undefined;\n this.cachedUserData = undefined;\n }\n isAuthenticated() {\n return this.getTokenOrUndefined() != null;\n }\n getCurrentUserId() {\n return this.isTokenValidated ? this.currentUserId : undefined;\n }\n isValidated() {\n return this.isTokenValidated;\n }\n async validateToken() {\n if (!this.isAuthenticated()) {\n this.clearUserState();\n return false;\n }\n if (this.app.config.isTestMode) {\n this.isTokenValidated = true;\n return true;\n }\n try {\n const user = await Users.getCurrent(this.app.config.osdkClient);\n this.isTokenValidated = true;\n this.cachedUserData = user;\n this.currentUserId = user.id;\n return true;\n } catch (error) {\n this.logger.error(\"Token validation failed\", error);\n this.clearUserState();\n return false;\n }\n }\n onAuthStateChange(callback) {\n this.stateCallbacks.add(callback);\n try {\n callback({\n state: this.currentState\n });\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n return () => {\n this.stateCallbacks.delete(callback);\n };\n }\n onTokenChange(callback) {\n this.tokenChangeCallbacks.add(callback);\n\n // Immediately notify with current token if available\n const token = this.getTokenOrUndefined();\n if (token != null) {\n const info = parseJwtToken(token) ?? {};\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n }\n return () => {\n this.tokenChangeCallbacks.delete(callback);\n };\n }\n getCurrentState() {\n return this.currentState;\n }\n async getUserData(userId, force) {\n if (!this.isTokenValidated || !this.currentUserId || this.currentUserId !== userId) {\n throw new Error(`User data not available for userId: ${userId}`);\n }\n if (!force && this.cachedUserData) {\n return this.cachedUserData;\n }\n if (this.app.config.isTestMode) {\n throw new Error(\"Cannot refresh user data in test mode\");\n }\n try {\n // TODO: debounce and use Users.getBatch for efficiency when looking up multiple users\n const user = await Users.get(this.app.config.osdkClient, userId);\n this.cachedUserData = user;\n return user;\n } catch (error) {\n this.logger.error(\"Failed to refresh user data\", error);\n throw new Error(\"Failed to refresh user data\");\n }\n }\n dispose() {\n this.stateCallbacks.clear();\n this.tokenChangeCallbacks.clear();\n this.clearUserState();\n }\n notifyTokenChange(token) {\n const info = (token != null ? parseJwtToken(token) : undefined) ?? {};\n this.tokenChangeCallbacks.forEach(callback => {\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n });\n }\n updateState(newState, error) {\n const previousState = this.currentState;\n this.currentState = newState;\n const event = {\n previousState,\n state: newState,\n error\n };\n this.stateCallbacks.forEach(callback => {\n try {\n callback(event);\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n });\n }\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceConfidential extends AuthServiceBase {\n oauthClient;\n constructor(app, oauthClient) {\n const initialState = oauthClient.getTokenOrUndefined() ? AuthState.Authenticated : AuthState.Unauthenticated;\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceConfidential\"\n }), initialState);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n this.updateState(AuthState.Authenticated);\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n };\n signOutHandler = () => {\n this.updateState(AuthState.Unauthenticated);\n this.notifyTokenChange(undefined);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a confidential OAuth auth service that wraps a ConfidentialOauthClient\n */\nexport function createConfidentialOauthService(app, oauthClient) {\n return new AuthServiceConfidential(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServicePublic extends AuthServiceBase {\n hasInitialized = false;\n oauthClient;\n constructor(app, oauthClient) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServicePublic\"\n }), AuthState.Initializing);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.addEventListener(\"refresh\", this.refreshHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n signOutHandler = () => {\n this.notifyTokenChange(undefined);\n this.updateState(AuthState.Unauthenticated);\n };\n refreshHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n onAuthStateChange(callback) {\n const unsubscribe = super.onAuthStateChange(callback);\n if (!this.hasInitialized && this.currentState === AuthState.Initializing) {\n this.hasInitialized = true;\n void this.signIn().catch(() => {\n // Don't allow unhandled rejection to bubble up, mostly for testing.\n // Note the signIn method will log errors and throw for promise consumers,\n // but we don't need to handle anything here.\n });\n }\n return unsubscribe;\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async refresh() {\n try {\n await this.oauthClient.refresh();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.removeEventListener(\"refresh\", this.refreshHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a public OAuth auth service that wraps a PublicOauthClient\n */\nexport function createPublicOauthService(app, oauthClient) {\n return new AuthServicePublic(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceStatic extends AuthServiceBase {\n tokenProvider;\n latestToken;\n constructor(app, tokenProvider) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceStatic\"\n }), AuthState.Unauthenticated);\n this.tokenProvider = tokenProvider;\n void this.getToken().catch(() => {});\n }\n async getToken() {\n try {\n const token = await this.tokenProvider();\n if (this.latestToken !== token) {\n this.latestToken = token;\n this.notifyTokenChange(token);\n if (this.currentState !== AuthState.Authenticated) {\n this.updateState(AuthState.Authenticated);\n }\n }\n return token;\n } catch (error) {\n if (this.latestToken !== undefined) {\n this.latestToken = undefined;\n this.notifyTokenChange(undefined);\n }\n this.updateState(AuthState.Error, error);\n throw error;\n }\n }\n getTokenOrUndefined() {\n return this.latestToken;\n }\n isAuthenticated() {\n return this.latestToken != null;\n }\n signIn() {\n return Promise.resolve();\n }\n signOut() {\n this.clearUserState();\n this.latestToken = undefined;\n this.updateState(AuthState.Unauthenticated);\n return Promise.reject(new Error(\"Sign out not supported for static token providers\"));\n }\n dispose() {\n super.dispose();\n this.latestToken = undefined;\n }\n}\n\n/**\n * Creates a static token auth service for CLI/service scenarios where a token is provided externally.\n */\nexport function createStaticTokenService(app, tokenProvider) {\n return new AuthServiceStatic(app, tokenProvider);\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/jwtUtils.ts","../../src/auth/AuthServiceBase.ts","../../src/auth/AuthServiceConfidential.ts","../../src/auth/AuthServicePublic.ts","../../src/auth/AuthServiceStatic.ts"],"names":["AuthState"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 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 */\n\n/**\n * Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays or base64 strings.\n * These are the sub, sid, jti, and org claims.\n */\nfunction maybeDecodeUuidClaim(value) {\n if (typeof value === \"string\") {\n try {\n const decoded = atob(value);\n if (decoded.length === 16) {\n const bytes = Array.from(decoded, char => char.charCodeAt(0));\n return decodeUuidBytes(bytes);\n }\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n if (value.length === 16 && value.every(v => typeof v === \"number\")) {\n return decodeUuidBytes(value);\n }\n }\n return undefined;\n}\n\n/**\n * Convert a 16-byte array to UUID string format.\n * Based on Palantir's UUID encoding format.\n */\nfunction decodeUuidBytes(bytes) {\n if (bytes.length !== 16) {\n return \"\";\n }\n\n // Convert bytes to hex string\n const hex = bytes.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n // Format as UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n return [hex.slice(0, 8), hex.slice(8, 12), hex.slice(12, 16), hex.slice(16, 20), hex.slice(20, 32)].join(\"-\");\n}\n\n/**\n * Represents the parsed payload from a JWT token (unverified).\n * The information provided should not be used for security-sensitive\n * applications unless verified through some other process.\n */\n\n/**\n * Parse JWT token to extract unverified claims including userId, sessionId, tokenId, organizationId, and expiry.\n * This does NOT verify the token signature - it only extracts payload data.\n *\n * @param token - JWT token string\n * @returns Unverified token info or undefined if parsing fails\n */\nexport function parseJwtToken(token) {\n if (!token) {\n return undefined;\n }\n try {\n // JWT tokens have 3 parts separated by dots: header.payload.signature\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n return undefined;\n }\n\n // Decode the payload (second part)\n const payload = parts[1];\n if (!payload) {\n return undefined;\n }\n\n // Add padding if needed for base64 decoding\n const paddedPayload = payload.padEnd(payload.length + (4 - payload.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(paddedPayload));\n return {\n // JWT exp is seconds since epoch, convert to ms\n expiryInstantUtc: typeof decoded.exp === \"number\" ? decoded.exp * 1000 : undefined,\n orgId: maybeDecodeUuidClaim(decoded.org),\n sessionId: maybeDecodeUuidClaim(decoded.sid),\n tokenId: maybeDecodeUuidClaim(decoded.jti),\n userId: maybeDecodeUuidClaim(decoded.sub)\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check if a JWT token is expired based on its exp claim (unverified).\n *\n * @param tokenInfo - Unverified token info\n * @returns true if token is expired, false if valid or no expiry info\n */\nexport function isTokenExpired(tokenInfo) {\n if (!tokenInfo.expiryInstantUtc) {\n return false; // No expiry info, assume valid\n }\n const now = Date.now();\n return tokenInfo.expiryInstantUtc < now;\n}","/*\n * Copyright 2025 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 */\n\nimport { Users } from \"@osdk/foundry.admin\";\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { parseJwtToken } from \"../utils/jwtUtils.js\";\nexport class AuthServiceBase {\n currentState;\n isTokenValidated = false;\n currentUserId;\n cachedUserData;\n stateCallbacks = new Set();\n tokenChangeCallbacks = new Set();\n currentToken;\n app;\n logger;\n constructor(app, logger, initialState = AuthState.Unauthenticated) {\n this.app = app;\n this.logger = logger;\n this.currentState = initialState;\n }\n clearUserState() {\n this.isTokenValidated = false;\n this.currentUserId = undefined;\n this.cachedUserData = undefined;\n }\n isAuthenticated() {\n return this.getTokenOrUndefined() != null;\n }\n getCurrentUserId(allowUnverified = false) {\n if (this.isTokenValidated) {\n return this.currentUserId;\n }\n if (allowUnverified) {\n const token = this.getTokenOrUndefined();\n if (token != null) {\n return parseJwtToken(token)?.userId;\n }\n }\n return undefined;\n }\n isValidated() {\n return this.isTokenValidated;\n }\n async validateToken() {\n if (!this.isAuthenticated()) {\n this.clearUserState();\n return false;\n }\n if (this.app.config.isTestMode) {\n this.isTokenValidated = true;\n return true;\n }\n try {\n const user = await Users.getCurrent(this.app.config.osdkClient);\n this.isTokenValidated = true;\n this.cachedUserData = user;\n this.currentUserId = user.id;\n return true;\n } catch (error) {\n this.logger.error(\"Token validation failed\", error);\n this.clearUserState();\n return false;\n }\n }\n onAuthStateChange(callback) {\n this.stateCallbacks.add(callback);\n try {\n callback({\n state: this.currentState\n });\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n return () => {\n this.stateCallbacks.delete(callback);\n };\n }\n onTokenChange(callback) {\n this.tokenChangeCallbacks.add(callback);\n\n // Immediately notify with current token if available\n const token = this.getTokenOrUndefined();\n if (token != null) {\n const info = parseJwtToken(token) ?? {};\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n }\n return () => {\n this.tokenChangeCallbacks.delete(callback);\n };\n }\n getCurrentState() {\n return this.currentState;\n }\n async getUserData(userId, force) {\n if (!this.isTokenValidated || !this.currentUserId || this.currentUserId !== userId) {\n throw new Error(`User data not available for userId: ${userId}`);\n }\n if (!force && this.cachedUserData) {\n return this.cachedUserData;\n }\n if (this.app.config.isTestMode) {\n throw new Error(\"Cannot refresh user data in test mode\");\n }\n try {\n // TODO: debounce and use Users.getBatch for efficiency when looking up multiple users\n const user = await Users.get(this.app.config.osdkClient, userId);\n this.cachedUserData = user;\n return user;\n } catch (error) {\n this.logger.error(\"Failed to refresh user data\", error);\n throw new Error(\"Failed to refresh user data\");\n }\n }\n dispose() {\n this.stateCallbacks.clear();\n this.tokenChangeCallbacks.clear();\n this.clearUserState();\n }\n notifyTokenChange(token) {\n const info = (token != null ? parseJwtToken(token) : undefined) ?? {};\n this.tokenChangeCallbacks.forEach(callback => {\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n });\n }\n updateState(newState, error) {\n const previousState = this.currentState;\n this.currentState = newState;\n const event = {\n previousState,\n state: newState,\n error\n };\n this.stateCallbacks.forEach(callback => {\n try {\n callback(event);\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n });\n }\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceConfidential extends AuthServiceBase {\n oauthClient;\n constructor(app, oauthClient) {\n const initialState = oauthClient.getTokenOrUndefined() ? AuthState.Authenticated : AuthState.Unauthenticated;\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceConfidential\"\n }), initialState);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n this.updateState(AuthState.Authenticated);\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n };\n signOutHandler = () => {\n this.updateState(AuthState.Unauthenticated);\n this.notifyTokenChange(undefined);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a confidential OAuth auth service that wraps a ConfidentialOauthClient\n */\nexport function createConfidentialOauthService(app, oauthClient) {\n return new AuthServiceConfidential(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServicePublic extends AuthServiceBase {\n hasInitialized = false;\n oauthClient;\n constructor(app, oauthClient) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServicePublic\"\n }), AuthState.Initializing);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.addEventListener(\"refresh\", this.refreshHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n signOutHandler = () => {\n this.notifyTokenChange(undefined);\n this.updateState(AuthState.Unauthenticated);\n };\n refreshHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n onAuthStateChange(callback) {\n const unsubscribe = super.onAuthStateChange(callback);\n if (!this.hasInitialized && this.currentState === AuthState.Initializing) {\n this.hasInitialized = true;\n void this.signIn().catch(() => {\n // Don't allow unhandled rejection to bubble up, mostly for testing.\n // Note the signIn method will log errors and throw for promise consumers,\n // but we don't need to handle anything here.\n });\n }\n return unsubscribe;\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async refresh() {\n try {\n await this.oauthClient.refresh();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.removeEventListener(\"refresh\", this.refreshHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a public OAuth auth service that wraps a PublicOauthClient\n */\nexport function createPublicOauthService(app, oauthClient) {\n return new AuthServicePublic(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceStatic extends AuthServiceBase {\n tokenProvider;\n latestToken;\n constructor(app, tokenProvider) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceStatic\"\n }), AuthState.Unauthenticated);\n this.tokenProvider = tokenProvider;\n void this.getToken().catch(() => {});\n }\n async getToken() {\n try {\n const token = await this.tokenProvider();\n if (this.latestToken !== token) {\n this.latestToken = token;\n this.notifyTokenChange(token);\n if (this.currentState !== AuthState.Authenticated) {\n this.updateState(AuthState.Authenticated);\n }\n }\n return token;\n } catch (error) {\n if (this.latestToken !== undefined) {\n this.latestToken = undefined;\n this.notifyTokenChange(undefined);\n }\n this.updateState(AuthState.Error, error);\n throw error;\n }\n }\n getTokenOrUndefined() {\n return this.latestToken;\n }\n isAuthenticated() {\n return this.latestToken != null;\n }\n signIn() {\n return Promise.resolve();\n }\n signOut() {\n this.clearUserState();\n this.latestToken = undefined;\n this.updateState(AuthState.Unauthenticated);\n return Promise.reject(new Error(\"Sign out not supported for static token providers\"));\n }\n dispose() {\n super.dispose();\n this.latestToken = undefined;\n }\n}\n\n/**\n * Creates a static token auth service for CLI/service scenarios where a token is provided externally.\n */\nexport function createStaticTokenService(app, tokenProvider) {\n return new AuthServiceStatic(app, tokenProvider);\n}"]}
|
package/build/cjs/index.cjs
CHANGED
|
@@ -7,11 +7,21 @@ var foundry_admin = require('@osdk/foundry.admin');
|
|
|
7
7
|
|
|
8
8
|
// src/utils/jwtUtils.ts
|
|
9
9
|
function maybeDecodeUuidClaim(value) {
|
|
10
|
-
if (
|
|
11
|
-
|
|
10
|
+
if (typeof value === "string") {
|
|
11
|
+
try {
|
|
12
|
+
const decoded = atob(value);
|
|
13
|
+
if (decoded.length === 16) {
|
|
14
|
+
const bytes = Array.from(decoded, (char) => char.charCodeAt(0));
|
|
15
|
+
return decodeUuidBytes(bytes);
|
|
16
|
+
}
|
|
17
|
+
} catch {
|
|
18
|
+
return void 0;
|
|
19
|
+
}
|
|
12
20
|
}
|
|
13
|
-
if (
|
|
14
|
-
|
|
21
|
+
if (Array.isArray(value)) {
|
|
22
|
+
if (value.length === 16 && value.every((v) => typeof v === "number")) {
|
|
23
|
+
return decodeUuidBytes(value);
|
|
24
|
+
}
|
|
15
25
|
}
|
|
16
26
|
return void 0;
|
|
17
27
|
}
|
|
@@ -74,8 +84,17 @@ var AuthServiceBase = class {
|
|
|
74
84
|
isAuthenticated() {
|
|
75
85
|
return this.getTokenOrUndefined() != null;
|
|
76
86
|
}
|
|
77
|
-
getCurrentUserId() {
|
|
78
|
-
|
|
87
|
+
getCurrentUserId(allowUnverified = false) {
|
|
88
|
+
if (this.isTokenValidated) {
|
|
89
|
+
return this.currentUserId;
|
|
90
|
+
}
|
|
91
|
+
if (allowUnverified) {
|
|
92
|
+
const token = this.getTokenOrUndefined();
|
|
93
|
+
if (token != null) {
|
|
94
|
+
return parseJwtToken(token)?.userId;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return void 0;
|
|
79
98
|
}
|
|
80
99
|
isValidated() {
|
|
81
100
|
return this.isTokenValidated;
|
package/build/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/jwtUtils.ts","../../src/auth/AuthServiceBase.ts","../../src/auth/AuthServiceConfidential.ts","../../src/auth/AuthServicePublic.ts","../../src/auth/AuthServiceStatic.ts"],"names":["AuthState","Users"],"mappings":"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","file":"index.cjs","sourcesContent":["/*\n * Copyright 2025 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 */\n\n/**\n * Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays.\n * These are the sub, sid, jti, and org claims.\n */\nfunction maybeDecodeUuidClaim(value) {\n if (!Array.isArray(value)) {\n return undefined;\n }\n if (value.length === 16 && value.every(v => typeof v === \"number\")) {\n // Convert 16-byte array to UUID string\n return decodeUuidBytes(value);\n }\n return undefined;\n}\n\n/**\n * Convert a 16-byte array to UUID string format.\n * Based on Palantir's UUID encoding format.\n */\nfunction decodeUuidBytes(bytes) {\n if (bytes.length !== 16) {\n return \"\";\n }\n\n // Convert bytes to hex string\n const hex = bytes.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n // Format as UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n return [hex.slice(0, 8), hex.slice(8, 12), hex.slice(12, 16), hex.slice(16, 20), hex.slice(20, 32)].join(\"-\");\n}\n\n/**\n * Represents the parsed payload from a JWT token (unverified).\n * The information provided should not be used for security-sensitive\n * applications unless verified through some other process.\n */\n\n/**\n * Parse JWT token to extract unverified claims including userId, sessionId, tokenId, organizationId, and expiry.\n * This does NOT verify the token signature - it only extracts payload data.\n *\n * @param token - JWT token string\n * @returns Unverified token info or undefined if parsing fails\n */\nexport function parseJwtToken(token) {\n if (!token) {\n return undefined;\n }\n try {\n // JWT tokens have 3 parts separated by dots: header.payload.signature\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n return undefined;\n }\n\n // Decode the payload (second part)\n const payload = parts[1];\n if (!payload) {\n return undefined;\n }\n\n // Add padding if needed for base64 decoding\n const paddedPayload = payload.padEnd(payload.length + (4 - payload.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(paddedPayload));\n return {\n // JWT exp is seconds since epoch, convert to ms\n expiryInstantUtc: typeof decoded.exp === \"number\" ? decoded.exp * 1000 : undefined,\n orgId: maybeDecodeUuidClaim(decoded.org),\n sessionId: maybeDecodeUuidClaim(decoded.sid),\n tokenId: maybeDecodeUuidClaim(decoded.jti),\n userId: maybeDecodeUuidClaim(decoded.sub)\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check if a JWT token is expired based on its exp claim (unverified).\n *\n * @param tokenInfo - Unverified token info\n * @returns true if token is expired, false if valid or no expiry info\n */\nexport function isTokenExpired(tokenInfo) {\n if (!tokenInfo.expiryInstantUtc) {\n return false; // No expiry info, assume valid\n }\n const now = Date.now();\n return tokenInfo.expiryInstantUtc < now;\n}","/*\n * Copyright 2025 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 */\n\nimport { Users } from \"@osdk/foundry.admin\";\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { parseJwtToken } from \"../utils/jwtUtils.js\";\nexport class AuthServiceBase {\n currentState;\n isTokenValidated = false;\n currentUserId;\n cachedUserData;\n stateCallbacks = new Set();\n tokenChangeCallbacks = new Set();\n currentToken;\n app;\n logger;\n constructor(app, logger, initialState = AuthState.Unauthenticated) {\n this.app = app;\n this.logger = logger;\n this.currentState = initialState;\n }\n clearUserState() {\n this.isTokenValidated = false;\n this.currentUserId = undefined;\n this.cachedUserData = undefined;\n }\n isAuthenticated() {\n return this.getTokenOrUndefined() != null;\n }\n getCurrentUserId() {\n return this.isTokenValidated ? this.currentUserId : undefined;\n }\n isValidated() {\n return this.isTokenValidated;\n }\n async validateToken() {\n if (!this.isAuthenticated()) {\n this.clearUserState();\n return false;\n }\n if (this.app.config.isTestMode) {\n this.isTokenValidated = true;\n return true;\n }\n try {\n const user = await Users.getCurrent(this.app.config.osdkClient);\n this.isTokenValidated = true;\n this.cachedUserData = user;\n this.currentUserId = user.id;\n return true;\n } catch (error) {\n this.logger.error(\"Token validation failed\", error);\n this.clearUserState();\n return false;\n }\n }\n onAuthStateChange(callback) {\n this.stateCallbacks.add(callback);\n try {\n callback({\n state: this.currentState\n });\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n return () => {\n this.stateCallbacks.delete(callback);\n };\n }\n onTokenChange(callback) {\n this.tokenChangeCallbacks.add(callback);\n\n // Immediately notify with current token if available\n const token = this.getTokenOrUndefined();\n if (token != null) {\n const info = parseJwtToken(token) ?? {};\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n }\n return () => {\n this.tokenChangeCallbacks.delete(callback);\n };\n }\n getCurrentState() {\n return this.currentState;\n }\n async getUserData(userId, force) {\n if (!this.isTokenValidated || !this.currentUserId || this.currentUserId !== userId) {\n throw new Error(`User data not available for userId: ${userId}`);\n }\n if (!force && this.cachedUserData) {\n return this.cachedUserData;\n }\n if (this.app.config.isTestMode) {\n throw new Error(\"Cannot refresh user data in test mode\");\n }\n try {\n // TODO: debounce and use Users.getBatch for efficiency when looking up multiple users\n const user = await Users.get(this.app.config.osdkClient, userId);\n this.cachedUserData = user;\n return user;\n } catch (error) {\n this.logger.error(\"Failed to refresh user data\", error);\n throw new Error(\"Failed to refresh user data\");\n }\n }\n dispose() {\n this.stateCallbacks.clear();\n this.tokenChangeCallbacks.clear();\n this.clearUserState();\n }\n notifyTokenChange(token) {\n const info = (token != null ? parseJwtToken(token) : undefined) ?? {};\n this.tokenChangeCallbacks.forEach(callback => {\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n });\n }\n updateState(newState, error) {\n const previousState = this.currentState;\n this.currentState = newState;\n const event = {\n previousState,\n state: newState,\n error\n };\n this.stateCallbacks.forEach(callback => {\n try {\n callback(event);\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n });\n }\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceConfidential extends AuthServiceBase {\n oauthClient;\n constructor(app, oauthClient) {\n const initialState = oauthClient.getTokenOrUndefined() ? AuthState.Authenticated : AuthState.Unauthenticated;\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceConfidential\"\n }), initialState);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n this.updateState(AuthState.Authenticated);\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n };\n signOutHandler = () => {\n this.updateState(AuthState.Unauthenticated);\n this.notifyTokenChange(undefined);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a confidential OAuth auth service that wraps a ConfidentialOauthClient\n */\nexport function createConfidentialOauthService(app, oauthClient) {\n return new AuthServiceConfidential(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServicePublic extends AuthServiceBase {\n hasInitialized = false;\n oauthClient;\n constructor(app, oauthClient) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServicePublic\"\n }), AuthState.Initializing);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.addEventListener(\"refresh\", this.refreshHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n signOutHandler = () => {\n this.notifyTokenChange(undefined);\n this.updateState(AuthState.Unauthenticated);\n };\n refreshHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n onAuthStateChange(callback) {\n const unsubscribe = super.onAuthStateChange(callback);\n if (!this.hasInitialized && this.currentState === AuthState.Initializing) {\n this.hasInitialized = true;\n void this.signIn().catch(() => {\n // Don't allow unhandled rejection to bubble up, mostly for testing.\n // Note the signIn method will log errors and throw for promise consumers,\n // but we don't need to handle anything here.\n });\n }\n return unsubscribe;\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async refresh() {\n try {\n await this.oauthClient.refresh();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.removeEventListener(\"refresh\", this.refreshHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a public OAuth auth service that wraps a PublicOauthClient\n */\nexport function createPublicOauthService(app, oauthClient) {\n return new AuthServicePublic(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceStatic extends AuthServiceBase {\n tokenProvider;\n latestToken;\n constructor(app, tokenProvider) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceStatic\"\n }), AuthState.Unauthenticated);\n this.tokenProvider = tokenProvider;\n void this.getToken().catch(() => {});\n }\n async getToken() {\n try {\n const token = await this.tokenProvider();\n if (this.latestToken !== token) {\n this.latestToken = token;\n this.notifyTokenChange(token);\n if (this.currentState !== AuthState.Authenticated) {\n this.updateState(AuthState.Authenticated);\n }\n }\n return token;\n } catch (error) {\n if (this.latestToken !== undefined) {\n this.latestToken = undefined;\n this.notifyTokenChange(undefined);\n }\n this.updateState(AuthState.Error, error);\n throw error;\n }\n }\n getTokenOrUndefined() {\n return this.latestToken;\n }\n isAuthenticated() {\n return this.latestToken != null;\n }\n signIn() {\n return Promise.resolve();\n }\n signOut() {\n this.clearUserState();\n this.latestToken = undefined;\n this.updateState(AuthState.Unauthenticated);\n return Promise.reject(new Error(\"Sign out not supported for static token providers\"));\n }\n dispose() {\n super.dispose();\n this.latestToken = undefined;\n }\n}\n\n/**\n * Creates a static token auth service for CLI/service scenarios where a token is provided externally.\n */\nexport function createStaticTokenService(app, tokenProvider) {\n return new AuthServiceStatic(app, tokenProvider);\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/jwtUtils.ts","../../src/auth/AuthServiceBase.ts","../../src/auth/AuthServiceConfidential.ts","../../src/auth/AuthServicePublic.ts","../../src/auth/AuthServiceStatic.ts"],"names":["AuthState","Users"],"mappings":"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","file":"index.cjs","sourcesContent":["/*\n * Copyright 2025 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 */\n\n/**\n * Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays or base64 strings.\n * These are the sub, sid, jti, and org claims.\n */\nfunction maybeDecodeUuidClaim(value) {\n if (typeof value === \"string\") {\n try {\n const decoded = atob(value);\n if (decoded.length === 16) {\n const bytes = Array.from(decoded, char => char.charCodeAt(0));\n return decodeUuidBytes(bytes);\n }\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n if (value.length === 16 && value.every(v => typeof v === \"number\")) {\n return decodeUuidBytes(value);\n }\n }\n return undefined;\n}\n\n/**\n * Convert a 16-byte array to UUID string format.\n * Based on Palantir's UUID encoding format.\n */\nfunction decodeUuidBytes(bytes) {\n if (bytes.length !== 16) {\n return \"\";\n }\n\n // Convert bytes to hex string\n const hex = bytes.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n // Format as UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n return [hex.slice(0, 8), hex.slice(8, 12), hex.slice(12, 16), hex.slice(16, 20), hex.slice(20, 32)].join(\"-\");\n}\n\n/**\n * Represents the parsed payload from a JWT token (unverified).\n * The information provided should not be used for security-sensitive\n * applications unless verified through some other process.\n */\n\n/**\n * Parse JWT token to extract unverified claims including userId, sessionId, tokenId, organizationId, and expiry.\n * This does NOT verify the token signature - it only extracts payload data.\n *\n * @param token - JWT token string\n * @returns Unverified token info or undefined if parsing fails\n */\nexport function parseJwtToken(token) {\n if (!token) {\n return undefined;\n }\n try {\n // JWT tokens have 3 parts separated by dots: header.payload.signature\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n return undefined;\n }\n\n // Decode the payload (second part)\n const payload = parts[1];\n if (!payload) {\n return undefined;\n }\n\n // Add padding if needed for base64 decoding\n const paddedPayload = payload.padEnd(payload.length + (4 - payload.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(paddedPayload));\n return {\n // JWT exp is seconds since epoch, convert to ms\n expiryInstantUtc: typeof decoded.exp === \"number\" ? decoded.exp * 1000 : undefined,\n orgId: maybeDecodeUuidClaim(decoded.org),\n sessionId: maybeDecodeUuidClaim(decoded.sid),\n tokenId: maybeDecodeUuidClaim(decoded.jti),\n userId: maybeDecodeUuidClaim(decoded.sub)\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check if a JWT token is expired based on its exp claim (unverified).\n *\n * @param tokenInfo - Unverified token info\n * @returns true if token is expired, false if valid or no expiry info\n */\nexport function isTokenExpired(tokenInfo) {\n if (!tokenInfo.expiryInstantUtc) {\n return false; // No expiry info, assume valid\n }\n const now = Date.now();\n return tokenInfo.expiryInstantUtc < now;\n}","/*\n * Copyright 2025 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 */\n\nimport { Users } from \"@osdk/foundry.admin\";\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { parseJwtToken } from \"../utils/jwtUtils.js\";\nexport class AuthServiceBase {\n currentState;\n isTokenValidated = false;\n currentUserId;\n cachedUserData;\n stateCallbacks = new Set();\n tokenChangeCallbacks = new Set();\n currentToken;\n app;\n logger;\n constructor(app, logger, initialState = AuthState.Unauthenticated) {\n this.app = app;\n this.logger = logger;\n this.currentState = initialState;\n }\n clearUserState() {\n this.isTokenValidated = false;\n this.currentUserId = undefined;\n this.cachedUserData = undefined;\n }\n isAuthenticated() {\n return this.getTokenOrUndefined() != null;\n }\n getCurrentUserId(allowUnverified = false) {\n if (this.isTokenValidated) {\n return this.currentUserId;\n }\n if (allowUnverified) {\n const token = this.getTokenOrUndefined();\n if (token != null) {\n return parseJwtToken(token)?.userId;\n }\n }\n return undefined;\n }\n isValidated() {\n return this.isTokenValidated;\n }\n async validateToken() {\n if (!this.isAuthenticated()) {\n this.clearUserState();\n return false;\n }\n if (this.app.config.isTestMode) {\n this.isTokenValidated = true;\n return true;\n }\n try {\n const user = await Users.getCurrent(this.app.config.osdkClient);\n this.isTokenValidated = true;\n this.cachedUserData = user;\n this.currentUserId = user.id;\n return true;\n } catch (error) {\n this.logger.error(\"Token validation failed\", error);\n this.clearUserState();\n return false;\n }\n }\n onAuthStateChange(callback) {\n this.stateCallbacks.add(callback);\n try {\n callback({\n state: this.currentState\n });\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n return () => {\n this.stateCallbacks.delete(callback);\n };\n }\n onTokenChange(callback) {\n this.tokenChangeCallbacks.add(callback);\n\n // Immediately notify with current token if available\n const token = this.getTokenOrUndefined();\n if (token != null) {\n const info = parseJwtToken(token) ?? {};\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n }\n return () => {\n this.tokenChangeCallbacks.delete(callback);\n };\n }\n getCurrentState() {\n return this.currentState;\n }\n async getUserData(userId, force) {\n if (!this.isTokenValidated || !this.currentUserId || this.currentUserId !== userId) {\n throw new Error(`User data not available for userId: ${userId}`);\n }\n if (!force && this.cachedUserData) {\n return this.cachedUserData;\n }\n if (this.app.config.isTestMode) {\n throw new Error(\"Cannot refresh user data in test mode\");\n }\n try {\n // TODO: debounce and use Users.getBatch for efficiency when looking up multiple users\n const user = await Users.get(this.app.config.osdkClient, userId);\n this.cachedUserData = user;\n return user;\n } catch (error) {\n this.logger.error(\"Failed to refresh user data\", error);\n throw new Error(\"Failed to refresh user data\");\n }\n }\n dispose() {\n this.stateCallbacks.clear();\n this.tokenChangeCallbacks.clear();\n this.clearUserState();\n }\n notifyTokenChange(token) {\n const info = (token != null ? parseJwtToken(token) : undefined) ?? {};\n this.tokenChangeCallbacks.forEach(callback => {\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n });\n }\n updateState(newState, error) {\n const previousState = this.currentState;\n this.currentState = newState;\n const event = {\n previousState,\n state: newState,\n error\n };\n this.stateCallbacks.forEach(callback => {\n try {\n callback(event);\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n });\n }\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceConfidential extends AuthServiceBase {\n oauthClient;\n constructor(app, oauthClient) {\n const initialState = oauthClient.getTokenOrUndefined() ? AuthState.Authenticated : AuthState.Unauthenticated;\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceConfidential\"\n }), initialState);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n this.updateState(AuthState.Authenticated);\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n };\n signOutHandler = () => {\n this.updateState(AuthState.Unauthenticated);\n this.notifyTokenChange(undefined);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a confidential OAuth auth service that wraps a ConfidentialOauthClient\n */\nexport function createConfidentialOauthService(app, oauthClient) {\n return new AuthServiceConfidential(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServicePublic extends AuthServiceBase {\n hasInitialized = false;\n oauthClient;\n constructor(app, oauthClient) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServicePublic\"\n }), AuthState.Initializing);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.addEventListener(\"refresh\", this.refreshHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n signOutHandler = () => {\n this.notifyTokenChange(undefined);\n this.updateState(AuthState.Unauthenticated);\n };\n refreshHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n onAuthStateChange(callback) {\n const unsubscribe = super.onAuthStateChange(callback);\n if (!this.hasInitialized && this.currentState === AuthState.Initializing) {\n this.hasInitialized = true;\n void this.signIn().catch(() => {\n // Don't allow unhandled rejection to bubble up, mostly for testing.\n // Note the signIn method will log errors and throw for promise consumers,\n // but we don't need to handle anything here.\n });\n }\n return unsubscribe;\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async refresh() {\n try {\n await this.oauthClient.refresh();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.removeEventListener(\"refresh\", this.refreshHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a public OAuth auth service that wraps a PublicOauthClient\n */\nexport function createPublicOauthService(app, oauthClient) {\n return new AuthServicePublic(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceStatic extends AuthServiceBase {\n tokenProvider;\n latestToken;\n constructor(app, tokenProvider) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceStatic\"\n }), AuthState.Unauthenticated);\n this.tokenProvider = tokenProvider;\n void this.getToken().catch(() => {});\n }\n async getToken() {\n try {\n const token = await this.tokenProvider();\n if (this.latestToken !== token) {\n this.latestToken = token;\n this.notifyTokenChange(token);\n if (this.currentState !== AuthState.Authenticated) {\n this.updateState(AuthState.Authenticated);\n }\n }\n return token;\n } catch (error) {\n if (this.latestToken !== undefined) {\n this.latestToken = undefined;\n this.notifyTokenChange(undefined);\n }\n this.updateState(AuthState.Error, error);\n throw error;\n }\n }\n getTokenOrUndefined() {\n return this.latestToken;\n }\n isAuthenticated() {\n return this.latestToken != null;\n }\n signIn() {\n return Promise.resolve();\n }\n signOut() {\n this.clearUserState();\n this.latestToken = undefined;\n this.updateState(AuthState.Unauthenticated);\n return Promise.reject(new Error(\"Sign out not supported for static token providers\"));\n }\n dispose() {\n super.dispose();\n this.latestToken = undefined;\n }\n}\n\n/**\n * Creates a static token auth service for CLI/service scenarios where a token is provided externally.\n */\nexport function createStaticTokenService(app, tokenProvider) {\n return new AuthServiceStatic(app, tokenProvider);\n}"]}
|
package/build/cjs/index.d.cts
CHANGED
|
@@ -18,7 +18,7 @@ declare abstract class AuthServiceBase implements BaseAuthService {
|
|
|
18
18
|
abstract getToken(): Promise<string>;
|
|
19
19
|
protected clearUserState(): void;
|
|
20
20
|
isAuthenticated(): boolean;
|
|
21
|
-
getCurrentUserId(): string | undefined;
|
|
21
|
+
getCurrentUserId(allowUnverified?: boolean): string | undefined;
|
|
22
22
|
abstract getTokenOrUndefined(): string | undefined;
|
|
23
23
|
isValidated(): boolean;
|
|
24
24
|
validateToken(): Promise<boolean>;
|
package/build/esm/index.js
CHANGED
|
@@ -6,11 +6,21 @@ import { Users } from '@osdk/foundry.admin';
|
|
|
6
6
|
|
|
7
7
|
// src/utils/jwtUtils.ts
|
|
8
8
|
function maybeDecodeUuidClaim(value) {
|
|
9
|
-
if (
|
|
10
|
-
|
|
9
|
+
if (typeof value === "string") {
|
|
10
|
+
try {
|
|
11
|
+
const decoded = atob(value);
|
|
12
|
+
if (decoded.length === 16) {
|
|
13
|
+
const bytes = Array.from(decoded, (char) => char.charCodeAt(0));
|
|
14
|
+
return decodeUuidBytes(bytes);
|
|
15
|
+
}
|
|
16
|
+
} catch {
|
|
17
|
+
return void 0;
|
|
18
|
+
}
|
|
11
19
|
}
|
|
12
|
-
if (
|
|
13
|
-
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
if (value.length === 16 && value.every((v) => typeof v === "number")) {
|
|
22
|
+
return decodeUuidBytes(value);
|
|
23
|
+
}
|
|
14
24
|
}
|
|
15
25
|
return void 0;
|
|
16
26
|
}
|
|
@@ -73,8 +83,17 @@ var AuthServiceBase = class {
|
|
|
73
83
|
isAuthenticated() {
|
|
74
84
|
return this.getTokenOrUndefined() != null;
|
|
75
85
|
}
|
|
76
|
-
getCurrentUserId() {
|
|
77
|
-
|
|
86
|
+
getCurrentUserId(allowUnverified = false) {
|
|
87
|
+
if (this.isTokenValidated) {
|
|
88
|
+
return this.currentUserId;
|
|
89
|
+
}
|
|
90
|
+
if (allowUnverified) {
|
|
91
|
+
const token = this.getTokenOrUndefined();
|
|
92
|
+
if (token != null) {
|
|
93
|
+
return parseJwtToken(token)?.userId;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return void 0;
|
|
78
97
|
}
|
|
79
98
|
isValidated() {
|
|
80
99
|
return this.isTokenValidated;
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/jwtUtils.ts","../../src/auth/AuthServiceBase.ts","../../src/auth/AuthServiceConfidential.ts","../../src/auth/AuthServicePublic.ts","../../src/auth/AuthServiceStatic.ts"],"names":["AuthState"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 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 */\n\n/**\n * Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays.\n * These are the sub, sid, jti, and org claims.\n */\nfunction maybeDecodeUuidClaim(value) {\n if (!Array.isArray(value)) {\n return undefined;\n }\n if (value.length === 16 && value.every(v => typeof v === \"number\")) {\n // Convert 16-byte array to UUID string\n return decodeUuidBytes(value);\n }\n return undefined;\n}\n\n/**\n * Convert a 16-byte array to UUID string format.\n * Based on Palantir's UUID encoding format.\n */\nfunction decodeUuidBytes(bytes) {\n if (bytes.length !== 16) {\n return \"\";\n }\n\n // Convert bytes to hex string\n const hex = bytes.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n // Format as UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n return [hex.slice(0, 8), hex.slice(8, 12), hex.slice(12, 16), hex.slice(16, 20), hex.slice(20, 32)].join(\"-\");\n}\n\n/**\n * Represents the parsed payload from a JWT token (unverified).\n * The information provided should not be used for security-sensitive\n * applications unless verified through some other process.\n */\n\n/**\n * Parse JWT token to extract unverified claims including userId, sessionId, tokenId, organizationId, and expiry.\n * This does NOT verify the token signature - it only extracts payload data.\n *\n * @param token - JWT token string\n * @returns Unverified token info or undefined if parsing fails\n */\nexport function parseJwtToken(token) {\n if (!token) {\n return undefined;\n }\n try {\n // JWT tokens have 3 parts separated by dots: header.payload.signature\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n return undefined;\n }\n\n // Decode the payload (second part)\n const payload = parts[1];\n if (!payload) {\n return undefined;\n }\n\n // Add padding if needed for base64 decoding\n const paddedPayload = payload.padEnd(payload.length + (4 - payload.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(paddedPayload));\n return {\n // JWT exp is seconds since epoch, convert to ms\n expiryInstantUtc: typeof decoded.exp === \"number\" ? decoded.exp * 1000 : undefined,\n orgId: maybeDecodeUuidClaim(decoded.org),\n sessionId: maybeDecodeUuidClaim(decoded.sid),\n tokenId: maybeDecodeUuidClaim(decoded.jti),\n userId: maybeDecodeUuidClaim(decoded.sub)\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check if a JWT token is expired based on its exp claim (unverified).\n *\n * @param tokenInfo - Unverified token info\n * @returns true if token is expired, false if valid or no expiry info\n */\nexport function isTokenExpired(tokenInfo) {\n if (!tokenInfo.expiryInstantUtc) {\n return false; // No expiry info, assume valid\n }\n const now = Date.now();\n return tokenInfo.expiryInstantUtc < now;\n}","/*\n * Copyright 2025 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 */\n\nimport { Users } from \"@osdk/foundry.admin\";\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { parseJwtToken } from \"../utils/jwtUtils.js\";\nexport class AuthServiceBase {\n currentState;\n isTokenValidated = false;\n currentUserId;\n cachedUserData;\n stateCallbacks = new Set();\n tokenChangeCallbacks = new Set();\n currentToken;\n app;\n logger;\n constructor(app, logger, initialState = AuthState.Unauthenticated) {\n this.app = app;\n this.logger = logger;\n this.currentState = initialState;\n }\n clearUserState() {\n this.isTokenValidated = false;\n this.currentUserId = undefined;\n this.cachedUserData = undefined;\n }\n isAuthenticated() {\n return this.getTokenOrUndefined() != null;\n }\n getCurrentUserId() {\n return this.isTokenValidated ? this.currentUserId : undefined;\n }\n isValidated() {\n return this.isTokenValidated;\n }\n async validateToken() {\n if (!this.isAuthenticated()) {\n this.clearUserState();\n return false;\n }\n if (this.app.config.isTestMode) {\n this.isTokenValidated = true;\n return true;\n }\n try {\n const user = await Users.getCurrent(this.app.config.osdkClient);\n this.isTokenValidated = true;\n this.cachedUserData = user;\n this.currentUserId = user.id;\n return true;\n } catch (error) {\n this.logger.error(\"Token validation failed\", error);\n this.clearUserState();\n return false;\n }\n }\n onAuthStateChange(callback) {\n this.stateCallbacks.add(callback);\n try {\n callback({\n state: this.currentState\n });\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n return () => {\n this.stateCallbacks.delete(callback);\n };\n }\n onTokenChange(callback) {\n this.tokenChangeCallbacks.add(callback);\n\n // Immediately notify with current token if available\n const token = this.getTokenOrUndefined();\n if (token != null) {\n const info = parseJwtToken(token) ?? {};\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n }\n return () => {\n this.tokenChangeCallbacks.delete(callback);\n };\n }\n getCurrentState() {\n return this.currentState;\n }\n async getUserData(userId, force) {\n if (!this.isTokenValidated || !this.currentUserId || this.currentUserId !== userId) {\n throw new Error(`User data not available for userId: ${userId}`);\n }\n if (!force && this.cachedUserData) {\n return this.cachedUserData;\n }\n if (this.app.config.isTestMode) {\n throw new Error(\"Cannot refresh user data in test mode\");\n }\n try {\n // TODO: debounce and use Users.getBatch for efficiency when looking up multiple users\n const user = await Users.get(this.app.config.osdkClient, userId);\n this.cachedUserData = user;\n return user;\n } catch (error) {\n this.logger.error(\"Failed to refresh user data\", error);\n throw new Error(\"Failed to refresh user data\");\n }\n }\n dispose() {\n this.stateCallbacks.clear();\n this.tokenChangeCallbacks.clear();\n this.clearUserState();\n }\n notifyTokenChange(token) {\n const info = (token != null ? parseJwtToken(token) : undefined) ?? {};\n this.tokenChangeCallbacks.forEach(callback => {\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n });\n }\n updateState(newState, error) {\n const previousState = this.currentState;\n this.currentState = newState;\n const event = {\n previousState,\n state: newState,\n error\n };\n this.stateCallbacks.forEach(callback => {\n try {\n callback(event);\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n });\n }\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceConfidential extends AuthServiceBase {\n oauthClient;\n constructor(app, oauthClient) {\n const initialState = oauthClient.getTokenOrUndefined() ? AuthState.Authenticated : AuthState.Unauthenticated;\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceConfidential\"\n }), initialState);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n this.updateState(AuthState.Authenticated);\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n };\n signOutHandler = () => {\n this.updateState(AuthState.Unauthenticated);\n this.notifyTokenChange(undefined);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a confidential OAuth auth service that wraps a ConfidentialOauthClient\n */\nexport function createConfidentialOauthService(app, oauthClient) {\n return new AuthServiceConfidential(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServicePublic extends AuthServiceBase {\n hasInitialized = false;\n oauthClient;\n constructor(app, oauthClient) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServicePublic\"\n }), AuthState.Initializing);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.addEventListener(\"refresh\", this.refreshHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n signOutHandler = () => {\n this.notifyTokenChange(undefined);\n this.updateState(AuthState.Unauthenticated);\n };\n refreshHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n onAuthStateChange(callback) {\n const unsubscribe = super.onAuthStateChange(callback);\n if (!this.hasInitialized && this.currentState === AuthState.Initializing) {\n this.hasInitialized = true;\n void this.signIn().catch(() => {\n // Don't allow unhandled rejection to bubble up, mostly for testing.\n // Note the signIn method will log errors and throw for promise consumers,\n // but we don't need to handle anything here.\n });\n }\n return unsubscribe;\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async refresh() {\n try {\n await this.oauthClient.refresh();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.removeEventListener(\"refresh\", this.refreshHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a public OAuth auth service that wraps a PublicOauthClient\n */\nexport function createPublicOauthService(app, oauthClient) {\n return new AuthServicePublic(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceStatic extends AuthServiceBase {\n tokenProvider;\n latestToken;\n constructor(app, tokenProvider) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceStatic\"\n }), AuthState.Unauthenticated);\n this.tokenProvider = tokenProvider;\n void this.getToken().catch(() => {});\n }\n async getToken() {\n try {\n const token = await this.tokenProvider();\n if (this.latestToken !== token) {\n this.latestToken = token;\n this.notifyTokenChange(token);\n if (this.currentState !== AuthState.Authenticated) {\n this.updateState(AuthState.Authenticated);\n }\n }\n return token;\n } catch (error) {\n if (this.latestToken !== undefined) {\n this.latestToken = undefined;\n this.notifyTokenChange(undefined);\n }\n this.updateState(AuthState.Error, error);\n throw error;\n }\n }\n getTokenOrUndefined() {\n return this.latestToken;\n }\n isAuthenticated() {\n return this.latestToken != null;\n }\n signIn() {\n return Promise.resolve();\n }\n signOut() {\n this.clearUserState();\n this.latestToken = undefined;\n this.updateState(AuthState.Unauthenticated);\n return Promise.reject(new Error(\"Sign out not supported for static token providers\"));\n }\n dispose() {\n super.dispose();\n this.latestToken = undefined;\n }\n}\n\n/**\n * Creates a static token auth service for CLI/service scenarios where a token is provided externally.\n */\nexport function createStaticTokenService(app, tokenProvider) {\n return new AuthServiceStatic(app, tokenProvider);\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/jwtUtils.ts","../../src/auth/AuthServiceBase.ts","../../src/auth/AuthServiceConfidential.ts","../../src/auth/AuthServicePublic.ts","../../src/auth/AuthServiceStatic.ts"],"names":["AuthState"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 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 */\n\n/**\n * Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays or base64 strings.\n * These are the sub, sid, jti, and org claims.\n */\nfunction maybeDecodeUuidClaim(value) {\n if (typeof value === \"string\") {\n try {\n const decoded = atob(value);\n if (decoded.length === 16) {\n const bytes = Array.from(decoded, char => char.charCodeAt(0));\n return decodeUuidBytes(bytes);\n }\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n if (value.length === 16 && value.every(v => typeof v === \"number\")) {\n return decodeUuidBytes(value);\n }\n }\n return undefined;\n}\n\n/**\n * Convert a 16-byte array to UUID string format.\n * Based on Palantir's UUID encoding format.\n */\nfunction decodeUuidBytes(bytes) {\n if (bytes.length !== 16) {\n return \"\";\n }\n\n // Convert bytes to hex string\n const hex = bytes.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n // Format as UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n return [hex.slice(0, 8), hex.slice(8, 12), hex.slice(12, 16), hex.slice(16, 20), hex.slice(20, 32)].join(\"-\");\n}\n\n/**\n * Represents the parsed payload from a JWT token (unverified).\n * The information provided should not be used for security-sensitive\n * applications unless verified through some other process.\n */\n\n/**\n * Parse JWT token to extract unverified claims including userId, sessionId, tokenId, organizationId, and expiry.\n * This does NOT verify the token signature - it only extracts payload data.\n *\n * @param token - JWT token string\n * @returns Unverified token info or undefined if parsing fails\n */\nexport function parseJwtToken(token) {\n if (!token) {\n return undefined;\n }\n try {\n // JWT tokens have 3 parts separated by dots: header.payload.signature\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n return undefined;\n }\n\n // Decode the payload (second part)\n const payload = parts[1];\n if (!payload) {\n return undefined;\n }\n\n // Add padding if needed for base64 decoding\n const paddedPayload = payload.padEnd(payload.length + (4 - payload.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(paddedPayload));\n return {\n // JWT exp is seconds since epoch, convert to ms\n expiryInstantUtc: typeof decoded.exp === \"number\" ? decoded.exp * 1000 : undefined,\n orgId: maybeDecodeUuidClaim(decoded.org),\n sessionId: maybeDecodeUuidClaim(decoded.sid),\n tokenId: maybeDecodeUuidClaim(decoded.jti),\n userId: maybeDecodeUuidClaim(decoded.sub)\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Check if a JWT token is expired based on its exp claim (unverified).\n *\n * @param tokenInfo - Unverified token info\n * @returns true if token is expired, false if valid or no expiry info\n */\nexport function isTokenExpired(tokenInfo) {\n if (!tokenInfo.expiryInstantUtc) {\n return false; // No expiry info, assume valid\n }\n const now = Date.now();\n return tokenInfo.expiryInstantUtc < now;\n}","/*\n * Copyright 2025 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 */\n\nimport { Users } from \"@osdk/foundry.admin\";\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { parseJwtToken } from \"../utils/jwtUtils.js\";\nexport class AuthServiceBase {\n currentState;\n isTokenValidated = false;\n currentUserId;\n cachedUserData;\n stateCallbacks = new Set();\n tokenChangeCallbacks = new Set();\n currentToken;\n app;\n logger;\n constructor(app, logger, initialState = AuthState.Unauthenticated) {\n this.app = app;\n this.logger = logger;\n this.currentState = initialState;\n }\n clearUserState() {\n this.isTokenValidated = false;\n this.currentUserId = undefined;\n this.cachedUserData = undefined;\n }\n isAuthenticated() {\n return this.getTokenOrUndefined() != null;\n }\n getCurrentUserId(allowUnverified = false) {\n if (this.isTokenValidated) {\n return this.currentUserId;\n }\n if (allowUnverified) {\n const token = this.getTokenOrUndefined();\n if (token != null) {\n return parseJwtToken(token)?.userId;\n }\n }\n return undefined;\n }\n isValidated() {\n return this.isTokenValidated;\n }\n async validateToken() {\n if (!this.isAuthenticated()) {\n this.clearUserState();\n return false;\n }\n if (this.app.config.isTestMode) {\n this.isTokenValidated = true;\n return true;\n }\n try {\n const user = await Users.getCurrent(this.app.config.osdkClient);\n this.isTokenValidated = true;\n this.cachedUserData = user;\n this.currentUserId = user.id;\n return true;\n } catch (error) {\n this.logger.error(\"Token validation failed\", error);\n this.clearUserState();\n return false;\n }\n }\n onAuthStateChange(callback) {\n this.stateCallbacks.add(callback);\n try {\n callback({\n state: this.currentState\n });\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n return () => {\n this.stateCallbacks.delete(callback);\n };\n }\n onTokenChange(callback) {\n this.tokenChangeCallbacks.add(callback);\n\n // Immediately notify with current token if available\n const token = this.getTokenOrUndefined();\n if (token != null) {\n const info = parseJwtToken(token) ?? {};\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n }\n return () => {\n this.tokenChangeCallbacks.delete(callback);\n };\n }\n getCurrentState() {\n return this.currentState;\n }\n async getUserData(userId, force) {\n if (!this.isTokenValidated || !this.currentUserId || this.currentUserId !== userId) {\n throw new Error(`User data not available for userId: ${userId}`);\n }\n if (!force && this.cachedUserData) {\n return this.cachedUserData;\n }\n if (this.app.config.isTestMode) {\n throw new Error(\"Cannot refresh user data in test mode\");\n }\n try {\n // TODO: debounce and use Users.getBatch for efficiency when looking up multiple users\n const user = await Users.get(this.app.config.osdkClient, userId);\n this.cachedUserData = user;\n return user;\n } catch (error) {\n this.logger.error(\"Failed to refresh user data\", error);\n throw new Error(\"Failed to refresh user data\");\n }\n }\n dispose() {\n this.stateCallbacks.clear();\n this.tokenChangeCallbacks.clear();\n this.clearUserState();\n }\n notifyTokenChange(token) {\n const info = (token != null ? parseJwtToken(token) : undefined) ?? {};\n this.tokenChangeCallbacks.forEach(callback => {\n try {\n callback(token, info);\n } catch (err) {\n this.logger.error(\"Error in token change callback:\", err);\n }\n });\n }\n updateState(newState, error) {\n const previousState = this.currentState;\n this.currentState = newState;\n const event = {\n previousState,\n state: newState,\n error\n };\n this.stateCallbacks.forEach(callback => {\n try {\n callback(event);\n } catch (err) {\n this.logger.error(\"Error in auth state callback:\", err);\n }\n });\n }\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceConfidential extends AuthServiceBase {\n oauthClient;\n constructor(app, oauthClient) {\n const initialState = oauthClient.getTokenOrUndefined() ? AuthState.Authenticated : AuthState.Unauthenticated;\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceConfidential\"\n }), initialState);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n this.updateState(AuthState.Authenticated);\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n };\n signOutHandler = () => {\n this.updateState(AuthState.Unauthenticated);\n this.notifyTokenChange(undefined);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a confidential OAuth auth service that wraps a ConfidentialOauthClient\n */\nexport function createConfidentialOauthService(app, oauthClient) {\n return new AuthServiceConfidential(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServicePublic extends AuthServiceBase {\n hasInitialized = false;\n oauthClient;\n constructor(app, oauthClient) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServicePublic\"\n }), AuthState.Initializing);\n this.oauthClient = oauthClient;\n this.oauthClient.addEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.addEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.addEventListener(\"refresh\", this.refreshHandler);\n }\n async getToken() {\n return this.oauthClient();\n }\n signInHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n signOutHandler = () => {\n this.notifyTokenChange(undefined);\n this.updateState(AuthState.Unauthenticated);\n };\n refreshHandler = () => {\n const token = this.getTokenOrUndefined();\n this.notifyTokenChange(token);\n this.updateState(AuthState.Authenticated);\n };\n getTokenOrUndefined() {\n return this.oauthClient.getTokenOrUndefined();\n }\n onAuthStateChange(callback) {\n const unsubscribe = super.onAuthStateChange(callback);\n if (!this.hasInitialized && this.currentState === AuthState.Initializing) {\n this.hasInitialized = true;\n void this.signIn().catch(() => {\n // Don't allow unhandled rejection to bubble up, mostly for testing.\n // Note the signIn method will log errors and throw for promise consumers,\n // but we don't need to handle anything here.\n });\n }\n return unsubscribe;\n }\n async signIn() {\n try {\n this.updateState(AuthState.Authenticating);\n await this.oauthClient.signIn();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async signOut() {\n try {\n this.clearUserState();\n await this.oauthClient.signOut();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n async refresh() {\n try {\n await this.oauthClient.refresh();\n } catch (error) {\n this.updateState(AuthState.Error, error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n dispose() {\n this.oauthClient.removeEventListener(\"signIn\", this.signInHandler);\n this.oauthClient.removeEventListener(\"signOut\", this.signOutHandler);\n this.oauthClient.removeEventListener(\"refresh\", this.refreshHandler);\n super.dispose();\n }\n}\n\n/**\n * Creates a public OAuth auth service that wraps a PublicOauthClient\n */\nexport function createPublicOauthService(app, oauthClient) {\n return new AuthServicePublic(app, oauthClient);\n}","/*\n * Copyright 2025 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 */\n\nimport { AuthState } from \"@palantir/pack.auth\";\nimport { AuthServiceBase } from \"./AuthServiceBase.js\";\nexport class AuthServiceStatic extends AuthServiceBase {\n tokenProvider;\n latestToken;\n constructor(app, tokenProvider) {\n super(app, app.config.logger.child({}, {\n msgPrefix: \"AuthServiceStatic\"\n }), AuthState.Unauthenticated);\n this.tokenProvider = tokenProvider;\n void this.getToken().catch(() => {});\n }\n async getToken() {\n try {\n const token = await this.tokenProvider();\n if (this.latestToken !== token) {\n this.latestToken = token;\n this.notifyTokenChange(token);\n if (this.currentState !== AuthState.Authenticated) {\n this.updateState(AuthState.Authenticated);\n }\n }\n return token;\n } catch (error) {\n if (this.latestToken !== undefined) {\n this.latestToken = undefined;\n this.notifyTokenChange(undefined);\n }\n this.updateState(AuthState.Error, error);\n throw error;\n }\n }\n getTokenOrUndefined() {\n return this.latestToken;\n }\n isAuthenticated() {\n return this.latestToken != null;\n }\n signIn() {\n return Promise.resolve();\n }\n signOut() {\n this.clearUserState();\n this.latestToken = undefined;\n this.updateState(AuthState.Unauthenticated);\n return Promise.reject(new Error(\"Sign out not supported for static token providers\"));\n }\n dispose() {\n super.dispose();\n this.latestToken = undefined;\n }\n}\n\n/**\n * Creates a static token auth service for CLI/service scenarios where a token is provided externally.\n */\nexport function createStaticTokenService(app, tokenProvider) {\n return new AuthServiceStatic(app, tokenProvider);\n}"]}
|
|
@@ -15,7 +15,7 @@ export declare abstract class AuthServiceBase implements BaseAuthService {
|
|
|
15
15
|
abstract getToken(): Promise<string>;
|
|
16
16
|
protected clearUserState(): void;
|
|
17
17
|
isAuthenticated(): boolean;
|
|
18
|
-
getCurrentUserId(): string | undefined;
|
|
18
|
+
getCurrentUserId(allowUnverified?: boolean): string | undefined;
|
|
19
19
|
abstract getTokenOrUndefined(): string | undefined;
|
|
20
20
|
isValidated(): boolean;
|
|
21
21
|
validateToken(): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cAAc,cAAc;AAE5B,SACE,gBACK,wBAEA,sBACA,2BACA;AACP,cAAc,iBAAiB,mBAAmB;AAGlD,OAAO,uBAAe,2BAA2B,gBAAgB;CAC/D,UAAU,cAAc;CACxB,UAAU;CACV,UAAU;CACV,UAAU;CACV,iBAAiB;CACjB,iBAAiB;CACjB,UAAU;CACV,mBAAmB,KAAK;CACxB,mBAAmB,QAAQ;CAE3B,YACE,KAAK,iBACL,QAAQ,QACR,eAAc;CAOhB,SAAS,YAAY;CAErB,UAAU;CAMV;CAIA;
|
|
1
|
+
{"mappings":"AAgBA,cAAc,cAAc;AAE5B,SACE,gBACK,wBAEA,sBACA,2BACA;AACP,cAAc,iBAAiB,mBAAmB;AAGlD,OAAO,uBAAe,2BAA2B,gBAAgB;CAC/D,UAAU,cAAc;CACxB,UAAU;CACV,UAAU;CACV,UAAU;CACV,iBAAiB;CACjB,iBAAiB;CACjB,UAAU;CACV,mBAAmB,KAAK;CACxB,mBAAmB,QAAQ;CAE3B,YACE,KAAK,iBACL,QAAQ,QACR,eAAc;CAOhB,SAAS,YAAY;CAErB,UAAU;CAMV;CAIA,iBAAiB;CAejB,SAAS;CAET;CAIA,AAAM,iBAAiB;CAwBvB,SAAS,UAAU;CAEnB,SAAS,WAAW;CAEpB,YAAY;CAEZ,kBAAkB,UAAU,oBAAoB;CAgBhD,cAAc,UAAU,sBAAsB;CAmB9C,mBAAmB;CAInB,AAAM,YAAY,gBAAgB,kBAAkB;CAwBpD;CAMA,UAAU,kBAAkB;CAY5B,UAAU,YAAY,UAAU,WAAW,QAAQ","names":[],"sources":["../../../src/auth/AuthServiceBase.ts"],"version":3,"file":"AuthServiceBase.d.ts"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cAAc,cAAc;;;;;;
|
|
1
|
+
{"mappings":"AAgBA,cAAc,cAAc;;;;;;AAuD5B,iBAAiB,oBAAoB;UAC1B;UACA;UACA;UACA;UACA,SAAS;;;;;;;;;AAUpB,OAAO,iBAAS,cAAc,gBAAgB;;;;;;;AA0C9C,OAAO,iBAAS,eAAe,WAAW","names":[],"sources":["../../../src/utils/jwtUtils.ts"],"version":3,"file":"jwtUtils.d.ts"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@palantir/pack.auth.foundry",
|
|
3
|
-
"version": "0.0.1
|
|
3
|
+
"version": "0.0.1",
|
|
4
4
|
"description": "Foundry-specific authentication implementations for PACK applications",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -29,23 +29,22 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"tiny-invariant": "^1.3.3",
|
|
32
|
-
"@palantir/pack.auth": "0.0.1
|
|
33
|
-
"@palantir/pack.core": "0.1.0
|
|
32
|
+
"@palantir/pack.auth": "0.0.1",
|
|
33
|
+
"@palantir/pack.core": "0.1.0"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"@osdk/api": "~2.4.2",
|
|
37
37
|
"@osdk/client": "~2.4.2",
|
|
38
|
-
"@osdk/foundry.admin": "~2.
|
|
38
|
+
"@osdk/foundry.admin": "~2.38.0",
|
|
39
39
|
"@osdk/oauth": "~1.4.0",
|
|
40
40
|
"@osdk/shared.client2": "~1.0.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"happy-dom": "^18.0.1",
|
|
44
43
|
"rimraf": "^6.0.1",
|
|
45
44
|
"tslib": "^2.8.1",
|
|
46
45
|
"typescript": "^5.9.2",
|
|
47
46
|
"vitest-mock-extended": "^2.0.2",
|
|
48
|
-
"@palantir/pack.monorepo.tsconfig": "~0.4.0
|
|
47
|
+
"@palantir/pack.monorepo.tsconfig": "~0.4.0"
|
|
49
48
|
},
|
|
50
49
|
"publishConfig": {
|
|
51
50
|
"access": "public"
|
|
@@ -61,8 +60,8 @@
|
|
|
61
60
|
"type": "module",
|
|
62
61
|
"scripts": {
|
|
63
62
|
"clean": "rimraf .turbo build dist lib test-output *.tgz tsconfig.tsbuildinfo",
|
|
64
|
-
"lint": "eslint ./src
|
|
65
|
-
"lint:fix": "eslint ./src --fix
|
|
63
|
+
"lint": "eslint ./src && dprint check --config $(find-up dprint.json) --allow-no-files",
|
|
64
|
+
"lint:fix": "eslint ./src --fix && dprint fmt --config $(find-up dprint.json) --allow-no-files",
|
|
66
65
|
"test": "vitest run --passWithNoTests -u",
|
|
67
66
|
"test:watch": "vitest --passWithNoTests",
|
|
68
67
|
"transpileBrowser": "monorepo-transpile -f esm -m bundle -t browser",
|
|
@@ -51,7 +51,7 @@ describe("StaticTokenService", () => {
|
|
|
51
51
|
logger: mockLogger,
|
|
52
52
|
osdkClient: mockOsdkClient,
|
|
53
53
|
remote: {
|
|
54
|
-
packWsPath: "/
|
|
54
|
+
packWsPath: "/api/v2/packSubscriptions",
|
|
55
55
|
baseUrl: "https://test.example.com",
|
|
56
56
|
fetchFn: globalThis.fetch,
|
|
57
57
|
},
|
|
@@ -65,6 +65,7 @@ describe("StaticTokenService", () => {
|
|
|
65
65
|
username: "test-user",
|
|
66
66
|
realm: "test-realm",
|
|
67
67
|
attributes: {},
|
|
68
|
+
status: "ACTIVE",
|
|
68
69
|
});
|
|
69
70
|
|
|
70
71
|
service = createStaticTokenService(mockApp, mockTokenProvider);
|
|
@@ -229,7 +230,7 @@ describe("StaticTokenService", () => {
|
|
|
229
230
|
logger: mockLogger,
|
|
230
231
|
osdkClient: mock<Client>(),
|
|
231
232
|
remote: {
|
|
232
|
-
packWsPath: "/
|
|
233
|
+
packWsPath: "/api/v2/packSubscriptions",
|
|
233
234
|
baseUrl: "https://localhost:5173",
|
|
234
235
|
fetchFn: globalThis.fetch,
|
|
235
236
|
},
|
|
@@ -59,8 +59,19 @@ export abstract class AuthServiceBase implements BaseAuthService {
|
|
|
59
59
|
return this.getTokenOrUndefined() != null;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
getCurrentUserId(): string | undefined {
|
|
63
|
-
|
|
62
|
+
getCurrentUserId(allowUnverified = false): string | undefined {
|
|
63
|
+
if (this.isTokenValidated) {
|
|
64
|
+
return this.currentUserId;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (allowUnverified) {
|
|
68
|
+
const token = this.getTokenOrUndefined();
|
|
69
|
+
if (token != null) {
|
|
70
|
+
return parseJwtToken(token)?.userId;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return undefined;
|
|
64
75
|
}
|
|
65
76
|
|
|
66
77
|
abstract getTokenOrUndefined(): string | undefined;
|
package/src/utils/jwtUtils.ts
CHANGED
|
@@ -17,17 +17,26 @@
|
|
|
17
17
|
import type { UserId } from "@palantir/pack.auth";
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays.
|
|
20
|
+
* Decode a Palantir-specific JWT claim that stores UUIDs as 16-byte arrays or base64 strings.
|
|
21
21
|
* These are the sub, sid, jti, and org claims.
|
|
22
22
|
*/
|
|
23
23
|
function maybeDecodeUuidClaim(value: unknown): string | undefined {
|
|
24
|
-
if (
|
|
25
|
-
|
|
24
|
+
if (typeof value === "string") {
|
|
25
|
+
try {
|
|
26
|
+
const decoded = atob(value);
|
|
27
|
+
if (decoded.length === 16) {
|
|
28
|
+
const bytes = Array.from(decoded, char => char.charCodeAt(0));
|
|
29
|
+
return decodeUuidBytes(bytes);
|
|
30
|
+
}
|
|
31
|
+
} catch {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
26
34
|
}
|
|
27
35
|
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
if (Array.isArray(value)) {
|
|
37
|
+
if (value.length === 16 && value.every(v => typeof v === "number")) {
|
|
38
|
+
return decodeUuidBytes(value);
|
|
39
|
+
}
|
|
31
40
|
}
|
|
32
41
|
|
|
33
42
|
return undefined;
|