@toon-protocol/views 0.2.0
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/a2ui/A2UIRenderer.d.ts +47 -0
- package/dist/a2ui/A2UIRenderer.d.ts.map +1 -0
- package/dist/a2ui/A2UIRenderer.js +106 -0
- package/dist/a2ui/A2UIRenderer.js.map +1 -0
- package/dist/a2ui/binding.d.ts +46 -0
- package/dist/a2ui/binding.d.ts.map +1 -0
- package/dist/a2ui/binding.js +111 -0
- package/dist/a2ui/binding.js.map +1 -0
- package/dist/a2ui/index.d.ts +17 -0
- package/dist/a2ui/index.d.ts.map +1 -0
- package/dist/a2ui/index.js +17 -0
- package/dist/a2ui/index.js.map +1 -0
- package/dist/a2ui/types.d.ts +101 -0
- package/dist/a2ui/types.d.ts.map +1 -0
- package/dist/a2ui/types.js +64 -0
- package/dist/a2ui/types.js.map +1 -0
- package/dist/a2ui/validate.d.ts +55 -0
- package/dist/a2ui/validate.d.ts.map +1 -0
- package/dist/a2ui/validate.js +117 -0
- package/dist/a2ui/validate.js.map +1 -0
- package/dist/app/index.html +246 -0
- package/dist/app-bridge/ext-apps-bridge.d.ts +16 -0
- package/dist/app-bridge/ext-apps-bridge.d.ts.map +1 -0
- package/dist/app-bridge/ext-apps-bridge.js +66 -0
- package/dist/app-bridge/ext-apps-bridge.js.map +1 -0
- package/dist/app-bridge/types.d.ts +41 -0
- package/dist/app-bridge/types.d.ts.map +1 -0
- package/dist/app-bridge/types.js +10 -0
- package/dist/app-bridge/types.js.map +1 -0
- package/dist/app-entry.d.ts +13 -0
- package/dist/app-entry.d.ts.map +1 -0
- package/dist/app-entry.js +45 -0
- package/dist/app-entry.js.map +1 -0
- package/dist/atoms/defi.d.ts +3 -0
- package/dist/atoms/defi.d.ts.map +1 -0
- package/dist/atoms/defi.js +80 -0
- package/dist/atoms/defi.js.map +1 -0
- package/dist/atoms/fallback.d.ts +4 -0
- package/dist/atoms/fallback.d.ts.map +1 -0
- package/dist/atoms/fallback.js +15 -0
- package/dist/atoms/fallback.js.map +1 -0
- package/dist/atoms/forge.d.ts +3 -0
- package/dist/atoms/forge.d.ts.map +1 -0
- package/dist/atoms/forge.js +50 -0
- package/dist/atoms/forge.js.map +1 -0
- package/dist/atoms/interactive.d.ts +3 -0
- package/dist/atoms/interactive.d.ts.map +1 -0
- package/dist/atoms/interactive.js +99 -0
- package/dist/atoms/interactive.js.map +1 -0
- package/dist/atoms/layout.d.ts +3 -0
- package/dist/atoms/layout.d.ts.map +1 -0
- package/dist/atoms/layout.js +22 -0
- package/dist/atoms/layout.js.map +1 -0
- package/dist/atoms/media.d.ts +3 -0
- package/dist/atoms/media.d.ts.map +1 -0
- package/dist/atoms/media.js +92 -0
- package/dist/atoms/media.js.map +1 -0
- package/dist/atoms/onboard.d.ts +3 -0
- package/dist/atoms/onboard.d.ts.map +1 -0
- package/dist/atoms/onboard.js +26 -0
- package/dist/atoms/onboard.js.map +1 -0
- package/dist/atoms/registry.d.ts +35 -0
- package/dist/atoms/registry.d.ts.map +1 -0
- package/dist/atoms/registry.js +77 -0
- package/dist/atoms/registry.js.map +1 -0
- package/dist/atoms/social.d.ts +3 -0
- package/dist/atoms/social.d.ts.map +1 -0
- package/dist/atoms/social.js +52 -0
- package/dist/atoms/social.js.map +1 -0
- package/dist/atoms/types.d.ts +72 -0
- package/dist/atoms/types.d.ts.map +1 -0
- package/dist/atoms/types.js +11 -0
- package/dist/atoms/types.js.map +1 -0
- package/dist/catalog.d.ts +27 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +121 -0
- package/dist/catalog.js.map +1 -0
- package/dist/components/mono-id.d.ts +16 -0
- package/dist/components/mono-id.d.ts.map +1 -0
- package/dist/components/mono-id.js +18 -0
- package/dist/components/mono-id.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +12 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +25 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +26 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +37 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +8 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +9 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +8 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/examples.d.ts +39 -0
- package/dist/examples.d.ts.map +1 -0
- package/dist/examples.js +168 -0
- package/dist/examples.js.map +1 -0
- package/dist/filters.d.ts +40 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +84 -0
- package/dist/filters.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +4 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +7 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +7 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp-ui/ConsentPrompt.d.ts +41 -0
- package/dist/mcp-ui/ConsentPrompt.d.ts.map +1 -0
- package/dist/mcp-ui/ConsentPrompt.js +45 -0
- package/dist/mcp-ui/ConsentPrompt.js.map +1 -0
- package/dist/mcp-ui/SandboxedAppRenderer.d.ts +54 -0
- package/dist/mcp-ui/SandboxedAppRenderer.d.ts.map +1 -0
- package/dist/mcp-ui/SandboxedAppRenderer.js +74 -0
- package/dist/mcp-ui/SandboxedAppRenderer.js.map +1 -0
- package/dist/mcp-ui/index.d.ts +18 -0
- package/dist/mcp-ui/index.d.ts.map +1 -0
- package/dist/mcp-ui/index.js +18 -0
- package/dist/mcp-ui/index.js.map +1 -0
- package/dist/mcp-ui/sandbox.d.ts +62 -0
- package/dist/mcp-ui/sandbox.d.ts.map +1 -0
- package/dist/mcp-ui/sandbox.js +78 -0
- package/dist/mcp-ui/sandbox.js.map +1 -0
- package/dist/parsers/media.d.ts +68 -0
- package/dist/parsers/media.d.ts.map +1 -0
- package/dist/parsers/media.js +124 -0
- package/dist/parsers/media.js.map +1 -0
- package/dist/parsers/nip34.d.ts +75 -0
- package/dist/parsers/nip34.d.ts.map +1 -0
- package/dist/parsers/nip34.js +142 -0
- package/dist/parsers/nip34.js.map +1 -0
- package/dist/parsers/social.d.ts +89 -0
- package/dist/parsers/social.d.ts.map +1 -0
- package/dist/parsers/social.js +136 -0
- package/dist/parsers/social.js.map +1 -0
- package/dist/render/node-shims/node-builtins.d.ts +30 -0
- package/dist/render/node-shims/node-builtins.d.ts.map +1 -0
- package/dist/render/node-shims/node-builtins.js +38 -0
- package/dist/render/node-shims/node-builtins.js.map +1 -0
- package/dist/render/resolve.d.ts +72 -0
- package/dist/render/resolve.d.ts.map +1 -0
- package/dist/render/resolve.js +115 -0
- package/dist/render/resolve.js.map +1 -0
- package/dist/runtime.d.ts +17 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +218 -0
- package/dist/runtime.js.map +1 -0
- package/dist/server/apps-server.d.ts +32 -0
- package/dist/server/apps-server.d.ts.map +1 -0
- package/dist/server/apps-server.js +163 -0
- package/dist/server/apps-server.js.map +1 -0
- package/dist/server/backend.d.ts +148 -0
- package/dist/server/backend.d.ts.map +1 -0
- package/dist/server/backend.js +11 -0
- package/dist/server/backend.js.map +1 -0
- package/dist/server/daemon-backend.d.ts +113 -0
- package/dist/server/daemon-backend.d.ts.map +1 -0
- package/dist/server/daemon-backend.js +79 -0
- package/dist/server/daemon-backend.js.map +1 -0
- package/dist/server/daemon-main.d.ts +25 -0
- package/dist/server/daemon-main.d.ts.map +1 -0
- package/dist/server/daemon-main.js +165 -0
- package/dist/server/daemon-main.js.map +1 -0
- package/dist/server/fake-backend.d.ts +53 -0
- package/dist/server/fake-backend.d.ts.map +1 -0
- package/dist/server/fake-backend.js +157 -0
- package/dist/server/fake-backend.js.map +1 -0
- package/dist/server/fake-main.d.ts +15 -0
- package/dist/server/fake-main.d.ts.map +1 -0
- package/dist/server/fake-main.js +39 -0
- package/dist/server/fake-main.js.map +1 -0
- package/dist/spec.d.ts +67 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +221 -0
- package/dist/spec.js.map +1 -0
- package/dist/tool-names.d.ts +27 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +32 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
package/dist/spec.js
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewSpec — the declarative composition language the client-side agent authors
|
|
3
|
+
* to assemble atoms into a user journey. A ViewSpec rides as the *result* of the
|
|
4
|
+
* `toon_render` tool (MCP Apps delivers dynamic data via tool results, not a
|
|
5
|
+
* side-channel); the iframe runtime interprets it.
|
|
6
|
+
*
|
|
7
|
+
* ViewSpecs are MODEL-AUTHORED → UNTRUSTED. `validateViewSpec` is the security
|
|
8
|
+
* boundary: it allowlists atom ids, caps depth/breadth, and rejects anything
|
|
9
|
+
* non-serializable. Invalid specs must degrade to a fallback, never `eval`.
|
|
10
|
+
*/
|
|
11
|
+
import {} from './types.js';
|
|
12
|
+
const DEFAULT_MAX_DEPTH = 32;
|
|
13
|
+
const DEFAULT_MAX_NODES = 500;
|
|
14
|
+
function editDistance(a, b) {
|
|
15
|
+
const n = b.length;
|
|
16
|
+
const row = Array.from({ length: n + 1 }, (_, j) => j);
|
|
17
|
+
for (let i = 1; i <= a.length; i++) {
|
|
18
|
+
let prev = row[0];
|
|
19
|
+
row[0] = i;
|
|
20
|
+
for (let j = 1; j <= n; j++) {
|
|
21
|
+
const tmp = row[j];
|
|
22
|
+
row[j] = a[i - 1] === b[j - 1] ? prev : 1 + Math.min(prev, row[j - 1], row[j]);
|
|
23
|
+
prev = tmp;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return row[n];
|
|
27
|
+
}
|
|
28
|
+
function nearestAtom(name, allowed) {
|
|
29
|
+
if (name.length > 64)
|
|
30
|
+
return undefined; // no real atom name exceeds this; avoid O(m×n) on untrusted input
|
|
31
|
+
const lower = name.toLowerCase();
|
|
32
|
+
let best;
|
|
33
|
+
let bestDist = Infinity;
|
|
34
|
+
for (const id of allowed) {
|
|
35
|
+
const d = editDistance(lower, id.toLowerCase());
|
|
36
|
+
if (d < bestDist) {
|
|
37
|
+
bestDist = d;
|
|
38
|
+
best = id;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return bestDist <= Math.floor(name.length / 2) ? best : undefined;
|
|
42
|
+
}
|
|
43
|
+
const FILTER_ARRAY_KEYS = new Set([
|
|
44
|
+
'kinds',
|
|
45
|
+
'authors',
|
|
46
|
+
'ids',
|
|
47
|
+
'#d',
|
|
48
|
+
'#e',
|
|
49
|
+
'#a',
|
|
50
|
+
'#p',
|
|
51
|
+
'#t',
|
|
52
|
+
]);
|
|
53
|
+
const FILTER_NUM_KEYS = new Set(['since', 'until', 'limit']);
|
|
54
|
+
function isPlainObject(v) {
|
|
55
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
56
|
+
}
|
|
57
|
+
function toSet(v) {
|
|
58
|
+
return v instanceof Set ? v : new Set(v);
|
|
59
|
+
}
|
|
60
|
+
function validateFilter(filter, path, errors) {
|
|
61
|
+
if (!isPlainObject(filter)) {
|
|
62
|
+
errors.push(`${path}: filter must be an object`);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
for (const [key, value] of Object.entries(filter)) {
|
|
66
|
+
if (FILTER_ARRAY_KEYS.has(key)) {
|
|
67
|
+
if (!Array.isArray(value) ||
|
|
68
|
+
!value.every((x) => typeof x === 'string' || typeof x === 'number')) {
|
|
69
|
+
errors.push(`${path}.${key}: must be an array of string/number`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (FILTER_NUM_KEYS.has(key)) {
|
|
73
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
74
|
+
errors.push(`${path}.${key}: must be a finite number`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
errors.push(`${path}.${key}: unsupported filter key`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** True if a value is safely JSON-serializable (no functions, no cycles, finite). */
|
|
83
|
+
function isJsonSafe(value, depth = 0) {
|
|
84
|
+
if (depth > 8)
|
|
85
|
+
return false;
|
|
86
|
+
if (value === null)
|
|
87
|
+
return true;
|
|
88
|
+
switch (typeof value) {
|
|
89
|
+
case 'string':
|
|
90
|
+
case 'boolean':
|
|
91
|
+
return true;
|
|
92
|
+
case 'number':
|
|
93
|
+
return Number.isFinite(value);
|
|
94
|
+
case 'object':
|
|
95
|
+
if (Array.isArray(value))
|
|
96
|
+
return value.every((v) => isJsonSafe(v, depth + 1));
|
|
97
|
+
if (isPlainObject(value))
|
|
98
|
+
return Object.values(value).every((v) => isJsonSafe(v, depth + 1));
|
|
99
|
+
return false;
|
|
100
|
+
default:
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Validate a model-authored ViewSpec against the atom/tool allowlists and the
|
|
106
|
+
* depth/breadth caps. Returns the (structurally identical) spec on success or a
|
|
107
|
+
* list of human-readable errors on failure.
|
|
108
|
+
*/
|
|
109
|
+
export function validateViewSpec(input, opts) {
|
|
110
|
+
const errors = [];
|
|
111
|
+
const allowedAtoms = toSet(opts.allowedAtoms);
|
|
112
|
+
const allowedTools = opts.allowedTools ? toSet(opts.allowedTools) : undefined;
|
|
113
|
+
const maxDepth = opts.maxDepth ?? DEFAULT_MAX_DEPTH;
|
|
114
|
+
const maxNodes = opts.maxNodes ?? DEFAULT_MAX_NODES;
|
|
115
|
+
if (!isPlainObject(input)) {
|
|
116
|
+
return { ok: false, errors: ['spec must be an object'] };
|
|
117
|
+
}
|
|
118
|
+
if (input['title'] !== undefined && typeof input['title'] !== 'string') {
|
|
119
|
+
errors.push('spec.title: must be a string');
|
|
120
|
+
}
|
|
121
|
+
if (!isPlainObject(input['root'])) {
|
|
122
|
+
return { ok: false, errors: ['spec.root: required object'] };
|
|
123
|
+
}
|
|
124
|
+
let nodeCount = 0;
|
|
125
|
+
const walk = (node, path, depth) => {
|
|
126
|
+
if (depth > maxDepth) {
|
|
127
|
+
errors.push(`${path}: exceeds max depth ${maxDepth}`);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (++nodeCount > maxNodes) {
|
|
131
|
+
errors.push(`spec: exceeds max node count ${maxNodes}`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (!isPlainObject(node)) {
|
|
135
|
+
errors.push(`${path}: node must be an object`);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (typeof node['atom'] !== 'string') {
|
|
139
|
+
errors.push(`${path}.atom: must be a string`);
|
|
140
|
+
}
|
|
141
|
+
else if (!allowedAtoms.has(node['atom'])) {
|
|
142
|
+
const atomName = node['atom'];
|
|
143
|
+
const suggestion = nearestAtom(atomName, allowedAtoms);
|
|
144
|
+
const hint = suggestion ? ` Did you mean "${suggestion}"?` : '';
|
|
145
|
+
const validList = [...allowedAtoms].join(', ');
|
|
146
|
+
errors.push(`${path}.atom: unknown atom "${atomName}".${hint}\n` +
|
|
147
|
+
` Valid atoms: ${validList}.\n` +
|
|
148
|
+
` See toon_atoms for full vocabulary.`);
|
|
149
|
+
}
|
|
150
|
+
if (node['props'] !== undefined) {
|
|
151
|
+
if (!isPlainObject(node['props']) || !isJsonSafe(node['props'])) {
|
|
152
|
+
errors.push(`${path}.props: must be a JSON-serializable object`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (node['bind'] !== undefined) {
|
|
156
|
+
const bind = node['bind'];
|
|
157
|
+
if (!isPlainObject(bind)) {
|
|
158
|
+
errors.push(`${path}.bind: must be an object`);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
const KNOWN_BIND_KEYS = new Set(['query', 'eventId', 'kindAuto']);
|
|
162
|
+
for (const key of Object.keys(bind)) {
|
|
163
|
+
if (!KNOWN_BIND_KEYS.has(key)) {
|
|
164
|
+
errors.push(`${path}.bind.${key}: unknown bind key (use "query" for a NIP-01 filter)`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (bind['query'] !== undefined)
|
|
168
|
+
validateFilter(bind['query'], `${path}.bind.query`, errors);
|
|
169
|
+
if (bind['eventId'] !== undefined && typeof bind['eventId'] !== 'string') {
|
|
170
|
+
errors.push(`${path}.bind.eventId: must be a string`);
|
|
171
|
+
}
|
|
172
|
+
if (bind['kindAuto'] !== undefined && typeof bind['kindAuto'] !== 'boolean') {
|
|
173
|
+
errors.push(`${path}.bind.kindAuto: must be a boolean`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (node['actions'] !== undefined) {
|
|
178
|
+
const actions = node['actions'];
|
|
179
|
+
if (!isPlainObject(actions)) {
|
|
180
|
+
errors.push(`${path}.actions: must be an object`);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
for (const [name, ref] of Object.entries(actions)) {
|
|
184
|
+
const p = `${path}.actions.${name}`;
|
|
185
|
+
if (!isPlainObject(ref)) {
|
|
186
|
+
errors.push(`${p}: must be an object`);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (typeof ref['tool'] !== 'string') {
|
|
190
|
+
errors.push(`${p}.tool: must be a string`);
|
|
191
|
+
}
|
|
192
|
+
else if (allowedTools && !allowedTools.has(ref['tool'])) {
|
|
193
|
+
errors.push(`${p}.tool: tool "${ref['tool']}" not allowed`);
|
|
194
|
+
}
|
|
195
|
+
if (ref['args'] !== undefined && (!isPlainObject(ref['args']) || !isJsonSafe(ref['args']))) {
|
|
196
|
+
errors.push(`${p}.args: must be a JSON-serializable object`);
|
|
197
|
+
}
|
|
198
|
+
if (ref['spendy'] !== undefined && typeof ref['spendy'] !== 'boolean') {
|
|
199
|
+
errors.push(`${p}.spendy: must be a boolean`);
|
|
200
|
+
}
|
|
201
|
+
if (ref['confirmLabel'] !== undefined && typeof ref['confirmLabel'] !== 'string') {
|
|
202
|
+
errors.push(`${p}.confirmLabel: must be a string`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (node['children'] !== undefined) {
|
|
208
|
+
if (!Array.isArray(node['children'])) {
|
|
209
|
+
errors.push(`${path}.children: must be an array`);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
node['children'].forEach((child, i) => walk(child, `${path}.children[${i}]`, depth + 1));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
walk(input['root'], 'spec.root', 0);
|
|
217
|
+
if (errors.length > 0)
|
|
218
|
+
return { ok: false, errors };
|
|
219
|
+
return { ok: true, spec: input };
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=spec.js.map
|
package/dist/spec.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared MCP tool / resource names for the TOON apps surface.
|
|
3
|
+
*
|
|
4
|
+
* Node-safe (no React) so both the iframe runtime and the server can import them
|
|
5
|
+
* and stay in lockstep.
|
|
6
|
+
*/
|
|
7
|
+
/** Resolves a NIP-01 filter to events (free read). */
|
|
8
|
+
export declare const QUERY_TOOL = "toon_query";
|
|
9
|
+
/** Returns the atom catalog so the agent can compose valid ViewSpecs. */
|
|
10
|
+
export declare const ATOMS_TOOL = "toon_atoms";
|
|
11
|
+
/** Accepts an agent-authored ViewSpec; carries `_meta.ui.resourceUri`. */
|
|
12
|
+
export declare const RENDER_TOOL = "toon_render";
|
|
13
|
+
/** Pay-to-write: daemon signs + publishes the supplied event shell. */
|
|
14
|
+
export declare const PUBLISH_TOOL = "toon_publish_unsigned";
|
|
15
|
+
/** Spendy: upload media to Arweave then publish a referencing event. */
|
|
16
|
+
export declare const UPLOAD_TOOL = "toon_upload_media";
|
|
17
|
+
/** Pre-open a payment channel (daemon signs/settles; UI never holds keys). */
|
|
18
|
+
export declare const OPEN_CHANNEL_TOOL = "toon_open_channel";
|
|
19
|
+
/** Spendy: run a cross-asset swap; daemon signs the source claim, returns a target claim. */
|
|
20
|
+
export declare const SWAP_TOOL = "toon_swap";
|
|
21
|
+
/** Read-only: report the current pay-to-write fee + settlement chain (no payment). */
|
|
22
|
+
export declare const STATUS_TOOL = "toon_status";
|
|
23
|
+
/** The single MCP-app UI resource the host renders. */
|
|
24
|
+
export declare const APP_RESOURCE_URI = "ui://toon/app";
|
|
25
|
+
/** Write tools the runtime/validator permit an action to target. */
|
|
26
|
+
export declare const WRITE_TOOLS: ReadonlySet<string>;
|
|
27
|
+
//# sourceMappingURL=tool-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../src/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sDAAsD;AACtD,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,yEAAyE;AACzE,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,0EAA0E;AAC1E,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,uEAAuE;AACvE,eAAO,MAAM,YAAY,0BAA0B,CAAC;AACpD,wEAAwE;AACxE,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AACrD,6FAA6F;AAC7F,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,sFAAsF;AACtF,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD,oEAAoE;AACpE,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CAK1C,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared MCP tool / resource names for the TOON apps surface.
|
|
3
|
+
*
|
|
4
|
+
* Node-safe (no React) so both the iframe runtime and the server can import them
|
|
5
|
+
* and stay in lockstep.
|
|
6
|
+
*/
|
|
7
|
+
/** Resolves a NIP-01 filter to events (free read). */
|
|
8
|
+
export const QUERY_TOOL = 'toon_query';
|
|
9
|
+
/** Returns the atom catalog so the agent can compose valid ViewSpecs. */
|
|
10
|
+
export const ATOMS_TOOL = 'toon_atoms';
|
|
11
|
+
/** Accepts an agent-authored ViewSpec; carries `_meta.ui.resourceUri`. */
|
|
12
|
+
export const RENDER_TOOL = 'toon_render';
|
|
13
|
+
/** Pay-to-write: daemon signs + publishes the supplied event shell. */
|
|
14
|
+
export const PUBLISH_TOOL = 'toon_publish_unsigned';
|
|
15
|
+
/** Spendy: upload media to Arweave then publish a referencing event. */
|
|
16
|
+
export const UPLOAD_TOOL = 'toon_upload_media';
|
|
17
|
+
/** Pre-open a payment channel (daemon signs/settles; UI never holds keys). */
|
|
18
|
+
export const OPEN_CHANNEL_TOOL = 'toon_open_channel';
|
|
19
|
+
/** Spendy: run a cross-asset swap; daemon signs the source claim, returns a target claim. */
|
|
20
|
+
export const SWAP_TOOL = 'toon_swap';
|
|
21
|
+
/** Read-only: report the current pay-to-write fee + settlement chain (no payment). */
|
|
22
|
+
export const STATUS_TOOL = 'toon_status';
|
|
23
|
+
/** The single MCP-app UI resource the host renders. */
|
|
24
|
+
export const APP_RESOURCE_URI = 'ui://toon/app';
|
|
25
|
+
/** Write tools the runtime/validator permit an action to target. */
|
|
26
|
+
export const WRITE_TOOLS = new Set([
|
|
27
|
+
PUBLISH_TOOL,
|
|
28
|
+
UPLOAD_TOOL,
|
|
29
|
+
OPEN_CHANNEL_TOOL,
|
|
30
|
+
SWAP_TOOL,
|
|
31
|
+
]);
|
|
32
|
+
//# sourceMappingURL=tool-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.js","sourceRoot":"","sources":["../src/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,uEAAuE;AACvE,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAC/C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AACrC,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEhD,oEAAoE;AACpE,MAAM,CAAC,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC;IACtD,YAAY;IACZ,WAAW;IACX,iBAAiB;IACjB,SAAS;CACV,CAAC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Nostr primitives for the views layer.
|
|
3
|
+
*
|
|
4
|
+
* These are intentionally self-contained (no `nostr-tools` / `@toon-protocol/core`
|
|
5
|
+
* import) so the package builds in a browser bundle and stays decoupled from the
|
|
6
|
+
* payment-side packages.
|
|
7
|
+
*/
|
|
8
|
+
/** A signed Nostr event as seen on a relay (read side). */
|
|
9
|
+
export interface NostrEvent {
|
|
10
|
+
id: string;
|
|
11
|
+
pubkey: string;
|
|
12
|
+
created_at: number;
|
|
13
|
+
kind: number;
|
|
14
|
+
tags: string[][];
|
|
15
|
+
content: string;
|
|
16
|
+
sig: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A Nostr subscription filter (NIP-01). Tag filters use the `#<letter>` form.
|
|
20
|
+
* Kept permissive: any `#x` single-letter tag filter is allowed.
|
|
21
|
+
*/
|
|
22
|
+
export interface NostrFilter {
|
|
23
|
+
kinds?: number[];
|
|
24
|
+
authors?: string[];
|
|
25
|
+
ids?: string[];
|
|
26
|
+
since?: number;
|
|
27
|
+
until?: number;
|
|
28
|
+
limit?: number;
|
|
29
|
+
'#d'?: string[];
|
|
30
|
+
'#e'?: string[];
|
|
31
|
+
'#a'?: string[];
|
|
32
|
+
'#p'?: string[];
|
|
33
|
+
'#t'?: string[];
|
|
34
|
+
}
|
|
35
|
+
/** Get the first value for a tag name. */
|
|
36
|
+
export declare function getTagValue(tags: string[][], name: string): string | undefined;
|
|
37
|
+
/** Get all values for a tag name. */
|
|
38
|
+
export declare function getTagValues(tags: string[][], name: string): string[];
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrE"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Nostr primitives for the views layer.
|
|
3
|
+
*
|
|
4
|
+
* These are intentionally self-contained (no `nostr-tools` / `@toon-protocol/core`
|
|
5
|
+
* import) so the package builds in a browser bundle and stays decoupled from the
|
|
6
|
+
* payment-side packages.
|
|
7
|
+
*/
|
|
8
|
+
/** Get the first value for a tag name. */
|
|
9
|
+
export function getTagValue(tags, name) {
|
|
10
|
+
const tag = tags.find((t) => t[0] === name);
|
|
11
|
+
return tag?.[1];
|
|
12
|
+
}
|
|
13
|
+
/** Get all values for a tag name. */
|
|
14
|
+
export function getTagValues(tags, name) {
|
|
15
|
+
return tags
|
|
16
|
+
.filter((t) => t[0] === name)
|
|
17
|
+
.map((t) => t[1])
|
|
18
|
+
.filter((v) => v !== undefined);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+BH,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,IAAY;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC5C,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,YAAY,CAAC,IAAgB,EAAE,IAAY;IACzD,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;AACjD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@toon-protocol/views",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Shared TOON kind→atom registry, NIP parsers, ViewSpec composition runtime, and MCP-app iframe bundle. Consumed by rig and the toon-mcp apps surface.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./package.json": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"bin": {
|
|
24
|
+
"toon-apps": "./dist/server/daemon-main.js",
|
|
25
|
+
"toon-apps-fake": "./dist/server/fake-main.js"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@fontsource-variable/geist": "^5.2.9",
|
|
29
|
+
"@mcp-ui/client": "^7.1.1",
|
|
30
|
+
"@modelcontextprotocol/ext-apps": "^1.7.4",
|
|
31
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
32
|
+
"class-variance-authority": "^0.7.1",
|
|
33
|
+
"clsx": "^2.1.1",
|
|
34
|
+
"lucide-react": "^1.7.0",
|
|
35
|
+
"radix-ui": "^1.4.3",
|
|
36
|
+
"shadcn": "^4.11.0",
|
|
37
|
+
"tailwind-merge": "^2.6.1",
|
|
38
|
+
"tw-animate-css": "^1.4.0",
|
|
39
|
+
"zod": "^3.25.0",
|
|
40
|
+
"@toon-protocol/client": "0.14.0"
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"react": "^19.0.0",
|
|
44
|
+
"react-dom": "^19.0.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@tailwindcss/vite": "^4.0.0",
|
|
48
|
+
"@testing-library/react": "^16.0.0",
|
|
49
|
+
"@types/react": "^19.0.0",
|
|
50
|
+
"@types/react-dom": "^19.0.0",
|
|
51
|
+
"@vitejs/plugin-react": "^4.0.0",
|
|
52
|
+
"jsdom": "^24.0.0",
|
|
53
|
+
"react": "^19.0.0",
|
|
54
|
+
"react-dom": "^19.0.0",
|
|
55
|
+
"tailwindcss": "^4.0.0",
|
|
56
|
+
"typescript": "^5.3.0",
|
|
57
|
+
"vite": "^5.0.0",
|
|
58
|
+
"vite-plugin-singlefile": "^2.3.3",
|
|
59
|
+
"vitest": "^1.0.0"
|
|
60
|
+
},
|
|
61
|
+
"scripts": {
|
|
62
|
+
"build": "tsc -p tsconfig.build.json && vite build",
|
|
63
|
+
"build:lib": "tsc -p tsconfig.build.json",
|
|
64
|
+
"build:app": "vite build",
|
|
65
|
+
"demo:apps": "node dist/server/fake-main.js",
|
|
66
|
+
"demo:apps:daemon": "node dist/server/daemon-main.js",
|
|
67
|
+
"test": "vitest run",
|
|
68
|
+
"test:watch": "vitest",
|
|
69
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
70
|
+
}
|
|
71
|
+
}
|