@trackunit/iris-app 0.0.160 → 0.0.161

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,8 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.0.161](https://github.com/Trackunit/manager/compare/iris-app/0.0.160...iris-app/0.0.161) (2023-01-09)
6
+
5
7
  ## [0.0.160](https://github.com/Trackunit/manager/compare/iris-app/0.0.159...iris-app/0.0.160) (2023-01-06)
6
8
 
7
9
  ### Dependency Updates
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app",
3
- "version": "0.0.160",
3
+ "version": "0.0.161",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "main": "src/index.js",
6
6
  "generators": "./generators.json",
@@ -43,28 +43,6 @@ function getSettings() {
43
43
  throw new Error(`Unknown environment: ${env}`);
44
44
  }
45
45
  }
46
- async function doApproveApp(token, manifest, settings) {
47
- if (process.env.TU_APPROVE === "true") {
48
- console.log(`šŸ–‹ļø Approving the app...`);
49
- const approveResult = await (0, node_fetch_1.default)(new url_1.URL(`${manifest.name}@${manifest.version}`, settings.approvalUrl), {
50
- method: "PUT",
51
- headers: {
52
- Authorization: `Bearer ${token}`,
53
- },
54
- });
55
- if (approveResult.ok) {
56
- console.log(`āœ… Approved version ${manifest.version} of ${manifest.name}.`);
57
- return { success: true };
58
- }
59
- else {
60
- console.error("āŒ Unable to approve app package. Got error from Iris App SDK repository.", approveResult.statusText, await approveResult.text());
61
- return { success: false };
62
- }
63
- }
64
- else {
65
- return { success: true };
66
- }
67
- }
68
46
  async function runExecutor(options) {
69
47
  await (0, checkPackageVersion_1.checkPackageVersion)();
70
48
  const settings = getSettings();
@@ -145,67 +123,115 @@ async function runExecutor(options) {
145
123
  console.log("🄳 Successfully authenticated.");
146
124
  const manifest = (await pacote.manifest(options.inputPath));
147
125
  const tarData = await pacote.tarball(options.inputPath);
148
- const npmFetchOptions = {};
149
- npmFetchOptions.registry = settings.repoUrl.toString();
150
- const repoHostAndPort = settings.repoUrl.hostname + (settings.repoUrl.port ? ":" + settings.repoUrl.port : "");
151
- npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}:_authToken`] = useAccessToken
152
- ? tokenData.access_token
153
- : tokenData.id_token;
154
- npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}/repo/:always-auth`] = true;
155
- console.log("🚢 Shipping the app package...");
156
- const publishResult = await libpub.publish(manifest, tarData, npmFetchOptions).catch((err) => {
157
- if (err.code === "EPUBLISHCONFLICT") {
158
- return {
159
- ok: false,
160
- publishConflict: true,
161
- };
162
- }
163
- else {
164
- return {
165
- ok: false,
166
- headers: null,
167
- statusText: `Error`,
168
- text: () => Promise.resolve(`${err.name} ${err.message}`),
169
- };
170
- }
171
- });
172
- const warningsText = publishResult.headers?.get("TU-TILE-WARNINGS");
173
- if (warningsText) {
174
- console.log("āš ļø " + decodeURI(warningsText));
126
+ return await doUploadAppWithRetry(tokenData, useAccessToken, manifest, tarData, settings, 3);
127
+ }
128
+ else if ("error" in tokenData) {
129
+ if (tokenData.error === "expired_token") {
130
+ console.error("āŒ›ļø Authentication attempt expired");
131
+ return { success: false };
175
132
  }
176
- if (publishResult.ok) {
177
- console.log(`šŸš€ Uploaded the app package version ${manifest.version}`);
178
- return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);
133
+ else {
134
+ console.error(`āŒ Error occurred: ${tokenData.error} ${tokenData.error_description}`);
135
+ return { success: false };
179
136
  }
180
- else if ("publishConflict" in publishResult) {
181
- if (process.env.SKIP_EXISTING === "true") {
182
- console.log(`ā© Skipped publishing ${manifest.version} because the version is already published`);
183
- return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);
137
+ }
138
+ else {
139
+ console.error("āŒ Unknown error occurred");
140
+ return { success: false };
141
+ }
142
+ }
143
+ exports.default = runExecutor;
144
+ class NpmConflictError extends Error {
145
+ }
146
+ class NpmGeneralError extends Error {
147
+ }
148
+ async function doUploadAppWithRetry(tokenData, useAccessToken, manifest, tarData, settings, retryCount) {
149
+ try {
150
+ return await doUploadApp(tokenData, useAccessToken, manifest, tarData, settings);
151
+ }
152
+ catch (e) {
153
+ if (e instanceof NpmConflictError) {
154
+ console.error("āŒ Unable to publish app package. Cannot publish over existing version.");
155
+ return { success: false };
156
+ }
157
+ else {
158
+ if (retryCount > 1) {
159
+ console.error("āš ļø Unable to publish app package. Got error from Iris App SDK repository. Retrying publish...", e);
160
+ return await doUploadAppWithRetry(tokenData, useAccessToken, manifest, tarData, settings, retryCount - 1);
184
161
  }
185
162
  else {
186
- console.error("āŒ Unable to publish app package. Cannot publish over existing version.");
163
+ console.error("āŒ Unable to publish app package. Got error from Iris App SDK repository.", e);
187
164
  return { success: false };
188
165
  }
189
166
  }
167
+ }
168
+ }
169
+ async function doUploadApp(tokenData, useAccessToken, manifest, tarData, settings) {
170
+ const npmFetchOptions = {};
171
+ npmFetchOptions.registry = settings.repoUrl.toString();
172
+ const repoHostAndPort = settings.repoUrl.hostname + (settings.repoUrl.port ? ":" + settings.repoUrl.port : "");
173
+ npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}:_authToken`] = useAccessToken
174
+ ? tokenData.access_token
175
+ : tokenData.id_token;
176
+ npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}/repo/:always-auth`] = true;
177
+ console.log("🚢 Shipping the app package...");
178
+ const publishResult = await libpub.publish(manifest, tarData, npmFetchOptions).catch((err) => {
179
+ if (err.code === "EPUBLISHCONFLICT") {
180
+ return {
181
+ ok: false,
182
+ publishConflict: true,
183
+ };
184
+ }
190
185
  else {
191
- console.error("āŒ Unable to publish app package. Got error from Iris App SDK repository.", publishResult.statusText, await publishResult.text());
192
- return { success: false };
186
+ return {
187
+ ok: false,
188
+ headers: null,
189
+ statusText: `Error`,
190
+ text: () => Promise.resolve(`${err.name} ${err.message}`),
191
+ };
193
192
  }
193
+ });
194
+ const warningsText = publishResult.headers?.get("TU-TILE-WARNINGS");
195
+ if (warningsText) {
196
+ console.log("āš ļø " + decodeURI(warningsText));
194
197
  }
