@trackunit/iris-app 0.0.119 → 0.0.121
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,10 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
### [0.0.121](https://github.com/Trackunit/manager/compare/iris-app/0.0.120...iris-app/0.0.121) (2022-10-20)
|
|
6
|
+
|
|
7
|
+
### [0.0.120](https://github.com/Trackunit/manager/compare/iris-app/0.0.119...iris-app/0.0.120) (2022-10-17)
|
|
8
|
+
|
|
5
9
|
### [0.0.119](https://github.com/Trackunit/manager/compare/iris-app/0.0.118...iris-app/0.0.119) (2022-10-13)
|
|
6
10
|
|
|
7
11
|
### Dependency Updates
|
package/package.json
CHANGED
|
@@ -11,22 +11,25 @@ function sleep(time) {
|
|
|
11
11
|
return new Promise(resolve => setTimeout(resolve, time));
|
|
12
12
|
}
|
|
13
13
|
function getSettings() {
|
|
14
|
-
const env = process.env.TU_ENV ?? "dev";
|
|
14
|
+
const env = process.env.TU_ENV?.toLowerCase() ?? "dev";
|
|
15
15
|
switch (env) {
|
|
16
16
|
case "prod":
|
|
17
17
|
return {
|
|
18
18
|
repoUrl: new url_1.URL(process.env.REPO_URL ?? "https://apps.iris.trackunit.com/repo/"),
|
|
19
|
-
|
|
19
|
+
clientId: "0oamfeklvodROR2ul357",
|
|
20
|
+
authorizationServerBaseUrl: "https://trackunit-portal.okta.com/oauth2/aus2u3jix1dWU7fwt356",
|
|
20
21
|
};
|
|
21
22
|
case "stage":
|
|
22
23
|
return {
|
|
23
24
|
repoUrl: new url_1.URL(process.env.REPO_URL ?? "https://apps.stage.iris.trackunit.com/repo/"),
|
|
24
|
-
|
|
25
|
+
clientId: "0oa1q2vmx21NcFLOs0h8",
|
|
26
|
+
authorizationServerBaseUrl: "https://trackunit-portal-stage.okta.com/oauth2/aus1owd7wny5YVsU00h8",
|
|
25
27
|
};
|
|
26
28
|
case "dev":
|
|
27
29
|
return {
|
|
28
30
|
repoUrl: new url_1.URL(process.env.REPO_URL ?? "https://apps.dev.iris.trackunit.com/repo/"),
|
|
29
|
-
|
|
31
|
+
clientId: "0oamebigau4RkaqZ6357",
|
|
32
|
+
authorizationServerBaseUrl: "https://trackunit-portal-dev.okta.com/oauth2/ausj7eh9zeiFhLk4m357",
|
|
30
33
|
};
|
|
31
34
|
default:
|
|
32
35
|
throw new Error(`Unknown environment: ${env}`);
|
|
@@ -34,6 +37,10 @@ function getSettings() {
|
|
|
34
37
|
}
|
|
35
38
|
async function runExecutor(options) {
|
|
36
39
|
const settings = getSettings();
|
|
40
|
+
const env = process.env.TU_ENV?.toUpperCase() ?? "DEV";
|
|
41
|
+
const clientId = process.env[`TU_CLIENT_ID_${env}`];
|
|
42
|
+
const clientSecret = process.env[`TU_CLIENT_SECRET_${env}`];
|
|
43
|
+
let useAccessToken = false;
|
|
37
44
|
let tokenData = null;
|
|
38
45
|
if (process.env.TU_TOKEN) {
|
|
39
46
|
tokenData = {
|
|
@@ -44,15 +51,44 @@ async function runExecutor(options) {
|
|
|
44
51
|
scope: "unknown",
|
|
45
52
|
};
|
|
46
53
|
}
|
|
54
|
+
else if (clientId !== undefined) {
|
|
55
|
+
if (clientId === undefined || clientId.trim() === "") {
|
|
56
|
+
console.error(`❌ Missing environment value: TU_CLIENT_ID_${env}`);
|
|
57
|
+
return { success: false };
|
|
58
|
+
}
|
|
59
|
+
if (clientSecret === undefined || clientSecret.trim() === "") {
|
|
60
|
+
console.error(`❌ Missing environment value: TU_CLIENT_SECRET_${env}`);
|
|
61
|
+
return { success: false };
|
|
62
|
+
}
|
|
63
|
+
const tokenParams = new url_1.URLSearchParams();
|
|
64
|
+
tokenParams.append("client_id", clientId);
|
|
65
|
+
tokenParams.append("client_secret", clientSecret);
|
|
66
|
+
tokenParams.append("grant_type", "client_credentials");
|
|
67
|
+
tokenParams.append("scope", "iris_app_sdk.publish");
|
|
68
|
+
const tokenResponse = await (0, node_fetch_1.default)(`${settings.authorizationServerBaseUrl}/v1/token`, {
|
|
69
|
+
method: "POST",
|
|
70
|
+
body: tokenParams,
|
|
71
|
+
});
|
|
72
|
+
tokenData = (await tokenResponse.json());
|
|
73
|
+
useAccessToken = true;
|
|
74
|
+
}
|
|
47
75
|
else {
|
|
48
76
|
const authorizeParams = new url_1.URLSearchParams();
|
|
49
|
-
authorizeParams.append("client_id",
|
|
50
|
-
authorizeParams.append("scope", "openid profile fms");
|
|
51
|
-
const authorizeResponse = await (0, node_fetch_1.default)(
|
|
77
|
+
authorizeParams.append("client_id", settings.clientId);
|
|
78
|
+
authorizeParams.append("scope", "openid profile fms iris_app_sdk.publish");
|
|
79
|
+
const authorizeResponse = await (0, node_fetch_1.default)(`${settings.authorizationServerBaseUrl}/v1/device/authorize`, {
|
|
52
80
|
method: "POST",
|
|
53
81
|
body: authorizeParams,
|
|
54
82
|
});
|
|
55
83
|
const authorizeData = (await authorizeResponse.json());
|
|
84
|
+
if ("error" in authorizeData) {
|
|
85
|
+
console.error(`❌ Error occurred: ${authorizeData.error} ${authorizeData.error_description}`);
|
|
86
|
+
return { success: false };
|
|
87
|
+
}
|
|
88
|
+
else if (!authorizeData.verification_uri_complete) {
|
|
89
|
+
console.error(`❌ Missing verification URI: ${JSON.stringify(authorizeData)}`);
|
|
90
|
+
return { success: false };
|
|
91
|
+
}
|
|
56
92
|
console.log(`🔐 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}`);
|
|
57
93
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
94
|
await (open.default ? open.default : open)(authorizeData.verification_uri_complete);
|
|
@@ -63,10 +99,10 @@ async function runExecutor(options) {
|
|
|
63
99
|
await sleep(10000);
|
|
64
100
|
}
|
|
65
101
|
const tokenParams = new url_1.URLSearchParams();
|
|
66
|
-
tokenParams.append("client_id",
|
|
102
|
+
tokenParams.append("client_id", settings.clientId);
|
|
67
103
|
tokenParams.append("grant_type", "urn:ietf:params:oauth:grant-type:device_code");
|
|
68
104
|
tokenParams.append("device_code", authorizeData.device_code);
|
|
69
|
-
const tokenResponse = await (0, node_fetch_1.default)(
|
|
105
|
+
const tokenResponse = await (0, node_fetch_1.default)(`${settings.authorizationServerBaseUrl}/v1/token`, {
|
|
70
106
|
method: "POST",
|
|
71
107
|
body: tokenParams,
|
|
72
108
|
});
|
|
@@ -74,32 +110,52 @@ async function runExecutor(options) {
|
|
|
74
110
|
} while (!("id_token" in tokenData) &&
|
|
75
111
|
!("error" in tokenData && tokenData.error !== "authorization_pending" && tokenData.error !== "slow_down"));
|
|
76
112
|
}
|
|
77
|
-
if ("
|
|
113
|
+
if ("access_token" in tokenData) {
|
|
78
114
|
console.log("🥳 Successfully authenticated.");
|
|
79
115
|
const manifest = (await pacote.manifest(options.inputPath));
|
|
80
116
|
const tarData = await pacote.tarball(options.inputPath);
|
|
81
117
|
const npmFetchOptions = {};
|
|
82
118
|
npmFetchOptions.registry = settings.repoUrl.toString();
|
|
83
119
|
const repoHostAndPort = settings.repoUrl.hostname + (settings.repoUrl.port ? ":" + settings.repoUrl.port : "");
|
|
84
|
-
npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}:_authToken`] =
|
|
120
|
+
npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}:_authToken`] = useAccessToken
|
|
121
|
+
? tokenData.access_token
|
|
122
|
+
: tokenData.id_token;
|
|
85
123
|
npmFetchOptions[`//${repoHostAndPort}${settings.repoUrl.pathname}/repo/:always-auth`] = true;
|
|
86
124
|
console.log("🚢 Shipping the app package...");
|
|
87
125
|
const publishResult = await libpub.publish(manifest, tarData, npmFetchOptions).catch((err) => {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
126
|
+
if (err.code === "EPUBLISHCONFLICT") {
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
publishConflict: true,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
return {
|
|
134
|
+
ok: false,
|
|
135
|
+
headers: null,
|
|
136
|
+
statusText: `Error`,
|
|
137
|
+
text: () => Promise.resolve(`${err.name} ${err.message}`),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
94
140
|
});
|
|
95
141
|
const warningsText = publishResult.headers?.get("TU-TILE-WARNINGS");
|
|
96
142
|
if (warningsText) {
|
|
97
143
|
console.log("⚠️ " + decodeURI(warningsText));
|
|
98
144
|
}
|
|
99
145
|
if (publishResult.ok) {
|
|
100
|
-
console.log(
|
|
146
|
+
console.log(`🚀 Uploaded the app package version ${manifest.version}`);
|
|
101
147
|
return { success: true };
|
|
102
148
|
}
|
|
149
|
+
else if ("publishConflict" in publishResult) {
|
|
150
|
+
if (process.env.SKIP_EXISTING === "true") {
|
|
151
|
+
console.log(`⏩ Skipped publishing ${manifest.version} because the version is already published`);
|
|
152
|
+
return { success: true };
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.error("❌ Unable to publish app package. Cannot publish over existing version.");
|
|
156
|
+
return { success: false };
|
|
157
|
+
}
|
|
158
|
+
}
|
|
103
159
|
else {
|
|
104
160
|
console.error("❌ Unable to publish app package. Got error from Iris App SDK repository.", publishResult.statusText, await publishResult.text());
|
|
105
161
|
return { success: false };
|
|
@@ -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 { 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 AuthorizeData {\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\ninterface TokenDataSuccess {\n token_type: string;\n expires_in: number;\n access_token: string;\n scope: string;\n id_token: string;\n}\n\ninterface TokenDataError {\n error: string;\n error_description: string;\n}\n\ntype TokenData = TokenDataSuccess | TokenDataError;\n\nfunction sleep(time: number) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\nfunction getSettings() {\n const env = process.env.TU_ENV ?? \"dev\";\n switch (env) {\n case \"prod\":\n return {\n repoUrl: new URL(process.env.REPO_URL ?? \"https://apps.iris.trackunit.com/repo/\"),\n authorizationServerId: \"aus2u3jix1dWU7fwt356\",\n };\n case \"stage\":\n return {\n repoUrl: new URL(process.env.REPO_URL ?? \"https://apps.stage.iris.trackunit.com/repo/\"),\n authorizationServerId: \"aus2u2bi02B7IYj00356\",\n };\n case \"dev\":\n return {\n repoUrl: new URL(process.env.REPO_URL ?? \"https://apps.dev.iris.trackunit.com/repo/\"),\n authorizationServerId: \"aus2u1ctyrhWjlJXa356\",\n };\n default:\n throw new Error(`Unknown environment: ${env}`);\n }\n}\n\nexport default async function runExecutor(options: PublishExecutorSchema) {\n const settings = getSettings();\n\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 {\n const authorizeParams = new URLSearchParams();\n authorizeParams.append(\"client_id\", \"0oaf1n9wi9XKRBGTf357\");\n authorizeParams.append(\"scope\", \"openid profile fms\");\n const authorizeResponse = await fetch(\n `https://trackunit-portal.okta.com/oauth2/${settings.authorizationServerId}/v1/device/authorize`,\n {\n method: \"POST\",\n body: authorizeParams,\n }\n );\n const authorizeData = (await authorizeResponse.json()) as AuthorizeData;\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\", \"0oaf1n9wi9XKRBGTf357\");\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(\n `https://trackunit-portal.okta.com/oauth2/${settings.authorizationServerId}/v1/token`,\n {\n method: \"POST\",\n body: tokenParams,\n }\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 (\"id_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`] = 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: Error) => {\n return {\n ok: false,\n headers: null,\n statusText: `Error`,\n text: () => Promise.resolve(`${err.name} ${err.message}`),\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\");\n return { success: true };\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 { 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\nfunction sleep(time: number) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\nfunction getSettings() {\n const env = process.env.TU_ENV?.toLowerCase() ?? \"dev\";\n switch (env) {\n case \"prod\":\n return {\n repoUrl: new URL(process.env.REPO_URL ?? \"https://apps.iris.trackunit.com/repo/\"),\n clientId: \"0oamfeklvodROR2ul357\",\n authorizationServerBaseUrl: \"https://trackunit-portal.okta.com/oauth2/aus2u3jix1dWU7fwt356\",\n };\n case \"stage\":\n return {\n repoUrl: new URL(process.env.REPO_URL ?? \"https://apps.stage.iris.trackunit.com/repo/\"),\n clientId: \"0oa1q2vmx21NcFLOs0h8\",\n authorizationServerBaseUrl: \"https://trackunit-portal-stage.okta.com/oauth2/aus1owd7wny5YVsU00h8\",\n };\n case \"dev\":\n return {\n repoUrl: new URL(process.env.REPO_URL ?? \"https://apps.dev.iris.trackunit.com/repo/\"),\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 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\");\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 iris_app_sdk.publish\");\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 return { success: true };\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 { success: true };\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"]}
|