@medplum/cli 1.0.5 → 2.0.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 CHANGED
@@ -141,4 +141,4 @@ Medplum is a healthcare platform that helps you quickly develop high-quality com
141
141
 
142
142
  ## License
143
143
 
144
- Apache 2.0. Copyright © Medplum 2022
144
+ Apache 2.0. Copyright © Medplum 2023
package/dist/index.js CHANGED
@@ -1,14 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
3
  var __importDefault = (this && this.__importDefault) || function (mod) {
13
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
14
5
  };
@@ -19,97 +10,89 @@ const dotenv_1 = __importDefault(require("dotenv"));
19
10
  const fs_1 = require("fs");
20
11
  const node_fetch_1 = __importDefault(require("node-fetch"));
21
12
  const path_1 = require("path");
22
- function main(medplum, argv) {
23
- return __awaiter(this, void 0, void 0, function* () {
24
- if (argv.length < 3) {
25
- console.log('Usage: medplum <command>');
26
- return;
27
- }
28
- const command = argv[2];
29
- if (command === 'save-bot') {
30
- yield runBotCommands(medplum, argv, ['save']);
31
- }
32
- else if (command === 'deploy-bot') {
33
- yield runBotCommands(medplum, argv, ['save', 'deploy']);
34
- }
35
- else {
36
- console.log(`Unknown command: ${command}`);
37
- }
38
- });
13
+ async function main(medplum, argv) {
14
+ if (argv.length < 3) {
15
+ console.log('Usage: medplum <command>');
16
+ return;
17
+ }
18
+ const command = argv[2];
19
+ if (command === 'save-bot') {
20
+ await runBotCommands(medplum, argv, ['save']);
21
+ }
22
+ else if (command === 'deploy-bot') {
23
+ await runBotCommands(medplum, argv, ['save', 'deploy']);
24
+ }
25
+ else {
26
+ console.log(`Unknown command: ${command}`);
27
+ }
39
28
  }
40
29
  exports.main = main;
41
- function runBotCommands(medplum, argv, commands) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- if (argv.length < 4) {
44
- console.log(`Usage: medplum ${argv[2]} <bot-name>`);
45
- return;
46
- }
47
- const botName = argv[3];
48
- const botConfig = readBotConfig(botName);
49
- if (!botConfig) {
50
- console.log(`Error: ${botName} not found`);
51
- return;
52
- }
53
- let bot;
54
- try {
55
- bot = yield medplum.readResource('Bot', botConfig.id);
56
- }
57
- catch (err) {
58
- console.log('Error: ' + (0, core_1.normalizeErrorString)(err));
59
- return;
60
- }
61
- if (commands.includes('save')) {
62
- yield saveBot(medplum, botConfig, bot);
63
- }
64
- if (commands.includes('deploy')) {
65
- yield deployBot(medplum, botConfig, bot);
66
- }
67
- });
30
+ async function runBotCommands(medplum, argv, commands) {
31
+ if (argv.length < 4) {
32
+ console.log(`Usage: medplum ${argv[2]} <bot-name>`);
33
+ return;
34
+ }
35
+ const botName = argv[3];
36
+ const botConfig = readBotConfig(botName);
37
+ if (!botConfig) {
38
+ console.log(`Error: ${botName} not found`);
39
+ return;
40
+ }
41
+ let bot;
42
+ try {
43
+ bot = await medplum.readResource('Bot', botConfig.id);
44
+ }
45
+ catch (err) {
46
+ console.log('Error: ' + (0, core_1.normalizeErrorString)(err));
47
+ return;
48
+ }
49
+ if (commands.includes('save')) {
50
+ await saveBot(medplum, botConfig, bot);
51
+ }
52
+ if (commands.includes('deploy')) {
53
+ await deployBot(medplum, botConfig, bot);
54
+ }
68
55
  }