195
- else if ("error" in tokenData) {
196
- if (tokenData.error === "expired_token") {
197
- console.error("āŒ›ļø Authentication attempt expired");
198
- return { success: false };
198
+ if (publishResult.ok) {
199
+ console.log(`šŸš€ Uploaded the app package version ${manifest.version}`);
200
+ return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);
201
+ }
202
+ else if ("publishConflict" in publishResult) {
203
+ if (process.env.SKIP_EXISTING === "true") {
204
+ console.log(`ā© Skipped publishing ${manifest.version} because the version is already published`);
205
+ return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);
199
206
  }
200
207
  else {
201
- console.error(`āŒ Error occurred: ${tokenData.error} ${tokenData.error_description}`);
208
+ throw new NpmConflictError();
209
+ }
210
+ }
211
+ else {
212
+ throw new NpmGeneralError(publishResult.statusText + " " + (await publishResult.text()));
213
+ }
214
+ }
215
+ async function doApproveApp(token, manifest, settings) {
216
+ if (process.env.TU_APPROVE === "true") {
217
+ console.log(`šŸ–‹ļø Approving the app...`);
218
+ const approveResult = await (0, node_fetch_1.default)(new url_1.URL(`${manifest.name}@${manifest.version}`, settings.approvalUrl), {
219
+ method: "PUT",
220
+ headers: {
221
+ Authorization: `Bearer ${token}`,
222
+ },
223
+ });
224
+ if (approveResult.ok) {
225
+ console.log(`āœ… Approved version ${manifest.version} of ${manifest.name}.`);
226
+ return { success: true };
227
+ }
228
+ else {
229
+ console.error("āŒ Unable to approve app package. Got error from Iris App SDK repository.", approveResult.statusText, await approveResult.text());
202
230
  return { success: false };
203
231
  }
204
232
  }
205
233
  else {
206
- console.error("āŒ Unknown error occurred");
207
- return { success: false };
234
+ return { success: true };
208
235
  }
209
236
  }
