@hailer/app-sdk 2.0.0-beta-2 → 2.0.0-beta-4

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 (60) hide show
  1. package/lib/app-sdk.js +2 -2
  2. package/lib/app-sdk.js.map +3 -3
  3. package/lib/modules/app.d.ts +8 -4
  4. package/lib/modules/product-installed.d.ts +40 -0
  5. package/lib/modules/product-version.d.ts +38 -0
  6. package/lib/modules/product.d.ts +4 -4
  7. package/lib/modules/public/product-version.d.ts +16 -0
  8. package/lib/modules/public/product.d.ts +2 -2
  9. package/lib/modules/public/version.d.ts +16 -0
  10. package/lib/modules/version.d.ts +16 -0
  11. package/lib/modules/workspace.d.ts +4 -2
  12. package/lib/src/constants.d.ts +7 -0
  13. package/lib/src/hailer-api.d.ts +92 -0
  14. package/lib/{index.js → src/index.d.ts} +0 -1
  15. package/lib/src/modules/activity/kanban.d.ts +36 -0
  16. package/lib/src/modules/activity.d.ts +83 -0
  17. package/lib/src/modules/app.d.ts +12 -0
  18. package/lib/src/modules/insight.d.ts +36 -0
  19. package/lib/src/modules/network.d.ts +14 -0
  20. package/lib/src/modules/permission.d.ts +9 -0
  21. package/lib/src/modules/process.d.ts +38 -0
  22. package/lib/src/modules/product-installed.d.ts +40 -0
  23. package/lib/src/modules/product-version.d.ts +16 -0
  24. package/lib/src/modules/product.d.ts +104 -0
  25. package/lib/src/modules/public/app.d.ts +17 -0
  26. package/lib/src/modules/public/form.d.ts +31 -0
  27. package/lib/src/modules/public/insight.d.ts +30 -0
  28. package/lib/src/modules/public/product-version.d.ts +16 -0
  29. package/lib/src/modules/public/product.d.ts +27 -0
  30. package/lib/src/modules/public.d.ts +22 -0
  31. package/lib/src/modules/ui/activity.d.ts +30 -0
  32. package/lib/src/modules/ui/files.d.ts +18 -0
  33. package/lib/src/modules/ui/snackbar.d.ts +18 -0
  34. package/lib/src/modules/ui.d.ts +17 -0
  35. package/lib/src/modules/user.d.ts +36 -0
  36. package/lib/src/modules/workflow.d.ts +24 -0
  37. package/lib/src/types.d.ts +381 -0
  38. package/lib/tools/publish.cjs +219 -183
  39. package/lib/tools/publish.cjs.map +7 -0
  40. package/lib/types.d.ts +9 -3
  41. package/lib/version.d.ts +0 -0
  42. package/package.json +2 -2
  43. package/lib/constants.js +0 -3
  44. package/lib/hailer-api.js +0 -147
  45. package/lib/modules/activity/kanban.js +0 -88
  46. package/lib/modules/activity.js +0 -170
  47. package/lib/modules/insight.js +0 -73
  48. package/lib/modules/network.js +0 -74
  49. package/lib/modules/process.js +0 -104
  50. package/lib/modules/public/form.js +0 -117
  51. package/lib/modules/public/insight.js +0 -114
  52. package/lib/modules/team.d.ts +0 -17
  53. package/lib/modules/ui/activity.js +0 -72
  54. package/lib/modules/ui.js +0 -10
  55. package/lib/modules/user.js +0 -133
  56. package/lib/public-api.d.ts +0 -16
  57. package/lib/public-api.js +0 -13
  58. package/lib/tools/minimal-password-prompt.d.ts +0 -1
  59. package/lib/tools/minimal-password-prompt.js +0 -50
  60. package/lib/types.js +0 -28