69
- function saveBot(medplum, botConfig, bot) {
70
- var _a;
71
- return __awaiter(this, void 0, void 0, function* () {
72
- const code = readFileContents(botConfig.source);
73
- if (!code) {
74
- return;
75
- }
76
- try {
77
- console.log('Update bot code.....');
78
- const updateResult = yield medplum.updateResource(Object.assign(Object.assign({}, bot), { code }));
79
- if (!updateResult) {
80
- console.log('Bot not modified');
81
- }
82
- else {
83
- console.log('Success! New bot version: ' + ((_a = updateResult.meta) === null || _a === void 0 ? void 0 : _a.versionId));
84
- }
56
+ async function saveBot(medplum, botConfig, bot) {
57
+ const code = readFileContents(botConfig.source);
58
+ if (!code) {
59
+ return;
60
+ }
61
+ try {
62
+ console.log('Update bot code.....');
63
+ const updateResult = await medplum.updateResource({
64
+ ...bot,
65
+ code,
66
+ });
67
+ if (!updateResult) {
68
+ console.log('Bot not modified');
85
69
  }
86
- catch (err) {
87
- console.log('Update error: ', err);
70
+ else {
71
+ console.log('Success! New bot version: ' + updateResult.meta?.versionId);
88
72
  }
89
- });
73
+ }
74
+ catch (err) {
75
+ console.log('Update error: ', err);
76
+ }
90
77
  }
91
- function deployBot(medplum, botConfig, bot) {
92
- var _a, _b, _c, _d;
93
- return __awaiter(this, void 0, void 0, function* () {
94
- const code = readFileContents((_a = botConfig.dist) !== null && _a !== void 0 ? _a : botConfig.source);
95
- if (!code) {
96
- return;
97
- }
98
- try {
99
- console.log('Deploying bot...');
100
- const deployResult = (yield medplum.post(medplum.fhirUrl('Bot', bot.id, '$deploy'), {
101
- code,
102
- }));
103
- console.log('Deploy result: ' + ((_d = (_c = (_b = deployResult.issue) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.details) === null || _d === void 0 ? void 0 : _d.text));
104
- }
105
- catch (err) {
106
- console.log('Deploy error: ', err);
107
- }
108
- });
78
+ async function deployBot(medplum, botConfig, bot) {
79
+ const code = readFileContents(botConfig.dist ?? botConfig.source);
80
+ if (!code) {
81
+ return;
82
+ }
83
+ try {
84
+ console.log('Deploying bot...');
85
+ const deployResult = (await medplum.post(medplum.fhirUrl('Bot', bot.id, '$deploy'), {
86
+ code,
87
+ }));
88
+ console.log('Deploy result: ' + deployResult.issue?.[0]?.details?.text);
89
+ }
90
+ catch (err) {
91
+ console.log('Deploy error: ', err);
92
+ }
109
93
  }
110
94
  function readBotConfig(botName) {
111
- var _a, _b;
112
- return (_b = (_a = readConfig()) === null || _a === void 0 ? void 0 : _a.bots) === null || _b === void 0 ? void 0 : _b.find((b) => b.name === botName);
95
+ return readConfig()?.bots?.find((b) => b.name === botName);
113
96
  }
114
97
  function readConfig() {
115
98
  const content = readFileContents('medplum.config.json');
@@ -134,4 +117,3 @@ if (require.main === module) {
134
117
  .then(() => main(medplum, process.argv))
135
118
  .catch((err) => console.error('Unhandled error:', err));
136
119
  }
137
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medplum/cli",
3
- "version": "1.0.5",
3
+ "version": "2.0.0",
4
4
  "description": "Medplum Command Line Interface",
5
5
  "author": "Medplum <hello@medplum.com>",
6
6
  "license": "Apache-2.0",
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { MedplumClient, normalizeErrorString } from '@medplum/core';\nimport { Bot, OperationOutcome } from '@medplum/fhirtypes';\nimport dotenv from 'dotenv';\nimport { existsSync, readFileSync } from 'fs';\nimport fetch from 'node-fetch';\nimport { resolve } from 'path';\n\ninterface MedplumConfig {\n readonly bots?: MedplumBotConfig[];\n}\n\ninterface MedplumBotConfig {\n readonly name: string;\n readonly id: string;\n readonly source: string;\n readonly dist?: string;\n}\n\nexport async function main(medplum: MedplumClient, argv: string[]): Promise<void> {\n if (argv.length < 3) {\n console.log('Usage: medplum <command>');\n return;\n }\n\n const command = argv[2];\n if (command === 'save-bot') {\n await runBotCommands(medplum, argv, ['save']);\n } else if (command === 'deploy-bot') {\n await runBotCommands(medplum, argv, ['save', 'deploy']);\n } else {\n console.log(`Unknown command: ${command}`);\n }\n}\n\nasync function runBotCommands(medplum: MedplumClient, argv: string[], commands: string[]): Promise<void> {\n if (argv.length < 4) {\n console.log(`Usage: medplum ${argv[2]} <bot-name>`);\n return;\n }\n\n const botName = argv[3];\n const botConfig = readBotConfig(botName);\n if (!botConfig) {\n console.log(`Error: ${botName} not found`);\n return;\n }\n\n let bot;\n try {\n bot = await medplum.readResource('Bot', botConfig.id);\n } catch (err) {\n console.log('Error: ' + normalizeErrorString(err));\n return;\n }\n\n if (commands.includes('save')) {\n await saveBot(medplum, botConfig, bot);\n }\n\n if (commands.includes('deploy')) {\n await deployBot(medplum, botConfig, bot);\n }\n}\n\nasync function saveBot(medplum: MedplumClient, botConfig: MedplumBotConfig, bot: Bot): Promise<void> {\n const code = readFileContents(botConfig.source);\n if (!code) {\n return;\n }\n\n try {\n console.log('Update bot code.....');\n const updateResult = await medplum.updateResource({\n ...bot,\n code,\n });\n if (!updateResult) {\n console.log('Bot not modified');\n } else {\n console.log('Success! New bot version: ' + updateResult.meta?.versionId);\n }\n } catch (err) {\n console.log('Update error: ', err);\n }\n}\n\nasync function deployBot(medplum: MedplumClient, botConfig: MedplumBotConfig, bot: Bot): Promise<void> {\n const code = readFileContents(botConfig.dist ?? botConfig.source);\n if (!code) {\n return;\n }\n\n try {\n console.log('Deploying bot...');\n const deployResult = (await medplum.post(medplum.fhirUrl('Bot', bot.id as string, '$deploy'), {\n code,\n })) as OperationOutcome;\n console.log('Deploy result: ' + deployResult.issue?.[0]?.details?.text);\n } catch (err) {\n console.log('Deploy error: ', err);\n }\n}\n\nfunction readBotConfig(botName: string): MedplumBotConfig | undefined {\n return readConfig()?.bots?.find((b) => b.name === botName);\n}\n\nfunction readConfig(): MedplumConfig | undefined {\n const content = readFileContents('medplum.config.json');\n if (!content) {\n return undefined;\n }\n return JSON.parse(content);\n}\n\nfunction readFileContents(fileName: string): string | undefined {\n const path = resolve(process.cwd(), fileName);\n if (!existsSync(path)) {\n console.log('Error: File does not exist: ' + path);\n return '';\n }\n return readFileSync(path, 'utf8');\n}\n\nif (require.main === module) {\n dotenv.config();\n const medplum = new MedplumClient({ fetch, baseUrl: process.env['MEDPLUM_BASE_URL'] });\n medplum\n .startClientLogin(process.env['MEDPLUM_CLIENT_ID'] as string, process.env['MEDPLUM_CLIENT_SECRET'] as string)\n .then(() => main(medplum, process.argv))\n .catch((err) => console.error('Unhandled error:', err));\n}\n"]}