@nevermined-io/openclaw-plugin 1.0.12 → 1.0.13

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/auth.d.ts CHANGED
@@ -4,6 +4,19 @@ export interface LoginResult {
4
4
  environment: string;
5
5
  loginUrl: string;
6
6
  }
7
+ /**
8
+ * Returns the Nevermined login URL for a given environment.
9
+ */
10
+ export declare function getLoginUrl(environment: EnvironmentName): string;
11
+ /**
12
+ * Returns the API key settings URL for a given environment.
13
+ */
14
+ export declare function getApiKeyUrl(environment: EnvironmentName): string;
15
+ /**
16
+ * Checks whether a string looks like a Nevermined API key.
17
+ * API keys have the format "environment:base64token".
18
+ */
19
+ export declare function looksLikeApiKey(value: string): boolean;
7
20
  /**
8
21
  * Starts a one-shot HTTP server, opens the Nevermined login page in the browser,
9
22
  * and resolves with the API key once the callback is received.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAa9D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,eAAe,EAC5B,aAAa,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAe,GAC1D,OAAO,CAAC,WAAW,CAAC,CAiEtB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBtD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAa9D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM,CAMhE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM,CAMjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,eAAe,EAC5B,aAAa,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAe,GAC1D,OAAO,CAAC,WAAW,CAAC,CAmEtB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBtD"}
package/dist/auth.js CHANGED
@@ -10,6 +10,33 @@ const SUCCESS_HTML = `
10
10
  </div>
11
11
  </body></html>
12
12
  `;
13
+ /**
14
+ * Returns the Nevermined login URL for a given environment.
15
+ */
16
+ export function getLoginUrl(environment) {
17
+ const envInfo = Environments[environment];
18
+ if (!envInfo?.frontend) {
19
+ throw new Error(`Unknown environment: ${environment}`);
20
+ }
21
+ return `${envInfo.frontend}/login`;
22
+ }
23
+ /**
24
+ * Returns the API key settings URL for a given environment.
25
+ */
26
+ export function getApiKeyUrl(environment) {
27
+ const envInfo = Environments[environment];
28
+ if (!envInfo?.frontend) {
29
+ throw new Error(`Unknown environment: ${environment}`);
30
+ }
31
+ return `${envInfo.frontend}/permissions/global-permissions`;
32
+ }
33
+ /**
34
+ * Checks whether a string looks like a Nevermined API key.
35
+ * API keys have the format "environment:base64token".
36
+ */
37
+ export function looksLikeApiKey(value) {
38
+ return /^(sandbox|live|staging_sandbox|staging_live):/.test(value.trim());
39
+ }
13
40
  /**
14
41
  * Starts a one-shot HTTP server, opens the Nevermined login page in the browser,
15
42
  * and resolves with the API key once the callback is received.
@@ -56,7 +83,9 @@ export async function startLoginFlow(environment, openBrowserFn = openBrowser) {
56
83
  const callbackUrl = encodeURIComponent(`http://localhost:${port}/callback`);
57
84
  const loginUrl = `${frontendUrl}/auth/cli?callback_url=${callbackUrl}`;
58
85
  openBrowserFn(loginUrl).catch(() => {
59
- // Browser open failed — the caller should provide the URL to the user
86
+ clearTimeout(timeout);
87
+ server.close();
88
+ reject(new Error('Could not open browser'));
60
89
  });
61
90
  });
62
91
  server.on('error', (err) => {
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,44 +1,64 @@
1
1
  import { validateConfig, createPaymentsFromConfig, requireApiKey } from './config.js';
2
- import { allTools } from './tools.js';
3
2
  import { Payments } from '@nevermined-io/payments';
4
3
  import type { NeverminedPluginConfig } from './config.js';
5
- import type { ToolDefinition } from './tools.js';
6
- export type { NeverminedPluginConfig, ToolDefinition };
7
- export { validateConfig, createPaymentsFromConfig, requireApiKey, allTools };
4
+ export type { NeverminedPluginConfig };
5
+ export { validateConfig, createPaymentsFromConfig, requireApiKey };
8
6
  export { startLoginFlow, openBrowser } from './auth.js';
7
+ /**
8
+ * Minimal subset of the OpenClaw Plugin API used by this plugin.
9
+ */
9
10
  export interface OpenClawPluginAPI {
10
- getConfig(namespace: string): unknown;
11
- setConfig(namespace: string, key: string, value: unknown): void;
12
- registerGatewayMethod(name: string, options: {
13
- description: string;
14
- params: Array<{
15
- name: string;
16
- type: string;
17
- description: string;
18
- required: boolean;
19
- }>;
20
- handler: (params: Record<string, unknown>) => Promise<unknown>;
11
+ id: string;
12
+ pluginConfig?: Record<string, unknown>;
13
+ config: Record<string, unknown>;
14
+ logger: {
15
+ info: (msg: string) => void;
16
+ warn: (msg: string) => void;
17
+ error: (msg: string) => void;
18
+ };
19
+ registerTool(tool: unknown, opts?: {
20
+ optional?: boolean;
21
+ names?: string[];
21
22
  }): void;
22
- registerCommand(options: {
23
+ registerCommand(command: {
23
24
  name: string;
24
25
  description: string;
25
26
  acceptsArgs?: boolean;
26
27
  requireAuth?: boolean;
27
- handler: (ctx: CommandContext) => Promise<{
28
- text: string;
29
- }>;
28
+ handler: (ctx: CommandContext) => Promise<CommandResult> | CommandResult;
30
29
  }): void;
30
+ registerGatewayMethod(method: string, handler: unknown): void;
31
31
  }
32
32
  export interface CommandContext {
33
- senderId: string;
33
+ senderId?: string;
34
34
  channel: string;
35
35
  isAuthorizedSender: boolean;
36
- args: string;
36
+ args?: string;
37
37
  commandBody: string;
38
38
  config: Record<string, unknown>;
39
39
  }
40
+ export interface CommandResult {
41
+ text: string;
42
+ }
40
43
  export interface RegisterOptions {
41
44
  paymentsFactory?: (config: NeverminedPluginConfig) => Payments;
42
45
  }
43
- export declare function register(api: OpenClawPluginAPI, options?: RegisterOptions): void;
46
+ export interface ToolContext {
47
+ config?: Record<string, unknown>;
48
+ workspaceDir?: string;
49
+ agentDir?: string;
50
+ agentId?: string;
51
+ sessionKey?: string;
52
+ }
53
+ /**
54
+ * OpenClaw plugin definition object.
55
+ * Exports id, name, description, and a register function.
56
+ */
57
+ declare const neverminedPlugin: {
58
+ id: string;
59
+ name: string;
60
+ description: string;
61
+ register(api: OpenClawPluginAPI, options?: RegisterOptions): void;
62
+ };
63
+ export default neverminedPlugin;
44
64
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,QAAQ,EAAgB,MAAM,yBAAyB,CAAA;AAEhE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IACrC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/D,qBAAqB,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAA;YACZ,IAAI,EAAE,MAAM,CAAA;YACZ,WAAW,EAAE,MAAM,CAAA;YACnB,QAAQ,EAAE,OAAO,CAAA;SAClB,CAAC,CAAA;QACF,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAC/D,GACA,IAAI,CAAA;IACP,eAAe,CAAC,OAAO,EAAE;QACvB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAC5D,GAAG,IAAI,CAAA;CACT;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,QAAQ,CAAA;CAC/D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CA+GhF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEzD,YAAY,EAAE,sBAAsB,EAAE,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,aAAa,EAAE,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;QAC3B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;QAC3B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAC7B,CAAA;IACD,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;IAClF,eAAe,CAAC,OAAO,EAAE;QACvB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAA;KACzE,GAAG,IAAI,CAAA;IACR,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CAC9D;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,OAAO,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,QAAQ,CAAA;CAC/D;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,QAAA,MAAM,gBAAgB;;;;kBAKN,iBAAiB,YAAY,eAAe,GAAG,IAAI;CAuGlE,CAAA;AAED,eAAe,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -1,100 +1,100 @@
1
1
  import { validateConfig, createPaymentsFromConfig, requireApiKey } from './config.js';
2
- import { allTools } from './tools.js';
3
- import { startLoginFlow } from './auth.js';
4
- export { validateConfig, createPaymentsFromConfig, requireApiKey, allTools };
2
+ import { createTools } from './tools.js';
3
+ import { startLoginFlow, looksLikeApiKey, getLoginUrl, getApiKeyUrl } from './auth.js';
4
+ export { validateConfig, createPaymentsFromConfig, requireApiKey };
5
5
  export { startLoginFlow, openBrowser } from './auth.js';
6
- export function register(api, options) {
7
- const rawConfig = api.getConfig('nevermined');
8
- const config = validateConfig(rawConfig);
9
- // Lazy Payments instance — created on first use after authentication
10
- let payments = null;
11
- const factory = options?.paymentsFactory ?? createPaymentsFromConfig;
12
- function getPayments() {
13
- if (!payments) {
14
- requireApiKey(config);
15
- payments = factory(config);
16
- }
17
- return payments;
18
- }
19
- // --- Login/Logout gateway tools ---
20
- api.registerGatewayMethod('nevermined.login', {
21
- description: 'Authenticate with Nevermined via browser login to obtain an API key',
22
- params: [
23
- { name: 'environment', type: 'string', description: 'Target environment: sandbox or live (default: from config)', required: false },
24
- ],
25
- handler: async (params) => {
26
- const env = params.environment || config.environment || 'sandbox';
27
- const result = await startLoginFlow(env);
28
- config.nvmApiKey = result.nvmApiKey;
29
- config.environment = result.environment;
30
- payments = null; // Reset so next call creates a fresh instance
31
- api.setConfig('nevermined', 'nvmApiKey', result.nvmApiKey);
32
- api.setConfig('nevermined', 'environment', result.environment);
33
- return {
34
- authenticated: true,
35
- environment: result.environment,
36
- };
37
- },
38
- });
39
- api.registerGatewayMethod('nevermined.logout', {
40
- description: 'Log out from Nevermined by removing the stored API key',
41
- params: [],
42
- handler: async () => {
43
- config.nvmApiKey = undefined;
44
- payments = null;
45
- api.setConfig('nevermined', 'nvmApiKey', '');
46
- return { authenticated: false };
47
- },
48
- });
49
- // --- Slash commands for chat channels ---
50
- api.registerCommand({
51
- name: 'nvm-login',
52
- description: 'Authenticate with Nevermined via browser login',
53
- acceptsArgs: true,
54
- requireAuth: true,
55
- handler: async (ctx) => {
56
- try {
57
- const env = (ctx.args?.trim() || config.environment || 'sandbox');
58
- const result = await startLoginFlow(env);
59
- config.nvmApiKey = result.nvmApiKey;
60
- config.environment = result.environment;
61
- payments = null;
62
- api.setConfig('nevermined', 'nvmApiKey', result.nvmApiKey);
63
- api.setConfig('nevermined', 'environment', result.environment);
64
- return { text: `Authenticated with Nevermined (${result.environment}). You can now use payment tools.` };
6
+ /**
7
+ * OpenClaw plugin definition object.
8
+ * Exports id, name, description, and a register function.
9
+ */
10
+ const neverminedPlugin = {
11
+ id: 'nevermined',
12
+ name: '@nevermined-io/openclaw-plugin',
13
+ description: 'Nevermined plugin for OpenClaw — AI agent payments and access control',
14
+ register(api, options) {
15
+ const config = validateConfig(api.pluginConfig ?? {});
16
+ // Lazy Payments instance — created on first use after authentication
17
+ let payments = null;
18
+ const factory = options?.paymentsFactory ?? createPaymentsFromConfig;
19
+ function getPayments() {
20
+ if (!payments) {
21
+ requireApiKey(config);
22
+ payments = factory(config);
65
23
  }
66
- catch (err) {
67
- const message = err instanceof Error ? err.message : String(err);
68
- return { text: `Login failed: ${message}` };
69
- }
70
- },
71
- });
72
- api.registerCommand({
73
- name: 'nvm-logout',
74
- description: 'Log out from Nevermined',
75
- requireAuth: true,
76
- handler: async () => {
77
- config.nvmApiKey = undefined;
78
- payments = null;
79
- api.setConfig('nevermined', 'nvmApiKey', '');
80
- return { text: 'Logged out from Nevermined. API key has been removed.' };
81
- },
82
- });
83
- // --- Payment tools (require authentication) ---
84
- for (const tool of allTools) {
85
- api.registerGatewayMethod(tool.name, {
86
- description: tool.description,
87
- params: tool.params,
88
- handler: async (params) => {
24
+ return payments;
25
+ }
26
+ // --- Register tools via factory function ---
27
+ // OpenClaw calls the factory per agent session, providing context.
28
+ // We return the full tool array each time.
29
+ const toolNames = [
30
+ 'nevermined_checkBalance',
31
+ 'nevermined_getAccessToken',
32
+ 'nevermined_orderPlan',
33
+ 'nevermined_queryAgent',
34
+ 'nevermined_registerAgent',
35
+ 'nevermined_createPlan',
36
+ 'nevermined_listPlans',
37
+ ];
38
+ api.registerTool((_ctx) => createTools(getPayments, config), { names: toolNames });
39
+ api.logger.info(`Registered ${toolNames.length} Nevermined payment tools`);
40
+ // --- Slash commands for chat channels ---
41
+ api.registerCommand({
42
+ name: 'nvm_login',
43
+ description: 'Authenticate with Nevermined. Usage: /nvm_login [environment] or /nvm_login <api-key>',
44
+ acceptsArgs: true,
45
+ requireAuth: true,
46
+ handler: async (ctx) => {
47
+ const input = ctx.args?.trim() || '';
48
+ // --- Flow 1: User pasted an API key directly ---
49
+ if (looksLikeApiKey(input)) {
50
+ const apiKey = input;
51
+ const keyEnv = apiKey.split(':')[0];
52
+ config.nvmApiKey = apiKey;
53
+ config.environment = keyEnv;
54
+ payments = null;
55
+ api.logger.info(`Nevermined: authenticated via API key (${keyEnv})`);
56
+ return { text: `Authenticated with Nevermined (${keyEnv}). You can now use payment tools.` };
57
+ }
58
+ // --- Flow 2: Try browser login, fall back to manual instructions ---
59
+ const env = (input || config.environment || 'sandbox');
89
60
  try {
90
- return await tool.handler(getPayments(), config, params);
61
+ const result = await startLoginFlow(env);
62
+ config.nvmApiKey = result.nvmApiKey;
63
+ config.environment = result.environment;
64
+ payments = null;
65
+ return { text: `Authenticated with Nevermined (${result.environment}). You can now use payment tools.` };
91
66
  }
92
- catch (err) {
93
- const message = err instanceof Error ? err.message : String(err);
94
- throw new Error(`[nevermined] ${tool.name} failed: ${message}`);
67
+ catch (_err) {
68
+ // Browser login failed (headless server, timeout, etc.)
69
+ // Provide manual instructions
70
+ const loginUrl = getLoginUrl(env);
71
+ const apiKeyUrl = getApiKeyUrl(env);
72
+ return {
73
+ text: [
74
+ `I couldn't open a browser for automatic login. Here's how to authenticate manually:`,
75
+ ``,
76
+ `1. Open this URL and log in: ${loginUrl}`,
77
+ `2. Go to API Keys to get your API key: ${apiKeyUrl}`,
78
+ `3. Copy the API key and send it here:`,
79
+ ` /nvm_login <your-api-key>`,
80
+ ``,
81
+ `API keys look like: ${env}:eyJhbG...`,
82
+ ].join('\n'),
83
+ };
95
84
  }
96
85
  },
97
86
  });
98
- }
99
- }
87
+ api.registerCommand({
88
+ name: 'nvm_logout',
89
+ description: 'Log out from Nevermined',
90
+ requireAuth: true,
91
+ handler: async () => {
92
+ config.nvmApiKey = undefined;
93
+ payments = null;
94
+ return { text: 'Logged out from Nevermined. API key has been removed.' };
95
+ },
96
+ });
97
+ },
98
+ };
99
+ export default neverminedPlugin;
100
100
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,16 +1,23 @@
1
1
  import type { Payments } from '@nevermined-io/payments';
2
2
  import type { NeverminedPluginConfig } from './config.js';
3
- export interface ToolParam {
3
+ /**
4
+ * Creates all Nevermined payment tools for the OpenClaw plugin.
5
+ * Each tool is an object with { name, description, parameters, execute }
6
+ * compatible with the OpenClaw AnyAgentTool interface.
7
+ */
8
+ export declare function createTools(getPayments: () => Payments, config: NeverminedPluginConfig): ToolObject[];
9
+ interface ToolObject {
4
10
  name: string;
5
- type: string;
11
+ label: string;
6
12
  description: string;
7
- required: boolean;
13
+ parameters: Record<string, unknown>;
14
+ execute: (_id: string, params: Record<string, unknown>) => Promise<ToolResult>;
8
15
  }
9
- export interface ToolDefinition {
10
- name: string;
11
- description: string;
12
- params: ToolParam[];
13
- handler: (payments: Payments, config: NeverminedPluginConfig, params: Record<string, unknown>) => Promise<unknown>;
16
+ interface ToolResult {
17
+ content: Array<{
18
+ type: string;
19
+ text: string;
20
+ }>;
14
21
  }
15
- export declare const allTools: ToolDefinition[];
22
+ export {};
16
23
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEzD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,OAAO,EAAE,CACP,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,OAAO,CAAC,CAAA;CACtB;AAqPD,eAAO,MAAM,QAAQ,EAAE,cAAc,EAUpC,CAAA"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEzD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,QAAQ,EAC3B,MAAM,EAAE,sBAAsB,GAC7B,UAAU,EAAE,CA2Od;AAID,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CAC/E;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC/C"}
package/dist/tools.js CHANGED
@@ -1,218 +1,231 @@
1
- function requireParam(params, name) {
2
- const value = params[name];
3
- if (value === undefined || value === null || value === '') {
4
- throw new Error(`Missing required parameter: ${name}`);
5
- }
6
- return String(value);
1
+ /**
2
+ * Creates all Nevermined payment tools for the OpenClaw plugin.
3
+ * Each tool is an object with { name, description, parameters, execute }
4
+ * compatible with the OpenClaw AnyAgentTool interface.
5
+ */
6
+ export function createTools(getPayments, config) {
7
+ return [
8
+ // --- Subscriber tools ---
9
+ {
10
+ name: 'nevermined_checkBalance',
11
+ label: 'Nevermined Check Balance',
12
+ description: 'Check the credit balance for a Nevermined payment plan',
13
+ parameters: {
14
+ type: 'object',
15
+ properties: {
16
+ planId: { type: 'string', description: 'The payment plan ID (uses config default if omitted)' },
17
+ },
18
+ },
19
+ async execute(_id, params) {
20
+ const planId = str(params, 'planId') ?? config.planId;
21
+ if (!planId)
22
+ throw new Error('planId is required — provide it as a parameter or in the plugin config');
23
+ const balance = await getPayments().plans.getPlanBalance(planId);
24
+ return result({
25
+ planId: balance.planId,
26
+ planName: balance.planName,
27
+ balance: balance.balance.toString(),
28
+ isSubscriber: balance.isSubscriber,
29
+ });
30
+ },
31
+ },
32
+ {
33
+ name: 'nevermined_getAccessToken',
34
+ label: 'Nevermined Get Access Token',
35
+ description: 'Get an x402 access token for authenticating requests to a Nevermined agent',
36
+ parameters: {
37
+ type: 'object',
38
+ properties: {
39
+ planId: { type: 'string', description: 'The payment plan ID' },
40
+ agentId: { type: 'string', description: 'The agent ID' },
41
+ },
42
+ },
43
+ async execute(_id, params) {
44
+ const planId = str(params, 'planId') ?? config.planId;
45
+ if (!planId)
46
+ throw new Error('planId is required — provide it as a parameter or in the plugin config');
47
+ const agentId = str(params, 'agentId') ?? config.agentId;
48
+ const token = await getPayments().x402.getX402AccessToken(planId, agentId);
49
+ return result({ accessToken: token.accessToken });
50
+ },
51
+ },
52
+ {
53
+ name: 'nevermined_orderPlan',
54
+ label: 'Nevermined Order Plan',
55
+ description: 'Order (purchase) a Nevermined payment plan',
56
+ parameters: {
57
+ type: 'object',
58
+ properties: {
59
+ planId: { type: 'string', description: 'The payment plan ID to order' },
60
+ },
61
+ },
62
+ async execute(_id, params) {
63
+ const planId = str(params, 'planId') ?? config.planId;
64
+ if (!planId)
65
+ throw new Error('planId is required — provide it as a parameter or in the plugin config');
66
+ const res = await getPayments().plans.orderPlan(planId);
67
+ return result(res);
68
+ },
69
+ },
70
+ {
71
+ name: 'nevermined_queryAgent',
72
+ label: 'Nevermined Query Agent',
73
+ description: 'Query a Nevermined AI agent end-to-end: acquires an x402 access token, sends the prompt to the agent, and returns the response',
74
+ parameters: {
75
+ type: 'object',
76
+ properties: {
77
+ agentUrl: { type: 'string', description: 'The URL of the agent to query' },
78
+ prompt: { type: 'string', description: 'The prompt to send to the agent' },
79
+ planId: { type: 'string', description: 'The payment plan ID' },
80
+ agentId: { type: 'string', description: 'The agent ID' },
81
+ method: { type: 'string', description: 'HTTP method (default: POST)' },
82
+ },
83
+ required: ['agentUrl', 'prompt'],
84
+ },
85
+ async execute(_id, params) {
86
+ const agentUrl = requireStr(params, 'agentUrl');
87
+ const prompt = requireStr(params, 'prompt');
88
+ const planId = str(params, 'planId') ?? config.planId;
89
+ if (!planId)
90
+ throw new Error('planId is required — provide it as a parameter or in the plugin config');
91
+ const agentId = str(params, 'agentId') ?? config.agentId;
92
+ const method = str(params, 'method') ?? 'POST';
93
+ const { accessToken } = await getPayments().x402.getX402AccessToken(planId, agentId);
94
+ const response = await fetch(agentUrl, {
95
+ method,
96
+ headers: {
97
+ 'Content-Type': 'application/json',
98
+ 'PAYMENT-SIGNATURE': accessToken,
99
+ },
100
+ body: method !== 'GET' ? JSON.stringify({ prompt }) : undefined,
101
+ });
102
+ if (response.status === 402) {
103
+ return result({
104
+ error: 'Payment required — insufficient credits. Order the plan first using nevermined_orderPlan.',
105
+ status: 402,
106
+ });
107
+ }
108
+ if (!response.ok) {
109
+ return result({
110
+ error: `Agent returned HTTP ${response.status}: ${response.statusText}`,
111
+ status: response.status,
112
+ });
113
+ }
114
+ const body = await response.json();
115
+ return result(body);
116
+ },
117
+ },
118
+ // --- Builder tools ---
119
+ {
120
+ name: 'nevermined_registerAgent',
121
+ label: 'Nevermined Register Agent',
122
+ description: 'Register a new AI agent with an associated payment plan on Nevermined',
123
+ parameters: {
124
+ type: 'object',
125
+ properties: {
126
+ name: { type: 'string', description: 'Agent name' },
127
+ description: { type: 'string', description: 'Agent description' },
128
+ agentUrl: { type: 'string', description: 'The endpoint URL for the agent' },
129
+ planName: { type: 'string', description: 'Name for the payment plan' },
130
+ priceAmounts: { type: 'string', description: 'Comma-separated price amounts in wei' },
131
+ priceReceivers: { type: 'string', description: 'Comma-separated receiver addresses' },
132
+ creditsAmount: { type: 'number', description: 'Number of credits in the plan' },
133
+ },
134
+ required: ['name', 'agentUrl', 'planName', 'priceAmounts', 'priceReceivers', 'creditsAmount'],
135
+ },
136
+ async execute(_id, params) {
137
+ const name = requireStr(params, 'name');
138
+ const description = str(params, 'description') ?? '';
139
+ const agentUrl = requireStr(params, 'agentUrl');
140
+ const planName = requireStr(params, 'planName');
141
+ const priceAmounts = requireStr(params, 'priceAmounts')
142
+ .split(',')
143
+ .map((s) => BigInt(s.trim()));
144
+ const priceReceivers = requireStr(params, 'priceReceivers')
145
+ .split(',')
146
+ .map((s) => s.trim());
147
+ const creditsAmount = Number(requireStr(params, 'creditsAmount'));
148
+ const res = await getPayments().agents.registerAgentAndPlan({ name, description }, { endpoints: [{ POST: agentUrl }], agentDefinitionUrl: agentUrl }, { name: planName }, { amounts: priceAmounts, receivers: priceReceivers, isCrypto: true }, {
149
+ isRedemptionAmountFixed: true,
150
+ redemptionType: 4,
151
+ proofRequired: false,
152
+ durationSecs: 0n,
153
+ amount: BigInt(creditsAmount),
154
+ minAmount: 1n,
155
+ maxAmount: BigInt(creditsAmount),
156
+ });
157
+ return result({ agentId: res.agentId, planId: res.planId, txHash: res.txHash });
158
+ },
159
+ },
160
+ {
161
+ name: 'nevermined_createPlan',
162
+ label: 'Nevermined Create Plan',
163
+ description: 'Create a new payment plan on Nevermined',
164
+ parameters: {
165
+ type: 'object',
166
+ properties: {
167
+ name: { type: 'string', description: 'Plan name' },
168
+ description: { type: 'string', description: 'Plan description' },
169
+ priceAmounts: { type: 'string', description: 'Comma-separated price amounts in wei' },
170
+ priceReceivers: { type: 'string', description: 'Comma-separated receiver addresses' },
171
+ creditsAmount: { type: 'number', description: 'Number of credits in the plan' },
172
+ accessLimit: { type: 'string', description: '"credits" or "time" (default: credits)' },
173
+ },
174
+ required: ['name', 'priceAmounts', 'priceReceivers', 'creditsAmount'],
175
+ },
176
+ async execute(_id, params) {
177
+ const name = requireStr(params, 'name');
178
+ const description = str(params, 'description') ?? '';
179
+ const priceAmounts = requireStr(params, 'priceAmounts')
180
+ .split(',')
181
+ .map((s) => BigInt(s.trim()));
182
+ const priceReceivers = requireStr(params, 'priceReceivers')
183
+ .split(',')
184
+ .map((s) => s.trim());
185
+ const creditsAmount = Number(requireStr(params, 'creditsAmount'));
186
+ const accessLimit = (str(params, 'accessLimit') ?? 'credits');
187
+ const res = await getPayments().plans.registerPlan({ name, description, accessLimit }, { amounts: priceAmounts, receivers: priceReceivers, isCrypto: true }, {
188
+ isRedemptionAmountFixed: true,
189
+ redemptionType: 4,
190
+ proofRequired: false,
191
+ durationSecs: 0n,
192
+ amount: BigInt(creditsAmount),
193
+ minAmount: 1n,
194
+ maxAmount: BigInt(creditsAmount),
195
+ }, undefined, accessLimit);
196
+ return result({ planId: res.planId });
197
+ },
198
+ },
199
+ {
200
+ name: 'nevermined_listPlans',
201
+ label: 'Nevermined List Plans',
202
+ description: "List the builder's payment plans on Nevermined",
203
+ parameters: {
204
+ type: 'object',
205
+ properties: {},
206
+ },
207
+ async execute() {
208
+ const res = await getPayments().plans.getPlans();
209
+ return result(res);
210
+ },
211
+ },
212
+ ];
7
213
  }
8
- function optionalParam(params, name, fallback) {
9
- const value = params[name];
10
- if (value === undefined || value === null || value === '') {
11
- return fallback;
12
- }
13
- return String(value);
214
+ function result(payload) {
215
+ return {
216
+ content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],
217
+ };
218
+ }
219
+ function str(params, key) {
220
+ const v = params[key];
221
+ if (v === undefined || v === null || v === '')
222
+ return undefined;
223
+ return String(v);
224
+ }
225
+ function requireStr(params, key) {
226
+ const v = str(params, key);
227
+ if (!v)
228
+ throw new Error(`Missing required parameter: ${key}`);
229
+ return v;
14
230
  }
15
- // --- Subscriber tools ---
16
- const checkBalance = {
17
- name: 'nevermined.checkBalance',
18
- description: 'Check the credit balance for a Nevermined payment plan',
19
- params: [
20
- { name: 'planId', type: 'string', description: 'The payment plan ID', required: false },
21
- ],
22
- handler: async (payments, config, params) => {
23
- const planId = optionalParam(params, 'planId', config.planId);
24
- if (!planId) {
25
- throw new Error('planId is required — provide it as a parameter or in the plugin config');
26
- }
27
- const balance = await payments.plans.getPlanBalance(planId);
28
- return {
29
- planId: balance.planId,
30
- planName: balance.planName,
31
- balance: balance.balance.toString(),
32
- isSubscriber: balance.isSubscriber,
33
- };
34
- },
35
- };
36
- const getAccessToken = {
37
- name: 'nevermined.getAccessToken',
38
- description: 'Get an x402 access token for authenticating requests to a Nevermined agent',
39
- params: [
40
- { name: 'planId', type: 'string', description: 'The payment plan ID', required: false },
41
- { name: 'agentId', type: 'string', description: 'The agent ID', required: false },
42
- ],
43
- handler: async (payments, config, params) => {
44
- const planId = optionalParam(params, 'planId', config.planId);
45
- if (!planId) {
46
- throw new Error('planId is required — provide it as a parameter or in the plugin config');
47
- }
48
- const agentId = optionalParam(params, 'agentId', config.agentId);
49
- const result = await payments.x402.getX402AccessToken(planId, agentId);
50
- return { accessToken: result.accessToken };
51
- },
52
- };
53
- const orderPlan = {
54
- name: 'nevermined.orderPlan',
55
- description: 'Order (purchase) a Nevermined payment plan',
56
- params: [
57
- { name: 'planId', type: 'string', description: 'The payment plan ID to order', required: false },
58
- ],
59
- handler: async (payments, config, params) => {
60
- const planId = optionalParam(params, 'planId', config.planId);
61
- if (!planId) {
62
- throw new Error('planId is required — provide it as a parameter or in the plugin config');
63
- }
64
- const result = await payments.plans.orderPlan(planId);
65
- return result;
66
- },
67
- };
68
- const queryAgent = {
69
- name: 'nevermined.queryAgent',
70
- description: 'Query a Nevermined AI agent end-to-end: acquires an x402 access token, sends the prompt to the agent, and returns the response',
71
- params: [
72
- { name: 'agentUrl', type: 'string', description: 'The URL of the agent to query', required: true },
73
- { name: 'prompt', type: 'string', description: 'The prompt to send to the agent', required: true },
74
- { name: 'planId', type: 'string', description: 'The payment plan ID', required: false },
75
- { name: 'agentId', type: 'string', description: 'The agent ID', required: false },
76
- { name: 'method', type: 'string', description: 'HTTP method (default: POST)', required: false },
77
- ],
78
- handler: async (payments, config, params) => {
79
- const agentUrl = requireParam(params, 'agentUrl');
80
- const prompt = requireParam(params, 'prompt');
81
- const planId = optionalParam(params, 'planId', config.planId);
82
- if (!planId) {
83
- throw new Error('planId is required — provide it as a parameter or in the plugin config');
84
- }
85
- const agentId = optionalParam(params, 'agentId', config.agentId);
86
- const method = optionalParam(params, 'method', 'POST') ?? 'POST';
87
- const { accessToken } = await payments.x402.getX402AccessToken(planId, agentId);
88
- const response = await fetch(agentUrl, {
89
- method,
90
- headers: {
91
- 'Content-Type': 'application/json',
92
- 'PAYMENT-SIGNATURE': accessToken,
93
- },
94
- body: method !== 'GET' ? JSON.stringify({ prompt }) : undefined,
95
- });
96
- if (response.status === 402) {
97
- return {
98
- error: 'Payment required — insufficient credits. Order the plan first using nevermined.orderPlan.',
99
- status: 402,
100
- };
101
- }
102
- if (!response.ok) {
103
- return {
104
- error: `Agent returned HTTP ${response.status}: ${response.statusText}`,
105
- status: response.status,
106
- };
107
- }
108
- const body = await response.json();
109
- return body;
110
- },
111
- };
112
- // --- Builder tools ---
113
- const registerAgent = {
114
- name: 'nevermined.registerAgent',
115
- description: 'Register a new AI agent with an associated payment plan on Nevermined',
116
- params: [
117
- { name: 'name', type: 'string', description: 'Agent name', required: true },
118
- { name: 'description', type: 'string', description: 'Agent description', required: false },
119
- { name: 'agentUrl', type: 'string', description: 'The endpoint URL for the agent', required: true },
120
- { name: 'planName', type: 'string', description: 'Name for the payment plan', required: true },
121
- { name: 'priceAmounts', type: 'string', description: 'Comma-separated price amounts in wei', required: true },
122
- { name: 'priceReceivers', type: 'string', description: 'Comma-separated receiver addresses', required: true },
123
- { name: 'creditsAmount', type: 'number', description: 'Number of credits in the plan', required: true },
124
- ],
125
- handler: async (payments, _config, params) => {
126
- const name = requireParam(params, 'name');
127
- const description = optionalParam(params, 'description', '');
128
- const agentUrl = requireParam(params, 'agentUrl');
129
- const planName = requireParam(params, 'planName');
130
- const priceAmounts = requireParam(params, 'priceAmounts')
131
- .split(',')
132
- .map((s) => BigInt(s.trim()));
133
- const priceReceivers = requireParam(params, 'priceReceivers')
134
- .split(',')
135
- .map((s) => s.trim());
136
- const creditsAmount = Number(requireParam(params, 'creditsAmount'));
137
- const result = await payments.agents.registerAgentAndPlan({ name, description }, {
138
- endpoints: [{ POST: agentUrl }],
139
- agentDefinitionUrl: agentUrl,
140
- }, { name: planName }, {
141
- amounts: priceAmounts,
142
- receivers: priceReceivers,
143
- isCrypto: true,
144
- }, {
145
- isRedemptionAmountFixed: true,
146
- redemptionType: 4, // ONLY_SUBSCRIBER
147
- proofRequired: false,
148
- durationSecs: 0n,
149
- amount: BigInt(creditsAmount),
150
- minAmount: 1n,
151
- maxAmount: BigInt(creditsAmount),
152
- });
153
- return {
154
- agentId: result.agentId,
155
- planId: result.planId,
156
- txHash: result.txHash,
157
- };
158
- },
159
- };
160
- const createPlan = {
161
- name: 'nevermined.createPlan',
162
- description: 'Create a new payment plan on Nevermined',
163
- params: [
164
- { name: 'name', type: 'string', description: 'Plan name', required: true },
165
- { name: 'description', type: 'string', description: 'Plan description', required: false },
166
- { name: 'priceAmounts', type: 'string', description: 'Comma-separated price amounts in wei', required: true },
167
- { name: 'priceReceivers', type: 'string', description: 'Comma-separated receiver addresses', required: true },
168
- { name: 'creditsAmount', type: 'number', description: 'Number of credits in the plan', required: true },
169
- { name: 'accessLimit', type: 'string', description: '"credits" or "time" (default: credits)', required: false },
170
- ],
171
- handler: async (payments, _config, params) => {
172
- const name = requireParam(params, 'name');
173
- const description = optionalParam(params, 'description', '');
174
- const priceAmounts = requireParam(params, 'priceAmounts')
175
- .split(',')
176
- .map((s) => BigInt(s.trim()));
177
- const priceReceivers = requireParam(params, 'priceReceivers')
178
- .split(',')
179
- .map((s) => s.trim());
180
- const creditsAmount = Number(requireParam(params, 'creditsAmount'));
181
- const accessLimit = optionalParam(params, 'accessLimit', 'credits');
182
- const result = await payments.plans.registerPlan({ name, description, accessLimit }, {
183
- amounts: priceAmounts,
184
- receivers: priceReceivers,
185
- isCrypto: true,
186
- }, {
187
- isRedemptionAmountFixed: true,
188
- redemptionType: 4,
189
- proofRequired: false,
190
- durationSecs: 0n,
191
- amount: BigInt(creditsAmount),
192
- minAmount: 1n,
193
- maxAmount: BigInt(creditsAmount),
194
- }, undefined, accessLimit);
195
- return { planId: result.planId };
196
- },
197
- };
198
- const listPlans = {
199
- name: 'nevermined.listPlans',
200
- description: "List the builder's payment plans on Nevermined",
201
- params: [],
202
- handler: async (payments) => {
203
- const result = await payments.plans.getPlans();
204
- return result;
205
- },
206
- };
207
- export const allTools = [
208
- // Subscriber
209
- checkBalance,
210
- getAccessToken,
211
- orderPlan,
212
- queryAgent,
213
- // Builder
214
- registerAgent,
215
- createPlan,
216
- listPlans,
217
- ];
218
231
  //# sourceMappingURL=tools.js.map
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -1,75 +1,34 @@
1
1
  {
2
+ "id": "nevermined",
2
3
  "name": "@nevermined-io/openclaw-plugin",
3
- "version": "0.1.0",
4
4
  "description": "Nevermined plugin for OpenClaw — AI agent payments and access control",
5
5
  "configSchema": {
6
- "nvmApiKey": {
7
- "type": "string",
8
- "required": false,
9
- "description": "Your Nevermined API key (optional — use /nvm-login to authenticate via browser)"
10
- },
11
- "environment": {
12
- "type": "string",
13
- "enum": ["sandbox", "live"],
14
- "default": "sandbox",
15
- "description": "Nevermined environment to connect to"
16
- },
17
- "planId": {
18
- "type": "string",
19
- "required": false,
20
- "description": "Default payment plan ID (required for subscriber tools)"
21
- },
22
- "agentId": {
23
- "type": "string",
24
- "required": false,
25
- "description": "Default agent ID (required for multi-agent plans)"
26
- },
27
- "creditsPerRequest": {
28
- "type": "number",
29
- "default": 1,
30
- "description": "Number of credits consumed per request"
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "nvmApiKey": {
10
+ "type": "string",
11
+ "description": "Your Nevermined API key (optional — use /nvm-login to authenticate via browser)"
12
+ },
13
+ "environment": {
14
+ "type": "string",
15
+ "enum": ["sandbox", "live"],
16
+ "default": "sandbox",
17
+ "description": "Nevermined environment to connect to"
18
+ },
19
+ "planId": {
20
+ "type": "string",
21
+ "description": "Default payment plan ID (required for subscriber tools)"
22
+ },
23
+ "agentId": {
24
+ "type": "string",
25
+ "description": "Default agent ID (required for multi-agent plans)"
26
+ },
27
+ "creditsPerRequest": {
28
+ "type": "number",
29
+ "default": 1,
30
+ "description": "Number of credits consumed per request"
31
+ }
31
32
  }
32
- },
33
- "uiHints": {
34
- "nvmApiKey": {
35
- "sensitive": true,
36
- "label": "Nevermined API Key",
37
- "placeholder": "sandbox:eyJhbG... (or use /nvm-login)"
38
- },
39
- "environment": {
40
- "label": "Environment"
41
- },
42
- "planId": {
43
- "label": "Plan ID",
44
- "placeholder": "did:nv:..."
45
- },
46
- "agentId": {
47
- "label": "Agent ID",
48
- "placeholder": "did:nv:..."
49
- }
50
- },
51
- "commands": [
52
- {
53
- "name": "nvm-login",
54
- "description": "Authenticate with Nevermined via browser login"
55
- },
56
- {
57
- "name": "nvm-logout",
58
- "description": "Log out from Nevermined"
59
- }
60
- ],
61
- "skills": ["skills/nevermined/SKILL.md"],
62
- "gateway": {
63
- "methods": [
64
- "nevermined.login",
65
- "nevermined.logout",
66
- "nevermined.checkBalance",
67
- "nevermined.getAccessToken",
68
- "nevermined.orderPlan",
69
- "nevermined.queryAgent",
70
- "nevermined.registerAgent",
71
- "nevermined.createPlan",
72
- "nevermined.listPlans"
73
- ]
74
33
  }
75
34
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nevermined-io/openclaw-plugin",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "description": "OpenClaw plugin for Nevermined — exposes subscriber and builder tools as gateway methods",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",