@trackunit/iris-app 0.0.386 → 0.0.391

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,32 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.0.391](https://github.com/Trackunit/manager/compare/iris-app/0.0.390...iris-app/0.0.391) (2023-10-12)
6
+
7
+ ## [0.0.390](https://github.com/Trackunit/manager/compare/iris-app/0.0.389...iris-app/0.0.390) (2023-10-11)
8
+
9
+ ### Dependency Updates
10
+
11
+ * `iris-app-build-utilities` updated to version `0.0.389`
12
+ * `iris-app-api` updated to version `0.0.389`
13
+ * `iris-app-webpack-plugin` updated to version `0.0.389`
14
+ ## [0.0.389](https://github.com/Trackunit/manager/compare/iris-app/0.0.388...iris-app/0.0.389) (2023-10-10)
15
+
16
+ ### Dependency Updates
17
+
18
+ * `iris-app-build-utilities` updated to version `0.0.388`
19
+ ## [0.0.388](https://github.com/Trackunit/manager/compare/iris-app/0.0.387...iris-app/0.0.388) (2023-10-10)
20
+
21
+ ### Dependency Updates
22
+
23
+ * `iris-app-build-utilities` updated to version `0.0.387`
24
+ ## [0.0.387](https://github.com/Trackunit/manager/compare/iris-app/0.0.386...iris-app/0.0.387) (2023-10-10)
25
+
26
+ ### Dependency Updates
27
+
28
+ * `iris-app-build-utilities` updated to version `0.0.386`
29
+ * `iris-app-api` updated to version `0.0.386`
30
+ * `iris-app-webpack-plugin` updated to version `0.0.386`
5
31
  ## [0.0.386](https://github.com/Trackunit/manager/compare/iris-app/0.0.385...iris-app/0.0.386) (2023-10-09)
6
32
 
7
33
  ### Dependency Updates
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app",
3
- "version": "0.0.386",
3
+ "version": "0.0.391",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "main": "./src/index.js",
6
6
  "generators": "./generators.json",
@@ -46,15 +46,12 @@
46
46
  "wrap-ansi": "7.0.0",
47
47
  "@floating-ui/react": "0.25.4",
48
48
  "@trackunit/css-class-variance-utilities": "0.0.14",
49
- "@trackunit/css-component-tokens": "0.0.40",
50
- "@trackunit/css-components": "0.0.422",
49
+ "@trackunit/css-components": "0.0.424",
51
50
  "@trackunit/css-core": "0.0.95",
52
- "@trackunit/css-tailwind": "0.0.87",
53
- "@trackunit/css-tailwind-custom-properties-plugin": "0.0.31",
54
- "@trackunit/iris-app-api": "0.0.121",
55
- "@trackunit/iris-app-build-utilities": "0.0.251",
56
- "@trackunit/iris-app-webpack-plugin": "0.0.136",
57
- "@trackunit/react-components": "0.1.169",
51
+ "@trackunit/iris-app-api": "0.0.123",
52
+ "@trackunit/iris-app-build-utilities": "0.0.255",
53
+ "@trackunit/iris-app-webpack-plugin": "0.0.138",
54
+ "@trackunit/react-components": "0.1.171",
58
55
  "@trackunit/shared-utils": "0.0.10",
59
56
  "@trackunit/ui-design-tokens": "0.0.77",
60
57
  "@trackunit/ui-icons": "0.0.77",
@@ -71,7 +68,7 @@
71
68
  "react-useportal": "1.0.18",
72
69
  "tailwind-merge": "1.13.0",
73
70
  "zod": "3.14.1",
74
- "tslib": "1.14.1"
71
+ "tslib": "2.4.1"
75
72
  },
76
73
  "type": "commonjs"
77
74
  }
@@ -1,6 +1,7 @@
1
1
  export interface AuthSettings {
2
2
  env: string;
3
- authorizationServerBaseUrl: string;
3
+ publicAuthorizationServerBaseUrl: string;
4
+ internalAuthorizationServerBaseUrl: string;
4
5
  clientId: string;
5
6
  }
6
7
  interface OktaError {
@@ -42,7 +42,7 @@ async function getAccessToken(env) {
42
42
  tokenParams.append("client_secret", clientSecret);
43
43
  tokenParams.append("grant_type", "client_credentials");
44
44
  tokenParams.append("scope", "iris_app_sdk.publish_for_all_accounts iris_app_sdk.approve");
45
- const tokenResponse = await (0, node_fetch_1.default)(`${settings.authorizationServerBaseUrl}/v1/token`, {
45
+ const tokenResponse = await (0, node_fetch_1.default)(`${settings.internalAuthorizationServerBaseUrl}/v1/token`, {
46
46
  method: "POST",
47
47
  body: tokenParams,
48
48
  });
@@ -55,7 +55,7 @@ async function getAccessToken(env) {
55
55
  const authorizeParams = new url_1.URLSearchParams();
56
56
  authorizeParams.append("client_id", settings.clientId);
57
57
  authorizeParams.append("scope", "openid profile fms assume");
58
- const authorizeResponse = await (0, node_fetch_1.default)(`${settings.authorizationServerBaseUrl}/v1/device/authorize`, {
58
+ const authorizeResponse = await (0, node_fetch_1.default)(`${settings.publicAuthorizationServerBaseUrl}/v1/device/authorize`, {
59
59
  method: "POST",
60
60
  body: authorizeParams,
61
61
  });
@@ -84,7 +84,7 @@ async function getAccessToken(env) {
84
84
  tokenParams.append("client_id", settings.clientId);
85
85
  tokenParams.append("grant_type", "urn:ietf:params:oauth:grant-type:device_code");
86
86
  tokenParams.append("device_code", authorizeData.device_code);
87
- const tokenResponse = await (0, node_fetch_1.default)(`${settings.authorizationServerBaseUrl}/v1/token`, {
87
+ const tokenResponse = await (0, node_fetch_1.default)(`${settings.publicAuthorizationServerBaseUrl}/v1/token`, {
88
88
  method: "POST",
89
89
  body: tokenParams,
90
90
  });
@@ -103,19 +103,22 @@ function getAuthSettings(env) {
103
103
  case "PROD":
104
104
  return {
105
105
  clientId: "0oamfeklvodROR2ul357",
106
- authorizationServerBaseUrl: "https://trackunit-portal.okta.com/oauth2/aushbxvmpdlWrMnO6357",
106
+ publicAuthorizationServerBaseUrl: "https://trackunit-portal.okta.com/oauth2/aus2u3jix1dWU7fwt356",
107
+ internalAuthorizationServerBaseUrl: "https://trackunit-portal.okta.com/oauth2/aushbxvmpdlWrMnO6357",
107
108
  env,
108
109
  };
109
110
  case "STAGE":
110
111
  return {
111
112
  clientId: "0oa1q2vmx21NcFLOs0h8",
112
- authorizationServerBaseUrl: "https://trackunit-portal-stage.okta.com/oauth2/aus1o484n9xEHT7G50h8",
113
+ publicAuthorizationServerBaseUrl: "https://trackunit-portal-stage.okta.com/oauth2/aus1owd7wny5YVsU00h8",
114
+ internalAuthorizationServerBaseUrl: "https://trackunit-portal-stage.okta.com/oauth2/aus1o484n9xEHT7G50h8",
113
115
  env,
114
116
  };
115
117
  case "DEV":
116
118
  return {
117
119
  clientId: "0oamebigau4RkaqZ6357",
118
- authorizationServerBaseUrl: "https://trackunit-portal-dev.okta.com/oauth2/aush09l7x4mDGKxLu357",
120
+ publicAuthorizationServerBaseUrl: "https://trackunit-portal-dev.okta.com/oauth2/ausj7eh9zeiFhLk4m357",
121
+ internalAuthorizationServerBaseUrl: "https://trackunit-portal-dev.okta.com/oauth2/aush09l7x4mDGKxLu357",
119
122
  env,
120
123
  };
121
124
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/executors/utils/authentication.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport fetch from \"node-fetch\";\nimport * as open from \"open\";\nimport { URLSearchParams } from \"url\";\n\nexport interface AuthSettings {\n env: string;\n authorizationServerBaseUrl: string;\n clientId: string;\n}\n\ninterface OktaError {\n error: string;\n error_description: string;\n}\n\ninterface AuthorizeDataSuccess {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n expires_in: number;\n interval: number;\n}\n\ntype AuthorizeData = AuthorizeDataSuccess | OktaError;\n\nexport interface TokenDataSuccess {\n token_type: string;\n expires_in: number;\n access_token: string;\n scope: string;\n id_token: string;\n}\n\ntype TokenData = OktaError | TokenDataSuccess;\n\n/**\n * Authenticate and get access token\n *\n * @param {AuthSettings} settings Settings used for authentication\n * @returns {*} {Promise<{ tokenData: TokenData; useAccessToken: boolean }>}\n */\nexport async function getAccessToken(env: string): Promise<{ tokenData: TokenData; useAccessToken: boolean }> {\n const settings = getAuthSettings(env);\n const clientId = process.env[`TU_CLIENT_ID_${settings.env}`];\n const clientSecret = process.env[`TU_CLIENT_SECRET_${settings.env}`];\n let useAccessToken = false;\n let tokenData: TokenData | null = null;\n // use token provided as environment variable if available\n if (process.env.TU_TOKEN) {\n tokenData = {\n token_type: \"Bearer\",\n id_token: process.env.TU_TOKEN,\n access_token: process.env.TU_TOKEN,\n expires_in: 0,\n scope: \"unknown\",\n };\n // use client id and secret provided as environment variables to fetch a token directly\n // This is used for CI/CD pipelines\n } else if (clientId !== undefined) {\n if (clientId === undefined || clientId.trim() === \"\") {\n throw new Error(`Missing environment value: TU_CLIENT_ID_${settings.env}`);\n }\n if (clientSecret === undefined || clientSecret.trim() === \"\") {\n throw new Error(`Missing environment value: TU_CLIENT_SECRET_${settings.env}`);\n }\n\n const tokenParams = new URLSearchParams();\n tokenParams.append(\"client_id\", clientId);\n tokenParams.append(\"client_secret\", clientSecret);\n tokenParams.append(\"grant_type\", \"client_credentials\");\n tokenParams.append(\"scope\", \"iris_app_sdk.publish_for_all_accounts iris_app_sdk.approve\");\n const tokenResponse = await fetch(`${settings.authorizationServerBaseUrl}/v1/token`, {\n method: \"POST\",\n body: tokenParams,\n });\n tokenData = (await tokenResponse.json()) as TokenData;\n useAccessToken = true;\n // ask the user to authenticated using a browser\n // and fetch a token using the device code flow\n } else {\n const authorizeParams = new URLSearchParams();\n authorizeParams.append(\"client_id\", settings.clientId);\n authorizeParams.append(\"scope\", \"openid profile fms assume\");\n const authorizeResponse = await fetch(`${settings.authorizationServerBaseUrl}/v1/device/authorize`, {\n method: \"POST\",\n body: authorizeParams,\n });\n const authorizeData = (await authorizeResponse.json()) as AuthorizeData;\n\n if (\"error\" in authorizeData) {\n throw new Error(`Error occurred: ${authorizeData.error} ${authorizeData.error_description}`);\n } else if (!authorizeData.verification_uri_complete) {\n throw new Error(`Missing verification URI: ${JSON.stringify(authorizeData)}`);\n }\n\n console.log(\n `šŸ” Attempting to automatically open the Trackunit authentication page in your default browser...\\n If the browser does not open or you wish to use a different device to authorize this request, open the following URL:\\n\\n ${authorizeData.verification_uri_complete}`\n );\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await ((open as any).default ? (open as any).default : open)(authorizeData.verification_uri_complete);\n } catch (error) {\n // safe to ignore, since we ask the user to open the URL manually above.\n }\n\n console.log(\"\\nā³ Waiting for authentication in the browser...\");\n do {\n await sleep(authorizeData.interval * 1000);\n if (tokenData && \"error\" in tokenData && tokenData.error === \"slow_down\") {\n await sleep(10000);\n }\n const tokenParams = new URLSearchParams();\n tokenParams.append(\"client_id\", settings.clientId);\n tokenParams.append(\"grant_type\", \"urn:ietf:params:oauth:grant-type:device_code\");\n tokenParams.append(\"device_code\", authorizeData.device_code);\n const tokenResponse = await fetch(`${settings.authorizationServerBaseUrl}/v1/token`, {\n method: \"POST\",\n body: tokenParams,\n });\n tokenData = (await tokenResponse.json()) as TokenData;\n } while (\n !(\"id_token\" in tokenData) &&\n !(\"error\" in tokenData && tokenData.error !== \"authorization_pending\" && tokenData.error !== \"slow_down\")\n );\n }\n return { tokenData, useAccessToken };\n}\n\n/**\n *\n */\nfunction getAuthSettings(env: string): AuthSettings {\n switch (env) {\n case \"PROD\":\n return {\n clientId: \"0oamfeklvodROR2ul357\",\n authorizationServerBaseUrl: \"https://trackunit-portal.okta.com/oauth2/aushbxvmpdlWrMnO6357\",\n env,\n };\n case \"STAGE\":\n return {\n clientId: \"0oa1q2vmx21NcFLOs0h8\",\n authorizationServerBaseUrl: \"https://trackunit-portal-stage.okta.com/oauth2/aus1o484n9xEHT7G50h8\",\n env,\n };\n case \"DEV\":\n return {\n clientId: \"0oamebigau4RkaqZ6357\",\n authorizationServerBaseUrl: \"https://trackunit-portal-dev.okta.com/oauth2/aush09l7x4mDGKxLu357\",\n env,\n };\n default:\n throw new Error(`Unknown environment: ${env}`);\n }\n}\n\nfunction sleep(time: number) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n"]}
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/executors/utils/authentication.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport fetch from \"node-fetch\";\nimport * as open from \"open\";\nimport { URLSearchParams } from \"url\";\n\nexport interface AuthSettings {\n env: string;\n publicAuthorizationServerBaseUrl: string;\n internalAuthorizationServerBaseUrl: string;\n clientId: string;\n}\n\ninterface OktaError {\n error: string;\n error_description: string;\n}\n\ninterface AuthorizeDataSuccess {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n expires_in: number;\n interval: number;\n}\n\ntype AuthorizeData = AuthorizeDataSuccess | OktaError;\n\nexport interface TokenDataSuccess {\n token_type: string;\n expires_in: number;\n access_token: string;\n scope: string;\n id_token: string;\n}\n\ntype TokenData = OktaError | TokenDataSuccess;\n\n/**\n * Authenticate and get access token\n *\n * @param {AuthSettings} settings Settings used for authentication\n * @returns {*} {Promise<{ tokenData: TokenData; useAccessToken: boolean }>}\n */\nexport async function getAccessToken(env: string): Promise<{ tokenData: TokenData; useAccessToken: boolean }> {\n const settings = getAuthSettings(env);\n const clientId = process.env[`TU_CLIENT_ID_${settings.env}`];\n const clientSecret = process.env[`TU_CLIENT_SECRET_${settings.env}`];\n let useAccessToken = false;\n let tokenData: TokenData | null = null;\n // use token provided as environment variable if available\n if (process.env.TU_TOKEN) {\n tokenData = {\n token_type: \"Bearer\",\n id_token: process.env.TU_TOKEN,\n access_token: process.env.TU_TOKEN,\n expires_in: 0,\n scope: \"unknown\",\n };\n // use client id and secret provided as environment variables to fetch a token directly\n // This is used for CI/CD pipelines\n } else if (clientId !== undefined) {\n if (clientId === undefined || clientId.trim() === \"\") {\n throw new Error(`Missing environment value: TU_CLIENT_ID_${settings.env}`);\n }\n if (clientSecret === undefined || clientSecret.trim() === \"\") {\n throw new Error(`Missing environment value: TU_CLIENT_SECRET_${settings.env}`);\n }\n\n const tokenParams = new URLSearchParams();\n tokenParams.append(\"client_id\", clientId);\n tokenParams.append(\"client_secret\", clientSecret);\n tokenParams.append(\"grant_type\", \"client_credentials\");\n tokenParams.append(\"scope\", \"iris_app_sdk.publish_for_all_accounts iris_app_sdk.approve\");\n const tokenResponse = await fetch(`${settings.internalAuthorizationServerBaseUrl}/v1/token`, {\n method: \"POST\",\n body: tokenParams,\n });\n tokenData = (await tokenResponse.json()) as TokenData;\n useAccessToken = true;\n // ask the user to authenticated using a browser\n // and fetch a token using the device code flow\n } else {\n const authorizeParams = new URLSearchParams();\n authorizeParams.append(\"client_id\", settings.clientId);\n authorizeParams.append(\"scope\", \"openid profile fms assume\");\n const authorizeResponse = await fetch(`${settings.publicAuthorizationServerBaseUrl}/v1/device/authorize`, {\n method: \"POST\",\n body: authorizeParams,\n });\n const authorizeData = (await authorizeResponse.json()) as AuthorizeData;\n\n if (\"error\" in authorizeData) {\n throw new Error(`Error occurred: ${authorizeData.error} ${authorizeData.error_description}`);\n } else if (!authorizeData.verification_uri_complete) {\n throw new Error(`Missing verification URI: ${JSON.stringify(authorizeData)}`);\n }\n\n console.log(\n `šŸ” Attempting to automatically open the Trackunit authentication page in your default browser...\\n If the browser does not open or you wish to use a different device to authorize this request, open the following URL:\\n\\n ${authorizeData.verification_uri_complete}`\n );\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await ((open as any).default ? (open as any).default : open)(authorizeData.verification_uri_complete);\n } catch (error) {\n // safe to ignore, since we ask the user to open the URL manually above.\n }\n\n console.log(\"\\nā³ Waiting for authentication in the browser...\");\n do {\n await sleep(authorizeData.interval * 1000);\n if (tokenData && \"error\" in tokenData && tokenData.error === \"slow_down\") {\n await sleep(10000);\n }\n const tokenParams = new URLSearchParams();\n tokenParams.append(\"client_id\", settings.clientId);\n tokenParams.append(\"grant_type\", \"urn:ietf:params:oauth:grant-type:device_code\");\n tokenParams.append(\"device_code\", authorizeData.device_code);\n const tokenResponse = await fetch(`${settings.publicAuthorizationServerBaseUrl}/v1/token`, {\n method: \"POST\",\n body: tokenParams,\n });\n tokenData = (await tokenResponse.json()) as TokenData;\n } while (\n !(\"id_token\" in tokenData) &&\n !(\"error\" in tokenData && tokenData.error !== \"authorization_pending\" && tokenData.error !== \"slow_down\")\n );\n }\n return { tokenData, useAccessToken };\n}\n\n/**\n *\n */\nfunction getAuthSettings(env: string): AuthSettings {\n switch (env) {\n case \"PROD\":\n return {\n clientId: \"0oamfeklvodROR2ul357\",\n publicAuthorizationServerBaseUrl: \"https://trackunit-portal.okta.com/oauth2/aus2u3jix1dWU7fwt356\",\n internalAuthorizationServerBaseUrl: \"https://trackunit-portal.okta.com/oauth2/aushbxvmpdlWrMnO6357\",\n env,\n };\n case \"STAGE\":\n return {\n clientId: \"0oa1q2vmx21NcFLOs0h8\",\n publicAuthorizationServerBaseUrl: \"https://trackunit-portal-stage.okta.com/oauth2/aus1owd7wny5YVsU00h8\",\n internalAuthorizationServerBaseUrl: \"https://trackunit-portal-stage.okta.com/oauth2/aus1o484n9xEHT7G50h8\",\n env,\n };\n case \"DEV\":\n return {\n clientId: \"0oamebigau4RkaqZ6357\",\n publicAuthorizationServerBaseUrl: \"https://trackunit-portal-dev.okta.com/oauth2/ausj7eh9zeiFhLk4m357\",\n internalAuthorizationServerBaseUrl: \"https://trackunit-portal-dev.okta.com/oauth2/aush09l7x4mDGKxLu357\",\n env,\n };\n default:\n throw new Error(`Unknown environment: ${env}`);\n }\n}\n\nfunction sleep(time: number) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n"]}