210
- exports.default = runExecutor;
211
237
  //# sourceMappingURL=executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/executors/publish/executor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport * as libpub from \"libnpmpublish\";\nimport fetch from \"node-fetch\";\nimport * as open from \"open\";\nimport * as pacote from \"pacote\";\nimport { URL, URLSearchParams } from \"url\";\nimport { checkPackageVersion } from \"../utils/checkPackageVersion\";\nimport { PublishExecutorSchema } from \"./schema\";\n\ninterface PackageJson {\n name: string;\n version: string;\n scripts?: Record<string, string>;\n type?: \"module\" | \"commonjs\";\n main?: string;\n types?: string;\n module?: string;\n exports?: Record<\n string,\n {\n types?: string;\n require?: string;\n import?: string;\n }\n >;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, 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\ninterface TokenDataSuccess {\n token_type: string;\n expires_in: number;\n access_token: string;\n scope: string;\n id_token: string;\n}\n\ntype TokenData = TokenDataSuccess | OktaError;\n\ntype PublishError = Error & { code?: string };\n\ninterface Settings {\n approvalUrl: URL;\n repoUrl: URL;\n clientId: string;\n authorizationServerBaseUrl: string;\n}\n\nfunction sleep(time: number) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\nfunction getSettings(): Settings {\n const env = process.env.TU_ENV?.toLowerCase() ?? \"dev\";\n let baseUrl: URL;\n switch (env) {\n case \"prod\":\n baseUrl = new URL(process.env.BASE_URL ?? \"https://apps.iris.trackunit.com/\");\n return {\n approvalUrl: new URL(\"approve/\", baseUrl),\n repoUrl: new URL(\"repo/\", baseUrl),\n clientId: \"0oamfeklvodROR2ul357\",\n authorizationServerBaseUrl: \"https://trackunit-portal.okta.com/oauth2/aus2u3jix1dWU7fwt356\",\n };\n case \"stage\":\n baseUrl = new URL(process.env.BASE_URL ?? \"https://apps.stage.iris.trackunit.com/\");\n return {\n approvalUrl: new URL(\"approve/\", baseUrl),\n repoUrl: new URL(\"repo/\", baseUrl),\n clientId: \"0oa1q2vmx21NcFLOs0h8\",\n authorizationServerBaseUrl: \"https://trackunit-portal-stage.okta.com/oauth2/aus1owd7wny5YVsU00h8\",\n };\n case \"dev\":\n baseUrl = new URL(process.env.BASE_URL ?? \"https://apps.dev.iris.trackunit.com/\");\n return {\n approvalUrl: new URL(\"approve/\", baseUrl),\n repoUrl: new URL(\"repo/\", baseUrl),\n clientId: \"0oamebigau4RkaqZ6357\",\n authorizationServerBaseUrl: \"https://trackunit-portal-dev.okta.com/oauth2/ausj7eh9zeiFhLk4m357\",\n };\n default:\n throw new Error(`Unknown environment: ${env}`);\n }\n}\n\nasync function doApproveApp(token: string, manifest: PackageJson, settings: Settings) {\n if (process.env.TU_APPROVE === \"true\") {\n console.log(`šŸ–‹ļø Approving the app...`);\n const approveResult = await fetch(new URL(`${manifest.name}@${manifest.version}`, settings.approvalUrl), {\n method: \"PUT\",\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (approveResult.ok) {\n console.log(`āœ… Approved version ${manifest.version} of ${manifest.name}.`);\n return { success: true };\n } else {\n console.error(\n \"āŒ Unable to approve app package. Got error from Iris App SDK repository.\",\n approveResult.statusText,\n await approveResult.text()\n );\n return { success: false };\n }\n } else {\n return { success: true };\n }\n}\n\nexport default async function runExecutor(options: PublishExecutorSchema) {\n await checkPackageVersion();\n const settings = getSettings();\n\n const env = process.env.TU_ENV?.toUpperCase() ?? \"DEV\";\n const clientId = process.env[`TU_CLIENT_ID_${env}`];\n const clientSecret = process.env[`TU_CLIENT_SECRET_${env}`];\n\n let useAccessToken = false;\n let tokenData: TokenData | null = null;\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 } else if (clientId !== undefined) {\n if (clientId === undefined || clientId.trim() === \"\") {\n console.error(`āŒ Missing environment value: TU_CLIENT_ID_${env}`);\n return { success: false };\n }\n if (clientSecret === undefined || clientSecret.trim() === \"\") {\n console.error(`āŒ Missing environment value: TU_CLIENT_SECRET_${env}`);\n return { success: false };\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 } else {\n const authorizeParams = new URLSearchParams();\n authorizeParams.append(\"client_id\", settings.clientId);\n authorizeParams.append(\"scope\", \"openid profile fms\");\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 console.error(`āŒ Error occurred: ${authorizeData.error} ${authorizeData.error_description}`);\n return { success: false };\n } else if (!authorizeData.verification_uri_complete) {\n console.error(`āŒ Missing verification URI: ${JSON.stringify(authorizeData)}`);\n return { success: false };\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 // 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\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\n if (\"access_token\" in tokenData) {\n console.log(\"🄳 Successfully authenticated.\");\n\n const manifest = (await pacote.manifest(options.inputPath)) as PackageJson;\n const tarData = await pacote.tarball(options.inputPath);\n const npmFetchOptions: { registry?: string } = {};\n npmFetchOptions.registry = settings.repoUrl.toString();\n const repoHostAndPort = settings.repoUrl.hostname + (settings.repoUrl.port ? \":\" + settings.repoUrl.port : \"\");\n npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}:_authToken`] = useAccessToken\n ? tokenData.access_token\n : tokenData.id_token;\n npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}/repo/:always-auth`] = true;\n\n console.log(\"🚢 Shipping the app package...\");\n const publishResult = await libpub.publish(manifest, tarData, npmFetchOptions).catch((err: PublishError) => {\n if (err.code === \"EPUBLISHCONFLICT\") {\n return {\n ok: false,\n publishConflict: true,\n };\n } else {\n return {\n ok: false,\n headers: null,\n statusText: `Error`,\n text: () => Promise.resolve(`${err.name} ${err.message}`),\n };\n }\n });\n\n const warningsText = publishResult.headers?.get(\"TU-TILE-WARNINGS\");\n if (warningsText) {\n console.log(\"āš ļø \" + decodeURI(warningsText));\n }\n\n if (publishResult.ok) {\n console.log(`šŸš€ Uploaded the app package version ${manifest.version}`);\n\n return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);\n } else if (\"publishConflict\" in publishResult) {\n if (process.env.SKIP_EXISTING === \"true\") {\n console.log(`ā© Skipped publishing ${manifest.version} because the version is already published`);\n return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);\n } else {\n console.error(\"āŒ Unable to publish app package. Cannot publish over existing version.\");\n return { success: false };\n }\n } else {\n console.error(\n \"āŒ Unable to publish app package. Got error from Iris App SDK repository.\",\n publishResult.statusText,\n await publishResult.text()\n );\n return { success: false };\n }\n } else if (\"error\" in tokenData) {\n if (tokenData.error === \"expired_token\") {\n console.error(\"āŒ›ļø Authentication attempt expired\");\n return { success: false };\n } else {\n console.error(`āŒ Error occurred: ${tokenData.error} ${tokenData.error_description}`);\n return { success: false };\n }\n } else {\n console.error(\"āŒ Unknown error occurred\");\n return { success: false };\n }\n}\n"]}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/executors/publish/executor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport * as libpub from \"libnpmpublish\";\nimport fetch from \"node-fetch\";\nimport * as open from \"open\";\nimport * as pacote from \"pacote\";\nimport { URL, URLSearchParams } from \"url\";\nimport { checkPackageVersion } from \"../utils/checkPackageVersion\";\nimport { PublishExecutorSchema } from \"./schema\";\n\ninterface PackageJson {\n name: string;\n version: string;\n scripts?: Record<string, string>;\n type?: \"module\" | \"commonjs\";\n main?: string;\n types?: string;\n module?: string;\n exports?: Record<\n string,\n {\n types?: string;\n require?: string;\n import?: string;\n }\n >;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, 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\ninterface TokenDataSuccess {\n token_type: string;\n expires_in: number;\n access_token: string;\n scope: string;\n id_token: string;\n}\n\ntype TokenData = TokenDataSuccess | OktaError;\n\ntype PublishError = Error & { code?: string };\n\ninterface Settings {\n approvalUrl: URL;\n repoUrl: URL;\n clientId: string;\n authorizationServerBaseUrl: string;\n}\n\nfunction sleep(time: number) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\nfunction getSettings(): Settings {\n const env = process.env.TU_ENV?.toLowerCase() ?? \"dev\";\n let baseUrl: URL;\n switch (env) {\n case \"prod\":\n baseUrl = new URL(process.env.BASE_URL ?? \"https://apps.iris.trackunit.com/\");\n return {\n approvalUrl: new URL(\"approve/\", baseUrl),\n repoUrl: new URL(\"repo/\", baseUrl),\n clientId: \"0oamfeklvodROR2ul357\",\n authorizationServerBaseUrl: \"https://trackunit-portal.okta.com/oauth2/aus2u3jix1dWU7fwt356\",\n };\n case \"stage\":\n baseUrl = new URL(process.env.BASE_URL ?? \"https://apps.stage.iris.trackunit.com/\");\n return {\n approvalUrl: new URL(\"approve/\", baseUrl),\n repoUrl: new URL(\"repo/\", baseUrl),\n clientId: \"0oa1q2vmx21NcFLOs0h8\",\n authorizationServerBaseUrl: \"https://trackunit-portal-stage.okta.com/oauth2/aus1owd7wny5YVsU00h8\",\n };\n case \"dev\":\n baseUrl = new URL(process.env.BASE_URL ?? \"https://apps.dev.iris.trackunit.com/\");\n return {\n approvalUrl: new URL(\"approve/\", baseUrl),\n repoUrl: new URL(\"repo/\", baseUrl),\n clientId: \"0oamebigau4RkaqZ6357\",\n authorizationServerBaseUrl: \"https://trackunit-portal-dev.okta.com/oauth2/ausj7eh9zeiFhLk4m357\",\n };\n default:\n throw new Error(`Unknown environment: ${env}`);\n }\n}\n\nexport default async function runExecutor(options: PublishExecutorSchema) {\n await checkPackageVersion();\n const settings = getSettings();\n\n const env = process.env.TU_ENV?.toUpperCase() ?? \"DEV\";\n const clientId = process.env[`TU_CLIENT_ID_${env}`];\n const clientSecret = process.env[`TU_CLIENT_SECRET_${env}`];\n\n let useAccessToken = false;\n let tokenData: TokenData | null = null;\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 } else if (clientId !== undefined) {\n if (clientId === undefined || clientId.trim() === \"\") {\n console.error(`āŒ Missing environment value: TU_CLIENT_ID_${env}`);\n return { success: false };\n }\n if (clientSecret === undefined || clientSecret.trim() === \"\") {\n console.error(`āŒ Missing environment value: TU_CLIENT_SECRET_${env}`);\n return { success: false };\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 } else {\n const authorizeParams = new URLSearchParams();\n authorizeParams.append(\"client_id\", settings.clientId);\n authorizeParams.append(\"scope\", \"openid profile fms\");\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 console.error(`āŒ Error occurred: ${authorizeData.error} ${authorizeData.error_description}`);\n return { success: false };\n } else if (!authorizeData.verification_uri_complete) {\n console.error(`āŒ Missing verification URI: ${JSON.stringify(authorizeData)}`);\n return { success: false };\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 // 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\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\n if (\"access_token\" in tokenData) {\n console.log(\"🄳 Successfully authenticated.\");\n\n const manifest = (await pacote.manifest(options.inputPath)) as PackageJson;\n const tarData = await pacote.tarball(options.inputPath);\n\n return await doUploadAppWithRetry(tokenData, useAccessToken, manifest, tarData, settings, 3);\n } else if (\"error\" in tokenData) {\n if (tokenData.error === \"expired_token\") {\n console.error(\"āŒ›ļø Authentication attempt expired\");\n return { success: false };\n } else {\n console.error(`āŒ Error occurred: ${tokenData.error} ${tokenData.error_description}`);\n return { success: false };\n }\n } else {\n console.error(\"āŒ Unknown error occurred\");\n return { success: false };\n }\n}\n\nclass NpmConflictError extends Error {}\n\nclass NpmGeneralError extends Error {}\n\nasync function doUploadAppWithRetry(\n tokenData: TokenDataSuccess,\n useAccessToken: boolean,\n manifest: PackageJson,\n tarData: Buffer & pacote.FetchResult,\n settings: Settings,\n retryCount: number\n): Promise<{ success: boolean }> {\n try {\n return await doUploadApp(tokenData, useAccessToken, manifest, tarData, settings);\n } catch (e) {\n if (e instanceof NpmConflictError) {\n console.error(\"āŒ Unable to publish app package. Cannot publish over existing version.\");\n return { success: false };\n } else {\n if (retryCount > 1) {\n console.error(\n \"āš ļø Unable to publish app package. Got error from Iris App SDK repository. Retrying publish...\",\n e\n );\n return await doUploadAppWithRetry(tokenData, useAccessToken, manifest, tarData, settings, retryCount - 1);\n } else {\n console.error(\"āŒ Unable to publish app package. Got error from Iris App SDK repository.\", e);\n return { success: false };\n }\n }\n }\n}\n\nasync function doUploadApp(\n tokenData: TokenDataSuccess,\n useAccessToken: boolean,\n manifest: PackageJson,\n tarData: Buffer & pacote.FetchResult,\n settings: Settings\n): Promise<{ success: boolean }> {\n const npmFetchOptions: { registry?: string } = {};\n npmFetchOptions.registry = settings.repoUrl.toString();\n const repoHostAndPort = settings.repoUrl.hostname + (settings.repoUrl.port ? \":\" + settings.repoUrl.port : \"\");\n npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}:_authToken`] = useAccessToken\n ? tokenData.access_token\n : tokenData.id_token;\n npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}/repo/:always-auth`] = true;\n\n console.log(\"🚢 Shipping the app package...\");\n const publishResult = await libpub.publish(manifest, tarData, npmFetchOptions).catch((err: PublishError) => {\n if (err.code === \"EPUBLISHCONFLICT\") {\n return {\n ok: false,\n publishConflict: true,\n };\n } else {\n return {\n ok: false,\n headers: null,\n statusText: `Error`,\n text: () => Promise.resolve(`${err.name} ${err.message}`),\n };\n }\n });\n\n const warningsText = publishResult.headers?.get(\"TU-TILE-WARNINGS\");\n if (warningsText) {\n console.log(\"āš ļø \" + decodeURI(warningsText));\n }\n\n if (publishResult.ok) {\n console.log(`šŸš€ Uploaded the app package version ${manifest.version}`);\n\n return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);\n } else if (\"publishConflict\" in publishResult) {\n if (process.env.SKIP_EXISTING === \"true\") {\n console.log(`ā© Skipped publishing ${manifest.version} because the version is already published`);\n return await doApproveApp(useAccessToken ? tokenData.access_token : tokenData.id_token, manifest, settings);\n } else {\n throw new NpmConflictError();\n }\n } else {\n throw new NpmGeneralError(publishResult.statusText + \" \" + (await publishResult.text()));\n }\n}\n\nasync function doApproveApp(token: string, manifest: PackageJson, settings: Settings) {\n if (process.env.TU_APPROVE === \"true\") {\n console.log(`šŸ–‹ļø Approving the app...`);\n const approveResult = await fetch(new URL(`${manifest.name}@${manifest.version}`, settings.approvalUrl), {\n method: \"PUT\",\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (approveResult.ok) {\n console.log(`āœ… Approved version ${manifest.version} of ${manifest.name}.`);\n return { success: true };\n } else {\n console.error(\n \"āŒ Unable to approve app package. Got error from Iris App SDK repository.\",\n approveResult.statusText,\n await approveResult.text()\n );\n return { success: false };\n }\n } else {\n return { success: true };\n }\n}\n"]}