@sonisoft/now-sdk-ext-cli 1.1.0-alpha.3 → 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1825 -34
- package/dist/commands/app/index.d.ts +4 -1
- package/dist/commands/app/index.d.ts.map +1 -1
- package/dist/commands/app/index.js +25 -4
- package/dist/commands/app/index.js.map +1 -1
- package/dist/commands/app/install.d.ts +4 -1
- package/dist/commands/app/install.d.ts.map +1 -1
- package/dist/commands/app/install.js +40 -6
- package/dist/commands/app/install.js.map +1 -1
- package/dist/commands/app/repo-install.d.ts +19 -0
- package/dist/commands/app/repo-install.d.ts.map +1 -0
- package/dist/commands/app/repo-install.js +173 -0
- package/dist/commands/app/repo-install.js.map +1 -0
- package/dist/commands/app/repo-list.d.ts +17 -0
- package/dist/commands/app/repo-list.d.ts.map +1 -0
- package/dist/commands/app/repo-list.js +152 -0
- package/dist/commands/app/repo-list.js.map +1 -0
- package/dist/commands/app/uninstall.d.ts +16 -0
- package/dist/commands/app/uninstall.d.ts.map +1 -0
- package/dist/commands/app/uninstall.js +70 -0
- package/dist/commands/app/uninstall.js.map +1 -0
- package/dist/commands/atf/index.d.ts +71 -0
- package/dist/commands/atf/index.d.ts.map +1 -0
- package/dist/commands/atf/index.js +256 -0
- package/dist/commands/atf/index.js.map +1 -0
- package/dist/commands/exec/index.d.ts +17 -3
- package/dist/commands/exec/index.d.ts.map +1 -1
- package/dist/commands/exec/index.js +286 -26
- package/dist/commands/exec/index.js.map +1 -1
- package/dist/commands/log/index.d.ts +46 -0
- package/dist/commands/log/index.d.ts.map +1 -0
- package/dist/commands/log/index.js +418 -0
- package/dist/commands/log/index.js.map +1 -0
- package/dist/common/authenticated-command.js +2 -2
- package/dist/common/authenticated-command.js.map +1 -1
- package/dist/common/scope-autocomplete.d.ts +20 -0
- package/dist/common/scope-autocomplete.d.ts.map +1 -0
- package/dist/common/scope-autocomplete.js +94 -0
- package/dist/common/scope-autocomplete.js.map +1 -0
- package/oclif.manifest.json +691 -12
- package/package.json +31 -12
|
@@ -2,7 +2,10 @@ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
|
2
2
|
export declare class App extends AuthenticatedCommand<typeof App> {
|
|
3
3
|
static args: {};
|
|
4
4
|
static description: string;
|
|
5
|
-
static examples:
|
|
5
|
+
static examples: {
|
|
6
|
+
description: string;
|
|
7
|
+
command: string;
|
|
8
|
+
}[];
|
|
6
9
|
static flags: {
|
|
7
10
|
uninstall: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
11
|
applicationId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,GAAI,SAAQ,oBAAoB,CAAC,OAAO,GAAG,CAAC;IAEvD,MAAM,CAAC,IAAI,KACV;IAED,MAAM,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,GAAI,SAAQ,oBAAoB,CAAC,OAAO,GAAG,CAAC;IAEvD,MAAM,CAAC,IAAI,KACV;IAED,MAAM,CAAC,WAAW,SAYqC;IAEvD,MAAM,CAAC,QAAQ;;;QAad;IAED,MAAM,CAAC,KAAK;;;;MAMX;IAED,OAAO,CAAC,OAAO,CAAmC;IAE5C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
|
|
@@ -6,11 +6,32 @@ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
|
6
6
|
import { isNilOrEmpty } from '../../common/utils.js';
|
|
7
7
|
export class App extends AuthenticatedCommand {
|
|
8
8
|
static args = {};
|
|
9
|
-
static description = ''
|
|
9
|
+
static description = 'Manage ServiceNow applications: uninstall applications from your instance.\n\n' +
|
|
10
|
+
'This command provides programmatic control over ServiceNow applications, allowing you to uninstall ' +
|
|
11
|
+
'applications remotely. This is useful for automated environment cleanup, testing workflows, and ' +
|
|
12
|
+
'application lifecycle management.\n\n' +
|
|
13
|
+
'Features:\n' +
|
|
14
|
+
' • Uninstall applications by sys_id and scope\n' +
|
|
15
|
+
' • Automated application removal in CI/CD pipelines\n' +
|
|
16
|
+
' • Proper cleanup and rollback handling\n' +
|
|
17
|
+
' • Detailed logging and error reporting\n\n' +
|
|
18
|
+
'Requirements:\n' +
|
|
19
|
+
' • User must have admin role\n' +
|
|
20
|
+
' • Application must be in a removable state\n' +
|
|
21
|
+
' • Both application sys_id and scope are required';
|
|
10
22
|
static examples = [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
{
|
|
24
|
+
description: 'Uninstall an application by sys_id and scope',
|
|
25
|
+
command: '<%= config.bin %> <%= command.id %> --uninstall --applicationId a1b2c3d4e5f6 --scope x_my_custom_app --auth dev-instance',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
description: 'Uninstall with enhanced debug logging',
|
|
29
|
+
command: '<%= config.bin %> <%= command.id %> -u -i a1b2c3d4e5f6 -s x_my_custom_app --auth dev-instance --log-level debug',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
description: 'Uninstall using short flags',
|
|
33
|
+
command: '<%= config.bin %> <%= command.id %> -u -i a1b2c3d4e5f6 -s x_my_custom_app -a dev-instance',
|
|
34
|
+
},
|
|
14
35
|
];
|
|
15
36
|
static flags = {
|
|
16
37
|
// from: Flags.string({char: 'f', description: 'Who is saying hello', required: true}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,+CAA+C;AAC/C,OAAO,EAAgB,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAG,WAAW,EAAiD,MAAM,EAAE,aAAa,EAAuB,MAAM,4BAA4B,CAAC;AAIrJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,OAAO,GAAI,SAAQ,oBAAgC;IAEvD,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IAED,MAAM,CAAC,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,10 @@ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
|
2
2
|
export declare class Install extends AuthenticatedCommand<typeof Install> {
|
|
3
3
|
static args: {};
|
|
4
4
|
static description: string;
|
|
5
|
-
static examples:
|
|
5
|
+
static examples: {
|
|
6
|
+
command: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}[];
|
|
6
9
|
static flags: {
|
|
7
10
|
batch: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
11
|
definitionPath: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,qBAAa,OAAQ,SAAQ,oBAAoB,CAAC,OAAO,OAAO,CAAC;IAE/D,MAAM,CAAC,IAAI,KACV;IAED,MAAM,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,qBAAa,OAAQ,SAAQ,oBAAoB,CAAC,OAAO,OAAO,CAAC;IAE/D,MAAM,CAAC,IAAI,KACV;IAED,MAAM,CAAC,WAAW,SAiB2B;IAE7C,MAAM,CAAC,QAAQ;;;QAad;IAED,MAAM,CAAC,KAAK;;;MAWX;IAED,OAAO,CAAC,OAAO,CAA0C;IAEnD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B3B"}
|
|
@@ -5,15 +5,49 @@ import path from 'node:path';
|
|
|
5
5
|
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
6
6
|
export class Install extends AuthenticatedCommand {
|
|
7
7
|
static args = {};
|
|
8
|
-
static description = 'Install or
|
|
8
|
+
static description = 'Install or upgrade multiple ServiceNow applications from a batch definition file.\n\n' +
|
|
9
|
+
'This command enables automated installation and upgrade of multiple applications using a JSON definition file. ' +
|
|
10
|
+
'Perfect for setting up new environments, deploying application bundles, or managing application dependencies. ' +
|
|
11
|
+
'The batch file can specify multiple applications with their versions, scopes, and installation options.\n\n' +
|
|
12
|
+
'Features:\n' +
|
|
13
|
+
' • Install multiple applications in a single operation\n' +
|
|
14
|
+
' • Upgrade existing applications to new versions\n' +
|
|
15
|
+
' • Control demo data loading per application\n' +
|
|
16
|
+
' • Detailed installation progress and results\n' +
|
|
17
|
+
' • Automatic dependency resolution\n' +
|
|
18
|
+
' • Rollback support on failures\n\n' +
|
|
19
|
+
'Batch Definition Format:\n' +
|
|
20
|
+
' The JSON file should contain an "applications" array with objects defining:\n' +
|
|
21
|
+
' • name: Application name\n' +
|
|
22
|
+
' • scope: Application scope (e.g., x_my_app)\n' +
|
|
23
|
+
' • version: Target version number\n' +
|
|
24
|
+
' • load_demo_data: Whether to load demo data (optional)\n' +
|
|
25
|
+
' • notes: Installation notes (optional)';
|
|
9
26
|
static examples = [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
27
|
+
{
|
|
28
|
+
command: '<%= config.bin %> <%= command.id %> --batch --definitionPath ./apps-to-install.json --auth dev-instance',
|
|
29
|
+
description: 'Install applications from a batch definition file',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
command: '<%= config.bin %> <%= command.id %> -b -d ./batch-apps.json -a dev-instance',
|
|
33
|
+
description: 'Install with short flags',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
command: '<%= config.bin %> <%= command.id %> -b -d ./apps.json -a dev-instance --log-level debug',
|
|
37
|
+
description: 'Install with debug logging to troubleshoot issues',
|
|
38
|
+
},
|
|
13
39
|
];
|
|
14
40
|
static flags = {
|
|
15
|
-
batch: Flags.boolean({
|
|
16
|
-
|
|
41
|
+
batch: Flags.boolean({
|
|
42
|
+
char: 'b',
|
|
43
|
+
description: 'Enable batch installation mode from definition file',
|
|
44
|
+
required: false
|
|
45
|
+
}),
|
|
46
|
+
definitionPath: Flags.string({
|
|
47
|
+
char: 'd',
|
|
48
|
+
description: 'Path to JSON batch definition file containing applications to install',
|
|
49
|
+
required: false
|
|
50
|
+
}),
|
|
17
51
|
};
|
|
18
52
|
_logger = new Logger("AppInstallCommand");
|
|
19
53
|
async run() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,EAAgB,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAgB,kBAAkB,EAA6B,MAAM,EAAE,aAAa,EAAuB,MAAM,4BAA4B,CAAC;AAErJ,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,MAAM,OAAO,OAAQ,SAAQ,oBAAoC;IAE/D,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IAED,MAAM,CAAC,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,EAAgB,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAgB,kBAAkB,EAA6B,MAAM,EAAE,aAAa,EAAuB,MAAM,4BAA4B,CAAC;AAErJ,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,MAAM,OAAO,OAAQ,SAAQ,oBAAoC;IAE/D,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IAED,MAAM,CAAC,WAAW,GAAG,uFAAuF;QAC1G,iHAAiH;QACjH,gHAAgH;QAChH,6GAA6G;QAC7G,aAAa;QACb,2DAA2D;QAC3D,qDAAqD;QACrD,iDAAiD;QACjD,kDAAkD;QAClD,uCAAuC;QACvC,sCAAsC;QACtC,4BAA4B;QAC5B,iFAAiF;QACjF,8BAA8B;QAC9B,iDAAiD;QACjD,sCAAsC;QACtC,4DAA4D;QAC5D,0CAA0C,CAAC;IAE7C,MAAM,CAAC,QAAQ,GAAG;QAChB;YACE,OAAO,EAAE,yGAAyG;YAClH,WAAW,EAAE,mDAAmD;SACjE;QACD;YACE,OAAO,EAAE,6EAA6E;YACtF,WAAW,EAAE,0BAA0B;SACxC;QACD;YACE,OAAO,EAAE,yFAAyF;YAClG,WAAW,EAAE,mDAAmD;SACjE;KACF,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC;YAC3B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,uEAAuE;YACpF,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAEO,OAAO,GAAU,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEzD,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE1C,IAAG,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,EAAC,CAAC;YAClG,IAAG,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAE3B,IAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,EAAC,CAAC;oBACpD,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;oBACrE,OAAO;gBACT,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAwB,CAAC,CAAC,CAAC;gBAC3F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE9B,CAAC;YAAA,OAAM,KAAK,EAAC,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAc,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;YAC7B,CAAC;QAGH,CAAC;IAEH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
2
|
+
export declare class RepoInstall extends AuthenticatedCommand<typeof RepoInstall> {
|
|
3
|
+
static args: {};
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: {
|
|
6
|
+
command: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}[];
|
|
9
|
+
static flags: {
|
|
10
|
+
'no-wait': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
'poll-interval': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
scope: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
timeout: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
+
version: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
|
+
};
|
|
16
|
+
private _logger;
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=repo-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-install.d.ts","sourceRoot":"","sources":["../../../src/commands/app/repo-install.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,WAAY,SAAQ,oBAAoB,CAAC,OAAO,WAAW,CAAC;IAEvE,MAAM,CAAC,IAAI,KACV;IAED,MAAM,CAAC,WAAW,SAqBiD;IAEnE,MAAM,CAAC,QAAQ;;;QAqBd;IAED,MAAM,CAAC,KAAK;;;;;;MA4BX;IAED,OAAO,CAAC,OAAO,CAA8C;IAEvD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+G3B"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/* eslint-disable camelcase */
|
|
3
|
+
import { Flags } from '@oclif/core';
|
|
4
|
+
import { AppRepoApplication, CompanyApplications, Logger, NowStringUtil } from '@sonisoft/now-sdk-ext-core';
|
|
5
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
6
|
+
export class RepoInstall extends AuthenticatedCommand {
|
|
7
|
+
static args = {};
|
|
8
|
+
static description = 'Install an application from your ServiceNow company repository.\n\n' +
|
|
9
|
+
'This command installs an application from your company\'s internal application repository. ' +
|
|
10
|
+
'You can specify the application by its scope name, and optionally specify a particular version. ' +
|
|
11
|
+
'The command will automatically look up the application details and initiate the installation.\n\n' +
|
|
12
|
+
'Features:\n' +
|
|
13
|
+
' • Install applications by scope name\n' +
|
|
14
|
+
' • Automatic lookup of application sys_id\n' +
|
|
15
|
+
' • Optional version specification (defaults to latest)\n' +
|
|
16
|
+
' • Wait for installation completion with progress monitoring\n' +
|
|
17
|
+
' • No-wait mode for background installations\n' +
|
|
18
|
+
' • Configurable polling intervals and timeouts\n' +
|
|
19
|
+
' • Detailed installation status and error reporting\n\n' +
|
|
20
|
+
'Installation Process:\n' +
|
|
21
|
+
' 1. Looks up the application in the company repository by scope\n' +
|
|
22
|
+
' 2. Verifies the application is available and installable\n' +
|
|
23
|
+
' 3. Initiates the installation via CI/CD API\n' +
|
|
24
|
+
' 4. Monitors progress until completion (unless --no-wait specified)\n' +
|
|
25
|
+
' 5. Reports final status and any errors\n\n' +
|
|
26
|
+
'Requirements:\n' +
|
|
27
|
+
' • User must have sn_cicd.sys_ci_automation role\n' +
|
|
28
|
+
' • Application must exist in company repository\n' +
|
|
29
|
+
' • Application must not be already installed (or use upgrade)';
|
|
30
|
+
static examples = [
|
|
31
|
+
{
|
|
32
|
+
command: '<%= config.bin %> <%= command.id %> --scope x_my_custom_app --auth dev-instance',
|
|
33
|
+
description: 'Install application by scope (latest version)',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
command: '<%= config.bin %> <%= command.id %> --scope x_my_app --version 2.1.0 --auth dev-instance',
|
|
37
|
+
description: 'Install specific version of an application',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
command: '<%= config.bin %> <%= command.id %> --scope x_my_app --no-wait --auth dev-instance',
|
|
41
|
+
description: 'Install without waiting for completion',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
command: '<%= config.bin %> <%= command.id %> -s x_my_app -a dev-instance --timeout 3600000',
|
|
45
|
+
description: 'Install with custom timeout (1 hour)',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
command: '<%= config.bin %> <%= command.id %> -s x_my_app -a dev-instance --log-level debug',
|
|
49
|
+
description: 'Install with debug logging',
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
static flags = {
|
|
53
|
+
'no-wait': Flags.boolean({
|
|
54
|
+
char: 'w',
|
|
55
|
+
default: false,
|
|
56
|
+
description: 'Do not wait for installation to complete',
|
|
57
|
+
required: false
|
|
58
|
+
}),
|
|
59
|
+
'poll-interval': Flags.integer({
|
|
60
|
+
default: 5000,
|
|
61
|
+
description: 'Polling interval in milliseconds (default: 5000)',
|
|
62
|
+
required: false
|
|
63
|
+
}),
|
|
64
|
+
scope: Flags.string({
|
|
65
|
+
char: 's',
|
|
66
|
+
description: 'Application scope (e.g., x_my_custom_app)',
|
|
67
|
+
required: true
|
|
68
|
+
}),
|
|
69
|
+
timeout: Flags.integer({
|
|
70
|
+
char: 't',
|
|
71
|
+
default: 1_800_000,
|
|
72
|
+
description: 'Installation timeout in milliseconds (default: 1800000 = 30 min)',
|
|
73
|
+
required: false
|
|
74
|
+
}),
|
|
75
|
+
version: Flags.string({
|
|
76
|
+
char: 'v',
|
|
77
|
+
description: 'Specific version to install (defaults to latest)',
|
|
78
|
+
required: false
|
|
79
|
+
}),
|
|
80
|
+
};
|
|
81
|
+
_logger = new Logger("AppRepoInstallCommand");
|
|
82
|
+
async run() {
|
|
83
|
+
const { args, flags } = await this.parse(RepoInstall);
|
|
84
|
+
try {
|
|
85
|
+
this.log("App Repository Install Command Executed.\n");
|
|
86
|
+
if (NowStringUtil.isStringEmpty(flags.scope)) {
|
|
87
|
+
this.error("Scope is required to install an application from the company repository");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Step 1: Look up the application in the company repository
|
|
91
|
+
this.log(`Looking up application with scope: ${flags.scope}...`);
|
|
92
|
+
const companyApps = new CompanyApplications(this.instance);
|
|
93
|
+
const app = await companyApps.getCompanyApplicationByScope(flags.scope);
|
|
94
|
+
if (!app) {
|
|
95
|
+
this.error(`Application with scope '${flags.scope}' not found in company repository`);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this.log(`✓ Found application: ${app.name}`);
|
|
99
|
+
this.log(` Scope: ${app.scope}`);
|
|
100
|
+
this.log(` Sys ID: ${app.sys_id}`);
|
|
101
|
+
this.log(` Latest Version: ${app.latest_version}`);
|
|
102
|
+
this.log(` Installed: ${app.isInstalled ? 'Yes (v' + app.version + ')' : 'No'}`);
|
|
103
|
+
// Check if already installed
|
|
104
|
+
if (app.isInstalled && !flags.version) {
|
|
105
|
+
this.log(`\n⚠️ Application is already installed (version ${app.version})`);
|
|
106
|
+
this.log('To upgrade or reinstall, specify a different version with --version');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Check if installation is allowed
|
|
110
|
+
if (!app.can_install_or_upgrade) {
|
|
111
|
+
this.error(`Application '${app.name}' cannot be installed or upgraded at this time`);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Determine version to install
|
|
115
|
+
const targetVersion = flags.version || app.latest_version;
|
|
116
|
+
this.log(`\nTarget version: ${targetVersion}`);
|
|
117
|
+
// Show dependencies if any
|
|
118
|
+
if (app.dependencies) {
|
|
119
|
+
this.log(`Dependencies: ${app.dependencies}`);
|
|
120
|
+
}
|
|
121
|
+
// Step 2: Prepare install request
|
|
122
|
+
const installRequest = {
|
|
123
|
+
scope: app.scope,
|
|
124
|
+
sys_id: app.sys_id,
|
|
125
|
+
version: targetVersion
|
|
126
|
+
};
|
|
127
|
+
this.log(`\nInitiating installation from company repository...`);
|
|
128
|
+
const appRepo = new AppRepoApplication(this.instance);
|
|
129
|
+
// Step 3: Install
|
|
130
|
+
if (flags['no-wait']) {
|
|
131
|
+
// Non-blocking installation
|
|
132
|
+
const response = await appRepo.installFromAppRepo(installRequest);
|
|
133
|
+
this.log(`✓ Installation initiated successfully`);
|
|
134
|
+
this.log(` Progress ID: ${response.links.progress.id}`);
|
|
135
|
+
this.log(` Status: ${response.status_label}`);
|
|
136
|
+
this.log(` Progress: ${response.percent_complete}%`);
|
|
137
|
+
this.log(`\nInstallation is running in the background.`);
|
|
138
|
+
this.log(`Use the progress ID to monitor status if needed.`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Blocking installation with progress monitoring
|
|
142
|
+
this.log(`Waiting for installation to complete...`);
|
|
143
|
+
this.log(`(Poll interval: ${flags['poll-interval']}ms, Timeout: ${flags.timeout}ms)\n`);
|
|
144
|
+
const result = await appRepo.installFromAppRepoAndWait(installRequest, flags['poll-interval'], flags.timeout);
|
|
145
|
+
if (result.success) {
|
|
146
|
+
this.log('\n✓ Installation completed successfully!');
|
|
147
|
+
this.log(` Application: ${app.name}`);
|
|
148
|
+
this.log(` Scope: ${app.scope}`);
|
|
149
|
+
this.log(` Version: ${targetVersion}`);
|
|
150
|
+
this.log(` Final Status: ${result.status_label}`);
|
|
151
|
+
this.log(` Progress: ${result.percent_complete}%`);
|
|
152
|
+
// Verify installation
|
|
153
|
+
this.log(`\nVerifying installation...`);
|
|
154
|
+
const verifyApp = await companyApps.getCompanyApplicationByScope(app.scope);
|
|
155
|
+
if (verifyApp?.isInstalled) {
|
|
156
|
+
this.log(`✓ Verified: Application is now installed (version ${verifyApp.version})`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.log('\n✗ Installation failed');
|
|
161
|
+
this.log(` Status: ${result.status_label}`);
|
|
162
|
+
this.log(` Error: ${result.error || result.status_message}`);
|
|
163
|
+
this.error(`Installation failed: ${result.error || result.status_label}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
this._logger.error("Error occurred when installing application from company repository.", error);
|
|
169
|
+
this.error(error);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=repo-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-install.js","sourceRoot":"","sources":["../../../src/commands/app/repo-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
2
|
+
export declare class RepoList extends AuthenticatedCommand<typeof RepoList> {
|
|
3
|
+
static args: {};
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: {
|
|
6
|
+
command: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}[];
|
|
9
|
+
static flags: {
|
|
10
|
+
installable: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
installed: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
private _logger;
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=repo-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-list.d.ts","sourceRoot":"","sources":["../../../src/commands/app/repo-list.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,QAAS,SAAQ,oBAAoB,CAAC,OAAO,QAAQ,CAAC;IAEjE,MAAM,CAAC,IAAI,KACV;IAED,MAAM,CAAC,WAAW,SAgBoC;IAEtD,MAAM,CAAC,QAAQ;;;QAqBd;IAED,MAAM,CAAC,KAAK;;;;MAmBX;IAED,OAAO,CAAC,OAAO,CAA2C;IAEpD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiG3B"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/* eslint-disable camelcase */
|
|
3
|
+
import { Flags } from '@oclif/core';
|
|
4
|
+
import { CompanyApplications, Logger } from '@sonisoft/now-sdk-ext-core';
|
|
5
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
6
|
+
export class RepoList extends AuthenticatedCommand {
|
|
7
|
+
static args = {};
|
|
8
|
+
static description = 'List applications available in your ServiceNow company repository.\n\n' +
|
|
9
|
+
'This command retrieves and displays all applications that are available in your company\'s ' +
|
|
10
|
+
'internal application repository. These are applications that have been published internally ' +
|
|
11
|
+
'and are available for installation across your ServiceNow instances.\n\n' +
|
|
12
|
+
'Features:\n' +
|
|
13
|
+
' • List all available company repository applications\n' +
|
|
14
|
+
' • Filter to show only installed applications\n' +
|
|
15
|
+
' • Filter to show only installable (not yet installed) applications\n' +
|
|
16
|
+
' • View application details including versions and dependencies\n' +
|
|
17
|
+
' • JSON output support for automation and scripting\n' +
|
|
18
|
+
' • Vendor-based filtering\n\n' +
|
|
19
|
+
'Use Cases:\n' +
|
|
20
|
+
' • Discover available applications for installation\n' +
|
|
21
|
+
' • Audit installed company applications\n' +
|
|
22
|
+
' • Find applications that can be upgraded\n' +
|
|
23
|
+
' • Integration with CI/CD pipelines\n' +
|
|
24
|
+
' • Automated environment setup and configuration';
|
|
25
|
+
static examples = [
|
|
26
|
+
{
|
|
27
|
+
command: '<%= config.bin %> <%= command.id %> --auth dev-instance',
|
|
28
|
+
description: 'List all company repository applications',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
command: '<%= config.bin %> <%= command.id %> --installed --auth dev-instance',
|
|
32
|
+
description: 'List only installed applications',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
command: '<%= config.bin %> <%= command.id %> --installable --auth dev-instance',
|
|
36
|
+
description: 'List only installable (not installed) applications',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
command: '<%= config.bin %> <%= command.id %> --json --auth dev-instance',
|
|
40
|
+
description: 'Get JSON output for scripting',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
command: '<%= config.bin %> <%= command.id %> -a dev-instance',
|
|
44
|
+
description: 'List with short flags',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
static flags = {
|
|
48
|
+
installable: Flags.boolean({
|
|
49
|
+
char: 'n',
|
|
50
|
+
default: false,
|
|
51
|
+
description: 'Show only applications that can be installed (not yet installed)',
|
|
52
|
+
required: false
|
|
53
|
+
}),
|
|
54
|
+
installed: Flags.boolean({
|
|
55
|
+
char: 'i',
|
|
56
|
+
default: false,
|
|
57
|
+
description: 'Show only installed applications',
|
|
58
|
+
required: false
|
|
59
|
+
}),
|
|
60
|
+
json: Flags.boolean({
|
|
61
|
+
char: 'j',
|
|
62
|
+
default: false,
|
|
63
|
+
description: 'Output results as JSON',
|
|
64
|
+
required: false
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
_logger = new Logger("AppRepoListCommand");
|
|
68
|
+
async run() {
|
|
69
|
+
const { args, flags } = await this.parse(RepoList);
|
|
70
|
+
try {
|
|
71
|
+
this.log("Fetching company repository applications...\n");
|
|
72
|
+
const companyApps = new CompanyApplications(this.instance);
|
|
73
|
+
const response = await companyApps.getCompanyApplications();
|
|
74
|
+
let apps = response.data;
|
|
75
|
+
// Apply filters
|
|
76
|
+
if (flags.installed) {
|
|
77
|
+
apps = apps.filter(app => app.isInstalled);
|
|
78
|
+
}
|
|
79
|
+
else if (flags.installable) {
|
|
80
|
+
apps = apps.filter(app => !app.isInstalled && app.can_install_or_upgrade);
|
|
81
|
+
}
|
|
82
|
+
// Output results
|
|
83
|
+
if (flags.json) {
|
|
84
|
+
// JSON output
|
|
85
|
+
this.log(JSON.stringify({
|
|
86
|
+
applications: apps.map(app => ({
|
|
87
|
+
available_versions: app.versions.length,
|
|
88
|
+
can_install_or_upgrade: app.can_install_or_upgrade,
|
|
89
|
+
current_version: app.version || null,
|
|
90
|
+
dependencies: app.dependencies || null,
|
|
91
|
+
isInstalled: app.isInstalled,
|
|
92
|
+
latest_version: app.latest_version,
|
|
93
|
+
name: app.name,
|
|
94
|
+
scope: app.scope,
|
|
95
|
+
short_description: app.short_description,
|
|
96
|
+
sys_id: app.sys_id,
|
|
97
|
+
vendor: app.vendor
|
|
98
|
+
})),
|
|
99
|
+
processingTime: response.dataProcessingTime,
|
|
100
|
+
total: apps.length
|
|
101
|
+
}, null, 2));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Human-readable output
|
|
105
|
+
this.log(`Found ${apps.length} application(s)`);
|
|
106
|
+
this.log(`Processing Time: ${response.dataProcessingTime}ms\n`);
|
|
107
|
+
if (apps.length === 0) {
|
|
108
|
+
this.log("No applications found matching the specified criteria.");
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this.log("─".repeat(100));
|
|
112
|
+
for (const [index, app] of apps.entries()) {
|
|
113
|
+
this.log(`${index + 1}. ${app.name}`);
|
|
114
|
+
this.log(` Scope: ${app.scope}`);
|
|
115
|
+
this.log(` Sys ID: ${app.sys_id}`);
|
|
116
|
+
this.log(` Vendor: ${app.vendor}`);
|
|
117
|
+
this.log(` Latest Version: ${app.latest_version}`);
|
|
118
|
+
this.log(` Installed: ${app.isInstalled ? 'Yes (v' + app.version + ')' : 'No'}`);
|
|
119
|
+
this.log(` Can Install: ${app.can_install_or_upgrade ? 'Yes' : 'No'}`);
|
|
120
|
+
if (app.dependencies) {
|
|
121
|
+
this.log(` Dependencies: ${app.dependencies}`);
|
|
122
|
+
}
|
|
123
|
+
if (app.short_description) {
|
|
124
|
+
this.log(` Description: ${app.short_description}`);
|
|
125
|
+
}
|
|
126
|
+
this.log(` Available Versions: ${app.versions.length}`);
|
|
127
|
+
if (app.versions.length > 0) {
|
|
128
|
+
const recentVersions = app.versions.slice(-3).reverse();
|
|
129
|
+
this.log(` Recent Versions:`);
|
|
130
|
+
for (const v of recentVersions) {
|
|
131
|
+
this.log(` - v${v.version} (${v.publish_date_display})`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
this.log("─".repeat(100));
|
|
135
|
+
}
|
|
136
|
+
this.log(`\nTotal: ${apps.length} application(s)`);
|
|
137
|
+
// Show summary statistics
|
|
138
|
+
const installedCount = apps.filter(a => a.isInstalled).length;
|
|
139
|
+
const installableCount = apps.filter(a => !a.isInstalled && a.can_install_or_upgrade).length;
|
|
140
|
+
this.log("\nSummary:");
|
|
141
|
+
this.log(` Installed: ${installedCount}`);
|
|
142
|
+
this.log(` Installable: ${installableCount}`);
|
|
143
|
+
this.log(` Other: ${apps.length - installedCount - installableCount}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
this._logger.error("Error occurred when fetching company applications.", error);
|
|
148
|
+
this.error(error);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=repo-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-list.js","sourceRoot":"","sources":["../../../src/commands/app/repo-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
2
|
+
export declare class Uninstall extends AuthenticatedCommand<typeof Uninstall> {
|
|
3
|
+
static args: {};
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: {
|
|
6
|
+
command: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}[];
|
|
9
|
+
static flags: {
|
|
10
|
+
applicationId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
scope: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
private _logger;
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=uninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/app/uninstall.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,SAAU,SAAQ,oBAAoB,CAAC,OAAO,SAAS,CAAC;IAEnE,MAAM,CAAC,IAAI,KACV;IAED,MAAM,CAAC,WAAW,SAYqC;IAEvD,MAAM,CAAC,QAAQ;;;QAad;IAED,MAAM,CAAC,KAAK;;;MAGX;IAED,OAAO,CAAC,OAAO,CAA4C;IAErD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoC3B"}
|