@vertesia/tools-sdk 1.0.0-dev.20260203.130115Z → 1.0.0-dev.20260227.112605Z

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/lib/cjs/ContentTypesCollection.js +43 -0
  2. package/lib/cjs/ContentTypesCollection.js.map +1 -0
  3. package/lib/cjs/InteractionCollection.js +43 -0
  4. package/lib/cjs/InteractionCollection.js.map +1 -0
  5. package/lib/cjs/RenderingTemplateCollection.js +43 -0
  6. package/lib/cjs/RenderingTemplateCollection.js.map +1 -0
  7. package/lib/cjs/SkillCollection.js +384 -0
  8. package/lib/cjs/SkillCollection.js.map +1 -0
  9. package/lib/cjs/ToolCollection.js +221 -0
  10. package/lib/cjs/ToolCollection.js.map +1 -0
  11. package/lib/cjs/ToolRegistry.js +95 -0
  12. package/lib/cjs/ToolRegistry.js.map +1 -0
  13. package/lib/cjs/auth.js +131 -0
  14. package/lib/cjs/auth.js.map +1 -0
  15. package/lib/cjs/build/validate.js +7 -0
  16. package/lib/cjs/build/validate.js.map +1 -0
  17. package/lib/cjs/copy-assets.js +84 -0
  18. package/lib/cjs/copy-assets.js.map +1 -0
  19. package/lib/cjs/index.js +33 -0
  20. package/lib/cjs/index.js.map +1 -0
  21. package/lib/cjs/package.json +3 -0
  22. package/lib/cjs/server/app-package.js +141 -0
  23. package/lib/cjs/server/app-package.js.map +1 -0
  24. package/lib/cjs/server/content-types.js +73 -0
  25. package/lib/cjs/server/content-types.js.map +1 -0
  26. package/lib/cjs/server/interactions.js +89 -0
  27. package/lib/cjs/server/interactions.js.map +1 -0
  28. package/lib/cjs/server/mcp.js +45 -0
  29. package/lib/cjs/server/mcp.js.map +1 -0
  30. package/lib/cjs/server/site.js +42 -0
  31. package/lib/cjs/server/site.js.map +1 -0
  32. package/lib/cjs/server/skills.js +114 -0
  33. package/lib/cjs/server/skills.js.map +1 -0
  34. package/lib/cjs/server/templates.js +67 -0
  35. package/lib/cjs/server/templates.js.map +1 -0
  36. package/lib/cjs/server/tools.js +87 -0
  37. package/lib/cjs/server/tools.js.map +1 -0
  38. package/lib/cjs/server/types.js +3 -0
  39. package/lib/cjs/server/types.js.map +1 -0
  40. package/lib/cjs/server/widgets.js +27 -0
  41. package/lib/cjs/server/widgets.js.map +1 -0
  42. package/lib/cjs/server.js +139 -0
  43. package/lib/cjs/server.js.map +1 -0
  44. package/lib/cjs/site/styles.js +692 -0
  45. package/lib/cjs/site/styles.js.map +1 -0
  46. package/lib/cjs/site/templates.js +1185 -0
  47. package/lib/cjs/site/templates.js.map +1 -0
  48. package/lib/cjs/types.js +3 -0
  49. package/lib/cjs/types.js.map +1 -0
  50. package/lib/cjs/utils.js +44 -0
  51. package/lib/cjs/utils.js.map +1 -0
  52. package/lib/esm/ContentTypesCollection.js +39 -0
  53. package/lib/esm/ContentTypesCollection.js.map +1 -0
  54. package/lib/esm/InteractionCollection.js +39 -0
  55. package/lib/esm/InteractionCollection.js.map +1 -0
  56. package/lib/esm/RenderingTemplateCollection.js +39 -0
  57. package/lib/esm/RenderingTemplateCollection.js.map +1 -0
  58. package/lib/esm/SkillCollection.js +377 -0
  59. package/lib/esm/SkillCollection.js.map +1 -0
  60. package/lib/esm/ToolCollection.js +183 -0
  61. package/lib/esm/ToolCollection.js.map +1 -0
  62. package/lib/esm/ToolRegistry.js +90 -0
  63. package/lib/esm/ToolRegistry.js.map +1 -0
  64. package/lib/esm/auth.js +124 -0
  65. package/lib/esm/auth.js.map +1 -0
  66. package/lib/esm/build/validate.js +4 -0
  67. package/lib/esm/build/validate.js.map +1 -0
  68. package/lib/esm/copy-assets.js +81 -0
  69. package/lib/esm/copy-assets.js.map +1 -0
  70. package/lib/esm/index.js +13 -0
  71. package/lib/esm/index.js.map +1 -0
  72. package/lib/esm/server/app-package.js +138 -0
  73. package/lib/esm/server/app-package.js.map +1 -0
  74. package/lib/esm/server/content-types.js +70 -0
  75. package/lib/esm/server/content-types.js.map +1 -0
  76. package/lib/esm/server/interactions.js +86 -0
  77. package/lib/esm/server/interactions.js.map +1 -0
  78. package/lib/esm/server/mcp.js +42 -0
  79. package/lib/esm/server/mcp.js.map +1 -0
  80. package/lib/esm/server/site.js +39 -0
  81. package/lib/esm/server/site.js.map +1 -0
  82. package/lib/esm/server/skills.js +111 -0
  83. package/lib/esm/server/skills.js.map +1 -0
  84. package/lib/esm/server/templates.js +64 -0
  85. package/lib/esm/server/templates.js.map +1 -0
  86. package/lib/esm/server/tools.js +84 -0
  87. package/lib/esm/server/tools.js.map +1 -0
  88. package/lib/esm/server/types.js +2 -0
  89. package/lib/esm/server/types.js.map +1 -0
  90. package/lib/esm/server/widgets.js +24 -0
  91. package/lib/esm/server/widgets.js.map +1 -0
  92. package/lib/esm/server.js +135 -0
  93. package/lib/esm/server.js.map +1 -0
  94. package/lib/esm/site/styles.js +689 -0
  95. package/lib/esm/site/styles.js.map +1 -0
  96. package/lib/esm/site/templates.js +1170 -0
  97. package/lib/esm/site/templates.js.map +1 -0
  98. package/lib/esm/types.js +2 -0
  99. package/lib/esm/types.js.map +1 -0
  100. package/lib/esm/utils.js +38 -0
  101. package/lib/esm/utils.js.map +1 -0
  102. package/lib/types/ContentTypesCollection.d.ts +18 -0
  103. package/lib/types/ContentTypesCollection.d.ts.map +1 -0
  104. package/lib/types/InteractionCollection.d.ts +18 -0
  105. package/lib/types/InteractionCollection.d.ts.map +1 -0
  106. package/lib/types/RenderingTemplateCollection.d.ts +17 -0
  107. package/lib/types/RenderingTemplateCollection.d.ts.map +1 -0
  108. package/lib/types/SkillCollection.d.ts +119 -0
  109. package/lib/types/SkillCollection.d.ts.map +1 -0
  110. package/lib/types/ToolCollection.d.ts +67 -0
  111. package/lib/types/ToolCollection.d.ts.map +1 -0
  112. package/lib/types/ToolRegistry.d.ts +22 -0
  113. package/lib/types/ToolRegistry.d.ts.map +1 -0
  114. package/lib/types/auth.d.ts +32 -0
  115. package/lib/types/auth.d.ts.map +1 -0
  116. package/lib/types/build/validate.d.ts +2 -0
  117. package/lib/types/build/validate.d.ts.map +1 -0
  118. package/lib/types/copy-assets.d.ts +14 -0
  119. package/lib/types/copy-assets.d.ts.map +1 -0
  120. package/lib/types/index.d.ts +13 -0
  121. package/lib/types/index.d.ts.map +1 -0
  122. package/lib/types/server/app-package.d.ts +4 -0
  123. package/lib/types/server/app-package.d.ts.map +1 -0
  124. package/lib/types/server/content-types.d.ts +4 -0
  125. package/lib/types/server/content-types.d.ts.map +1 -0
  126. package/lib/types/server/interactions.d.ts +4 -0
  127. package/lib/types/server/interactions.d.ts.map +1 -0
  128. package/lib/types/server/mcp.d.ts +4 -0
  129. package/lib/types/server/mcp.d.ts.map +1 -0
  130. package/lib/types/server/site.d.ts +4 -0
  131. package/lib/types/server/site.d.ts.map +1 -0
  132. package/lib/types/server/skills.d.ts +4 -0
  133. package/lib/types/server/skills.d.ts.map +1 -0
  134. package/lib/types/server/templates.d.ts +4 -0
  135. package/lib/types/server/templates.d.ts.map +1 -0
  136. package/lib/types/server/tools.d.ts +4 -0
  137. package/lib/types/server/tools.d.ts.map +1 -0
  138. package/lib/types/server/types.d.ts +93 -0
  139. package/lib/types/server/types.d.ts.map +1 -0
  140. package/lib/types/server/widgets.d.ts +4 -0
  141. package/lib/types/server/widgets.d.ts.map +1 -0
  142. package/lib/types/server.d.ts +27 -0
  143. package/lib/types/server.d.ts.map +1 -0
  144. package/lib/types/site/styles.d.ts +5 -0
  145. package/lib/types/site/styles.d.ts.map +1 -0
  146. package/lib/types/site/templates.d.ts +71 -0
  147. package/lib/types/site/templates.d.ts.map +1 -0
  148. package/lib/types/types.d.ts +294 -0
  149. package/lib/types/types.d.ts.map +1 -0
  150. package/lib/types/utils.d.ts +10 -0
  151. package/lib/types/utils.d.ts.map +1 -0
  152. package/package.json +4 -4
  153. package/src/ContentTypesCollection.ts +8 -8
  154. package/src/RenderingTemplateCollection.ts +51 -0
  155. package/src/SkillCollection.ts +11 -2
  156. package/src/ToolCollection.ts +9 -18
  157. package/src/ToolRegistry.ts +17 -56
  158. package/src/auth.ts +27 -0
  159. package/src/index.ts +1 -0
  160. package/src/server/app-package.ts +101 -43
  161. package/src/server/{conyent-types.ts → content-types.ts} +29 -11
  162. package/src/server/interactions.ts +11 -6
  163. package/src/server/site.ts +9 -0
  164. package/src/server/templates.ts +80 -0
  165. package/src/server/tools.ts +3 -22
  166. package/src/server/types.ts +14 -1
  167. package/src/server/widgets.ts +2 -6
  168. package/src/server.ts +5 -1
  169. package/src/site/templates.ts +179 -2
  170. package/src/types.ts +38 -1
  171. package/src/utils.ts +15 -1
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ToolCollection = void 0;
37
+ exports.loadToolsFromDirectory = loadToolsFromDirectory;
38
+ const fs_1 = require("fs");
39
+ const http_exception_1 = require("hono/http-exception");
40
+ const path_1 = require("path");
41
+ const url_1 = require("url");
42
+ const auth_js_1 = require("./auth.js");
43
+ const ToolRegistry_js_1 = require("./ToolRegistry.js");
44
+ const utils_js_1 = require("./utils.js");
45
+ /**
46
+ * Implements a tools collection endpoint
47
+ */
48
+ class ToolCollection {
49
+ /**
50
+ * A kebab case collection name. Must only contains alphanumeric and dash characters,
51
+ * The name can be used to generate the path where the collection is exposed.
52
+ * Example: my-collection
53
+ */
54
+ name;
55
+ /**
56
+ * Optional title for UI display.
57
+ * If not provided the title will be generated form the kebab case name by replacing - with spaces and upper casing first letter in words.
58
+ */
59
+ title;
60
+ /**
61
+ * Optional icon for UI display
62
+ */
63
+ icon;
64
+ /**
65
+ * A short description
66
+ */
67
+ description;
68
+ /**
69
+ * The tool registry
70
+ */
71
+ tools;
72
+ constructor({ name, title, icon, description, tools }) {
73
+ this.name = name;
74
+ this.title = title || (0, utils_js_1.kebabCaseToTitle)(name);
75
+ this.icon = icon;
76
+ this.description = description;
77
+ // we add the collection name info
78
+ this.tools = new ToolRegistry_js_1.ToolRegistry(name, tools);
79
+ }
80
+ [Symbol.iterator]() {
81
+ let index = 0;
82
+ const tools = this.tools.getTools();
83
+ return {
84
+ next() {
85
+ if (index < tools.length) {
86
+ return { value: tools[index++], done: false };
87
+ }
88
+ else {
89
+ return { done: true, value: undefined };
90
+ }
91
+ }
92
+ };
93
+ }
94
+ map(callback) {
95
+ return this.tools.getTools().map(callback);
96
+ }
97
+ async execute(ctx, preParsedPayload) {
98
+ let payload = preParsedPayload;
99
+ try {
100
+ if (!payload) {
101
+ payload = await readPayload(ctx);
102
+ }
103
+ const toolName = payload.tool_use?.tool_name;
104
+ const toolUseId = payload.tool_use?.id;
105
+ const endpointOverrides = payload.metadata?.endpoints;
106
+ const runId = payload.metadata?.run_id;
107
+ console.log(`[ToolCollection] Tool call received: ${toolName}`, {
108
+ collection: this.name,
109
+ toolUseId,
110
+ runId,
111
+ hasEndpointOverrides: !!endpointOverrides,
112
+ });
113
+ const session = await (0, auth_js_1.authorize)(ctx, endpointOverrides, { toolName, toolUseId, runId });
114
+ const r = await this.tools.runTool(payload, session);
115
+ return ctx.json({
116
+ ...r,
117
+ tool_use_id: payload.tool_use.id
118
+ });
119
+ }
120
+ catch (err) { // HTTPException ?
121
+ const status = err.status || 500;
122
+ const toolName = payload?.tool_use?.tool_name;
123
+ const toolUseId = payload?.tool_use?.id;
124
+ console.error("[ToolCollection] Tool execution failed", {
125
+ collection: this.name,
126
+ tool: toolName,
127
+ toolUseId,
128
+ error: err.message,
129
+ status,
130
+ stack: err.stack,
131
+ });
132
+ return ctx.json({
133
+ tool_use_id: toolUseId || "undefined",
134
+ error: err.message || "Error executing tool",
135
+ status
136
+ }, status);
137
+ }
138
+ }
139
+ /**
140
+ * Get tool definitions with optional filtering.
141
+ * @param options - context for filtering
142
+ * @returns Filtered tool definitions
143
+ */
144
+ getToolDefinitions(context) {
145
+ return this.tools.getDefinitions(context);
146
+ }
147
+ }
148
+ exports.ToolCollection = ToolCollection;
149
+ function readPayload(ctx) {
150
+ const toolCtx = ctx;
151
+ // Check if body was already parsed and validated by middleware
152
+ if (toolCtx.payload) {
153
+ return toolCtx.payload;
154
+ }
155
+ // If no payload, middleware couldn't parse/validate - return error
156
+ throw new http_exception_1.HTTPException(400, {
157
+ message: 'Invalid or missing tool execution payload. Expected { tool_use: { id, tool_name, tool_input? }, metadata? }'
158
+ });
159
+ }
160
+ /**
161
+ * Load all tools from a directory.
162
+ * Scans for .js files and imports tools that match naming convention.
163
+ *
164
+ * Directory structure:
165
+ * ```
166
+ * collection/
167
+ * tools/
168
+ * SearchFundsTool.js # exports SearchFundsTool
169
+ * GetFundDetailsTool.js # exports GetFundDetailsTool
170
+ * ```
171
+ *
172
+ * Naming convention: File should export a Tool with name matching *Tool pattern.
173
+ *
174
+ * @param toolsDir - Path to the tools directory (e.g., /path/to/collection/tools)
175
+ * @returns Promise resolving to array of Tool objects
176
+ */
177
+ async function loadToolsFromDirectory(toolsDir) {
178
+ const tools = [];
179
+ if (!(0, fs_1.existsSync)(toolsDir)) {
180
+ console.warn(`Tools directory not found: ${toolsDir}`);
181
+ return tools;
182
+ }
183
+ let entries;
184
+ try {
185
+ entries = (0, fs_1.readdirSync)(toolsDir);
186
+ }
187
+ catch {
188
+ console.warn(`Could not read tools directory: ${toolsDir}`);
189
+ return tools;
190
+ }
191
+ for (const entry of entries) {
192
+ // Only process .js and .ts files that end with Tool
193
+ if (!entry.endsWith('Tool.js') && !entry.endsWith('Tool.ts'))
194
+ continue;
195
+ if (entry.endsWith('.d.ts'))
196
+ continue;
197
+ const entryPath = (0, path_1.join)(toolsDir, entry);
198
+ try {
199
+ const stat = (0, fs_1.statSync)(entryPath);
200
+ if (!stat.isFile())
201
+ continue;
202
+ // Dynamic import - need file:// URL for ESM
203
+ const fileUrl = (0, url_1.pathToFileURL)(entryPath).href;
204
+ const module = await Promise.resolve(`${fileUrl}`).then(s => __importStar(require(s)));
205
+ // Find exported Tool (named export matching filename or any Tool export)
206
+ const baseName = entry.replace(/\.(js|ts)$/, '');
207
+ const tool = module[baseName] || module.default;
208
+ if (tool && typeof tool.name === 'string' && typeof tool.run === 'function') {
209
+ tools.push(tool);
210
+ }
211
+ else {
212
+ console.warn(`No valid Tool export found in ${entry}`);
213
+ }
214
+ }
215
+ catch (err) {
216
+ console.warn(`Error loading tool from ${entry}:`, err);
217
+ }
218
+ }
219
+ return tools;
220
+ }
221
+ //# sourceMappingURL=ToolCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolCollection.js","sourceRoot":"","sources":["../../src/ToolCollection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolNotFoundError = exports.ToolRegistry = void 0;
4
+ const http_exception_1 = require("hono/http-exception");
5
+ class ToolRegistry {
6
+ // The category name usinfg this registry
7
+ category;
8
+ registry = {};
9
+ constructor(category, tools = []) {
10
+ this.category = category;
11
+ for (const tool of tools) {
12
+ this.registry[tool.name] = tool;
13
+ }
14
+ }
15
+ /**
16
+ * Get tool definitions with optional filtering.
17
+ * @param options - Filtering options
18
+ * @returns Filtered tool definitions
19
+ */
20
+ getDefinitions(context) {
21
+ const mapTool = (tool) => ({
22
+ url: `tools/${this.category}`,
23
+ name: tool.name,
24
+ description: tool.description,
25
+ input_schema: tool.input_schema,
26
+ category: this.category,
27
+ default: tool.default,
28
+ });
29
+ let tools = Object.values(this.registry);
30
+ if (context) {
31
+ tools = tools.filter(tool => {
32
+ return tool.isEnabled ? tool.isEnabled(context) : true;
33
+ });
34
+ }
35
+ return tools.map(mapTool);
36
+ }
37
+ getTool(name) {
38
+ const tool = this.registry[name];
39
+ if (tool === undefined) {
40
+ throw new ToolNotFoundError(name);
41
+ }
42
+ return tool;
43
+ }
44
+ getTools() {
45
+ return Object.values(this.registry);
46
+ }
47
+ registerTool(tool) {
48
+ this.registry[tool.name] = tool;
49
+ }
50
+ runTool(payload, context) {
51
+ const toolName = payload.tool_use.tool_name;
52
+ const toolUseId = payload.tool_use.id;
53
+ const runId = payload.metadata?.run_id;
54
+ console.log(`[ToolRegistry] Executing tool: ${toolName}`, {
55
+ toolUseId,
56
+ runId,
57
+ input: sanitizeInput(payload.tool_use.tool_input),
58
+ });
59
+ return this.getTool(toolName).run(payload, context);
60
+ }
61
+ }
62
+ exports.ToolRegistry = ToolRegistry;
63
+ class ToolNotFoundError extends http_exception_1.HTTPException {
64
+ constructor(name) {
65
+ super(404, { message: "Tool function not found: " + name });
66
+ this.name = "ToolNotFoundError";
67
+ }
68
+ }
69
+ exports.ToolNotFoundError = ToolNotFoundError;
70
+ const SENSITIVE_KEYS = new Set([
71
+ 'apikey', 'api_key', 'token', 'secret', 'password', 'credential', 'credentials',
72
+ 'authorization', 'auth', 'key', 'private_key', 'access_token', 'refresh_token'
73
+ ]);
74
+ function sanitizeInput(input) {
75
+ if (!input)
76
+ return null;
77
+ const sanitized = {};
78
+ for (const [key, value] of Object.entries(input)) {
79
+ const lowerKey = key.toLowerCase();
80
+ if (SENSITIVE_KEYS.has(lowerKey) || lowerKey.includes('key') || lowerKey.includes('token') || lowerKey.includes('secret')) {
81
+ sanitized[key] = '[REDACTED]';
82
+ }
83
+ else if (typeof value === 'string' && value.length > 50) {
84
+ sanitized[key] = value.slice(0, 50) + '...';
85
+ }
86
+ else if (typeof value === 'object' && value !== null) {
87
+ sanitized[key] = Array.isArray(value) ? `[Array(${value.length})]` : '[Object]';
88
+ }
89
+ else {
90
+ sanitized[key] = value;
91
+ }
92
+ }
93
+ return sanitized;
94
+ }
95
+ //# sourceMappingURL=ToolRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolRegistry.js","sourceRoot":"","sources":["../../src/ToolRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthSession = void 0;
4
+ exports.getJwks = getJwks;
5
+ exports.verifyToken = verifyToken;
6
+ exports.authorize = authorize;
7
+ const client_1 = require("@vertesia/client");
8
+ const http_exception_1 = require("hono/http-exception");
9
+ const jose_1 = require("jose");
10
+ const cache = {};
11
+ async function getJwks(url) {
12
+ if (!cache.url) {
13
+ console.log('JWKS cache miss for: ', url);
14
+ const jwks = await fetch(url).then(r => {
15
+ if (r.ok) {
16
+ return r.json();
17
+ }
18
+ throw new Error("Fetching jwks failed with code: " + r.status);
19
+ }).catch(err => {
20
+ throw new Error("Failed to fetch jwks: " + err.message);
21
+ });
22
+ cache.url = (0, jose_1.createLocalJWKSet)(jwks);
23
+ }
24
+ return cache.url;
25
+ }
26
+ async function verifyToken(token) {
27
+ const decodedJwt = (0, jose_1.decodeJwt)(token);
28
+ if (!decodedJwt.iss) {
29
+ throw new Error("No issuer URL found in JWT");
30
+ }
31
+ if (!isAllowedIssuer(decodedJwt.iss)) {
32
+ throw new Error("Issuer is not allowed: " + decodedJwt.iss);
33
+ }
34
+ const jwks = await getJwks(`${decodedJwt.iss}/.well-known/jwks`);
35
+ return await (0, jose_1.jwtVerify)(token, jwks);
36
+ }
37
+ async function authorize(ctx, endpointOverrides, toolContext) {
38
+ const auth = ctx.req.header('Authorization');
39
+ if (!auth) {
40
+ throw new http_exception_1.HTTPException(401, {
41
+ message: `Missing Authorization header`
42
+ });
43
+ }
44
+ const [scheme, value] = auth.trim().split(' ');
45
+ if (scheme.toLowerCase() !== 'bearer') {
46
+ throw new http_exception_1.HTTPException(401, {
47
+ message: `Authorization scheme ${scheme} is not supported`
48
+ });
49
+ }
50
+ if (!value) {
51
+ throw new http_exception_1.HTTPException(401, {
52
+ message: `Missing bearer token value`
53
+ });
54
+ }
55
+ try {
56
+ const { payload } = await verifyToken(value);
57
+ assertAllowedOrg(payload);
58
+ const session = new AuthSession(value, payload, endpointOverrides, toolContext);
59
+ ctx.set("auth", session);
60
+ return session;
61
+ }
62
+ catch (err) {
63
+ if (err instanceof http_exception_1.HTTPException)
64
+ throw err;
65
+ throw new http_exception_1.HTTPException(401, {
66
+ message: err.message,
67
+ cause: err
68
+ });
69
+ }
70
+ }
71
+ class AuthSession {
72
+ token;
73
+ payload;
74
+ _client;
75
+ endpoints;
76
+ toolContext;
77
+ constructor(token, payload, endpointOverrides, toolContext) {
78
+ this.token = token;
79
+ this.payload = payload;
80
+ const decoded = (0, client_1.decodeEndpoints)(payload.endpoints);
81
+ // Use overrides from workflow config if provided, falling back to JWT endpoints
82
+ this.endpoints = {
83
+ studio: endpointOverrides?.studio || decoded.studio,
84
+ store: endpointOverrides?.store || decoded.store,
85
+ token: endpointOverrides?.token || decoded.token || payload.iss,
86
+ };
87
+ this.toolContext = toolContext;
88
+ }
89
+ async getClient() {
90
+ if (!this._client) {
91
+ const toolInfo = this.toolContext?.toolName ? ` for ${this.toolContext.toolName}` : '';
92
+ console.log(`[VertesiaClient] Initializing client${toolInfo}`, {
93
+ tool: this.toolContext?.toolName,
94
+ toolUseId: this.toolContext?.toolUseId,
95
+ runId: this.toolContext?.runId,
96
+ endpoints: this.endpoints,
97
+ });
98
+ this._client = await client_1.VertesiaClient.fromAuthToken(this.token, this.payload, this.endpoints);
99
+ }
100
+ return this._client;
101
+ }
102
+ }
103
+ exports.AuthSession = AuthSession;
104
+ function isAllowedIssuer(iss) {
105
+ return iss.endsWith(".vertesia.io") || iss.endsWith(".becomposable.com");
106
+ }
107
+ /**
108
+ * If VERTESIA_ALLOWED_ORGS is set (comma-separated org IDs), restrict access
109
+ * to only those organizations. If not set, all authenticated orgs are allowed.
110
+ */
111
+ let _allowedOrgs;
112
+ function getAllowedOrgs() {
113
+ if (_allowedOrgs === undefined) {
114
+ const raw = process.env.VERTESIA_ALLOWED_ORGS;
115
+ _allowedOrgs = raw
116
+ ? new Set(raw.split(',').map(s => s.trim()).filter(Boolean))
117
+ : null;
118
+ }
119
+ return _allowedOrgs;
120
+ }
121
+ function assertAllowedOrg(payload) {
122
+ const allowed = getAllowedOrgs();
123
+ if (!allowed)
124
+ return;
125
+ if (!allowed.has(payload.account.id)) {
126
+ throw new http_exception_1.HTTPException(403, {
127
+ message: `Organization ${payload.account.name} is not authorized to access this server`,
128
+ });
129
+ }
130
+ }
131
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validate = validate;
4
+ function validate() {
5
+ //TODO
6
+ }
7
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/build/validate.ts"],"names":[],"mappings":";;AAAA,4BAEC;AAFD,SAAgB,QAAQ;IACpB,MAAM;AACV,CAAC"}
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.copyRuntimeAssets = copyRuntimeAssets;
5
+ /**
6
+ * Copy runtime assets (skill files, prompt files, scripts) to dist folder
7
+ * These files are read from disk at runtime and need to be deployed with the app
8
+ *
9
+ * Usage:
10
+ * npx tools-sdk-copy-assets [srcDir] [distDir]
11
+ *
12
+ * Or import and call directly:
13
+ * import { copyRuntimeAssets } from '@vertesia/tools-sdk';
14
+ * copyRuntimeAssets('./src', './dist');
15
+ */
16
+ const fs_1 = require("fs");
17
+ const path_1 = require("path");
18
+ /**
19
+ * Recursively copy files matching a filter
20
+ */
21
+ function copyFilesRecursive(src, dest, fileFilter) {
22
+ if (!(0, fs_1.existsSync)(src))
23
+ return;
24
+ const entries = (0, fs_1.readdirSync)(src);
25
+ for (const entry of entries) {
26
+ const srcPath = (0, path_1.join)(src, entry);
27
+ const destPath = (0, path_1.join)(dest, entry);
28
+ const stat = (0, fs_1.statSync)(srcPath);
29
+ if (stat.isDirectory()) {
30
+ // Recurse into directories
31
+ copyFilesRecursive(srcPath, destPath, fileFilter);
32
+ }
33
+ else if (fileFilter(entry)) {
34
+ // Copy matching files
35
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(destPath), { recursive: true });
36
+ (0, fs_1.copyFileSync)(srcPath, destPath);
37
+ }
38
+ }
39
+ }
40
+ /**
41
+ * Copy runtime assets (skills, interactions) from src to dist
42
+ */
43
+ function copyRuntimeAssets(options = {}) {
44
+ const { srcDir = './src', distDir = './dist', verbose = true } = options;
45
+ if (verbose) {
46
+ console.log('Copying runtime assets to dist...');
47
+ }
48
+ // Copy skill files (SKILL.md, SKILL.jst, *.py)
49
+ const skillsSrc = (0, path_1.join)(srcDir, 'skills');
50
+ const skillsDest = (0, path_1.join)(distDir, 'skills');
51
+ if ((0, fs_1.existsSync)(skillsSrc)) {
52
+ copyFilesRecursive(skillsSrc, skillsDest, (filename) => {
53
+ return filename === 'SKILL.md' ||
54
+ filename === 'SKILL.jst' ||
55
+ filename.endsWith('.py');
56
+ });
57
+ if (verbose) {
58
+ console.log(' ✓ Skills assets (SKILL.md, SKILL.jst, *.py)');
59
+ }
60
+ }
61
+ // Copy interaction prompt files (prompt.jst, prompt.md)
62
+ const interactionsSrc = (0, path_1.join)(srcDir, 'interactions');
63
+ const interactionsDest = (0, path_1.join)(distDir, 'interactions');
64
+ if ((0, fs_1.existsSync)(interactionsSrc)) {
65
+ copyFilesRecursive(interactionsSrc, interactionsDest, (filename) => {
66
+ return filename === 'prompt.jst' ||
67
+ filename === 'prompt.md';
68
+ });
69
+ if (verbose) {
70
+ console.log(' ✓ Interaction assets (prompt.jst, prompt.md)');
71
+ }
72
+ }
73
+ if (verbose) {
74
+ console.log('Runtime assets copied successfully!');
75
+ }
76
+ }
77
+ // CLI entry point
78
+ if (typeof process !== 'undefined' && process.argv[1]?.includes('copy-assets')) {
79
+ const args = process.argv.slice(2);
80
+ const srcDir = args[0] || './src';
81
+ const distDir = args[1] || './dist';
82
+ copyRuntimeAssets({ srcDir, distDir });
83
+ }
84
+ //# sourceMappingURL=copy-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-assets.js","sourceRoot":"","sources":["../../src/copy-assets.ts"],"names":[],"mappings":";;;AAmDA,8CA2CC;AA7FD;;;;;;;;;;GAUG;AACH,2BAAgF;AAChF,+BAAqC;AAErC;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAW,EAAE,IAAY,EAAE,UAAyC;IAC5F,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC;QAAE,OAAO;IAE7B,MAAM,OAAO,GAAG,IAAA,gBAAW,EAAC,GAAG,CAAC,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAA,aAAQ,EAAC,OAAO,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,2BAA2B;YAC3B,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,sBAAsB;YACtB,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,IAAA,iBAAY,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;AACL,CAAC;AAWD;;GAEG;AACH,SAAgB,iBAAiB,CAAC,UAA6B,EAAE;IAC7D,MAAM,EACF,MAAM,GAAG,OAAO,EAChB,OAAO,GAAG,QAAQ,EAClB,OAAO,GAAG,IAAI,EACjB,GAAG,OAAO,CAAC;IAEZ,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACrD,CAAC;IAED,+CAA+C;IAC/C,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE3C,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QACxB,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnD,OAAO,QAAQ,KAAK,UAAU;gBACvB,QAAQ,KAAK,WAAW;gBACxB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEvD,IAAI,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,kBAAkB,CAAC,eAAe,EAAE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC/D,OAAO,QAAQ,KAAK,YAAY;gBACzB,QAAQ,KAAK,WAAW,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACvD,CAAC;AACL,CAAC;AAED,kBAAkB;AAClB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAEpC,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.copyRuntimeAssets = exports.AuthSession = exports.authorize = void 0;
18
+ var auth_js_1 = require("./auth.js");
19
+ Object.defineProperty(exports, "authorize", { enumerable: true, get: function () { return auth_js_1.authorize; } });
20
+ Object.defineProperty(exports, "AuthSession", { enumerable: true, get: function () { return auth_js_1.AuthSession; } });
21
+ __exportStar(require("./ContentTypesCollection.js"), exports);
22
+ __exportStar(require("./RenderingTemplateCollection.js"), exports);
23
+ var copy_assets_js_1 = require("./copy-assets.js");
24
+ Object.defineProperty(exports, "copyRuntimeAssets", { enumerable: true, get: function () { return copy_assets_js_1.copyRuntimeAssets; } });
25
+ __exportStar(require("./InteractionCollection.js"), exports);
26
+ __exportStar(require("./server.js"), exports);
27
+ __exportStar(require("./server/types.js"), exports);
28
+ __exportStar(require("./site/templates.js"), exports);
29
+ __exportStar(require("./SkillCollection.js"), exports);
30
+ __exportStar(require("./ToolCollection.js"), exports);
31
+ __exportStar(require("./ToolRegistry.js"), exports);
32
+ __exportStar(require("./types.js"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAmD;AAA1C,oGAAA,SAAS,OAAA;AAAE,sGAAA,WAAW,OAAA;AAC/B,8DAA4C;AAC5C,mEAAiD;AACjD,mDAAqD;AAA5C,mHAAA,iBAAiB,OAAA;AAC1B,6DAA2C;AAC3C,8CAA4B;AAC5B,oDAAkC;AAClC,sDAAoC;AACpC,uDAAqC;AACrC,sDAAoC;AACpC,oDAAkC;AAClC,6CAA2B"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }