@nevermined-io/openclaw-plugin 1.0.12 → 1.0.14

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/config.d.ts CHANGED
@@ -6,9 +6,13 @@ export declare const NeverminedPluginConfigSchema: z.ZodObject<{
6
6
  planId: z.ZodOptional<z.ZodString>;
7
7
  agentId: z.ZodOptional<z.ZodString>;
8
8
  creditsPerRequest: z.ZodDefault<z.ZodNumber>;
9
+ enablePaidEndpoint: z.ZodDefault<z.ZodBoolean>;
10
+ agentEndpointPath: z.ZodDefault<z.ZodString>;
9
11
  }, "strip", z.ZodTypeAny, {
10
12
  environment: "sandbox" | "live";
11
13
  creditsPerRequest: number;
14
+ enablePaidEndpoint: boolean;
15
+ agentEndpointPath: string;
12
16
  nvmApiKey?: string | undefined;
13
17
  planId?: string | undefined;
14
18
  agentId?: string | undefined;
@@ -18,6 +22,8 @@ export declare const NeverminedPluginConfigSchema: z.ZodObject<{
18
22
  planId?: string | undefined;
19
23
  agentId?: string | undefined;
20
24
  creditsPerRequest?: number | undefined;
25
+ enablePaidEndpoint?: boolean | undefined;
26
+ agentEndpointPath?: string | undefined;
21
27
  }>;
22
28
  export type NeverminedPluginConfig = z.infer<typeof NeverminedPluginConfigSchema>;
23
29
  export declare function validateConfig(raw: unknown): NeverminedPluginConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGlD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;EAMvC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEjF,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAEnE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAKpE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,QAAQ,CAKjF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGlD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;EAQvC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEjF,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAEnE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAKpE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,QAAQ,CAKjF"}
package/dist/config.js CHANGED
@@ -6,6 +6,8 @@ export const NeverminedPluginConfigSchema = z.object({
6
6
  planId: z.string().optional(),
7
7
  agentId: z.string().optional(),
8
8
  creditsPerRequest: z.number().int().positive().default(1),
9
+ enablePaidEndpoint: z.boolean().default(false),
10
+ agentEndpointPath: z.string().default('/nevermined/agent'),
9
11
  });
10
12
  export function validateConfig(raw) {
11
13
  return NeverminedPluginConfigSchema.parse(raw);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGlD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC1D,CAAC,CAAA;AAIF,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA8B;IAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA8B;IACrE,OAAO,QAAQ,CAAC,WAAW,CAAC;QAC1B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC;QAChC,WAAW,EAAE,MAAM,CAAC,WAA8B;KACnD,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGlD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;CAC3D,CAAC,CAAA;AAIF,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA8B;IAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA8B;IACrE,OAAO,QAAQ,CAAC,WAAW,CAAC;QAC1B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC;QAChC,WAAW,EAAE,MAAM,CAAC,WAA8B;KACnD,CAAC,CAAA;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,44 +1,85 @@
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
+ import type { AgentHandler } from './paid-endpoint.js';
5
+ export type { NeverminedPluginConfig };
6
+ export type { AgentHandler };
7
+ export { validateConfig, createPaymentsFromConfig, requireApiKey };
8
8
  export { startLoginFlow, openBrowser } from './auth.js';
9
+ export { registerPaidEndpoint, mockWeatherHandler } from './paid-endpoint.js';
10
+ /**
11
+ * HTTP route handler signature used by OpenClaw's registerHttpRoute.
12
+ */
13
+ export type HttpRouteHandler = (req: HttpIncomingMessage, res: HttpServerResponse) => void | Promise<void>;
14
+ export interface HttpIncomingMessage {
15
+ headers: Record<string, string | string[] | undefined>;
16
+ on(event: string, cb: (data?: unknown) => void): void;
17
+ }
18
+ export interface HttpServerResponse {
19
+ writeHead(statusCode: number, headers?: Record<string, string>): void;
20
+ end(body?: string): void;
21
+ }
22
+ /**
23
+ * Minimal subset of the OpenClaw Plugin API used by this plugin.
24
+ */
9
25
  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>;
26
+ id: string;
27
+ pluginConfig?: Record<string, unknown>;
28
+ config: Record<string, unknown>;
29
+ logger: {
30
+ info: (msg: string) => void;
31
+ warn: (msg: string) => void;
32
+ error: (msg: string) => void;
33
+ };
34
+ registerTool(tool: unknown, opts?: {
35
+ optional?: boolean;
36
+ names?: string[];
21
37
  }): void;
22
- registerCommand(options: {
38
+ registerCommand(command: {
23
39
  name: string;
24
40
  description: string;
25
41
  acceptsArgs?: boolean;
26
42
  requireAuth?: boolean;
27
- handler: (ctx: CommandContext) => Promise<{
28
- text: string;
29
- }>;
43
+ handler: (ctx: CommandContext) => Promise<CommandResult> | CommandResult;
30
44
  }): void;
45
+ registerGatewayMethod(method: string, handler: unknown): void;
46
+ registerHttpRoute?(route: {
47
+ path: string;
48
+ handler: HttpRouteHandler;
49
+ }): void;
50
+ on?(hookName: string, handler: (...args: unknown[]) => unknown): void;
31
51
  }
32
52
  export interface CommandContext {
33
- senderId: string;
53
+ senderId?: string;
34
54
  channel: string;
35
55
  isAuthorizedSender: boolean;
36
- args: string;
56
+ args?: string;
37
57
  commandBody: string;
38
58
  config: Record<string, unknown>;
39
59
  }
60
+ export interface CommandResult {
61
+ text: string;
62
+ }
40
63
  export interface RegisterOptions {
41
64
  paymentsFactory?: (config: NeverminedPluginConfig) => Payments;
65
+ agentHandler?: AgentHandler;
66
+ }
67
+ export interface ToolContext {
68
+ config?: Record<string, unknown>;
69
+ workspaceDir?: string;
70
+ agentDir?: string;
71
+ agentId?: string;
72
+ sessionKey?: string;
42
73
  }
43
- export declare function register(api: OpenClawPluginAPI, options?: RegisterOptions): void;
74
+ /**
75
+ * OpenClaw plugin definition object.
76
+ * Exports id, name, description, and a register function.
77
+ */
78
+ declare const neverminedPlugin: {
79
+ id: string;
80
+ name: string;
81
+ description: string;
82
+ register(api: OpenClawPluginAPI, options?: RegisterOptions): void;
83
+ };
84
+ export default neverminedPlugin;
44
85
  //# 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":"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"}
package/dist/index.js CHANGED
@@ -1,100 +1,136 @@
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
+ import { registerPaidEndpoint } from './paid-endpoint.js';
5
+ export { validateConfig, createPaymentsFromConfig, requireApiKey };
5
6
  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.` };
7
+ export { registerPaidEndpoint, mockWeatherHandler } from './paid-endpoint.js';
8
+ /**
9
+ * OpenClaw plugin definition object.
10
+ * Exports id, name, description, and a register function.
11
+ */
12
+ const neverminedPlugin = {
13
+ id: 'nevermined',
14
+ name: '@nevermined-io/openclaw-plugin',
15
+ description: 'Nevermined plugin for OpenClaw — AI agent payments and access control',
16
+ register(api, options) {
17
+ const config = validateConfig(api.pluginConfig ?? {});
18
+ // Lazy Payments instance — created on first use after authentication
19
+ let payments = null;
20
+ const factory = options?.paymentsFactory ?? createPaymentsFromConfig;
21
+ function getPayments() {
22
+ if (!payments) {
23
+ requireApiKey(config);
24
+ payments = factory(config);
65
25
  }
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) => {
26
+ return payments;
27
+ }
28
+ // --- Register tools via factory function ---
29
+ // OpenClaw calls the factory per agent session, providing context.
30
+ // We return the full tool array each time.
31
+ const toolNames = [
32
+ 'nevermined_checkBalance',
33
+ 'nevermined_getAccessToken',
34
+ 'nevermined_orderPlan',
35
+ 'nevermined_queryAgent',
36
+ 'nevermined_registerAgent',
37
+ 'nevermined_createPlan',
38
+ 'nevermined_listPlans',
39
+ ];
40
+ api.registerTool((_ctx) => createTools(getPayments, config), { names: toolNames });
41
+ api.logger.info(`Registered ${toolNames.length} Nevermined payment tools`);
42
+ // --- Paid HTTP endpoint ---
43
+ if (config.enablePaidEndpoint && api.registerHttpRoute) {
44
+ registerPaidEndpoint(api, getPayments, config, options?.agentHandler);
45
+ }
46
+ // --- Credit balance injection into agent context ---
47
+ if (api.on) {
48
+ let cachedBalance = null;
49
+ const CACHE_TTL_MS = 60000;
50
+ api.on('before_prompt_build', async () => {
51
+ if (!config.nvmApiKey || !config.planId)
52
+ return undefined;
53
+ const now = Date.now();
54
+ if (cachedBalance && now - cachedBalance.fetchedAt < CACHE_TTL_MS) {
55
+ return { prependContext: formatBalanceContext(cachedBalance.balance, cachedBalance.planName) };
56
+ }
57
+ try {
58
+ const result = await getPayments().plans.getPlanBalance(config.planId);
59
+ cachedBalance = {
60
+ balance: result.balance.toString(),
61
+ planName: result.planName ?? config.planId,
62
+ fetchedAt: now,
63
+ };
64
+ return { prependContext: formatBalanceContext(cachedBalance.balance, cachedBalance.planName) };
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ });
70
+ }
71
+ // --- Slash commands for chat channels ---
72
+ api.registerCommand({
73
+ name: 'nvm_login',
74
+ description: 'Authenticate with Nevermined. Usage: /nvm_login [environment] or /nvm_login <api-key>',
75
+ acceptsArgs: true,
76
+ requireAuth: true,
77
+ handler: async (ctx) => {
78
+ const input = ctx.args?.trim() || '';
79
+ // --- Flow 1: User pasted an API key directly ---
80
+ if (looksLikeApiKey(input)) {
81
+ const apiKey = input;
82
+ const keyEnv = apiKey.split(':')[0];
83
+ config.nvmApiKey = apiKey;
84
+ config.environment = keyEnv;
85
+ payments = null;
86
+ api.logger.info(`Nevermined: authenticated via API key (${keyEnv})`);
87
+ return { text: `Authenticated with Nevermined (${keyEnv}). You can now use payment tools.` };
88
+ }
89
+ // --- Flow 2: Try browser login, fall back to manual instructions ---
90
+ const env = (input || config.environment || 'sandbox');
89
91
  try {
90
- return await tool.handler(getPayments(), config, params);
92
+ const result = await startLoginFlow(env);
93
+ config.nvmApiKey = result.nvmApiKey;
94
+ config.environment = result.environment;
95
+ payments = null;
96
+ return { text: `Authenticated with Nevermined (${result.environment}). You can now use payment tools.` };
91
97
  }
92
- catch (err) {
93
- const message = err instanceof Error ? err.message : String(err);
94
- throw new Error(`[nevermined] ${tool.name} failed: ${message}`);
98
+ catch (_err) {
99
+ // Browser login failed (headless server, timeout, etc.)
100
+ // Provide manual instructions
101
+ const loginUrl = getLoginUrl(env);
102
+ const apiKeyUrl = getApiKeyUrl(env);
103
+ return {
104
+ text: [
105
+ `I couldn't open a browser for automatic login. Here's how to authenticate manually:`,
106
+ ``,
107
+ `1. Open this URL and log in: ${loginUrl}`,
108
+ `2. Go to API Keys to get your API key: ${apiKeyUrl}`,
109
+ `3. Copy the API key and send it here:`,
110
+ ` /nvm_login <your-api-key>`,
111
+ ``,
112
+ `API keys look like: ${env}:eyJhbG...`,
113
+ ].join('\n'),
114
+ };
95
115
  }
96
116
  },
97
117
  });
98
- }
118
+ api.registerCommand({
119
+ name: 'nvm_logout',
120
+ description: 'Log out from Nevermined',
121
+ requireAuth: true,
122
+ handler: async () => {
123
+ config.nvmApiKey = undefined;
124
+ payments = null;
125
+ return { text: 'Logged out from Nevermined. API key has been removed.' };
126
+ },
127
+ });
128
+ },
129
+ };
130
+ function formatBalanceContext(balance, planName) {
131
+ const num = Number(balance);
132
+ const warning = num > 0 && num <= 5 ? ' (LOW — consider ordering more credits)' : '';
133
+ return `[Nevermined] Credits remaining: ${balance} (plan: ${planName})${warning}`;
99
134
  }
135
+ export default neverminedPlugin;
100
136
  //# 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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"}
@@ -0,0 +1,20 @@
1
+ import type { Payments } from '@nevermined-io/payments';
2
+ import type { NeverminedPluginConfig } from './config.js';
3
+ import type { OpenClawPluginAPI } from './index.js';
4
+ export type AgentHandler = (body: {
5
+ prompt: string;
6
+ }) => Promise<unknown>;
7
+ /**
8
+ * Registers a paid HTTP endpoint on the OpenClaw gateway.
9
+ * The endpoint handles x402 payment verification, processes requests,
10
+ * and settles credits after successful processing.
11
+ */
12
+ export declare function registerPaidEndpoint(api: OpenClawPluginAPI, getPayments: () => Payments, config: NeverminedPluginConfig, agentHandler?: AgentHandler): void;
13
+ /**
14
+ * Mock weather forecast handler for demonstration purposes.
15
+ * Returns simulated weather data based on the prompt.
16
+ */
17
+ export declare function mockWeatherHandler(body: {
18
+ prompt: string;
19
+ }): Promise<unknown>;
20
+ //# sourceMappingURL=paid-endpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paid-endpoint.d.ts","sourceRoot":"","sources":["../src/paid-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAA;AAErE,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEzE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,MAAM,QAAQ,EAC3B,MAAM,EAAE,sBAAsB,EAC9B,YAAY,CAAC,EAAE,YAAY,GAC1B,IAAI,CAoGN;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnF"}