@iterable/mcp 1.0.3 → 1.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/README.md CHANGED
@@ -5,8 +5,6 @@
5
5
 
6
6
  With the new Iterable MCP server, you can now connect Iterable to your favorite AI tools like Cursor, Claude Desktop, and Claude Code!
7
7
 
8
-
9
-
10
8
  ## What is MCP?
11
9
 
12
10
  MCP stands for Model Context Protocol. It's a new, open standard that lets AI tools (like Cursor or Claude Desktop) connect to external tools and APIs in a secure, structured way. MCP acts as a "bridge" between your AI app and platforms like Iterable, so you can ask questions or perform actions in plain English, and the AI translates those into safe API calls behind the scenes.
@@ -35,13 +33,13 @@ npx @iterable/mcp setup --advanced
35
33
  ```
36
34
 
37
35
  What you’ll choose (optional):
38
- - View user PII (`ITERABLE_USER_PII`)
39
- - Enable Writes (Create/Update/Delete actions) (`ITERABLE_ENABLE_WRITES`)
40
- - Enable actual sends (`ITERABLE_ENABLE_SENDS`) — requires Writes
36
+ - Enable access to user PII (`ITERABLE_USER_PII`)
37
+ - Enable writes (create/update/delete actions) (`ITERABLE_ENABLE_WRITES`)
38
+ - Enable sends (campaigns/journeys/events) (`ITERABLE_ENABLE_SENDS`) — requires writes
41
39
 
42
40
  Safety notes:
43
- - Sends require Writes to be enabled.
44
- - When you use an existing Keychain key, your choices are saved per key.
41
+ - Enabling sends requires writes to be enabled.
42
+ - Permission settings are saved per key (see key management section below).
45
43
  - Prompts are generated from read‑only tools for extra safety.
46
44
 
47
45
  ## Prefer a global install?
@@ -53,7 +51,9 @@ iterable-mcp setup
53
51
 
54
52
  **Note:** The setup command automatically configures the correct command path.
55
53
 
56
- ## Install from source
54
+ Throughout this guide, commands are shown as `iterable-mcp` for brevity. If not globally installed, use `npx @iterable/mcp` instead (e.g., `npx @iterable/mcp keys list`).
55
+
56
+ ### Install from source
57
57
 
58
58
  ```bash
59
59
  git clone https://github.com/iterable/mcp-server.git
@@ -61,15 +61,14 @@ cd mcp-server
61
61
  pnpm install-dev:cursor # or install-dev:claude-desktop or install-dev:claude-code
62
62
  ```
63
63
 
64
- ## Claude Code
64
+ ### Claude Code
65
65
 
66
- The `setup --claude-code` command automatically configures Claude Code by running `claude mcp add` for you and stores your API key securely in macOS Keychain.
66
+ The `setup --claude-code` command automatically configures Claude Code by running `claude mcp add` for you.
67
67
 
68
- Alternatively, you can run it manually:
68
+ Alternatively, you can configure it manually:
69
69
 
70
70
  ```bash
71
- # Manual installation (alternative to setup --claude-code)
72
- # First, add your API key to the keychain (interactive prompts)
71
+ # Add your API key first (see API Key Management section below)
73
72
  iterable-mcp keys add
74
73
 
75
74
  # Then configure Claude Code
@@ -95,15 +94,15 @@ claude mcp add-from-claude-desktop
95
94
 
96
95
  For more information, see the [Claude Code MCP documentation](https://docs.claude.com/en/docs/claude-code/mcp).
97
96
 
98
- ## Manual configuration (Cursor & Claude Desktop)
97
+ ### Manual configuration (Cursor & Claude Desktop)
99
98
 
100
99
  The above commands will automatically configure your AI tool to use the MCP server by editing the appropriate configuration file, but you can also manually edit the appropriate configuration file:
101
100
  - **Claude Desktop:** `~/Library/Application Support/Claude/claude_desktop_config.json`
102
101
  - **Cursor:** `~/.cursor/mcp.json`
103
102
 
104
- **macOS (with Keychain):**
103
+ **Recommended: Using key manager:**
105
104
  ```bash
106
- # First, add your API key to the keychain (interactive prompts)
105
+ # First, add your API key (interactive prompts)
107
106
  iterable-mcp keys add
108
107
  ```
109
108
 
@@ -119,9 +118,9 @@ Then edit your config file:
119
118
  }
120
119
  ```
121
120
 
122
- Note: No `env` needed on macOS - API key and base URL are loaded from Keychain.
121
+ No `env` section needed - API key and base URL are loaded automatically.
123
122
 
124
- **Windows/Linux (using environment variables):**
123
+ **Alternative: Environment variables:**
125
124
  ```json
126
125
  {
127
126
  "mcpServers": {
@@ -150,7 +149,7 @@ export ITERABLE_MCP_NPX_PATH="/path/to/custom/npx"
150
149
  npx @iterable/mcp setup --cursor
151
150
  ```
152
151
 
153
- Alternatively, you can manually edit your configuration file (after adding your key to the keychain):
152
+ Alternatively, you can manually edit your configuration file (after adding your key):
154
153
 
155
154
  ```json
156
155
  {
@@ -163,7 +162,7 @@ Alternatively, you can manually edit your configuration file (after adding your
163
162
  }
164
163
  ```
165
164
 
166
- Note: No `env` needed on macOS — API key and base URL are loaded from Keychain.
165
+ No `env` section is needed if using the key manager.
167
166
 
168
167
  ## What you can do
169
168
 
@@ -185,7 +184,11 @@ Try these prompts:
185
184
 
186
185
  ### API Key Management
187
186
 
188
- **macOS Keychain:** API keys are stored securely in Keychain. Each key is tied to its API endpoint (US, EU, or custom).
187
+ **Key Storage:**
188
+
189
+ API keys are stored in the `~/.iterable-mcp/keys.json` file and managed via the `iterable-mcp keys` commands. On macOS the actual API key values are stored in the system Keychain. On Linux, the API key values are stored directly in the file with restricted permissions (0o600). On Windows, the file is protected by default NTFS home directory permissions.
190
+
191
+ Each key is tied to its API endpoint (US, EU, or custom) and to its permissions (view PII, write operations, send messages).
189
192
 
190
193
  **How Key Selection Works:**
191
194
  - You can store multiple API keys with different names (e.g., "production", "staging", "dev")
@@ -213,14 +216,12 @@ iterable-mcp keys delete <key-id>
213
216
  # To update a key: delete the old one and add a new one with the same name
214
217
  ```
215
218
 
216
- **Windows/Linux:** Use `ITERABLE_API_KEY` and (optionally) `ITERABLE_BASE_URL` env vars.
217
-
218
219
  ### Environment variables
219
220
 
220
221
  | Variable | Required | Description |
221
222
  |----------|----------|-------------|
222
- | `ITERABLE_API_KEY` | No* | Your Iterable API key (*Optional on macOS if using Keychain manager, Required on Windows and Linux) |
223
- | `ITERABLE_BASE_URL` | No** | Base URL for the Iterable API (**Not needed on macOS when using key manager - URL is stored with each key) |
223
+ | `ITERABLE_API_KEY` | No* | Your Iterable API key (*Optional if using key manager, otherwise required) |
224
+ | `ITERABLE_BASE_URL` | No** | Base URL for the Iterable API (**Not needed when using key manager - URL is stored with each key) |
224
225
  | `ITERABLE_DEBUG` | No | Set to `true` for API request logging |
225
226
  | `LOG_LEVEL` | No | Set to `debug` for troubleshooting |
226
227
  | `ITERABLE_USER_PII` | No | Set to `true` to enable tools that access user PII data (default: `false`) |
@@ -263,7 +264,7 @@ Integration tests make real API calls to Iterable and require a valid API key.
263
264
  export ITERABLE_API_KEY=your_actual_api_key
264
265
  ```
265
266
 
266
- 2. Or on macOS, add a key to the keychain (interactive):
267
+ 2. Or add a key to key manager (interactive):
267
268
  ```bash
268
269
  iterable-mcp keys add
269
270
  ```
@@ -275,7 +276,7 @@ Integration tests make real API calls to Iterable and require a valid API key.
275
276
  pnpm test:integration
276
277
  ```
277
278
 
278
- **Note:** Integration tests require a valid API key (env or active macOS Keychain key). The suite fails fast if none is found.
279
+ **Note:** Integration tests require a valid API key (env var or active key manager key). The suite fails fast if none is found.
279
280
 
280
281
  ### Development workflow
281
282
 
@@ -299,8 +300,7 @@ pnpm run install-dev
299
300
  ## Troubleshooting
300
301
 
301
302
  - Claude CLI missing: install `claude` CLI, then re-run `iterable-mcp setup --claude-code`.
302
- - macOS Keychain issues: Ensure Keychain is available; re-run setup. Stale locks are auto‑recovered.
303
-
303
+ - macOS Keychain issues: Ensure Keychain is accessible and re-run setup if needed.
304
304
 
305
305
  ## Beta Feature Reminder
306
306
  Iterable's MCP server is currently in beta. MCP functionality may change, be
package/TOOLS.md CHANGED
@@ -1,21 +1,25 @@
1
1
  # Available Iterable MCP Tools (104 tools)
2
2
 
3
- **Legend:** 🔒 = Contains PII, ✏️ = Write operation
3
+ **Legend:**
4
+ - 🔒 = Requires enabling user PII access
5
+ - ✏️ = Requires enabling writes
6
+ - ✉️ = Requires enabling sends
7
+
4
8
 
5
9
  ## Campaigns (13 tools)
6
10
  - **abort_campaign** ✏️: Abort a campaign that is currently running
7
- - **activate_triggered_campaign** ✏️: Activate a triggered campaign (requires API triggered campaign activation enabled)
11
+ - **activate_triggered_campaign** ✏️✉️: Activate a triggered campaign (requires API triggered campaign activation enabled)
8
12
  - **archive_campaigns** ✏️: Archive one or more campaigns. Scheduled/recurring campaigns will be cancelled, running campaigns will be aborted.
9
13
  - **cancel_campaign** ✏️: Cancel a scheduled or recurring campaign
10
- - **create_campaign** ✏️: Create a new blast or triggered campaign from an existing template. If listIds are provided, the campaign will be a blast campaign, otherwise it will be a triggered campaign. Blast campaigns will be sent immediately if sendAt is not provided.
14
+ - **create_campaign** ✏️✉️: Create a new blast or triggered campaign from an existing template. If listIds are provided, the campaign will be a blast campaign, otherwise it will be a triggered campaign. Blast campaigns will be sent immediately if sendAt is not provided.
11
15
  - **deactivate_triggered_campaign** ✏️: Deactivate a triggered campaign (requires API triggered campaign deactivation enabled)
12
16
  - **get_campaign**: Get detailed information about a specific campaign
13
17
  - **get_campaign_metrics**: Get campaign performance metrics
14
18
  - **get_campaigns**: Retrieve campaigns
15
19
  - **get_child_campaigns**: Get child campaigns generated by a recurring campaign
16
- - **schedule_campaign** ✏️: Schedule an existing campaign to be sent at a specific time
17
- - **send_campaign** ✏️: Send an existing scheduled campaign immediately
18
- - **trigger_campaign** ✏️: Trigger a campaign to send to specified lists
20
+ - **schedule_campaign** ✏️✉️: Schedule an existing campaign to be sent at a specific time
21
+ - **send_campaign** ✏️✉️: Send an existing scheduled campaign immediately
22
+ - **trigger_campaign** ✏️✉️: Trigger a campaign to send to specified lists
19
23
 
20
24
  ## Catalogs (12 tools)
21
25
  - **bulk_delete_catalog_items** ✏️: Bulk delete catalog items by their IDs
@@ -41,15 +45,15 @@
41
45
  ## Events (4 tools)
42
46
  - **get_user_events_by_email** 🔒: Get event history for a user by email address
43
47
  - **get_user_events_by_user_id** 🔒: Get event history for a user by user ID
44
- - **track_bulk_events** 🔒✏️: Track multiple events in a single request for better performance
45
- - **track_event** 🔒✏️: Track a custom event for a user
48
+ - **track_bulk_events** 🔒✏️✉️: Track multiple events in a single request for better performance
49
+ - **track_event** 🔒✏️✉️: Track a custom event for a user
46
50
 
47
51
  ## Experiments (1 tools)
48
52
  - **get_experiment_metrics**: Get experiment metrics for A/B testing analysis (currently supports email experiments only)
49
53
 
50
54
  ## Journeys (2 tools)
51
55
  - **get_journeys**: Get journeys (workflows) with optional pagination and state filtering
52
- - **trigger_journey** 🔒✏️: Trigger a journey (workflow) for a user
56
+ - **trigger_journey** 🔒✏️✉️: Trigger a journey (workflow) for a user
53
57
 
54
58
  ## Lists (8 tools)
55
59
  - **create_list** ✏️: Create a new user list
@@ -72,12 +76,12 @@
72
76
  - **get_embedded_messages** 🔒: Get embedded messages for a user, grouped by placement ID
73
77
  - **get_in_app_messages** 🔒: Get in-app messages for a user
74
78
  - **get_message_types**: Get all message types within the project for use in templates
75
- - **send_email** 🔒✏️: Send email to user
76
- - **send_in_app** 🔒✏️: Send in-app message to user
77
- - **send_push** 🔒✏️: Send push notification to user
78
- - **send_sms** 🔒✏️: Send SMS message to user
79
- - **send_web_push** 🔒✏️: Send web push notification to user
80
- - **send_whatsapp** 🔒✏️: Send WhatsApp message to user
79
+ - **send_email** 🔒✏️✉️: Send email to user
80
+ - **send_in_app** 🔒✏️✉️: Send in-app message to user
81
+ - **send_push** 🔒✏️✉️: Send push notification to user
82
+ - **send_sms** 🔒✏️✉️: Send SMS message to user
83
+ - **send_web_push** 🔒✏️✉️: Send web push notification to user
84
+ - **send_whatsapp** 🔒✏️✉️: Send WhatsApp message to user
81
85
 
82
86
  ## Snippets (5 tools)
83
87
  - **create_snippet** ✏️: Create a new snippet with Handlebars templating support
@@ -103,10 +107,10 @@
103
107
  - **get_templates**: Retrieve templates
104
108
  - **preview_email_template**: Preview email template with custom data. Returns fully rendered HTML with user, event, and/or data feed data substituted.
105
109
  - **preview_inapp_template**: Preview in-app message template with custom data. Returns fully rendered HTML with user, event, and/or data feed data substituted.
106
- - **send_email_template_proof** 🔒✏️: Send a proof of a email template to a specific user
107
- - **send_inapp_template_proof** 🔒✏️: Send a proof of a in-app message template to a specific user
108
- - **send_push_template_proof** 🔒✏️: Send a proof of a push notification template to a specific user
109
- - **send_sms_template_proof** 🔒✏️: Send a proof of a SMS template to a specific user
110
+ - **send_email_template_proof** 🔒✏️✉️: Send a proof of a email template to a specific user
111
+ - **send_inapp_template_proof** 🔒✏️✉️: Send a proof of a in-app message template to a specific user
112
+ - **send_push_template_proof** 🔒✏️✉️: Send a proof of a push notification template to a specific user
113
+ - **send_sms_template_proof** 🔒✏️✉️: Send a proof of a SMS template to a specific user
110
114
  - **update_email_template** ✏️: Update existing email template by templateId
111
115
  - **update_inapp_template** ✏️: Update existing in-app message template by templateId
112
116
  - **update_push_template** ✏️: Update existing push notification template by templateId
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC1C,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAQtE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC,CAwFpE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC1C,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAQtE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC,CA0FpE"}
package/dist/config.js CHANGED
@@ -14,9 +14,8 @@ export async function loadMcpServerConfig() {
14
14
  let apiKey = null;
15
15
  let baseUrl = process.env.ITERABLE_BASE_URL || "https://api.iterable.com";
16
16
  let keyEnv;
17
- // Try to load API key from KeyManager first (macOS only)
18
17
  // SAFETY: Skip keyManager in test environments to prevent production data access
19
- if (process.platform === "darwin" && process.env.NODE_ENV !== "test") {
18
+ if (process.env.NODE_ENV !== "test") {
20
19
  try {
21
20
  const keyManager = getKeyManager();
22
21
  await keyManager.initialize();
@@ -52,9 +51,10 @@ export async function loadMcpServerConfig() {
52
51
  logger.error("Unexpected error loading from key manager", {
53
52
  error: sanitizedMessage,
54
53
  });
55
- console.error("⚠️ Warning: Failed to load API key from macOS Keychain:", sanitizedMessage);
56
- // Provide helpful guidance for sync issues
57
- if (sanitizedMessage.includes("could not be found")) {
54
+ console.error("⚠️ Warning: Failed to load API key from key storage:", sanitizedMessage);
55
+ // Provide helpful guidance for sync issues (macOS Keychain specific)
56
+ if (process.platform === "darwin" &&
57
+ sanitizedMessage.includes("could not be found")) {
58
58
  console.error("\n💡 This may be a sync issue. Restarting the server will automatically clean up orphaned keys.");
59
59
  }
60
60
  console.error(" Falling back to ITERABLE_API_KEY environment variable");
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/install.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export declare const findCommand: (command: string) => Promise<string>;
1
2
  export declare const buildMcpConfig: (options: {
2
3
  isLocal?: boolean;
3
4
  env: Record<string, string>;
@@ -24,6 +25,11 @@ export declare function pickPersistablePermissionEnv(env: Record<string, string>
24
25
  ITERABLE_ENABLE_WRITES: "true" | "false";
25
26
  ITERABLE_ENABLE_SENDS: "true" | "false";
26
27
  };
28
+ /**
29
+ * Remove permission flags from env (they're loaded from key manager)
30
+ * Returns only non-persisted env vars like debug flags
31
+ */
32
+ export declare function omitPersistablePermissionEnv(env: Record<string, string>): Record<string, string>;
27
33
  /**
28
34
  * Enforce that Sends require Writes. If Sends is enabled but Writes is disabled,
29
35
  * disable Sends and optionally emit a warning.
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AA+EA,eAAO,MAAM,cAAc,GAAI,SAAS;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;;;;;CAeA,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IACzE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC;CACzC,CAWA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB,CAEA;AAED,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,IAAI,CAwzBnD,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAsEA,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAajE,CAAC;AAkBF,eAAO,MAAM,cAAc,GAAI,SAAS;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;;;;;CAeA,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IACzE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC;CACzC,CAWA;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB,CAEA;AAED,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,IAAI,CAuzBnD,CAAC"}