@webos-tools/cli 3.2.0 → 3.2.1
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/.eslintignore +1 -1
- package/.eslintrc.js +52 -52
- package/.vscode/c_cpp_properties.json +21 -0
- package/.vscode/launch.json +97 -0
- package/.vscode/settings.json +13 -0
- package/.vscode/tasks.json +32 -0
- package/APIs.js +79 -79
- package/CHANGELOG.md +11 -5
- package/LICENSE +201 -201
- package/bin/ares-config.js +1 -1
- package/bin/ares-device-info.js +30 -30
- package/bin/ares-generate.js +274 -274
- package/bin/ares-inspect.js +179 -179
- package/bin/ares-install.js +223 -223
- package/bin/ares-log.js +259 -259
- package/bin/ares-pull.js +156 -156
- package/bin/ares-push.js +155 -155
- package/bin/ares-server.js +174 -174
- package/bin/ares-setup-device.js +6 -10
- package/bin/ares-shell.js +132 -132
- package/bin/ares.js +166 -166
- package/files/conf/ares.json +1 -2
- package/files/conf/ipk.json +30 -30
- package/files/conf/novacom-devices.json +2 -2
- package/files/conf/query/query-app.json +14 -14
- package/files/conf/query/query-hosted.json +18 -18
- package/files/conf/query/query-package.json +10 -10
- package/files/conf/query/query-service.json +6 -6
- package/files/conf/webos_emul +27 -27
- package/files/conf-base/env/sdk-apollo.json +8 -8
- package/files/conf-base/env/sdk-ose.json +8 -8
- package/files/conf-base/env/sdk-tv.json +8 -8
- package/files/conf-base/profile/config-apollo.json +29 -29
- package/files/conf-base/profile/config-ose.json +29 -29
- package/files/conf-base/profile/config-tv.json +31 -31
- package/files/conf-base/query/query-app.json +14 -14
- package/files/conf-base/query/query-hosted.json +18 -18
- package/files/conf-base/query/query-package.json +10 -10
- package/files/conf-base/query/query-service.json +6 -6
- package/files/conf-base/query/signage/query-app.json +1 -1
- package/files/conf-base/query/signage/query-service.json +1 -1
- package/files/conf-base/template-conf/ose-templates.json +67 -67
- package/files/conf-base/template-conf/tv-sdk-templates.json +57 -57
- package/files/help/ares-device.help +109 -109
- package/files/help/ares-install.help +95 -95
- package/files/help/ares-launch.help +1 -1
- package/files/help/ares-log-pmlogd.help +84 -84
- package/files/help/ares-log.help +101 -101
- package/files/help/ares-novacom.help +68 -68
- package/files/help/ares-pull.help +38 -38
- package/files/help/ares-push.help +38 -38
- package/files/help/ares-server.help +44 -44
- package/files/help/ares-shell.help +42 -42
- package/files/help/ares.help +52 -52
- package/files/help/readme.help +23 -23
- package/files/schema/ApplicationDescription.schema +319 -319
- package/files/templates/apollo-sdk-templates/appinfo/appinfo.json +10 -10
- package/files/templates/apollo-sdk-templates/bootplate-web/index.html +88 -88
- package/files/templates/apollo-sdk-templates/hosted-webapp/index.html +13 -13
- package/files/templates/apollo-sdk-templates/js-service/helloclient.js +31 -31
- package/files/templates/apollo-sdk-templates/js-service/helloworld_webos_service.js +188 -188
- package/files/templates/apollo-sdk-templates/serviceinfo/package.json +11 -11
- package/files/templates/apollo-sdk-templates/serviceinfo/services.json +8 -8
- package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -10
- package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -88
- package/files/templates/ose-sdk-templates/hosted-webapp/index.html +13 -13
- package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -31
- package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -188
- package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -68
- package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -10
- package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -11
- package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -8
- package/files/templates/signage-sdk-templates/Backlight_Scheduling/index.html +1 -1
- package/files/templates/signage-sdk-templates/Backlight_Scheduling/scheduler.js +2 -3
- package/files/templates/signage-sdk-templates/File_Explorer/index.html +1 -33
- package/files/templates/signage-sdk-templates/File_Explorer/js/Root.js +0 -9
- package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -10
- package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -58
- package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -202
- package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -14
- package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +39 -39
- package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +3 -3
- package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -11
- package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -8
- package/lib/base/ares.html +40 -40
- package/lib/base/cli-appdata.js +290 -289
- package/lib/base/cli-control.js +44 -44
- package/lib/base/common-tools.js +29 -29
- package/lib/base/error-handler.js +265 -265
- package/lib/base/file-watcher.js +155 -155
- package/lib/base/help-format.js +147 -147
- package/lib/base/luna.js +178 -178
- package/lib/base/novacom.js +4 -4
- package/lib/base/sdkenv.js +59 -59
- package/lib/base/server.js +137 -137
- package/lib/base/setup-device.js +2 -2
- package/lib/base/version-tools.js +79 -79
- package/lib/device.js +1419 -1419
- package/lib/generator.js +1 -1
- package/lib/inspect.js +493 -493
- package/lib/log.js +584 -584
- package/lib/package.js +61 -7
- package/lib/pull.js +231 -231
- package/lib/pusher.js +210 -210
- package/lib/session.js +74 -74
- package/lib/shell.js +193 -193
- package/lib/tar-filter-pack.js +62 -62
- package/lib/util/copy.js +31 -31
- package/lib/util/createFileName.js +40 -40
- package/lib/util/eof.js +30 -30
- package/lib/util/json.js +63 -63
- package/lib/util/merge.js +14 -14
- package/lib/util/objclone.js +40 -40
- package/lib/util/spinner.js +37 -37
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/scripts/postinstall.js +24 -24
- package/spec/helpers/reporter.js +65 -65
- package/spec/jsSpecs/apiTest/generator.spec.js +372 -372
- package/spec/jsSpecs/apiTest/inspector.spec.js +89 -89
- package/spec/jsSpecs/apiTest/installer.spec.js +67 -67
- package/spec/jsSpecs/apiTest/launcher.spec.js +150 -150
- package/spec/jsSpecs/apiTest/packager.spec.js +194 -194
- package/spec/jsSpecs/apiTest/puller.spec.js +101 -101
- package/spec/jsSpecs/apiTest/pusher.spec.js +103 -103
- package/spec/jsSpecs/apiTest/server.spec.js +115 -115
- package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -93
- package/spec/jsSpecs/apiTest/shell.spec.js +49 -49
- package/spec/jsSpecs/ares-config.spec.js +88 -88
- package/spec/jsSpecs/ares-device.spec.js +443 -443
- package/spec/jsSpecs/ares-generate.spec.js +397 -401
- package/spec/jsSpecs/ares-inspect.spec.js +252 -252
- package/spec/jsSpecs/ares-install.spec.js +150 -150
- package/spec/jsSpecs/ares-log.spec.js +824 -824
- package/spec/jsSpecs/ares-novacom.spec.js +149 -149
- package/spec/jsSpecs/ares-pull.spec.js +157 -157
- package/spec/jsSpecs/ares-push.spec.js +146 -146
- package/spec/jsSpecs/ares-setup-device.spec.js +1 -0
- package/spec/jsSpecs/ares-shell.spec.js +220 -220
- package/spec/jsSpecs/ares.spec.js +83 -83
- package/spec/support/jasmine.json +22 -22
- package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -9
- package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +8 -8
- package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -2
- package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -9
- package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -9
- package/spec/tempFiles/sign/sign.crt +32 -32
- package/spec/tempFiles/sign/signPriv.key +52 -52
- package/spec/test_data/ares-generate.json +58 -91
- package/spec/test_data/ares.json +50 -50
- package/webos-tools-cli-3.2.1.tgz +0 -0
- package/webos-tools-cli-3.2.0.tgz +0 -0
|
@@ -1,188 +1,188 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
-
*
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// helloworld_webos_service.js
|
|
8
|
-
// is simple service, based on low-level luna-bus API
|
|
9
|
-
|
|
10
|
-
// eslint-disable-next-line import/no-unresolved
|
|
11
|
-
const pkgInfo = require('./package.json');
|
|
12
|
-
const Service = require('webos-service');
|
|
13
|
-
|
|
14
|
-
const service = new Service(pkgInfo.name); // Create service by service name on package.json
|
|
15
|
-
const logHeader = "[" + pkgInfo.name + "]";
|
|
16
|
-
let greeting = "Hello, World!";
|
|
17
|
-
|
|
18
|
-
// a method that always returns the same value
|
|
19
|
-
service.register("hello", function(message) {
|
|
20
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/hello");
|
|
21
|
-
console.log("In hello callback");
|
|
22
|
-
const name = message.payload.name ? message.payload.name : "World";
|
|
23
|
-
|
|
24
|
-
message.respond({
|
|
25
|
-
returnValue: true,
|
|
26
|
-
Response: "Hello, " + name + "!"
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// set some state in the service
|
|
31
|
-
service.register("/config/setGreeting", function(message) {
|
|
32
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/config/setGreeting");
|
|
33
|
-
console.log("In setGreeting callback");
|
|
34
|
-
if (message.payload.greeting) {
|
|
35
|
-
greeting = message.payload.greeting;
|
|
36
|
-
} else {
|
|
37
|
-
message.respond({
|
|
38
|
-
returnValue: false,
|
|
39
|
-
errorText: "argument 'greeting' is required",
|
|
40
|
-
errorCode: 1
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
message.respond({
|
|
44
|
-
returnValue: true,
|
|
45
|
-
greeting: greeting
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// call another service
|
|
50
|
-
service.register("time", function(message) {
|
|
51
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/time");
|
|
52
|
-
console.log("time callback");
|
|
53
|
-
service.call("luna://com.webos.service.systemservice/clock/getTime", {}, function(m2) {
|
|
54
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.systemservice/clock/getTime");
|
|
55
|
-
const response = "You appear to have your UTC set to: " + m2.payload.utc;
|
|
56
|
-
console.log(response);
|
|
57
|
-
message.respond({message: response});
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// handle subscription requests
|
|
62
|
-
const subscriptions = {};
|
|
63
|
-
let interval;
|
|
64
|
-
let x = 1;
|
|
65
|
-
function createInterval() {
|
|
66
|
-
if (interval) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
console.log(logHeader, "create_interval");
|
|
70
|
-
console.log("create new interval");
|
|
71
|
-
interval = setInterval(function() {
|
|
72
|
-
sendResponses();
|
|
73
|
-
}, 1000);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// send responses to each subscribed client
|
|
77
|
-
function sendResponses() {
|
|
78
|
-
console.log(logHeader, "send_response");
|
|
79
|
-
console.log("Sending responses, subscription count=" + Object.keys(subscriptions).length);
|
|
80
|
-
for (const i in subscriptions) {
|
|
81
|
-
if (Object.prototype.hasOwnProperty.call(subscriptions, i)) {
|
|
82
|
-
const s = subscriptions[i];
|
|
83
|
-
s.respond({
|
|
84
|
-
returnValue: true,
|
|
85
|
-
event: "beat " + x
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
x++;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// listen for requests, and handle subscriptions via implicit event handlers in call
|
|
93
|
-
// to register
|
|
94
|
-
service.register("heartbeat", function(message) {
|
|
95
|
-
const uniqueToken = message.uniqueToken;
|
|
96
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat");
|
|
97
|
-
console.log("heartbeat callback, uniqueToken: " + uniqueToken + ", token: " + message.token);
|
|
98
|
-
message.respond({event: "beat"});
|
|
99
|
-
if (message.isSubscription) {
|
|
100
|
-
subscriptions[uniqueToken] = message;
|
|
101
|
-
if (!interval) {
|
|
102
|
-
createInterval();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
function(message) {
|
|
107
|
-
const uniqueToken = message.uniqueToken;
|
|
108
|
-
console.log("Canceled " + uniqueToken);
|
|
109
|
-
delete subscriptions[uniqueToken];
|
|
110
|
-
const keys = Object.keys(subscriptions);
|
|
111
|
-
if (keys.length === 0) {
|
|
112
|
-
console.log("no more subscriptions, canceling interval");
|
|
113
|
-
clearInterval(interval);
|
|
114
|
-
interval = undefined;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// EventEmitter-based API for subscriptions
|
|
119
|
-
// note that the previous examples are actually using this API as well, they're
|
|
120
|
-
// just setting a "request" handler implicitly
|
|
121
|
-
const heartbeat2 = service.register("heartbeat2");
|
|
122
|
-
heartbeat2.on("request", function(message) {
|
|
123
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/request");
|
|
124
|
-
console.log("heartbeat callback");
|
|
125
|
-
message.respond({event: "beat"});
|
|
126
|
-
if (message.isSubscription) {
|
|
127
|
-
subscriptions[message.uniqueToken] = message;
|
|
128
|
-
if (!interval) {
|
|
129
|
-
createInterval();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
heartbeat2.on("cancel", function(message) {
|
|
134
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/cancel");
|
|
135
|
-
console.log("Canceled " + message.uniqueToken);
|
|
136
|
-
delete subscriptions[message.uniqueToken];
|
|
137
|
-
const keys = Object.keys(subscriptions);
|
|
138
|
-
if (keys.length === 0) {
|
|
139
|
-
console.log("no more subscriptions, canceling interval");
|
|
140
|
-
clearInterval(interval);
|
|
141
|
-
interval = undefined;
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
service.register("ping", function(message) {
|
|
146
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/ping");
|
|
147
|
-
console.log("Ping! setting up activity");
|
|
148
|
-
const methodName = "luna://" + pkgInfo.name + "/pong";
|
|
149
|
-
const activitySpec = {
|
|
150
|
-
"activity": {
|
|
151
|
-
"name": "My Activity", // this needs to be unique, per service
|
|
152
|
-
"description": "do something", // required
|
|
153
|
-
"background": true, // can use foreground or background, or set individual properties (see Activity Specification below, for details)
|
|
154
|
-
"persist": true, // this activity will be persistent across reboots
|
|
155
|
-
"explicit": true, // this activity *must* be completed or cancelled explicitly, or it will be re-launched until it does
|
|
156
|
-
"callback": { // what service to call when this activity starts
|
|
157
|
-
"method": methodName, // URI to service
|
|
158
|
-
"params": { // parameters/arguments to pass to service
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
"start": true, // start the activity immediately when its requirements (if any) are met
|
|
163
|
-
"replace": true, // if an activity with the same name already exists, replace it
|
|
164
|
-
"subscribe": false // if "subscribe" is false, the activity needs to be adopted immediately, or it gets canceled
|
|
165
|
-
};
|
|
166
|
-
service.call("luna://com.webos.service.activitymanager/create", activitySpec, function(reply) {
|
|
167
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.activitymanager/create");
|
|
168
|
-
const activityId = reply.payload.activityId;
|
|
169
|
-
console.log("ActivityId = " + activityId);
|
|
170
|
-
message.respond({msg: "Created activity "+ activityId});
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
service.register("pong", function(message) {
|
|
175
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/pong");
|
|
176
|
-
console.log("Pong!");
|
|
177
|
-
console.log(message.payload);
|
|
178
|
-
message.respond({message: "Pong"});
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
service.register("/do/re/me", function(message) {
|
|
182
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED://do/re/me");
|
|
183
|
-
message.respond({verses:[
|
|
184
|
-
{doe: "a deer, a female deer"},
|
|
185
|
-
{ray: "a drop of golden sun"},
|
|
186
|
-
{me: "a name I call myself"}
|
|
187
|
-
]});
|
|
188
|
-
});
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// helloworld_webos_service.js
|
|
8
|
+
// is simple service, based on low-level luna-bus API
|
|
9
|
+
|
|
10
|
+
// eslint-disable-next-line import/no-unresolved
|
|
11
|
+
const pkgInfo = require('./package.json');
|
|
12
|
+
const Service = require('webos-service');
|
|
13
|
+
|
|
14
|
+
const service = new Service(pkgInfo.name); // Create service by service name on package.json
|
|
15
|
+
const logHeader = "[" + pkgInfo.name + "]";
|
|
16
|
+
let greeting = "Hello, World!";
|
|
17
|
+
|
|
18
|
+
// a method that always returns the same value
|
|
19
|
+
service.register("hello", function(message) {
|
|
20
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/hello");
|
|
21
|
+
console.log("In hello callback");
|
|
22
|
+
const name = message.payload.name ? message.payload.name : "World";
|
|
23
|
+
|
|
24
|
+
message.respond({
|
|
25
|
+
returnValue: true,
|
|
26
|
+
Response: "Hello, " + name + "!"
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// set some state in the service
|
|
31
|
+
service.register("/config/setGreeting", function(message) {
|
|
32
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/config/setGreeting");
|
|
33
|
+
console.log("In setGreeting callback");
|
|
34
|
+
if (message.payload.greeting) {
|
|
35
|
+
greeting = message.payload.greeting;
|
|
36
|
+
} else {
|
|
37
|
+
message.respond({
|
|
38
|
+
returnValue: false,
|
|
39
|
+
errorText: "argument 'greeting' is required",
|
|
40
|
+
errorCode: 1
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
message.respond({
|
|
44
|
+
returnValue: true,
|
|
45
|
+
greeting: greeting
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// call another service
|
|
50
|
+
service.register("time", function(message) {
|
|
51
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/time");
|
|
52
|
+
console.log("time callback");
|
|
53
|
+
service.call("luna://com.webos.service.systemservice/clock/getTime", {}, function(m2) {
|
|
54
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.systemservice/clock/getTime");
|
|
55
|
+
const response = "You appear to have your UTC set to: " + m2.payload.utc;
|
|
56
|
+
console.log(response);
|
|
57
|
+
message.respond({message: response});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// handle subscription requests
|
|
62
|
+
const subscriptions = {};
|
|
63
|
+
let interval;
|
|
64
|
+
let x = 1;
|
|
65
|
+
function createInterval() {
|
|
66
|
+
if (interval) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log(logHeader, "create_interval");
|
|
70
|
+
console.log("create new interval");
|
|
71
|
+
interval = setInterval(function() {
|
|
72
|
+
sendResponses();
|
|
73
|
+
}, 1000);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// send responses to each subscribed client
|
|
77
|
+
function sendResponses() {
|
|
78
|
+
console.log(logHeader, "send_response");
|
|
79
|
+
console.log("Sending responses, subscription count=" + Object.keys(subscriptions).length);
|
|
80
|
+
for (const i in subscriptions) {
|
|
81
|
+
if (Object.prototype.hasOwnProperty.call(subscriptions, i)) {
|
|
82
|
+
const s = subscriptions[i];
|
|
83
|
+
s.respond({
|
|
84
|
+
returnValue: true,
|
|
85
|
+
event: "beat " + x
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
x++;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// listen for requests, and handle subscriptions via implicit event handlers in call
|
|
93
|
+
// to register
|
|
94
|
+
service.register("heartbeat", function(message) {
|
|
95
|
+
const uniqueToken = message.uniqueToken;
|
|
96
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat");
|
|
97
|
+
console.log("heartbeat callback, uniqueToken: " + uniqueToken + ", token: " + message.token);
|
|
98
|
+
message.respond({event: "beat"});
|
|
99
|
+
if (message.isSubscription) {
|
|
100
|
+
subscriptions[uniqueToken] = message;
|
|
101
|
+
if (!interval) {
|
|
102
|
+
createInterval();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
function(message) {
|
|
107
|
+
const uniqueToken = message.uniqueToken;
|
|
108
|
+
console.log("Canceled " + uniqueToken);
|
|
109
|
+
delete subscriptions[uniqueToken];
|
|
110
|
+
const keys = Object.keys(subscriptions);
|
|
111
|
+
if (keys.length === 0) {
|
|
112
|
+
console.log("no more subscriptions, canceling interval");
|
|
113
|
+
clearInterval(interval);
|
|
114
|
+
interval = undefined;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// EventEmitter-based API for subscriptions
|
|
119
|
+
// note that the previous examples are actually using this API as well, they're
|
|
120
|
+
// just setting a "request" handler implicitly
|
|
121
|
+
const heartbeat2 = service.register("heartbeat2");
|
|
122
|
+
heartbeat2.on("request", function(message) {
|
|
123
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/request");
|
|
124
|
+
console.log("heartbeat callback");
|
|
125
|
+
message.respond({event: "beat"});
|
|
126
|
+
if (message.isSubscription) {
|
|
127
|
+
subscriptions[message.uniqueToken] = message;
|
|
128
|
+
if (!interval) {
|
|
129
|
+
createInterval();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
heartbeat2.on("cancel", function(message) {
|
|
134
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/cancel");
|
|
135
|
+
console.log("Canceled " + message.uniqueToken);
|
|
136
|
+
delete subscriptions[message.uniqueToken];
|
|
137
|
+
const keys = Object.keys(subscriptions);
|
|
138
|
+
if (keys.length === 0) {
|
|
139
|
+
console.log("no more subscriptions, canceling interval");
|
|
140
|
+
clearInterval(interval);
|
|
141
|
+
interval = undefined;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
service.register("ping", function(message) {
|
|
146
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/ping");
|
|
147
|
+
console.log("Ping! setting up activity");
|
|
148
|
+
const methodName = "luna://" + pkgInfo.name + "/pong";
|
|
149
|
+
const activitySpec = {
|
|
150
|
+
"activity": {
|
|
151
|
+
"name": "My Activity", // this needs to be unique, per service
|
|
152
|
+
"description": "do something", // required
|
|
153
|
+
"background": true, // can use foreground or background, or set individual properties (see Activity Specification below, for details)
|
|
154
|
+
"persist": true, // this activity will be persistent across reboots
|
|
155
|
+
"explicit": true, // this activity *must* be completed or cancelled explicitly, or it will be re-launched until it does
|
|
156
|
+
"callback": { // what service to call when this activity starts
|
|
157
|
+
"method": methodName, // URI to service
|
|
158
|
+
"params": { // parameters/arguments to pass to service
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"start": true, // start the activity immediately when its requirements (if any) are met
|
|
163
|
+
"replace": true, // if an activity with the same name already exists, replace it
|
|
164
|
+
"subscribe": false // if "subscribe" is false, the activity needs to be adopted immediately, or it gets canceled
|
|
165
|
+
};
|
|
166
|
+
service.call("luna://com.webos.service.activitymanager/create", activitySpec, function(reply) {
|
|
167
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.activitymanager/create");
|
|
168
|
+
const activityId = reply.payload.activityId;
|
|
169
|
+
console.log("ActivityId = " + activityId);
|
|
170
|
+
message.respond({msg: "Created activity "+ activityId});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
service.register("pong", function(message) {
|
|
175
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/pong");
|
|
176
|
+
console.log("Pong!");
|
|
177
|
+
console.log(message.payload);
|
|
178
|
+
message.respond({message: "Pong"});
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
service.register("/do/re/me", function(message) {
|
|
182
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED://do/re/me");
|
|
183
|
+
message.respond({verses:[
|
|
184
|
+
{doe: "a deer, a female deer"},
|
|
185
|
+
{ray: "a drop of golden sun"},
|
|
186
|
+
{me: "a name I call myself"}
|
|
187
|
+
]});
|
|
188
|
+
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "com.domain.app.service",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "Helloworld service",
|
|
5
|
-
"main": "helloworld_webos_service.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
-
},
|
|
9
|
-
"author": "",
|
|
10
|
-
"license": "BSD"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "com.domain.app.service",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Helloworld service",
|
|
5
|
+
"main": "helloworld_webos_service.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"author": "",
|
|
10
|
+
"license": "BSD"
|
|
11
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "com.domain.app.service",
|
|
3
|
-
"description": "HelloWorld Service",
|
|
4
|
-
"services": [ {
|
|
5
|
-
"name": "com.domain.app.service",
|
|
6
|
-
"description": "HelloWorld Service"
|
|
7
|
-
} ]
|
|
8
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "com.domain.app.service",
|
|
3
|
+
"description": "HelloWorld Service",
|
|
4
|
+
"services": [ {
|
|
5
|
+
"name": "com.domain.app.service",
|
|
6
|
+
"description": "HelloWorld Service"
|
|
7
|
+
} ]
|
|
8
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "com.domain.app",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"vendor": "My Company",
|
|
5
|
-
"type": "web",
|
|
6
|
-
"main": "index.html",
|
|
7
|
-
"title": "new app",
|
|
8
|
-
"icon": "icon.png",
|
|
9
|
-
"requiredPermissions": ["time.query", "activity.operation"]
|
|
10
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "com.domain.app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"vendor": "My Company",
|
|
5
|
+
"type": "web",
|
|
6
|
+
"main": "index.html",
|
|
7
|
+
"title": "new app",
|
|
8
|
+
"icon": "icon.png",
|
|
9
|
+
"requiredPermissions": ["time.query", "activity.operation"]
|
|
10
|
+
}
|
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
-
|
|
4
|
-
SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
-->
|
|
6
|
-
|
|
7
|
-
<!DOCTYPE html>
|
|
8
|
-
<html>
|
|
9
|
-
<head>
|
|
10
|
-
<title>Example Web App</title>
|
|
11
|
-
<style type="text/css">
|
|
12
|
-
body {
|
|
13
|
-
width: 100%;
|
|
14
|
-
height: 100%;
|
|
15
|
-
background-color:#202020;
|
|
16
|
-
}
|
|
17
|
-
div {
|
|
18
|
-
position:absolute;
|
|
19
|
-
height:100%;
|
|
20
|
-
width:100%;
|
|
21
|
-
display: table;
|
|
22
|
-
}
|
|
23
|
-
h1 {
|
|
24
|
-
display: table-cell;
|
|
25
|
-
vertical-align: middle;
|
|
26
|
-
text-align:center;
|
|
27
|
-
color:#FFFFFF;
|
|
28
|
-
}
|
|
29
|
-
</style>
|
|
30
|
-
<script type="text/javascript">
|
|
31
|
-
window.onload = function() {
|
|
32
|
-
var bridge = new WebOSServiceBridge();
|
|
33
|
-
/*
|
|
34
|
-
* getTimeApi calls gettime of systemservice, a module in the platform.
|
|
35
|
-
*/
|
|
36
|
-
var getTimeApi = 'luna://com.webos.service.systemservice/clock/getTime';
|
|
37
|
-
var getTimeParams = '{}';
|
|
38
|
-
|
|
39
|
-
/*
|
|
40
|
-
* helloApi calls the hello method of js_service template provided by CLI.
|
|
41
|
-
* In this case, the service name is used as default name "com.domain.app.service" is.
|
|
42
|
-
* If you change this service name, you need to change the service name of the following API.
|
|
43
|
-
*
|
|
44
|
-
* If you change the name to helloParams as you want, the contents will be reflected on the screen.
|
|
45
|
-
*/
|
|
46
|
-
var helloApi = 'luna://com.domain.app.service/hello';
|
|
47
|
-
var helloParams = '{"name":"webOS"}';
|
|
48
|
-
|
|
49
|
-
function getTime_callback(msg){
|
|
50
|
-
var arg = JSON.parse(msg);
|
|
51
|
-
if (arg.returnValue) {
|
|
52
|
-
console.log("[APP_NAME: example web app] GETTIME_SUCCESS UTC : " + arg.utc);
|
|
53
|
-
//webOSSystem.PmLogString(6, "GETTIME_SUCCESS", '{"APP_NAME": "example web app"}', "UTC : " + arg.utc);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
console.error("[APP_NAME: example web app] GETTIME_FAILED errorText : " + arg.errorText);
|
|
57
|
-
//webOSSystem.PmLogString(3, "GETTIME_FAILED", '{"APP_NAME": "example web app"}', "errorText : " + arg.errorText);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function hello_callback(msg){
|
|
62
|
-
var arg = JSON.parse(msg);
|
|
63
|
-
if (arg.returnValue) {
|
|
64
|
-
document.getElementById("txt_msg").innerHTML = arg.Response;
|
|
65
|
-
console.log("[APP_NAME: example web app] CALLHELLO_SUCCESS response : " + arg.Response);
|
|
66
|
-
//webOSSystem.PmLogString(6, "CALLHELLO_SUCCESS", '{"APP_NAME": "example web app"}', "response : " + arg.Response);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
console.error("[APP_NAME: example web app] CALLHELLO_FAILED errorText : " + arg.errorText);
|
|
70
|
-
//webOSSystem.PmLogString(3, "CALLHELLO_FAILED", '{"APP_NAME": "example web app"}', "errorText : " + arg.errorText);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
bridge.onservicecallback = getTime_callback;
|
|
75
|
-
bridge.call(getTimeApi, getTimeParams);
|
|
76
|
-
document.getElementById("txt_msg").onclick = function() {
|
|
77
|
-
bridge.onservicecallback = hello_callback;
|
|
78
|
-
bridge.call(helloApi, helloParams);
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
</script>
|
|
82
|
-
</head>
|
|
83
|
-
<body>
|
|
84
|
-
<div>
|
|
85
|
-
<h1 id="txt_msg">Hello, Web Application!!</h1>
|
|
86
|
-
</div>
|
|
87
|
-
</body>
|
|
88
|
-
</html>
|
|
1
|
+
<!--
|
|
2
|
+
Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
<!DOCTYPE html>
|
|
8
|
+
<html>
|
|
9
|
+
<head>
|
|
10
|
+
<title>Example Web App</title>
|
|
11
|
+
<style type="text/css">
|
|
12
|
+
body {
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: 100%;
|
|
15
|
+
background-color:#202020;
|
|
16
|
+
}
|
|
17
|
+
div {
|
|
18
|
+
position:absolute;
|
|
19
|
+
height:100%;
|
|
20
|
+
width:100%;
|
|
21
|
+
display: table;
|
|
22
|
+
}
|
|
23
|
+
h1 {
|
|
24
|
+
display: table-cell;
|
|
25
|
+
vertical-align: middle;
|
|
26
|
+
text-align:center;
|
|
27
|
+
color:#FFFFFF;
|
|
28
|
+
}
|
|
29
|
+
</style>
|
|
30
|
+
<script type="text/javascript">
|
|
31
|
+
window.onload = function() {
|
|
32
|
+
var bridge = new WebOSServiceBridge();
|
|
33
|
+
/*
|
|
34
|
+
* getTimeApi calls gettime of systemservice, a module in the platform.
|
|
35
|
+
*/
|
|
36
|
+
var getTimeApi = 'luna://com.webos.service.systemservice/clock/getTime';
|
|
37
|
+
var getTimeParams = '{}';
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* helloApi calls the hello method of js_service template provided by CLI.
|
|
41
|
+
* In this case, the service name is used as default name "com.domain.app.service" is.
|
|
42
|
+
* If you change this service name, you need to change the service name of the following API.
|
|
43
|
+
*
|
|
44
|
+
* If you change the name to helloParams as you want, the contents will be reflected on the screen.
|
|
45
|
+
*/
|
|
46
|
+
var helloApi = 'luna://com.domain.app.service/hello';
|
|
47
|
+
var helloParams = '{"name":"webOS"}';
|
|
48
|
+
|
|
49
|
+
function getTime_callback(msg){
|
|
50
|
+
var arg = JSON.parse(msg);
|
|
51
|
+
if (arg.returnValue) {
|
|
52
|
+
console.log("[APP_NAME: example web app] GETTIME_SUCCESS UTC : " + arg.utc);
|
|
53
|
+
//webOSSystem.PmLogString(6, "GETTIME_SUCCESS", '{"APP_NAME": "example web app"}', "UTC : " + arg.utc);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.error("[APP_NAME: example web app] GETTIME_FAILED errorText : " + arg.errorText);
|
|
57
|
+
//webOSSystem.PmLogString(3, "GETTIME_FAILED", '{"APP_NAME": "example web app"}', "errorText : " + arg.errorText);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function hello_callback(msg){
|
|
62
|
+
var arg = JSON.parse(msg);
|
|
63
|
+
if (arg.returnValue) {
|
|
64
|
+
document.getElementById("txt_msg").innerHTML = arg.Response;
|
|
65
|
+
console.log("[APP_NAME: example web app] CALLHELLO_SUCCESS response : " + arg.Response);
|
|
66
|
+
//webOSSystem.PmLogString(6, "CALLHELLO_SUCCESS", '{"APP_NAME": "example web app"}', "response : " + arg.Response);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.error("[APP_NAME: example web app] CALLHELLO_FAILED errorText : " + arg.errorText);
|
|
70
|
+
//webOSSystem.PmLogString(3, "CALLHELLO_FAILED", '{"APP_NAME": "example web app"}', "errorText : " + arg.errorText);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
bridge.onservicecallback = getTime_callback;
|
|
75
|
+
bridge.call(getTimeApi, getTimeParams);
|
|
76
|
+
document.getElementById("txt_msg").onclick = function() {
|
|
77
|
+
bridge.onservicecallback = hello_callback;
|
|
78
|
+
bridge.call(helloApi, helloParams);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
</script>
|
|
82
|
+
</head>
|
|
83
|
+
<body>
|
|
84
|
+
<div>
|
|
85
|
+
<h1 id="txt_msg">Hello, Web Application!!</h1>
|
|
86
|
+
</div>
|
|
87
|
+
</body>
|
|
88
|
+
</html>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
-
|
|
4
|
-
SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
-->
|
|
6
|
-
|
|
7
|
-
<!DOCTYPE html>
|
|
8
|
-
<html>
|
|
9
|
-
<head>
|
|
10
|
-
<script>location.href='http://webosose.org/';</script>
|
|
11
|
-
</head>
|
|
12
|
-
<body>
|
|
13
|
-
</body>
|
|
1
|
+
<!--
|
|
2
|
+
Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
<!DOCTYPE html>
|
|
8
|
+
<html>
|
|
9
|
+
<head>
|
|
10
|
+
<script>location.href='http://webosose.org/';</script>
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
</body>
|
|
14
14
|
</html>
|