@@ -1,197 +1,233 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+
25
+ // tools/publish.ts
26
+ var import_cli = require("@hailer/cli");
27
+ var request = __toESM(require("request"));
28
+ var import_fs = require("fs");
29
+
30
+ // tools/minimal-password-prompt.ts
31
+ var stdin = process.stdin;
32
+ var stdout = process.stdout;
33
+ var captureStdin = (onData) => {
34
+ stdin.setEncoding("utf-8");
35
+ stdin.setRawMode(true);
36
+ stdin.on("data", onData);
37
+ stdin.resume();
38
+ };
39
+ var releaseStdin = (onData) => {
40
+ stdin.pause();
41
+ stdin.removeListener("data", onData);
42
+ stdin.setRawMode(false);
43
+ stdout.write("\n");
44
+ };
45
+ var prompt = (question, ctrlcExits = true) => new Promise((resolve, reject) => {
46
+ let input = "";
47
+ const onData = (data) => {
48
+ switch (data) {
49
+ case "\n":
50
+ case "\r":
51
+ case "":
52
+ releaseStdin(onData);
53
+ resolve(input);
54
+ break;
55
+ case "":
56
+ releaseStdin(onData);
57
+ if (ctrlcExits) {
58
+ process.exit();
59
+ } else {
60
+ reject(new Error("Ctrl+C"));
61
+ }
62
+ break;
63
+ case "\b":
64
+ case "\x7F":
65
+ input = input.slice(0, -1);
66
+ break;
67
+ default:
68
+ input += data;
7
69
  }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
70
+ ;
71
+ };
72
+ captureStdin(onData);
73
+ stdout.write(question);
17
74
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const cli_1 = require("@hailer/cli");
27
- const request = __importStar(require("request"));
28
- const fs_1 = require("fs");
29
- const minimal_password_prompt_1 = require("minimal-password-prompt");
30
- const util_1 = require("util");
31
- const readline_1 = require("readline");
75
+
76
+ // tools/publish.ts
77
+ var import_util = require("util");
78
+ var import_readline = require("readline");
32
79
  if (!process.env.EMAIL && !process.env.LOCAL) {
33
- console.log('Please set environment variable EMAIL to Hailer user name.');
34
- console.log('');
35
- console.log('Usage:');
36
- console.log(' EMAIL=user.name@mail.com npm run publish-production');
37
- process.exit(10);
80
+ console.log("Please set environment variable EMAIL to Hailer user name.");
81
+ console.log("");
82
+ console.log("Usage:");
83
+ console.log(" EMAIL=user.name@mail.com npm run publish-production");
84
+ process.exit(10);
38
85
  }
39
86
  (async () => {
40
- let email = process.env.EMAIL;
41
- let password = process.env.LOCAL || await (0, minimal_password_prompt_1.prompt)('enter password for ' + email + ': ');
42
- // Market code
43
- const market = process.env.MARKET === 'true';
44
- const appPackageFile = process.argv[2];
45
- /** Alternatives: `--development` | `--staging` | `--production` */
46
- const mode = process.argv[3];
47
- let host = 'https://localhost:9443';
48
- switch (mode) {
49
- case '--development':
50
- host = 'https://testapi.hailer.biz';
51
- break;
52
- case '--staging':
53
- host = 'https://api.hailer.biz';
54
- break;
55
- case '--production':
56
- host = 'https://api.hailer.com';
57
- break;
87
+ let email = process.env.EMAIL;
88
+ let password = process.env.LOCAL || await prompt("enter password for " + email + ": ");
89
+ const market = process.env.MARKET === "true";
90
+ const appPackageFile = process.argv[2];
91
+ const mode = process.argv[3];
92
+ let host = process.env.HOST || "https://localhost:9443";
93
+ switch (mode) {
94
+ case "--development":
95
+ host = process.env.HOST || "https://testapi.hailer.biz";
96
+ break;
97
+ case "--staging":
98
+ host = process.env.HOST || "https://api.hailer.biz";
99
+ break;
100
+ case "--production":
101
+ host = process.env.HOST || "https://api.hailer.com";
102
+ break;
103
+ }
104
+ if (process.env.LOCAL || mode === "--local") {
105
+ console.log("Overriding credentials with local settings!");
106
+ email = "el@hailero.es";
107
+ password = "el@hailero.es";
108
+ host = process.env.HOST || "https://api.hailer.local.gd";
109
+ }
110
+ const cli = await import_cli.Client.create({ host, username: email, password }).catch(
111
+ (error) => {
112
+ if (error.msg === "Invalid Login Data") {
113
+ console.log("Invalid username or password when logging into Hailer.");
114
+ } else {
115
+ console.log("Hailer Cli Error:", error);
116
+ }
117
+ process.exit(8);
58
118
  }
59
- if (process.env.LOCAL || mode === '--local') {
60
- console.log('Overriding credentials with local settings!');
61
- email = 'el@hailero.es';
62
- password = 'thispasswordshouldbestrongenough';
63
- host = 'http://localhost:1337';
119
+ );
120
+ if (!appPackageFile?.endsWith(".tgz")) {
121
+ console.log("Failed getting .tgz file, found:", appPackageFile);
122
+ process.exit(7);
123
+ }
124
+ const manifest = JSON.parse((0, import_fs.readFileSync)("./dist/manifest.json").toString());
125
+ const content = (0, import_fs.readFileSync)(appPackageFile);
126
+ const info = await cli.request("v2.core.init", [["network", "networks", "apps"]]);
127
+ if (market) {
128
+ if (!manifest.version) {
129
+ manifest.version = "";
130
+ manifest.versionDescription = "";
131
+ const updatedManifestContent = JSON.stringify(manifest, null, 2);
132
+ (0, import_fs.writeFileSync)("./public/manifest.json", updatedManifestContent, "utf-8");
133
+ console.log("");
134
+ console.log("Please set version & versionDescription in file public/manifest.json! You have added MARKET=true in your publish string.");
135
+ console.log("");
136
+ process.exit(10);
64
137
  }
65
- const cli = await cli_1.Client.create({ host, username: email, password }).catch((error) => {
66
- if (error.msg === 'Invalid Login Data') {
67
- console.log('Invalid username or password when logging into Hailer.');
68
- }
69
- else {
70
- console.log('Hailer Cli Error:', error);
138
+ }
139
+ const getAppById = (manifestAppId) => {
140
+ for (const appMap of Object.values(info.apps)) {
141
+ for (const [appId, app2] of Object.entries(appMap)) {
142
+ if (appId === manifestAppId) {
143
+ return app2;
71
144
  }
72
- process.exit(8);
73
- });
74
- if (!appPackageFile?.endsWith('.tgz')) {
75
- console.log('Failed getting .tgz file, found:', appPackageFile);
76
- process.exit(7);
145
+ }
77
146
  }
78
- const manifest = JSON.parse((0, fs_1.readFileSync)('./dist/manifest.json').toString());
79
- const content = (0, fs_1.readFileSync)(appPackageFile);
80
- const info = await cli.request('v2.core.init', [['network', 'networks', 'apps']]);
81
- // Market code
82
- if (market) {
83
- // Check if version exist in manifest.json. If not, add empty version and let user fill it in
84
- if (!manifest.version) {
85
- manifest.version = '';
86
- manifest.versionDescription = '';
87
- // Convert the modified object back to JSON
88
- const updatedManifestContent = JSON.stringify(manifest, null, 2);
89
- // Write the updated JSON content back to manifest.json
90
- (0, fs_1.writeFileSync)('./public/manifest.json', updatedManifestContent, 'utf-8');
91
- console.log('');
92
- console.log('Please set version & versionDescription in file public/manifest.json! You have added MARKET=true in your publish string.');
93
- console.log('');
94
- process.exit(10);
95
- }
147
+ return null;
148
+ };
149
+ const app = getAppById(manifest.appId);
150
+ if (!app) {
151
+ console.log("The app was not found using this user:", email);
152
+ process.exit(2);
153
+ }
154
+ const personalApp = !app.cid;
155
+ console.log("Publishing App");
156
+ console.log(" Id:", manifest.appId);
157
+ console.log(" Name:", app.name);
158
+ if (personalApp) {
159
+ console.log(" Workspace: any (personal app)");
160
+ } else {
161
+ console.log(" Workspace:", info.networks[app.cid]?.name, "(" + app.cid + ")");
162
+ }
163
+ console.log(" Environment:", host);
164
+ console.log();
165
+ if (market) {
166
+ console.log(" Note: Also publishing app to Hailer market");
167
+ }
168
+ const promptOverwriteQuestion = async () => {
169
+ if (process.argv.includes("--yes")) {
170
+ return true;
96
171
  }
97
- const getAppById = (manifestAppId) => {
98
- for (const appMap of Object.values(info.apps)) {
99
- for (const [appId, app] of Object.entries(appMap)) {
100
- if (appId === manifestAppId) {
101
- return app;
102
- }
103
- }
172
+ return new Promise((resolve) => {
173
+ const rl = (0, import_readline.createInterface)(process.stdin, process.stdout);
174
+ rl.setPrompt("Overwrite the app? (Y/n): ");
175
+ rl.prompt();
176
+ rl.on("line", (line) => {
177
+ if (line.trim().toLocaleLowerCase().startsWith("n")) {
178
+ resolve(false);
179
+ } else {
180
+ resolve(true);
104
181
  }
105
- return null;
106
- };
107
- const app = getAppById(manifest.appId);
108
- if (!app) {
109
- console.log('The app was not found using this user:', email);
110
- process.exit(2);
111
- }
112
- const personalApp = !app.cid;
113
- console.log('Publishing App');
114
- console.log(' Id:', manifest.appId);
115
- console.log(' Name:', app.name);
116
- if (personalApp) {
117
- console.log(' Workspace: any (personal app)');
118
- }
119
- else {
120
- console.log(' Workspace:', info.networks[app.cid]?.name, '(' + app.cid + ')');
121
- }
122
- console.log(' Environment:', host);
123
- console.log();
124
- // Market code
125
- if (market) {
126
- console.log(' Note: Also publishing app to Hailer market');
127
- }
128
- /** Default to publish (yes) */
129
- const promptOverwriteQuestion = () => {
130
- return new Promise(resolve => {
131
- const rl = (0, readline_1.createInterface)(process.stdin, process.stdout);
132
- rl.setPrompt('Overwrite the app? (Y/n): ');
133
- rl.prompt();
134
- rl.on('line', (line) => {
135
- if (line.trim().toLocaleLowerCase().startsWith('n')) {
136
- resolve(false);
137
- }
138
- else {
139
- resolve(true);
140
- }
141
- rl.close();
142
- });
143
- });
144
- };
145
- const shouldOverwrite = await promptOverwriteQuestion();
146
- if (!shouldOverwrite) {
147
- console.log('Aborted publishing app.');
148
- process.exit(0);
149
- }
150
- await new Promise((resolve, reject) => {
151
- request.post({
152
- uri: host + '/app/publish',
153
- headers: { hlrkey: cli.sessionKey },
154
- formData: {
155
- file: {
156
- value: content,
157
- options: {
158
- filename: appPackageFile,
159
- }
160
- },
161
- appId: manifest.appId,
162
- // Market code
163
- publishMarket: market.toString(),
164
- }
165
- }, function (error, resp, body) {
166
- if (error) {
167
- console.log('Publish error uploading file:', error);
168
- process.exit(9);
169
- }
170
- let response;
171
- let infoMarket = '';
172
- try {
173
- response = JSON.parse(body);
174
- // Market code
175
- if (response.manifest && response.manifest.targetId) {
176
- infoMarket = 'Note! Use targetId in public/manifest.json file when creating the product in market!';
177
- // Write targetId to manifest.json
178
- manifest.targetId = response.manifest.targetId;
179
- // Convert the modified object back to JSON
180
- const updatedManifestContent = JSON.stringify(manifest, null, 2);
181
- // Write the updated JSON content back to manifest.json
182
- (0, fs_1.writeFileSync)('./public/manifest.json', updatedManifestContent, 'utf-8');
183
- }
184
- }
185
- catch (error) {
186
- // ingore
187
- }
188
- console.log('App info:', (0, util_1.inspect)(response, { depth: 10, colors: true }));
189
- console.log();
190
- console.log(infoMarket);
191
- console.log();
192
- console.log('Published successfully!');
193
- resolve();
194
- });
182
+ rl.close();
183
+ });
184
+ });
185
+ };
186
+ const shouldOverwrite = await promptOverwriteQuestion();
187
+ if (!shouldOverwrite) {
188
+ console.log("Aborted publishing app.");
189
+ process.exit(0);
190
+ }
191
+ await new Promise((resolve, reject) => {
192
+ request.post({
193
+ uri: host + "/app/publish",
194
+ headers: { hlrkey: cli.sessionKey },
195
+ formData: {
196
+ file: {
197
+ value: content,
198
+ options: {
199
+ filename: appPackageFile
200
+ }
201
+ },
202
+ appId: manifest.appId,
203
+ // Market code
204
+ publishMarket: market.toString()
205
+ }
206
+ }, function(error, resp, body) {
207
+ if (error) {
208
+ console.log("Publish error uploading file:", error);
209
+ process.exit(9);
210
+ }
211
+ let response;
212
+ let infoMarket = "";
213
+ try {
214
+ response = JSON.parse(body);
215
+ if (response.manifest && response.manifest.targetId) {
216
+ infoMarket = "Note! Use targetId in public/manifest.json file when creating the product in market!";
217
+ manifest.targetId = response.manifest.targetId;
218
+ const updatedManifestContent = JSON.stringify(manifest, null, 2);
219
+ (0, import_fs.writeFileSync)("./public/manifest.json", updatedManifestContent, "utf-8");
220
+ }
221
+ } catch (error2) {
222
+ }
223
+ console.log("App info:", (0, import_util.inspect)(response, { depth: 10, colors: true }));
224
+ console.log();
225
+ console.log(infoMarket);
226
+ console.log();
227
+ console.log("Published successfully!");
228
+ resolve();
195
229
  });
196
- cli.disconnect();
230
+ });
231
+ cli.disconnect();
197
232
  })();
233
+ //# sourceMappingURL=publish.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../tools/publish.ts", "../../tools/minimal-password-prompt.ts"],
4
+ "sourcesContent": ["import { Client } from '@hailer/cli';\nimport * as request from 'request';\nimport { readFileSync, writeFileSync } from 'fs';\nimport { prompt } from './minimal-password-prompt';\nimport { inspect } from 'util';\nimport { createInterface } from 'readline';\n\nif (!process.env.EMAIL && !process.env.LOCAL) {\n console.log('Please set environment variable EMAIL to Hailer user name.');\n console.log('');\n console.log('Usage:');\n console.log(' EMAIL=user.name@mail.com npm run publish-production');\n process.exit(10);\n}\n\n(async () => {\n\n let email = process.env.EMAIL;\n let password = process.env.LOCAL || await prompt('enter password for ' + email + ': ');\n\n // Market code\n const market = process.env.MARKET === 'true';\n\n const appPackageFile = process.argv[2];\n\n /** Alternatives: `--development` | `--staging` | `--production` */\n const mode = process.argv[3];\n\n let host = process.env.HOST || 'https://localhost:9443';\n\n switch (mode) {\n case '--development':\n host = process.env.HOST || 'https://testapi.hailer.biz';\n break;\n case '--staging':\n host = process.env.HOST || 'https://api.hailer.biz';\n break;\n case '--production':\n host = process.env.HOST || 'https://api.hailer.com';\n break;\n }\n\n if (process.env.LOCAL || mode === '--local') {\n console.log('Overriding credentials with local settings!');\n email = 'el@hailero.es';\n password = 'el@hailero.es';\n host = process.env.HOST || 'https://api.hailer.local.gd';\n }\n\n const cli = await Client.create({ host, username: email, password }).catch(\n (error) => {\n if (error.msg === 'Invalid Login Data') {\n console.log('Invalid username or password when logging into Hailer.');\n } else {\n console.log('Hailer Cli Error:', error);\n }\n\n process.exit(8);\n }\n );\n\n if (!appPackageFile?.endsWith('.tgz')) {\n console.log('Failed getting .tgz file, found:', appPackageFile);\n process.exit(7);\n }\n\n const manifest = JSON.parse(readFileSync('./dist/manifest.json').toString());\n const content = readFileSync(appPackageFile);\n const info = await cli.request('v2.core.init', [['network', 'networks', 'apps']]);\n\n // Market code\n if (market) {\n // Check if version exist in manifest.json. If not, add empty version and let user fill it in\n if (!manifest.version) {\n manifest.version = '';\n manifest.versionDescription = '';\n\n // Convert the modified object back to JSON\n const updatedManifestContent = JSON.stringify(manifest, null, 2);\n \n // Write the updated JSON content back to manifest.json\n writeFileSync('./public/manifest.json', updatedManifestContent, 'utf-8');\n\n console.log('');\n console.log('Please set version & versionDescription in file public/manifest.json! You have added MARKET=true in your publish string.');\n console.log('');\n process.exit(10);\n }\n }\n\n const getAppById = (manifestAppId: string): { _id: string, name: string, cid: string } | null => {\n for (const appMap of Object.values(info.apps)) {\n for (const [appId, app] of Object.entries(appMap as any)) {\n if (appId === manifestAppId) {\n return app as any;\n }\n }\n }\n\n return null;\n }\n\n const app = getAppById(manifest.appId);\n\n if (!app) {\n console.log('The app was not found using this user:', email);\n process.exit(2);\n }\n\n const personalApp = !app.cid;\n\n console.log('Publishing App');\n console.log(' Id:', manifest.appId);\n console.log(' Name:', app.name);\n if (personalApp) {\n console.log(' Workspace: any (personal app)');\n } else {\n console.log(' Workspace:', info.networks[app.cid]?.name, '(' + app.cid + ')');\n }\n console.log(' Environment:', host);\n console.log();\n\n // Market code\n if (market) {\n console.log(' Note: Also publishing app to Hailer market');\n }\n\n /** Default to publish (yes) */\n const promptOverwriteQuestion = async () => {\n if (process.argv.includes('--yes')) {\n return true;\n }\n\n return new Promise<boolean>(resolve => {\n const rl = createInterface(process.stdin, process.stdout);\n\n rl.setPrompt('Overwrite the app? (Y/n): ');\n rl.prompt();\n rl.on('line', (line) => {\n if (line.trim().toLocaleLowerCase().startsWith('n')) {\n resolve(false);\n } else {\n resolve(true);\n }\n rl.close();\n });\n });\n }\n\n const shouldOverwrite = await promptOverwriteQuestion();\n\n if (!shouldOverwrite) {\n console.log('Aborted publishing app.');\n process.exit(0);\n }\n\n await new Promise<void>((resolve, reject) => {\n request.post({\n uri: host + '/app/publish',\n headers: { hlrkey: cli.sessionKey },\n formData: {\n file: {\n value: content,\n options: {\n filename: appPackageFile,\n }\n },\n appId: manifest.appId,\n // Market code\n publishMarket: market.toString(),\n }\n }, function (error, resp, body) {\n if (error) {\n console.log('Publish error uploading file:', error);\n process.exit(9);\n }\n\n let response;\n let infoMarket = '';\n\n try {\n response = JSON.parse(body);\n\n // Market code\n if (response.manifest && response.manifest.targetId) {\n infoMarket = 'Note! Use targetId in public/manifest.json file when creating the product in market!';\n // Write targetId to manifest.json\n manifest.targetId = response.manifest.targetId;\n\n // Convert the modified object back to JSON\n const updatedManifestContent = JSON.stringify(manifest, null, 2);\n \n // Write the updated JSON content back to manifest.json\n writeFileSync('./public/manifest.json', updatedManifestContent, 'utf-8');\n }\n } catch (error) {\n // ingore\n }\n\n console.log('App info:', inspect(response, { depth: 10, colors: true }));\n console.log();\n console.log(infoMarket);\n console.log();\n console.log('Published successfully!');\n resolve();\n });\n });\n\n cli.disconnect();\n})();\n", "// Re-written to TypeScript to fix typing issue, see: https://www.npmjs.com/package/minimal-password-prompt/v/1.1.0\n\nconst stdin = process.stdin;\nconst stdout = process.stdout;\n\nconst captureStdin = (onData: (data: string) => void) => {\n stdin.setEncoding('utf-8');\n stdin.setRawMode(true);\n stdin.on('data', onData);\n stdin.resume();\n};\n\nconst releaseStdin = (onData: (data: string) => void) => {\n stdin.pause();\n stdin.removeListener('data', onData);\n stdin.setRawMode(false);\n stdout.write('\\n');\n};\n\nexport const prompt = (question: string, ctrlcExits = true): Promise<string> => (\n new Promise((resolve, reject) => {\n let input = '';\n const onData = (data: string) => {\n switch (data) {\n case '\\u000A': // \\n\n case '\\u000D': // \\r\n case '\\u0004': // Ctrl+D\n releaseStdin(onData);\n resolve(input);\n break;\n case '\\u0003': // Ctrl+C\n releaseStdin(onData);\n if (ctrlcExits) { // exit or raise error\n process.exit();\n } else {\n reject(new Error('Ctrl+C'));\n }\n break;\n case '\\u0008': // Backspace\n case '\\u007F': // Delete\n input = input.slice(0, -1);\n break;\n default: // any other\n input += data;\n };\n };\n captureStdin(onData);\n stdout.write(question);\n })\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["app", "error"]
7
+ }
package/lib/types.d.ts CHANGED
@@ -408,18 +408,24 @@ export interface Signal {
408
408
  }
409
409
  export interface Product extends ProductType {
410
410
  _id: string;
411
- targetId: string;
411
+ targetId?: string;
412
412
  name: string;
413
413
  description?: string;
414
414
  icon?: string;
415
415
  images?: string[];
416
416
  externalUrl?: string;
417
417
  publisher?: string;
418
+ ctaLabel: string;
419
+ ctaLink: string;
418
420
  /** Available or not in app store */
419
421
  public?: boolean;
420
- workspaceId?: string;
422
+ cid?: string;
421
423
  uid: string;
422
424
  }
425
+ export interface ProductListResponse {
426
+ products: Product[];
427
+ totalCount: number;
428
+ }
423
429
  export interface ProductSearchOption {
424
430
  limit?: number;
425
431
  skip?: number;
@@ -434,7 +440,7 @@ export interface ProductSearchFilter extends ProductType {
434
440
  uid?: string;
435
441
  }
436
442
  export interface ProductType {
437
- type?: 'app' | 'template' | 'document-template';
443
+ type?: 'app' | 'template' | 'integration' | 'expert' | 'ai-agent';
438
444
  }
439
445
  export interface ProductVersion {
440
446
  _id: string;
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hailer/app-sdk",
3
- "version": "2.0.0-beta-2",
3
+ "version": "2.0.0-beta-4",
4
4
  "description": "SDK for building Hailer Apps",
5
5
  "author": "",
6
6
  "license": "ISC",
@@ -11,7 +11,7 @@
11
11
  "./lib/**/*"
12
12
  ],
13
13
  "scripts": {
14
- "build": "tsc --project tools/tsconfig.json && mv lib/tools/publish.js lib/tools/publish.cjs && tsc && esbuild src/index.ts --bundle --format=esm --minify --sourcemap --outfile=lib/app-sdk.js",
14
+ "build": "esbuild tools/publish.ts --platform=node --packages=external --bundle --format=cjs --sourcemap --outfile=lib/tools/publish.cjs && tsc && esbuild src/index.ts --bundle --format=esm --minify --sourcemap --outfile=lib/app-sdk.js",
15
15
  "prepublishOnly": "npm run build",
16
16
  "watch": "concurrently --kill-others \"npm run watch-tsc\" \"npm run watch-esbuild\"",
17
17
  "watch-tsc": "tsc --watch",
package/lib/constants.js DELETED
@@ -1,3 +0,0 @@
1
- // Changing this will be a breaking change
2
- export var DEFAULT_API_VERSION = 1;
3
- export var DEFAULT_ALLOWED_URLS = ['https://app.hailer.com', 'https://next.hailer.com', 'https://testapp.hailer.biz', 'https://app.hailer.biz'];