openclaw-productboard 1.0.8 → 1.0.9
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/dist/index.js +24 -13
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6,21 +6,32 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { ProductBoardClient } from './client/api-client.js';
|
|
8
8
|
import { createFeatureTools, createProductTools, createNoteTools, createSearchTools, } from './tools/index.js';
|
|
9
|
+
// Create a safe logger that falls back to console
|
|
10
|
+
function createLogger(api) {
|
|
11
|
+
const log = api.log;
|
|
12
|
+
return {
|
|
13
|
+
info: (msg, data) => log?.info?.(msg, data) ?? console.log(`[productboard] ${msg}`, data ?? ''),
|
|
14
|
+
warn: (msg, data) => log?.warn?.(msg, data) ?? console.warn(`[productboard] ${msg}`, data ?? ''),
|
|
15
|
+
error: (msg, data) => log?.error?.(msg, data) ?? console.error(`[productboard] ${msg}`, data ?? ''),
|
|
16
|
+
debug: (msg, data) => log?.debug?.(msg, data) ?? undefined,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
9
19
|
/**
|
|
10
20
|
* Plugin registration function called by OpenClaw
|
|
11
21
|
*/
|
|
12
22
|
export default function register(api) {
|
|
13
|
-
const
|
|
14
|
-
|
|
23
|
+
const logger = createLogger(api);
|
|
24
|
+
const config = (api.config ?? {});
|
|
25
|
+
// Check for API token - don't throw, just warn and skip tool registration
|
|
15
26
|
if (!config.apiToken) {
|
|
16
|
-
|
|
17
|
-
|
|
27
|
+
logger.warn('ProductBoard API token not configured. Run: openclaw plugins config openclaw-productboard --set apiToken=YOUR_TOKEN');
|
|
28
|
+
return;
|
|
18
29
|
}
|
|
19
|
-
|
|
30
|
+
logger.info('Initializing ProductBoard plugin');
|
|
20
31
|
// Initialize the API client
|
|
21
32
|
const client = new ProductBoardClient(config);
|
|
22
33
|
// Validate token on startup (non-blocking)
|
|
23
|
-
validateTokenAsync(client,
|
|
34
|
+
validateTokenAsync(client, logger);
|
|
24
35
|
// Register all tools
|
|
25
36
|
const allTools = [
|
|
26
37
|
...createFeatureTools(client),
|
|
@@ -30,27 +41,27 @@ export default function register(api) {
|
|
|
30
41
|
];
|
|
31
42
|
for (const tool of allTools) {
|
|
32
43
|
api.registerTool(tool);
|
|
33
|
-
|
|
44
|
+
logger.debug(`Registered tool: ${tool.name}`);
|
|
34
45
|
}
|
|
35
|
-
|
|
46
|
+
logger.info(`ProductBoard plugin initialized with ${allTools.length} tools`);
|
|
36
47
|
}
|
|
37
48
|
/**
|
|
38
49
|
* Validate API token asynchronously
|
|
39
50
|
*/
|
|
40
|
-
async function validateTokenAsync(client,
|
|
51
|
+
async function validateTokenAsync(client, logger) {
|
|
41
52
|
try {
|
|
42
53
|
const isValid = await client.validateToken();
|
|
43
54
|
if (isValid) {
|
|
44
|
-
|
|
55
|
+
logger.info('ProductBoard API token validated successfully');
|
|
45
56
|
}
|
|
46
57
|
else {
|
|
47
|
-
|
|
58
|
+
logger.warn('ProductBoard API token validation failed - requests may fail with 401');
|
|
48
59
|
}
|
|
49
60
|
}
|
|
50
61
|
catch (error) {
|
|
51
|
-
|
|
62
|
+
logger.warn('Could not validate ProductBoard API token', { error });
|
|
52
63
|
}
|
|
53
64
|
}
|
|
54
65
|
export { ProductBoardClient } from './client/api-client.js';
|
|
55
66
|
export { ProductBoardError } from './client/errors.js';
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsa0RBQWtEO0FBQ2xELFNBQVMsWUFBWSxDQUFDLEdBQWM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNwQixPQUFPO1FBQ0wsSUFBSSxFQUFFLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2pILElBQUksRUFBRSxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsSCxLQUFLLEVBQUUsQ0FBQyxHQUFXLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckgsS0FBSyxFQUFFLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxTQUFTO0tBQzdFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLFFBQVEsQ0FBQyxHQUFjO0lBQzdDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFpQixDQUFDO0lBRWxELDBFQUEwRTtJQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMscUhBQXFILENBQUMsQ0FBQztRQUNuSSxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUVoRCw0QkFBNEI7SUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QywyQ0FBMkM7SUFDM0Msa0JBQWtCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRW5DLHFCQUFxQjtJQUNyQixNQUFNLFFBQVEsR0FBRztRQUNmLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1FBQzdCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1FBQzdCLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUMxQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztLQUM3QixDQUFDO0lBRUYsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM1QixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBSUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFBMEIsRUFBRSxNQUFjO0lBQzFFLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztBQUNILENBQUM7QUFJRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvZHVjdEJvYXJkIE9wZW5DbGF3IFBsdWdpblxuICpcbiAqIFByb3ZpZGVzIGludGVncmF0aW9uIHdpdGggUHJvZHVjdEJvYXJkIGZvciBtYW5hZ2luZyBmZWF0dXJlcywgcHJvZHVjdHMsXG4gKiBjdXN0b21lciBmZWVkYmFjayBub3RlcywgYW5kIHdvcmtzcGFjZSB1c2Vycy5cbiAqL1xuXG5pbXBvcnQgeyBQcm9kdWN0Qm9hcmRDbGllbnQgfSBmcm9tICcuL2NsaWVudC9hcGktY2xpZW50LmpzJztcbmltcG9ydCB7IFBsdWdpbkFQSSwgUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi9jbGllbnQvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlRmVhdHVyZVRvb2xzLFxuICBjcmVhdGVQcm9kdWN0VG9vbHMsXG4gIGNyZWF0ZU5vdGVUb29scyxcbiAgY3JlYXRlU2VhcmNoVG9vbHMsXG59IGZyb20gJy4vdG9vbHMvaW5kZXguanMnO1xuXG4vLyBDcmVhdGUgYSBzYWZlIGxvZ2dlciB0aGF0IGZhbGxzIGJhY2sgdG8gY29uc29sZVxuZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKGFwaTogUGx1Z2luQVBJKSB7XG4gIGNvbnN0IGxvZyA9IGFwaS5sb2c7XG4gIHJldHVybiB7XG4gICAgaW5mbzogKG1zZzogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nPy5pbmZvPy4obXNnLCBkYXRhKSA/PyBjb25zb2xlLmxvZyhgW3Byb2R1Y3Rib2FyZF0gJHttc2d9YCwgZGF0YSA/PyAnJyksXG4gICAgd2FybjogKG1zZzogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nPy53YXJuPy4obXNnLCBkYXRhKSA/PyBjb25zb2xlLndhcm4oYFtwcm9kdWN0Ym9hcmRdICR7bXNnfWAsIGRhdGEgPz8gJycpLFxuICAgIGVycm9yOiAobXNnOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2c/LmVycm9yPy4obXNnLCBkYXRhKSA/PyBjb25zb2xlLmVycm9yKGBbcHJvZHVjdGJvYXJkXSAke21zZ31gLCBkYXRhID8/ICcnKSxcbiAgICBkZWJ1ZzogKG1zZzogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nPy5kZWJ1Zz8uKG1zZywgZGF0YSkgPz8gdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIFBsdWdpbiByZWdpc3RyYXRpb24gZnVuY3Rpb24gY2FsbGVkIGJ5IE9wZW5DbGF3XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGFwaTogUGx1Z2luQVBJKTogdm9pZCB7XG4gIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcihhcGkpO1xuICBjb25zdCBjb25maWcgPSAoYXBpLmNvbmZpZyA/PyB7fSkgYXMgUGx1Z2luQ29uZmlnO1xuXG4gIC8vIENoZWNrIGZvciBBUEkgdG9rZW4gLSBkb24ndCB0aHJvdywganVzdCB3YXJuIGFuZCBza2lwIHRvb2wgcmVnaXN0cmF0aW9uXG4gIGlmICghY29uZmlnLmFwaVRva2VuKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1Byb2R1Y3RCb2FyZCBBUEkgdG9rZW4gbm90IGNvbmZpZ3VyZWQuIFJ1bjogb3BlbmNsYXcgcGx1Z2lucyBjb25maWcgb3BlbmNsYXctcHJvZHVjdGJvYXJkIC0tc2V0IGFwaVRva2VuPVlPVVJfVE9LRU4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuaW5mbygnSW5pdGlhbGl6aW5nIFByb2R1Y3RCb2FyZCBwbHVnaW4nKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBBUEkgY2xpZW50XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBQcm9kdWN0Qm9hcmRDbGllbnQoY29uZmlnKTtcblxuICAvLyBWYWxpZGF0ZSB0b2tlbiBvbiBzdGFydHVwIChub24tYmxvY2tpbmcpXG4gIHZhbGlkYXRlVG9rZW5Bc3luYyhjbGllbnQsIGxvZ2dlcik7XG5cbiAgLy8gUmVnaXN0ZXIgYWxsIHRvb2xzXG4gIGNvbnN0IGFsbFRvb2xzID0gW1xuICAgIC4uLmNyZWF0ZUZlYXR1cmVUb29scyhjbGllbnQpLFxuICAgIC4uLmNyZWF0ZVByb2R1Y3RUb29scyhjbGllbnQpLFxuICAgIC4uLmNyZWF0ZU5vdGVUb29scyhjbGllbnQpLFxuICAgIC4uLmNyZWF0ZVNlYXJjaFRvb2xzKGNsaWVudCksXG4gIF07XG5cbiAgZm9yIChjb25zdCB0b29sIG9mIGFsbFRvb2xzKSB7XG4gICAgYXBpLnJlZ2lzdGVyVG9vbCh0b29sKTtcbiAgICBsb2dnZXIuZGVidWcoYFJlZ2lzdGVyZWQgdG9vbDogJHt0b29sLm5hbWV9YCk7XG4gIH1cblxuICBsb2dnZXIuaW5mbyhgUHJvZHVjdEJvYXJkIHBsdWdpbiBpbml0aWFsaXplZCB3aXRoICR7YWxsVG9vbHMubGVuZ3RofSB0b29sc2ApO1xufVxuXG50eXBlIExvZ2dlciA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUxvZ2dlcj47XG5cbi8qKlxuICogVmFsaWRhdGUgQVBJIHRva2VuIGFzeW5jaHJvbm91c2x5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG9rZW5Bc3luYyhjbGllbnQ6IFByb2R1Y3RCb2FyZENsaWVudCwgbG9nZ2VyOiBMb2dnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgY2xpZW50LnZhbGlkYXRlVG9rZW4oKTtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgbG9nZ2VyLmluZm8oJ1Byb2R1Y3RCb2FyZCBBUEkgdG9rZW4gdmFsaWRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybignUHJvZHVjdEJvYXJkIEFQSSB0b2tlbiB2YWxpZGF0aW9uIGZhaWxlZCAtIHJlcXVlc3RzIG1heSBmYWlsIHdpdGggNDAxJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgdmFsaWRhdGUgUHJvZHVjdEJvYXJkIEFQSSB0b2tlbicsIHsgZXJyb3IgfSk7XG4gIH1cbn1cblxuLy8gRXhwb3J0IHR5cGVzIGZvciBjb25zdW1lcnNcbmV4cG9ydCB0eXBlIHsgUGx1Z2luQVBJLCBQbHVnaW5Db25maWcgfSBmcm9tICcuL2NsaWVudC90eXBlcy5qcyc7XG5leHBvcnQgeyBQcm9kdWN0Qm9hcmRDbGllbnQgfSBmcm9tICcuL2NsaWVudC9hcGktY2xpZW50LmpzJztcbmV4cG9ydCB7IFByb2R1Y3RCb2FyZEVycm9yIH0gZnJvbSAnLi9jbGllbnQvZXJyb3JzLmpzJztcbiJdfQ==
|
package/openclaw.plugin.json
CHANGED