@revealui/mcp 0.8.0 → 0.8.2
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/README.md +26 -39
- package/dist/audit-sink.d.ts +36 -0
- package/dist/audit-sink.d.ts.map +1 -0
- package/dist/audit-sink.js +13 -0
- package/dist/audit-sink.js.map +1 -0
- package/dist/cli.d.ts +5 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -8
- package/dist/cli.js.map +1 -1
- package/dist/config/index.d.ts +6 -10
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +6 -17
- package/dist/config/index.js.map +1 -1
- package/dist/hypervisor.d.ts +23 -0
- package/dist/hypervisor.d.ts.map +1 -1
- package/dist/hypervisor.js +77 -0
- package/dist/hypervisor.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/servers/_email-provider.d.ts.map +1 -1
- package/dist/servers/_email-provider.js +2 -1
- package/dist/servers/_email-provider.js.map +1 -1
- package/dist/servers/_launcher-utils.d.ts +12 -0
- package/dist/servers/_launcher-utils.d.ts.map +1 -1
- package/dist/servers/_launcher-utils.js +26 -0
- package/dist/servers/_launcher-utils.js.map +1 -1
- package/dist/servers/factories/contracts.d.ts +242 -0
- package/dist/servers/factories/contracts.d.ts.map +1 -1
- package/dist/servers/factories/revealui-content.d.ts +26 -0
- package/dist/servers/factories/revealui-content.d.ts.map +1 -1
- package/dist/servers/factories/revealui-content.js +169 -12
- package/dist/servers/factories/revealui-content.js.map +1 -1
- package/dist/servers/neon.js +5 -2
- package/dist/servers/neon.js.map +1 -1
- package/dist/servers/next-devtools.js +4 -2
- package/dist/servers/next-devtools.js.map +1 -1
- package/dist/servers/playwright.js +4 -2
- package/dist/servers/playwright.js.map +1 -1
- package/dist/servers/stripe.js +4 -2
- package/dist/servers/stripe.js.map +1 -1
- package/dist/servers/vercel.js +4 -2
- package/dist/servers/vercel.js.map +1 -1
- package/dist/streamable-http.d.ts +10 -1
- package/dist/streamable-http.d.ts.map +1 -1
- package/dist/streamable-http.js +2 -2
- package/dist/streamable-http.js.map +1 -1
- package/package.json +56 -33
- package/dist/servers/supabase.d.ts +0 -15
- package/dist/servers/supabase.d.ts.map +0 -1
- package/dist/servers/supabase.js +0 -139
- package/dist/servers/supabase.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revealui/mcp",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"description": "Model Context Protocol framework —
|
|
3
|
+
"version": "0.8.2",
|
|
4
|
+
"description": "Model Context Protocol framework — first-party server launchers, adapter pattern, tool discovery, and an incubating multi-server hypervisor (not app-mounted by default; ADR-007).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/RevealUIStudio/revealui.git",
|
|
@@ -16,22 +16,23 @@
|
|
|
16
16
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
17
17
|
"dotenv": "^17.4.1",
|
|
18
18
|
"jose": "^5.10.0",
|
|
19
|
-
"@revealui/
|
|
20
|
-
"@revealui/
|
|
21
|
-
"@revealui/
|
|
22
|
-
"@revealui/db": "0.
|
|
23
|
-
"@revealui/knowledge-graph": "0.1.
|
|
24
|
-
"@revealui/security": "0.
|
|
25
|
-
"@revealui/setup": "0.
|
|
19
|
+
"@revealui/config": "0.6.0",
|
|
20
|
+
"@revealui/contracts": "0.8.1",
|
|
21
|
+
"@revealui/core": "0.12.1",
|
|
22
|
+
"@revealui/db": "0.9.0",
|
|
23
|
+
"@revealui/knowledge-graph": "0.1.4",
|
|
24
|
+
"@revealui/security": "0.5.1",
|
|
25
|
+
"@revealui/setup": "0.7.1"
|
|
26
26
|
},
|
|
27
27
|
"optionalDependencies": {
|
|
28
|
-
"@revealui/ai": "0.
|
|
28
|
+
"@revealui/ai": "0.8.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@electric-sql/pglite": "^0.5.4",
|
|
32
32
|
"pg": "^8.22.0",
|
|
33
33
|
"typescript": "^6.0.3",
|
|
34
|
-
"vitest": "^4.1.10"
|
|
34
|
+
"vitest": "^4.1.10",
|
|
35
|
+
"@revealui/dev": "0.1.0"
|
|
35
36
|
},
|
|
36
37
|
"engines": {
|
|
37
38
|
"node": ">=24.13.0"
|
|
@@ -39,91 +40,113 @@
|
|
|
39
40
|
"exports": {
|
|
40
41
|
".": {
|
|
41
42
|
"types": "./dist/index.d.ts",
|
|
42
|
-
"import": "./dist/index.js"
|
|
43
|
+
"import": "./dist/index.js",
|
|
44
|
+
"default": "./dist/index.js"
|
|
43
45
|
},
|
|
44
46
|
"./adapter": {
|
|
45
47
|
"types": "./dist/servers/adapter.d.ts",
|
|
46
|
-
"import": "./dist/servers/adapter.js"
|
|
48
|
+
"import": "./dist/servers/adapter.js",
|
|
49
|
+
"default": "./dist/servers/adapter.js"
|
|
47
50
|
},
|
|
48
51
|
"./author": {
|
|
49
52
|
"types": "./dist/author/index.d.ts",
|
|
50
|
-
"import": "./dist/author/index.js"
|
|
53
|
+
"import": "./dist/author/index.js",
|
|
54
|
+
"default": "./dist/author/index.js"
|
|
51
55
|
},
|
|
52
56
|
"./author/scaffold": {
|
|
53
57
|
"types": "./dist/author/scaffold.d.ts",
|
|
54
|
-
"import": "./dist/author/scaffold.js"
|
|
58
|
+
"import": "./dist/author/scaffold.js",
|
|
59
|
+
"default": "./dist/author/scaffold.js"
|
|
55
60
|
},
|
|
56
61
|
"./author/test": {
|
|
57
62
|
"types": "./dist/author/test.d.ts",
|
|
58
|
-
"import": "./dist/author/test.js"
|
|
63
|
+
"import": "./dist/author/test.js",
|
|
64
|
+
"default": "./dist/author/test.js"
|
|
59
65
|
},
|
|
60
66
|
"./author/publish": {
|
|
61
67
|
"types": "./dist/author/publish.d.ts",
|
|
62
|
-
"import": "./dist/author/publish.js"
|
|
68
|
+
"import": "./dist/author/publish.js",
|
|
69
|
+
"default": "./dist/author/publish.js"
|
|
63
70
|
},
|
|
64
71
|
"./contracts": {
|
|
65
72
|
"types": "./dist/contracts.d.ts",
|
|
66
|
-
"import": "./dist/contracts.js"
|
|
73
|
+
"import": "./dist/contracts.js",
|
|
74
|
+
"default": "./dist/contracts.js"
|
|
67
75
|
},
|
|
68
76
|
"./contracts-server": {
|
|
69
77
|
"types": "./dist/servers/factories/contracts.d.ts",
|
|
70
|
-
"import": "./dist/servers/factories/contracts.js"
|
|
78
|
+
"import": "./dist/servers/factories/contracts.js",
|
|
79
|
+
"default": "./dist/servers/factories/contracts.js"
|
|
71
80
|
},
|
|
72
81
|
"./revealui-content-factory": {
|
|
73
82
|
"types": "./dist/servers/factories/revealui-content.d.ts",
|
|
74
|
-
"import": "./dist/servers/factories/revealui-content.js"
|
|
83
|
+
"import": "./dist/servers/factories/revealui-content.js",
|
|
84
|
+
"default": "./dist/servers/factories/revealui-content.js"
|
|
75
85
|
},
|
|
76
86
|
"./docs-server": {
|
|
77
87
|
"types": "./dist/servers/factories/docs.d.ts",
|
|
78
|
-
"import": "./dist/servers/factories/docs.js"
|
|
88
|
+
"import": "./dist/servers/factories/docs.js",
|
|
89
|
+
"default": "./dist/servers/factories/docs.js"
|
|
79
90
|
},
|
|
80
91
|
"./kg-server": {
|
|
81
92
|
"types": "./dist/servers/factories/knowledge-graph.d.ts",
|
|
82
|
-
"import": "./dist/servers/factories/knowledge-graph.js"
|
|
93
|
+
"import": "./dist/servers/factories/knowledge-graph.js",
|
|
94
|
+
"default": "./dist/servers/factories/knowledge-graph.js"
|
|
83
95
|
},
|
|
84
96
|
"./hypervisor": {
|
|
85
97
|
"types": "./dist/hypervisor.d.ts",
|
|
86
|
-
"import": "./dist/hypervisor.js"
|
|
98
|
+
"import": "./dist/hypervisor.js",
|
|
99
|
+
"default": "./dist/hypervisor.js"
|
|
87
100
|
},
|
|
88
101
|
"./db": {
|
|
89
102
|
"types": "./dist/adapters/db.d.ts",
|
|
90
|
-
"import": "./dist/adapters/db.js"
|
|
103
|
+
"import": "./dist/adapters/db.js",
|
|
104
|
+
"default": "./dist/adapters/db.js"
|
|
91
105
|
},
|
|
92
106
|
"./config": {
|
|
93
107
|
"types": "./dist/config/index.d.ts",
|
|
94
|
-
"import": "./dist/config/index.js"
|
|
108
|
+
"import": "./dist/config/index.js",
|
|
109
|
+
"default": "./dist/config/index.js"
|
|
95
110
|
},
|
|
96
111
|
"./pipeline": {
|
|
97
112
|
"types": "./dist/pipeline.d.ts",
|
|
98
|
-
"import": "./dist/pipeline.js"
|
|
113
|
+
"import": "./dist/pipeline.js",
|
|
114
|
+
"default": "./dist/pipeline.js"
|
|
99
115
|
},
|
|
100
116
|
"./rate-limiter": {
|
|
101
117
|
"types": "./dist/rate-limiter.d.ts",
|
|
102
|
-
"import": "./dist/rate-limiter.js"
|
|
118
|
+
"import": "./dist/rate-limiter.js",
|
|
119
|
+
"default": "./dist/rate-limiter.js"
|
|
103
120
|
},
|
|
104
121
|
"./telemetry": {
|
|
105
122
|
"types": "./dist/telemetry.d.ts",
|
|
106
|
-
"import": "./dist/telemetry.js"
|
|
123
|
+
"import": "./dist/telemetry.js",
|
|
124
|
+
"default": "./dist/telemetry.js"
|
|
107
125
|
},
|
|
108
126
|
"./auth": {
|
|
109
127
|
"types": "./dist/auth.d.ts",
|
|
110
|
-
"import": "./dist/auth.js"
|
|
128
|
+
"import": "./dist/auth.js",
|
|
129
|
+
"default": "./dist/auth.js"
|
|
111
130
|
},
|
|
112
131
|
"./streamable-http": {
|
|
113
132
|
"types": "./dist/streamable-http.d.ts",
|
|
114
|
-
"import": "./dist/streamable-http.js"
|
|
133
|
+
"import": "./dist/streamable-http.js",
|
|
134
|
+
"default": "./dist/streamable-http.js"
|
|
115
135
|
},
|
|
116
136
|
"./oauth": {
|
|
117
137
|
"types": "./dist/oauth.d.ts",
|
|
118
|
-
"import": "./dist/oauth.js"
|
|
138
|
+
"import": "./dist/oauth.js",
|
|
139
|
+
"default": "./dist/oauth.js"
|
|
119
140
|
},
|
|
120
141
|
"./client": {
|
|
121
142
|
"types": "./dist/client.d.ts",
|
|
122
|
-
"import": "./dist/client.js"
|
|
143
|
+
"import": "./dist/client.js",
|
|
144
|
+
"default": "./dist/client.js"
|
|
123
145
|
},
|
|
124
146
|
"./remote-client": {
|
|
125
147
|
"types": "./dist/remote-client.d.ts",
|
|
126
|
-
"import": "./dist/remote-client.js"
|
|
148
|
+
"import": "./dist/remote-client.js",
|
|
149
|
+
"default": "./dist/remote-client.js"
|
|
127
150
|
}
|
|
128
151
|
},
|
|
129
152
|
"files": [
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
/**
|
|
3
|
-
* Supabase MCP Server Launcher
|
|
4
|
-
*
|
|
5
|
-
* Starts the Supabase MCP server for AI-powered database management.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* pnpm mcp:supabase
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Launch the Supabase MCP server.
|
|
12
|
-
* Exported for programmatic use by the Hypervisor.
|
|
13
|
-
*/
|
|
14
|
-
export declare function launchSupabaseMcp(): Promise<void>;
|
|
15
|
-
//# sourceMappingURL=supabase.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/servers/supabase.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAgIH;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD"}
|
package/dist/servers/supabase.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
/**
|
|
3
|
-
* Supabase MCP Server Launcher
|
|
4
|
-
*
|
|
5
|
-
* Starts the Supabase MCP server for AI-powered database management.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* pnpm mcp:supabase
|
|
9
|
-
*/
|
|
10
|
-
import { spawn } from 'node:child_process';
|
|
11
|
-
import { randomBytes } from 'node:crypto';
|
|
12
|
-
import { config } from 'dotenv';
|
|
13
|
-
import { createLauncherLogger, ExitCode } from './_launcher-utils.js';
|
|
14
|
-
const logger = createLauncherLogger();
|
|
15
|
-
// Load environment variables
|
|
16
|
-
config();
|
|
17
|
-
async function startSupabaseMCP() {
|
|
18
|
-
// Supabase MCP uses local package supabase-mcp
|
|
19
|
-
// Verified: Package expects SUPABASE_URL, SUPABASE_ANON_KEY, and SUPABASE_SERVICE_ROLE_KEY
|
|
20
|
-
// Source: node_modules/supabase-mcp/dist/esm/config.js and services/supabase.js
|
|
21
|
-
//
|
|
22
|
-
// NEW API KEY SUPPORT (2025):
|
|
23
|
-
// Supabase introduced new API keys: sb_publishable_... (replaces anon) and sb_secret_... (replaces service_role)
|
|
24
|
-
// Legacy keys (anon/service_role JWT) still work but will be deprecated in Nov 2025
|
|
25
|
-
// The @supabase/supabase-js client accepts any key format, so we support both
|
|
26
|
-
// Reference: https://github.com/orgs/supabase/discussions/29260
|
|
27
|
-
const supabaseUrl = process.env.SUPABASE_URL;
|
|
28
|
-
// Support both legacy and new API key formats
|
|
29
|
-
// New format: SUPABASE_PUBLISHABLE_KEY (sb_publishable_...) or SUPABASE_ANON_KEY (legacy)
|
|
30
|
-
// New format: SUPABASE_SECRET_KEY (sb_secret_...) or SUPABASE_SERVICE_ROLE_KEY (legacy)
|
|
31
|
-
const supabaseAnonKey = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_ANON_KEY;
|
|
32
|
-
const supabaseServiceRoleKey = process.env.SUPABASE_SECRET_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
|
|
33
|
-
if (!supabaseUrl) {
|
|
34
|
-
logger.error('SUPABASE_URL is required');
|
|
35
|
-
logger.info(' Get your credentials from: https://supabase.com/dashboard → Settings → API');
|
|
36
|
-
process.exit(ExitCode.CONFIG_ERROR);
|
|
37
|
-
}
|
|
38
|
-
if (!supabaseAnonKey) {
|
|
39
|
-
logger.error('SUPABASE_ANON_KEY or SUPABASE_PUBLISHABLE_KEY is required');
|
|
40
|
-
logger.info(' Legacy: SUPABASE_ANON_KEY (anon JWT key)');
|
|
41
|
-
logger.info(' New: SUPABASE_PUBLISHABLE_KEY (sb_publishable_... key)');
|
|
42
|
-
logger.info(' Get from: https://supabase.com/dashboard → Settings → API');
|
|
43
|
-
process.exit(ExitCode.CONFIG_ERROR);
|
|
44
|
-
}
|
|
45
|
-
if (!supabaseServiceRoleKey) {
|
|
46
|
-
logger.error('SUPABASE_SERVICE_ROLE_KEY or SUPABASE_SECRET_KEY is required');
|
|
47
|
-
logger.info(' Legacy: SUPABASE_SERVICE_ROLE_KEY (service_role JWT key)');
|
|
48
|
-
logger.info(' New: SUPABASE_SECRET_KEY (sb_secret_... key)');
|
|
49
|
-
logger.info(' Note: Required for MCP server operations (full database access)');
|
|
50
|
-
logger.info(' Get from: https://supabase.com/dashboard → Settings → API');
|
|
51
|
-
process.exit(ExitCode.CONFIG_ERROR);
|
|
52
|
-
}
|
|
53
|
-
// MCP_API_KEY is required by supabase-mcp package for server authentication
|
|
54
|
-
// This is NOT a Supabase key - it's a key you generate yourself to secure the MCP server
|
|
55
|
-
let mcpApiKey = process.env.MCP_API_KEY;
|
|
56
|
-
if (!mcpApiKey) {
|
|
57
|
-
// Auto-generate a secure random key if not provided
|
|
58
|
-
mcpApiKey = randomBytes(32).toString('hex');
|
|
59
|
-
logger.warning('MCP_API_KEY not set - auto-generated a secure key');
|
|
60
|
-
logger.warning(' Add this to your .env file to persist it:');
|
|
61
|
-
logger.warning(` MCP_API_KEY=${mcpApiKey}`);
|
|
62
|
-
logger.warning(' (This key secures your MCP server endpoint)');
|
|
63
|
-
}
|
|
64
|
-
const withRestart = process.argv.includes('--restart');
|
|
65
|
-
logger.header('Starting Supabase MCP Server (Local)');
|
|
66
|
-
logger.info(` Supabase URL: ${supabaseUrl}`);
|
|
67
|
-
if (withRestart)
|
|
68
|
-
logger.info(' Restart mode: enabled (up to 3 attempts)');
|
|
69
|
-
// Detect key format for logging
|
|
70
|
-
const usingNewKeys = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_SECRET_KEY;
|
|
71
|
-
if (usingNewKeys) {
|
|
72
|
-
logger.info(' Using new API key format (sb_publishable_/sb_secret_)');
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
logger.info(' Using legacy API key format (anon/service_role JWT)');
|
|
76
|
-
logger.warning(' Consider migrating to new keys before Nov 2025');
|
|
77
|
-
logger.info(' See: https://github.com/orgs/supabase/discussions/29260');
|
|
78
|
-
}
|
|
79
|
-
// Build env once - used for all spawn attempts
|
|
80
|
-
// Package validates: SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, MCP_API_KEY
|
|
81
|
-
// We map new keys to legacy variable names for package compatibility
|
|
82
|
-
const spawnEnv = {
|
|
83
|
-
...process.env,
|
|
84
|
-
SUPABASE_URL: supabaseUrl,
|
|
85
|
-
SUPABASE_ANON_KEY: supabaseAnonKey,
|
|
86
|
-
SUPABASE_SERVICE_ROLE_KEY: supabaseServiceRoleKey,
|
|
87
|
-
MCP_API_KEY: mcpApiKey,
|
|
88
|
-
SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY,
|
|
89
|
-
SUPABASE_SECRET_KEY: process.env.SUPABASE_SECRET_KEY,
|
|
90
|
-
};
|
|
91
|
-
const MaxRestarts = 3;
|
|
92
|
-
const RestartDelaysMs = [2000, 4000, 8000];
|
|
93
|
-
const spawnSupabase = () => new Promise((resolve) => {
|
|
94
|
-
const child = spawn('pnpm', ['dlx', 'supabase-mcp'], { stdio: 'inherit', env: spawnEnv });
|
|
95
|
-
child.on('error', (error) => {
|
|
96
|
-
logger.error(`Failed to start Supabase MCP server: ${error.message}`);
|
|
97
|
-
resolve(ExitCode.CONFIG_ERROR);
|
|
98
|
-
});
|
|
99
|
-
child.on('exit', (code) => resolve(code ?? 0));
|
|
100
|
-
process.on('SIGINT', () => {
|
|
101
|
-
child.kill('SIGINT');
|
|
102
|
-
});
|
|
103
|
-
process.on('SIGTERM', () => {
|
|
104
|
-
child.kill('SIGTERM');
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
let attempt = 0;
|
|
108
|
-
while (true) {
|
|
109
|
-
const code = await spawnSupabase();
|
|
110
|
-
if (!withRestart || attempt >= MaxRestarts) {
|
|
111
|
-
process.exit(code ?? 0);
|
|
112
|
-
}
|
|
113
|
-
const delay = RestartDelaysMs[attempt] ?? 8000;
|
|
114
|
-
attempt++;
|
|
115
|
-
logger.warning(` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MaxRestarts})...`);
|
|
116
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Launch the Supabase MCP server.
|
|
121
|
-
* Exported for programmatic use by the Hypervisor.
|
|
122
|
-
*/
|
|
123
|
-
export async function launchSupabaseMcp() {
|
|
124
|
-
await startSupabaseMCP();
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Main function (CLI entrypoint)
|
|
128
|
-
*/
|
|
129
|
-
async function main() {
|
|
130
|
-
try {
|
|
131
|
-
await launchSupabaseMcp();
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
135
|
-
process.exit(ExitCode.EXECUTION_ERROR);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
main();
|
|
139
|
-
//# sourceMappingURL=supabase.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/servers/supabase.ts"],"names":[],"mappings":"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"}
|