@snutils/snu 0.3.4 → 0.3.5

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.
Files changed (46) hide show
  1. package/dist/cli/format.d.ts +0 -3
  2. package/dist/cli/format.d.ts.map +1 -1
  3. package/dist/cli/format.js +45 -3
  4. package/dist/cli/format.js.map +1 -1
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +46 -1
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/mcp/index.d.ts.map +1 -1
  9. package/dist/mcp/index.js +12 -1
  10. package/dist/mcp/index.js.map +1 -1
  11. package/dist/nowsdk/NowSdkBuild.d.ts +53 -0
  12. package/dist/nowsdk/NowSdkBuild.d.ts.map +1 -0
  13. package/dist/nowsdk/NowSdkBuild.js +152 -0
  14. package/dist/nowsdk/NowSdkBuild.js.map +1 -0
  15. package/dist/nowsdk/NowSdkFlows.d.ts +99 -0
  16. package/dist/nowsdk/NowSdkFlows.d.ts.map +1 -0
  17. package/dist/nowsdk/NowSdkFlows.js +203 -0
  18. package/dist/nowsdk/NowSdkFlows.js.map +1 -0
  19. package/dist/nowsdk/NowSdkProject.d.ts +71 -0
  20. package/dist/nowsdk/NowSdkProject.d.ts.map +1 -0
  21. package/dist/nowsdk/NowSdkProject.js +341 -0
  22. package/dist/nowsdk/NowSdkProject.js.map +1 -0
  23. package/dist/nowsdk/NowSdkPull.d.ts +147 -0
  24. package/dist/nowsdk/NowSdkPull.d.ts.map +1 -0
  25. package/dist/nowsdk/NowSdkPull.js +809 -0
  26. package/dist/nowsdk/NowSdkPull.js.map +1 -0
  27. package/dist/registry.d.ts.map +1 -1
  28. package/dist/registry.js +114 -0
  29. package/dist/registry.js.map +1 -1
  30. package/dist/server/dispatcher.d.ts +1 -0
  31. package/dist/server/dispatcher.d.ts.map +1 -1
  32. package/dist/server/dispatcher.js +65 -0
  33. package/dist/server/dispatcher.js.map +1 -1
  34. package/dist/server/httpBridge.d.ts.map +1 -1
  35. package/dist/server/httpBridge.js +2 -0
  36. package/dist/server/httpBridge.js.map +1 -1
  37. package/dist/server/policy.d.ts.map +1 -1
  38. package/dist/server/policy.js +8 -0
  39. package/dist/server/policy.js.map +1 -1
  40. package/dist/server/wsBridge.d.ts.map +1 -1
  41. package/dist/server/wsBridge.js +7 -1
  42. package/dist/server/wsBridge.js.map +1 -1
  43. package/dist/types.d.ts +6 -0
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/types.js.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ // Build, pack and deploy-message helpers for ServiceNow SDK (NOW SDK) projects,
3
+ // shared by the "Deploy NOW SDK app" editor command and the `sdk_deploy` agent
4
+ // command. The package itself is installed by the SN Utils helper tab
5
+ // (deployAppPackage in scriptsync.js), which asks the user to confirm first.
6
+ //
7
+ // Kept free of `vscode` imports. packages/snu/src/nowsdk/ holds a byte-identical
8
+ // copy for the standalone bridge; src/test/nowSdkShared.test.ts fails when the
9
+ // two drift.
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.DEPLOY_TIMEOUT_MS = exports.CLI_TIMEOUT_MS = exports.MAX_PACKAGE_BYTES = void 0;
45
+ exports.runNowSdk = runNowSdk;
46
+ exports.buildNowSdkPackage = buildNowSdkPackage;
47
+ exports.buildDeployMessage = buildDeployMessage;
48
+ exports.summarizeDeployResult = summarizeDeployResult;
49
+ const cp = __importStar(require("child_process"));
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const NowSdkProject_1 = require("./NowSdkProject");
53
+ exports.MAX_PACKAGE_BYTES = 25 * 1024 * 1024;
54
+ exports.CLI_TIMEOUT_MS = 5 * 60 * 1000;
55
+ /** Covers the confirmation in the helper tab plus the install and flow activation. */
56
+ exports.DEPLOY_TIMEOUT_MS = 15 * 60 * 1000;
57
+ function localCli(root) {
58
+ const bin = path.join(root, 'node_modules', '.bin', process.platform === 'win32' ? 'now-sdk.cmd' : 'now-sdk');
59
+ if (!fs.existsSync(bin)) {
60
+ throw new NowSdkProject_1.NowSdkProjectError(`The ServiceNow SDK is not installed in ${path.basename(root)}. Run npm install in the project first.`);
61
+ }
62
+ return bin;
63
+ }
64
+ /** Run the project's own `now-sdk` with fixed arguments; resolves with its output. */
65
+ function runNowSdk(root, args, onOutput) {
66
+ const bin = localCli(root);
67
+ return new Promise((resolve, reject) => {
68
+ onOutput?.(`> now-sdk ${args.join(' ')}\n`);
69
+ const isWin = process.platform === 'win32';
70
+ // .cmd shims can only be spawned through a shell on Windows; the
71
+ // arguments are fixed literals, never user input.
72
+ const child = cp.spawn(isWin ? `"${bin}"` : bin, args, { cwd: root, shell: isWin, env: process.env });
73
+ let out = '';
74
+ const timer = setTimeout(() => {
75
+ child.kill();
76
+ reject(new Error(`now-sdk ${args[0]} timed out after ${exports.CLI_TIMEOUT_MS / 1000}s`));
77
+ }, exports.CLI_TIMEOUT_MS);
78
+ const collect = (chunk) => {
79
+ const text = chunk.toString();
80
+ out += text;
81
+ onOutput?.(text);
82
+ };
83
+ child.stdout.on('data', collect);
84
+ child.stderr.on('data', collect);
85
+ child.on('error', (e) => { clearTimeout(timer); reject(e); });
86
+ child.on('close', (code) => {
87
+ clearTimeout(timer);
88
+ if (code === 0)
89
+ resolve(out);
90
+ else
91
+ reject(new Error(`now-sdk ${args[0]} failed (exit ${code}).${tail(out)}`));
92
+ });
93
+ });
94
+ }
95
+ function tail(output) {
96
+ const lines = output.trim().split(/\r?\n/).filter(Boolean).slice(-5);
97
+ return lines.length ? `\n${lines.join('\n')}` : '';
98
+ }
99
+ /** Build and pack the project and read the package for the helper tab. */
100
+ async function buildNowSdkPackage(root, onOutput) {
101
+ const project = (0, NowSdkProject_1.readNowSdkProject)(root);
102
+ (0, NowSdkProject_1.assertSupportedProject)(project);
103
+ (0, NowSdkProject_1.assertSupportedSdk)(project.root);
104
+ await runNowSdk(project.root, ['build'], onOutput);
105
+ const packOut = await runNowSdk(project.root, ['pack'], onOutput);
106
+ const reported = (0, NowSdkProject_1.parsePackOutput)(packOut);
107
+ const zipPath = reported && fs.existsSync(reported) ? reported : (0, NowSdkProject_1.findNewestZip)(project.packOutputDir);
108
+ if (!zipPath)
109
+ throw new NowSdkProject_1.NowSdkProjectError(`No package found in ${project.packOutputDir} after now-sdk pack.`);
110
+ const zip = fs.readFileSync(zipPath);
111
+ if (zip.length > exports.MAX_PACKAGE_BYTES) {
112
+ throw new NowSdkProject_1.NowSdkProjectError(`Package is ${Math.round(zip.length / 1024 / 1024)} MB; the limit is ${exports.MAX_PACKAGE_BYTES / 1024 / 1024} MB.`);
113
+ }
114
+ const { flows, actions } = (0, NowSdkProject_1.listFlowRecordIds)(project.appOutputDir);
115
+ return { project, zipPath, sizeBytes: zip.length, packageBase64: zip.toString('base64'), flows, actions };
116
+ }
117
+ /**
118
+ * The `deployAppPackage` message for the helper tab. `initiatedBy` tells the
119
+ * tab whether a person started the deploy in the editor or an agent did; only
120
+ * editor deploys go through while agents are paused.
121
+ */
122
+ function buildDeployMessage(requestId, pkg, instance, initiatedBy) {
123
+ return {
124
+ action: 'deployAppPackage',
125
+ agentRequestId: requestId,
126
+ appName: initiatedBy === 'editor' ? 'VS Code' : 'Agent',
127
+ initiatedBy,
128
+ instance: { name: instance.name, url: instance.url, g_ck: instance.g_ck },
129
+ app: { name: pkg.project.name, scope: pkg.project.scope, scopeId: pkg.project.scopeId, version: pkg.project.version },
130
+ fileName: path.basename(pkg.zipPath),
131
+ packageBase64: pkg.packageBase64,
132
+ flows: pkg.flows,
133
+ actions: pkg.actions,
134
+ };
135
+ }
136
+ /** Normalize the helper tab's `deployAppPackageResponse`. */
137
+ function summarizeDeployResult(result) {
138
+ const flowActivation = result?.flowActivation ?? null;
139
+ const installed = result?.success === true;
140
+ const partial = installed && !!flowActivation && flowActivation.ok === false;
141
+ const outcome = { success: installed && !partial, installed, partial, flowActivation };
142
+ for (const key of ['code', 'error', 'reason', 'statusMessage', 'trackerUrl', 'rollbackUrl']) {
143
+ if (typeof result?.[key] === 'string' && result[key])
144
+ outcome[key] = result[key];
145
+ }
146
+ if (typeof result?.durationMs === 'number')
147
+ outcome.durationMs = result.durationMs;
148
+ if (!installed && !outcome.error)
149
+ outcome.error = 'Install failed';
150
+ return outcome;
151
+ }
152
+ //# sourceMappingURL=NowSdkBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NowSdkBuild.js","sourceRoot":"","sources":["../../src/nowsdk/NowSdkBuild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { NowSdkProject } from './NowSdkProject';
2
+ import { NowSdkPackage } from './NowSdkBuild';
3
+ import { InstanceChange } from './NowSdkPull';
4
+ export declare class NowSdkFlowError extends Error {
5
+ code: string;
6
+ details?: any | undefined;
7
+ constructor(code: string, message: string, details?: any | undefined);
8
+ }
9
+ export interface NowSdkTransport {
10
+ instanceName: string;
11
+ instanceUrl: string;
12
+ /** The helper tab can download app packages (needed for pull and the change check). */
13
+ canDownload: boolean;
14
+ /** Download the app package; rejects with an error carrying `code` on failure. */
15
+ download(project: NowSdkProject): Promise<Buffer>;
16
+ /** Send the package to the helper tab and resolve with its raw deployAppPackageResponse. */
17
+ deploy(pkg: NowSdkPackage): Promise<any>;
18
+ log?(text: string): void;
19
+ }
20
+ /** "UI Page Todo Board (html; built from your UI source)" */
21
+ export declare function describeChange(c: InstanceChange): string;
22
+ /**
23
+ * Build, check the instance for changes made since the last deploy or pull,
24
+ * and install. Changes on the instance stop the deploy unless `force` is set.
25
+ */
26
+ export declare function deployFlow(root: string, transport: NowSdkTransport, opts?: {
27
+ force?: boolean;
28
+ }): Promise<{
29
+ baselineRecorded: boolean;
30
+ instanceChecked: boolean;
31
+ instanceOnly?: InstanceChange[] | undefined;
32
+ overwritten?: InstanceChange[] | undefined;
33
+ app: {
34
+ name: string;
35
+ scope: string;
36
+ version: string;
37
+ };
38
+ instance: string;
39
+ success: boolean;
40
+ installed: boolean;
41
+ partial: boolean;
42
+ code?: string;
43
+ error?: string;
44
+ reason?: string;
45
+ statusMessage?: string;
46
+ trackerUrl?: string;
47
+ rollbackUrl?: string;
48
+ flowActivation?: {
49
+ ok: boolean;
50
+ total?: number;
51
+ succeeded?: number;
52
+ failed?: number;
53
+ error?: string;
54
+ } | null;
55
+ durationMs?: number;
56
+ }>;
57
+ /**
58
+ * Pull the instance's version of the app into the project. Applied when git
59
+ * can show and undo it (the affected files have no uncommitted edits);
60
+ * otherwise it stops unless `force` is set. `dryRun` only lists the changes.
61
+ */
62
+ export declare function pullFlow(root: string, transport: NowSdkTransport, opts?: {
63
+ force?: boolean;
64
+ dryRun?: boolean;
65
+ }): Promise<{
66
+ applied: never[];
67
+ dryRun: boolean;
68
+ app: {
69
+ name: string;
70
+ scope: string;
71
+ version: string;
72
+ };
73
+ instance: string;
74
+ changes: {
75
+ path: string;
76
+ status: import("./NowSdkPull").PullChangeStatus;
77
+ }[];
78
+ } | {
79
+ notPulled?: {
80
+ label: string;
81
+ status: "removed" | "changed" | "new";
82
+ reason: string | undefined;
83
+ }[] | undefined;
84
+ firstPull?: boolean | undefined;
85
+ notOnInstance?: string[] | undefined;
86
+ applied: string[];
87
+ upToDate: boolean;
88
+ app: {
89
+ name: string;
90
+ scope: string;
91
+ version: string;
92
+ };
93
+ instance: string;
94
+ changes: {
95
+ path: string;
96
+ status: import("./NowSdkPull").PullChangeStatus;
97
+ }[];
98
+ }>;
99
+ //# sourceMappingURL=NowSdkFlows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NowSdkFlows.d.ts","sourceRoot":"","sources":["../../src/nowsdk/NowSdkFlows.ts"],"names":[],"mappings":"AASA,OAAO,EACN,aAAa,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAgE,MAAM,eAAe,CAAC;AAC5G,OAAO,EACN,cAAc,EAEd,MAAM,cAAc,CAAC;AAEtB,qBAAa,eAAgB,SAAQ,KAAK;IACtB,IAAI,EAAE,MAAM;IAA0B,OAAO,CAAC,EAAE,GAAG;gBAAnD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAS,OAAO,CAAC,EAAE,GAAG,YAAA;CAGtE;AAED,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,4FAA4F;IAC5F,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAcD,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAOxD;AAOD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;aA/B3E,CAAC;iBAAmB,CAAC;cAE3C,CAAC;aAAe,CAAC;;;GAsHxB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DxH"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ // Deploy and pull for NOW SDK apps as used by agents and the `snu` CLI, in
3
+ // both the VS Code bridge and the standalone `snu serve` bridge. Each host
4
+ // passes its own transport to the SN Utils helper tab; the steps and the
5
+ // outcomes are the same everywhere. The editor commands (NowSdkDeploy.ts) use
6
+ // the same building blocks with interactive prompts instead of flags.
7
+ //
8
+ // Kept free of `vscode` imports. packages/snu/src/nowsdk/ holds a
9
+ // byte-identical copy; src/test/nowSdkShared.test.ts fails when they drift.
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.NowSdkFlowError = void 0;
12
+ exports.describeChange = describeChange;
13
+ exports.deployFlow = deployFlow;
14
+ exports.pullFlow = pullFlow;
15
+ const NowSdkProject_1 = require("./NowSdkProject");
16
+ const NowSdkBuild_1 = require("./NowSdkBuild");
17
+ const NowSdkPull_1 = require("./NowSdkPull");
18
+ class NowSdkFlowError extends Error {
19
+ code;
20
+ details;
21
+ constructor(code, message, details) {
22
+ super(message);
23
+ this.code = code;
24
+ this.details = details;
25
+ }
26
+ }
27
+ exports.NowSdkFlowError = NowSdkFlowError;
28
+ function loadProject(root) {
29
+ try {
30
+ const project = (0, NowSdkProject_1.readNowSdkProject)(root);
31
+ (0, NowSdkProject_1.assertSupportedProject)(project);
32
+ (0, NowSdkProject_1.assertSupportedSdk)(project.root);
33
+ return project;
34
+ }
35
+ catch (e) {
36
+ throw new NowSdkFlowError('E_INVALID_PARAMS', e?.message || String(e));
37
+ }
38
+ }
39
+ const hasAppId = (project) => /^[0-9a-f]{32}$/.test(project.scopeId);
40
+ /** "UI Page Todo Board (html; built from your UI source)" */
41
+ function describeChange(c) {
42
+ const parts = [
43
+ c.status === 'removed' ? 'deleted on the instance' : c.status === 'new' ? 'new on the instance' : '',
44
+ c.fields && c.fields.length ? c.fields.join(', ') : '',
45
+ c.reason || '',
46
+ ].filter(Boolean);
47
+ return parts.length ? `${c.label} (${parts.join('; ')})` : c.label;
48
+ }
49
+ const describe = (changes) => {
50
+ const shown = changes.slice(0, 5).map(describeChange).join(', ');
51
+ return changes.length > 5 ? `${shown} and ${changes.length - 5} more` : shown;
52
+ };
53
+ /**
54
+ * Build, check the instance for changes made since the last deploy or pull,
55
+ * and install. Changes on the instance stop the deploy unless `force` is set.
56
+ */
57
+ async function deployFlow(root, transport, opts = {}) {
58
+ const project = loadProject(root);
59
+ const log = (text) => transport.log?.(text);
60
+ const app = { name: project.name, scope: project.scope, version: project.version };
61
+ const canCheck = transport.canDownload && hasAppId(project) && (0, NowSdkPull_1.hasBaseline)(project.root, transport.instanceName);
62
+ // The instance download runs while the app builds; the comparison needs both.
63
+ let checkError = null;
64
+ const download = canCheck
65
+ ? transport.download(project).catch((e) => {
66
+ checkError = e;
67
+ return null;
68
+ })
69
+ : Promise.resolve(null);
70
+ let pkg;
71
+ try {
72
+ pkg = await (0, NowSdkBuild_1.buildNowSdkPackage)(project.root, log);
73
+ }
74
+ catch (e) {
75
+ throw new NowSdkFlowError(e instanceof NowSdkProject_1.NowSdkProjectError ? 'E_INVALID_PARAMS' : 'E_COMMAND_FAILED', e?.message || String(e));
76
+ }
77
+ const instanceZip = await download;
78
+ if (checkError) {
79
+ const why = checkError?.message || String(checkError);
80
+ log(`Could not check ${transport.instanceName} for changes: ${why}`);
81
+ // The deploy would be refused for the same reason.
82
+ if (['E_PRO_REQUIRED', 'E_PAUSED'].includes(checkError?.code))
83
+ throw new NowSdkFlowError(checkError.code, why, { app });
84
+ // Without the check a deploy could overwrite work on the instance unseen.
85
+ if (!opts.force) {
86
+ throw new NowSdkFlowError('E_CONFIRM_REQUIRED', `Could not check ${transport.instanceName} for changes made since the last deploy or pull (${why}). Retry, or deploy with force to install without the check.`, { checkFailed: true, app });
87
+ }
88
+ }
89
+ const conflicts = instanceZip ? (0, NowSdkPull_1.deployConflicts)(project.root, transport.instanceName, instanceZip, project.appOutputDir) : null;
90
+ const changes = conflicts?.overwritten || [];
91
+ if (changes.length > 0 && !opts.force) {
92
+ const unpullable = changes.filter((c) => c.generated);
93
+ throw new NowSdkFlowError('E_INSTANCE_CHANGED', `The deploy would overwrite ${changes.length} change${changes.length === 1 ? '' : 's'} made on ${transport.instanceName} since the last deploy or pull: ${describe(changes)}. ` +
94
+ (unpullable.length === changes.length
95
+ ? 'A pull cannot bring these in: copy the changes into the source by hand, or deploy with force to overwrite them.'
96
+ : 'Pull them into the project first (snu sdk pull), or deploy with force to overwrite them.' +
97
+ (unpullable.length ? ` A pull cannot bring in ${unpullable.map((c) => c.label).join(', ')}; copy those by hand.` : '')), { changes, instanceOnly: conflicts?.instanceOnly || [], app });
98
+ }
99
+ let raw;
100
+ try {
101
+ raw = await transport.deploy(pkg);
102
+ }
103
+ catch (e) {
104
+ if (e?.code === 'E_TIMEOUT') {
105
+ throw new NowSdkFlowError('E_TIMEOUT', `No deploy result within ${NowSdkBuild_1.DEPLOY_TIMEOUT_MS / 60000} minutes. The install may still have finished: check the app on the instance before deploying again.`);
106
+ }
107
+ throw e;
108
+ }
109
+ const outcome = (0, NowSdkBuild_1.summarizeDeployResult)(raw);
110
+ if (!outcome.installed) {
111
+ const code = ['E_PRO_REQUIRED', 'E_USER_REJECTED', 'E_PAUSED'].includes(outcome.code || '') ? outcome.code : 'E_COMMAND_FAILED';
112
+ const reason = outcome.reason ? ` (${outcome.reason})` : '';
113
+ throw new NowSdkFlowError(code, `${outcome.error}${reason}`, { ...outcome, app });
114
+ }
115
+ (0, NowSdkProject_1.writeDeployLink)(project.root, { instance: transport.instanceName, url: transport.instanceUrl });
116
+ (0, NowSdkPull_1.markDeployed)(project.root, transport.instanceName);
117
+ let baselineRecorded = false;
118
+ if (transport.canDownload && hasAppId(project)) {
119
+ try {
120
+ await (0, NowSdkPull_1.saveBaselineFromPackage)(project.root, transport.instanceName, await transport.download(project));
121
+ baselineRecorded = true;
122
+ }
123
+ catch (e) {
124
+ log(`Could not record the ${transport.instanceName} baseline: ${e?.message || e}`);
125
+ }
126
+ }
127
+ return {
128
+ ...outcome,
129
+ app,
130
+ instance: transport.instanceName,
131
+ ...(changes.length > 0 ? { overwritten: changes } : {}),
132
+ ...(conflicts?.instanceOnly.length ? { instanceOnly: conflicts.instanceOnly } : {}),
133
+ baselineRecorded,
134
+ // Whether the deploy was checked against changes on the instance.
135
+ instanceChecked: instanceZip !== null,
136
+ };
137
+ }
138
+ /**
139
+ * Pull the instance's version of the app into the project. Applied when git
140
+ * can show and undo it (the affected files have no uncommitted edits);
141
+ * otherwise it stops unless `force` is set. `dryRun` only lists the changes.
142
+ */
143
+ async function pullFlow(root, transport, opts = {}) {
144
+ const project = loadProject(root);
145
+ const log = (text) => transport.log?.(text);
146
+ const app = { name: project.name, scope: project.scope, version: project.version };
147
+ if (!hasAppId(project)) {
148
+ throw new NowSdkFlowError('E_INVALID_PARAMS', `Pull needs the application sys_id as scopeId in now.config.json; ${project.name} has "${project.scopeId}".`);
149
+ }
150
+ if (!transport.canDownload) {
151
+ throw new NowSdkFlowError('E_UNSUPPORTED_HOST', 'The connected SN Utils helper tab cannot pull NOW SDK apps. Update SN Utils and reopen the ScriptSync helper tab.');
152
+ }
153
+ const zip = await transport.download(project);
154
+ let staged;
155
+ try {
156
+ staged = await (0, NowSdkPull_1.stagePull)(project.root, zip, log);
157
+ }
158
+ catch (e) {
159
+ throw new NowSdkFlowError(e instanceof NowSdkProject_1.NowSdkProjectError ? 'E_INVALID_PARAMS' : 'E_COMMAND_FAILED', e?.message || String(e));
160
+ }
161
+ try {
162
+ const changes = staged.changes.map((c) => ({ path: c.path, status: c.status }));
163
+ const toApply = staged.changes.filter((c) => c.status !== 'removed');
164
+ const notOnInstance = staged.changes.filter((c) => c.status === 'removed').map((c) => c.path);
165
+ const base = { app, instance: transport.instanceName, changes };
166
+ if (opts.dryRun)
167
+ return { ...base, applied: [], dryRun: true };
168
+ if (toApply.length > 0) {
169
+ const dirty = await (0, NowSdkPull_1.gitUncommittedPaths)(project.root, toApply.map((c) => c.path));
170
+ if ((dirty === null || dirty.length > 0) && !opts.force) {
171
+ const why = dirty === null
172
+ ? 'The project is not in a git repository, so a pull cannot be reviewed or undone there.'
173
+ : `${dirty.length} file${dirty.length === 1 ? '' : 's'} the pull would change ${dirty.length === 1 ? 'has' : 'have'} uncommitted edits: ${dirty.join(', ')}. Commit or stash them first.`;
174
+ throw new NowSdkFlowError('E_CONFIRM_REQUIRED', `${why} Pull with force to apply anyway, or with dryRun to only list the changes.`, { ...base, uncommitted: dirty });
175
+ }
176
+ (0, NowSdkPull_1.applyPullWithUndo)(project.root, staged.stagingRoot, toApply);
177
+ }
178
+ const firstPull = !(0, NowSdkPull_1.hasPulledBefore)(project.root);
179
+ (0, NowSdkPull_1.markPulled)(project.root, transport.instanceName);
180
+ (0, NowSdkProject_1.writeDeployLink)(project.root, { instance: transport.instanceName, url: transport.instanceUrl });
181
+ // Changes the SDK's pull cannot bring in stay at their old version in
182
+ // the baseline, so the next deploy keeps warning about them.
183
+ const notPulled = (await (0, NowSdkPull_1.instanceChangesFromPackage)(project.root, transport.instanceName, zip)).filter((c) => c.generated);
184
+ try {
185
+ await (0, NowSdkPull_1.saveBaselineFromPackage)(project.root, transport.instanceName, zip, log, notPulled.map((c) => c.file).filter(Boolean));
186
+ }
187
+ catch (e) {
188
+ log(`Could not record the ${transport.instanceName} baseline: ${e?.message || e}`);
189
+ }
190
+ return {
191
+ ...base,
192
+ applied: toApply.map((c) => c.path),
193
+ upToDate: staged.changes.length === 0,
194
+ ...(notOnInstance.length ? { notOnInstance } : {}),
195
+ ...(firstPull && toApply.length ? { firstPull: true } : {}),
196
+ ...(notPulled.length ? { notPulled: notPulled.map(({ label, status, reason }) => ({ label, status, reason })) } : {}),
197
+ };
198
+ }
199
+ finally {
200
+ (0, NowSdkPull_1.cleanupPull)(staged.tempDir);
201
+ }
202
+ }
203
+ //# sourceMappingURL=NowSdkFlows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NowSdkFlows.js","sourceRoot":"","sources":["../../src/nowsdk/NowSdkFlows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export declare const NOW_CONFIG_FILE = "now.config.json";
2
+ export interface NowSdkProject {
3
+ root: string;
4
+ name: string;
5
+ scope: string;
6
+ scopeId: string;
7
+ version: string;
8
+ appOutputDir: string;
9
+ packOutputDir: string;
10
+ /** now.config.json `type`: 'package' (default) or 'configuration'. */
11
+ type: string;
12
+ /** now.config.json `installAs`, e.g. 'store'. */
13
+ installAs: string;
14
+ hasHostedPlugins: boolean;
15
+ }
16
+ /** ServiceNow SDK versions whose packages and install protocol match what ScriptSync sends. */
17
+ export declare const SUPPORTED_SDK: {
18
+ min: string;
19
+ belowMajor: number;
20
+ };
21
+ export interface NowSdkDeployLink {
22
+ instance: string;
23
+ url: string;
24
+ }
25
+ export declare class NowSdkProjectError extends Error {
26
+ }
27
+ /**
28
+ * The NOW SDK project root that contains `filePath`, or null. When `stopAt` is
29
+ * given, only directories from the file's folder up to and including `stopAt`
30
+ * are checked, so a project outside that folder never matches.
31
+ */
32
+ export declare function findNowSdkProjectRoot(filePath: string, stopAt?: string): string | null;
33
+ export declare function readNowSdkProject(root: string): NowSdkProject;
34
+ /**
35
+ * Refuse app types ScriptSync does not deploy or pull the way the SDK does,
36
+ * with a pointer to `now-sdk install` / `now-sdk transform` for them.
37
+ */
38
+ export declare function assertSupportedProject(project: NowSdkProject): void;
39
+ /** The ServiceNow SDK version installed in the project, or null when it is not installed. */
40
+ export declare function readSdkVersion(root: string): string | null;
41
+ /** Refuse SDK versions outside the range whose packages ScriptSync handles. */
42
+ export declare function assertSupportedSdk(root: string): string;
43
+ /**
44
+ * Flow and action record ids in the built app, for activating them after an
45
+ * install (the SDK's own post-install step). Read from the build output file
46
+ * names, which follow `<table>_<sys_id>.xml`.
47
+ */
48
+ export declare function listFlowRecordIds(appOutputDir: string): {
49
+ flows: string[];
50
+ actions: string[];
51
+ };
52
+ /** The zip path reported by `now-sdk pack`, or null. */
53
+ export declare function parsePackOutput(output: string): string | null;
54
+ /** Newest `.zip` in a folder, used when the pack output could not be parsed. */
55
+ export declare function findNewestZip(dir: string): string | null;
56
+ /**
57
+ * The instance this project deploys to. Stored in `.snu/deploy.json` inside the
58
+ * project, next to a `.gitignore` that keeps the folder out of git: the link is
59
+ * a personal choice, not project configuration.
60
+ */
61
+ export declare function readDeployLink(root: string): NowSdkDeployLink | null;
62
+ export declare function writeDeployLink(root: string, link: NowSdkDeployLink): void;
63
+ /** NOW SDK project roots under `root`, a few levels deep, skipping build and dependency folders. */
64
+ export declare function findNowSdkProjects(root: string, maxDepth?: number): string[];
65
+ /**
66
+ * The project an agent asked for. `projectPath` (relative to `root`, or
67
+ * absolute) must stay inside `root`, symlinks included. Without it, `root`
68
+ * must contain exactly one project.
69
+ */
70
+ export declare function resolveNowSdkProjectRoot(root: string, projectPath?: string): string;
71
+ //# sourceMappingURL=NowSdkProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NowSdkProject.d.ts","sourceRoot":"","sources":["../../src/nowsdk/NowSdkProject.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAIjD,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;CAC1B;AAED,+FAA+F;AAC/F,eAAO,MAAM,aAAa;;;CAAkC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAqBhD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYtF;AAoBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAwB7D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAWnE;AAOD,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO1D;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYvD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAgB9F;AAED,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBxD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQpE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAM1E;AAID,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,EAAE,CAsBvE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBnF"}