@steprotech/n8n-nodes-composio 0.0.0-stage → 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.
Files changed (31) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -2
  3. package/dist/credentials/ComposioApi.credentials.d.ts +43 -0
  4. package/dist/credentials/ComposioApi.credentials.js +78 -0
  5. package/dist/credentials/ComposioApi.credentials.js.map +1 -0
  6. package/dist/credentials/composio.dark.svg +266 -0
  7. package/dist/credentials/composio.svg +266 -0
  8. package/dist/nodes/Composio/Composio.node.d.ts +12 -0
  9. package/dist/nodes/Composio/Composio.node.js +450 -0
  10. package/dist/nodes/Composio/Composio.node.js.map +1 -0
  11. package/dist/nodes/Composio/ComposioTrigger.node.d.ts +12 -0
  12. package/dist/nodes/Composio/ComposioTrigger.node.js +172 -0
  13. package/dist/nodes/Composio/ComposioTrigger.node.js.map +1 -0
  14. package/dist/nodes/Composio/GenericFunctions.d.ts +24 -0
  15. package/dist/nodes/Composio/GenericFunctions.js +163 -0
  16. package/dist/nodes/Composio/GenericFunctions.js.map +1 -0
  17. package/dist/nodes/Composio/catalog.d.ts +25 -0
  18. package/dist/nodes/Composio/catalog.js +195 -0
  19. package/dist/nodes/Composio/catalog.js.map +1 -0
  20. package/dist/nodes/Composio/composio.dark.svg +266 -0
  21. package/dist/nodes/Composio/composio.svg +266 -0
  22. package/dist/nodes/Composio/metatools.d.ts +37 -0
  23. package/dist/nodes/Composio/metatools.js +27 -0
  24. package/dist/nodes/Composio/metatools.js.map +1 -0
  25. package/dist/nodes/Composio/signature.d.ts +16 -0
  26. package/dist/nodes/Composio/signature.js +55 -0
  27. package/dist/nodes/Composio/signature.js.map +1 -0
  28. package/dist/nodes/ComposioTrigger/composio.dark.svg +266 -0
  29. package/dist/nodes/ComposioTrigger/composio.svg +266 -0
  30. package/dist/package.json +58 -0
  31. package/package.json +57 -5
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Steward Obeng
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,125 @@
1
- # Temporary Holding Version
1
+ # @steprotech/n8n-nodes-composio
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ An n8n node for [Composio](https://composio.dev). Connect your own apps through Composio, choose an
4
+ action, and run it in any workflow. No AI agent is required, and the node can also be used as a tool
5
+ inside an agent. A trigger node starts workflows from app events too.
6
+
7
+ Composio is an integration and authentication layer: it holds the OAuth grants for around 1,600
8
+ apps, refreshes the tokens, and executes the action on your behalf. This node is the n8n front door
9
+ to that, over Composio Connect and its MCP endpoint.
10
+
11
+ ## Install
12
+
13
+ Self-hosted n8n only, because it is a community node.
14
+
15
+ 1. In n8n, open **Settings > Community Nodes**.
16
+ 2. Select **Install** and enter `@steprotech/n8n-nodes-composio`.
17
+ 3. Restart n8n if prompted.
18
+
19
+ From a shell, inside your n8n user folder:
20
+
21
+ ```bash
22
+ cd ~/.n8n/nodes
23
+ npm install @steprotech/n8n-nodes-composio --legacy-peer-deps
24
+ ```
25
+
26
+ `--legacy-peer-deps` matters: the package declares `n8n-workflow` as a peer, which n8n supplies at
27
+ runtime. A plain install tries to fetch it and can fail building a native dependency.
28
+
29
+ ## Credential
30
+
31
+ Create a **Composio API** credential and paste your **consumer key**, the one starting with `ck_`.
32
+ Find it in the Composio dashboard under **Connect > Clients > API key**. It is sent as the
33
+ `x-consumer-api-key` header.
34
+
35
+ Never paste a key into a chat, an issue or a repository. Keys belong in n8n's credential form only.
36
+
37
+ ## Operations
38
+
39
+ Every app and every action is chosen from a **live search list**, so you never need to know a Composio
40
+ slug. The inputs of an action are read from the action's own schema, so you pick parameter names from a
41
+ list instead of writing JSON. Raw JSON is still there as an opt-in escape hatch.
42
+
43
+ **Connection**
44
+
45
+ - **Connect an App** returns the authorization link. Open it, approve in the browser, and the app is
46
+ connected to your Composio account. Managed auth means you never create an OAuth app yourself.
47
+ - **Check Connections** reports which of the apps you name are connected. Any app that is not connected
48
+ yet gets an authorization link in the output, so this doubles as "connect these three apps".
49
+ - **Reconnect an App** replaces an existing connection with a fresh authorization flow, which is what
50
+ you want when credentials go stale or when you need to re-consent after a permission change.
51
+
52
+ Disconnecting an app is not exposed on the consumer surface this node uses, so removal stays in the
53
+ Composio dashboard.
54
+
55
+ **Action**
56
+
57
+ - **Search Actions** takes what you want to do in plain words and returns matching actions, which app
58
+ each belongs to, and which of those apps are already connected.
59
+ - **Get Action Inputs** lists the inputs one or more actions expect, with types and required markers.
60
+ - **Execute an Action** runs the chosen action. Set **Set Inputs** to *Using Fields* and add one row per
61
+ input, picking the parameter name from the list, or switch to *Using JSON* to write the arguments
62
+ object yourself. The node can also be used as a tool by an AI Agent.
63
+
64
+ Values typed into the fields are converted sensibly: `true`, `false`, `null`, numbers and JSON objects
65
+ or arrays are sent as those types, while identifiers keep their form, so a phone number entered as
66
+ `0244123456` is not turned into a number.
67
+
68
+ **Advanced**
69
+
70
+ - **Call a Meta-Tool** sends any of Composio's meta-tools with arguments you supply. Composio has
71
+ thousands of actions with their own schemas, while n8n node parameters are fixed, so this is the
72
+ escape hatch for anything the operations above do not cover yet.
73
+
74
+ ## Documentation
75
+
76
+ - `docs/INSTALL-OPTIONS.md` covers every way to install or update it, including troubleshooting.
77
+ - `docs/PUBLISHING.md` covers the release loop, CI, and the tokenless trusted-publishing path.
78
+ - `docs/PUBLISH-FROM-WINDOWS.md` is the PowerShell route for publishing from your own machine.
79
+
80
+ ## Trigger
81
+
82
+ The **Composio Connect Trigger** starts a workflow when something happens in a connected app, such as
83
+ a new Gmail message or a new GitHub commit.
84
+
85
+ 1. In Composio, note the single **webhook URL** your project delivers events to, and register the URL
86
+ n8n shows in the trigger node. Composio sends every project event to one URL, so this is a
87
+ per-project setting, not a per-workflow one.
88
+ 2. Copy the webhook **signing secret** from that subscription into the credential's *Webhook Signing
89
+ Secret* field.
90
+ 3. Choose the events you want. `Trigger Message` covers app events; `Connected Account Expired` tells
91
+ you when a connection needs re-authorizing. Use `Only These Triggers` to accept a single trigger
92
+ slug such as `GITHUB_COMMIT_EVENT`.
93
+
94
+ Signature verification is **on by default**. Every request carries `webhook-id`, `webhook-timestamp`
95
+ and `webhook-signature`, and the trigger recomputes an HMAC-SHA256 over
96
+ `{webhook-id}.{webhook-timestamp}.{body}`, compares it in constant time, and refuses anything older
97
+ than the tolerance (300 seconds by default) so a captured payload cannot be replayed. Note this while
98
+ writing it down: with verification on and no secret in the credential, the trigger refuses to run
99
+ rather than trusting the request, which is deliberate.
100
+
101
+ ## Composio's meta-tools
102
+
103
+ The node speaks MCP over streamable HTTP to `https://connect.composio.dev/mcp` and uses Composio's
104
+ own meta-tools rather than calling app APIs directly:
105
+
106
+ `COMPOSIO_SEARCH_TOOLS`, `COMPOSIO_GET_TOOL_SCHEMAS`, `COMPOSIO_MULTI_EXECUTE_TOOL`,
107
+ `COMPOSIO_MANAGE_CONNECTIONS`, `COMPOSIO_WAIT_FOR_CONNECTIONS`, `COMPOSIO_REMOTE_WORKBENCH`,
108
+ `COMPOSIO_REMOTE_BASH_TOOL`.
109
+
110
+ ## Free tier
111
+
112
+ Composio's free plan includes 100,000 tool calls and 50,000 trigger events a month, with unlimited
113
+ free connected accounts, and it is hard capped so there is no surprise bill. Using Composio-managed
114
+ apps, which is the click-and-authorize path, draws on 20,000 of those calls and the first 1,000
115
+ connections. Check Composio's pricing page before relying on the numbers.
116
+
117
+ ## Attribution
118
+
119
+ This is an unofficial community node. Composio is a trademark of its owner, and the node icon is
120
+ Composio's own mark as published at `logos.composio.dev`. This package is not affiliated with or
121
+ endorsed by Composio.
122
+
123
+ ## License
124
+
125
+ MIT. See LICENSE.
@@ -0,0 +1,43 @@
1
+ import type { ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class ComposioApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ icon: {
7
+ readonly light: "file:composio.svg";
8
+ readonly dark: "file:composio.dark.svg";
9
+ };
10
+ properties: INodeProperties[];
11
+ authenticate: {
12
+ type: "generic";
13
+ properties: {
14
+ headers: {
15
+ 'x-consumer-api-key': string;
16
+ };
17
+ };
18
+ };
19
+ test: {
20
+ request: {
21
+ baseURL: string;
22
+ url: string;
23
+ method: "POST";
24
+ headers: {
25
+ Accept: string;
26
+ 'Content-Type': string;
27
+ };
28
+ body: {
29
+ jsonrpc: string;
30
+ id: number;
31
+ method: string;
32
+ params: {
33
+ protocolVersion: string;
34
+ capabilities: {};
35
+ clientInfo: {
36
+ name: string;
37
+ version: string;
38
+ };
39
+ };
40
+ };
41
+ };
42
+ };
43
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComposioApi = void 0;
4
+ class ComposioApi {
5
+ constructor() {
6
+ this.name = 'composioApi';
7
+ this.displayName = 'Composio API';
8
+ this.documentationUrl = 'https://docs.composio.dev/kb/guide/consumer-project-boundaries-and-auth-selection';
9
+ this.icon = { light: 'file:composio.svg', dark: 'file:composio.dark.svg' };
10
+ this.properties = [
11
+ {
12
+ displayName: 'Consumer Key',
13
+ name: 'apiKey',
14
+ type: 'string',
15
+ typeOptions: { password: true },
16
+ default: '',
17
+ required: true,
18
+ description: 'Your Composio consumer key, the one that starts with ck_. Find it in the Composio dashboard under Connect, Clients, API key. It is sent as the x-consumer-api-key header.',
19
+ },
20
+ {
21
+ displayName: 'Base URL',
22
+ name: 'baseUrl',
23
+ type: 'string',
24
+ default: 'https://connect.composio.dev',
25
+ description: 'The Composio Connect base URL. Only change this if Composio tells you to.',
26
+ },
27
+ {
28
+ displayName: 'Default User ID',
29
+ name: 'userId',
30
+ type: 'string',
31
+ default: '',
32
+ description: 'Optional. The Composio user ID whose connections this credential uses by default. Composio derives one from the key when this is left empty. Use separate credentials if you keep several users apart.',
33
+ },
34
+ {
35
+ displayName: 'Webhook Signing Secret',
36
+ name: 'webhookSecret',
37
+ type: 'string',
38
+ typeOptions: { password: true },
39
+ default: '',
40
+ description: 'Optional. The signing secret of your Composio webhook subscription, used by the Composio Trigger to verify that events really came from Composio. Copy it from your Composio webhook subscription settings.',
41
+ },
42
+ ];
43
+ this.authenticate = {
44
+ type: 'generic',
45
+ properties: {
46
+ headers: {
47
+ 'x-consumer-api-key': '={{$credentials.apiKey}}',
48
+ },
49
+ },
50
+ };
51
+ this.test = {
52
+ request: {
53
+ baseURL: '={{$credentials.baseUrl}}',
54
+ url: '/mcp',
55
+ method: 'POST',
56
+ headers: {
57
+ Accept: 'application/json, text/event-stream',
58
+ 'Content-Type': 'application/json',
59
+ },
60
+ body: {
61
+ jsonrpc: '2.0',
62
+ id: 1,
63
+ method: 'initialize',
64
+ params: {
65
+ protocolVersion: '2025-06-18',
66
+ capabilities: {},
67
+ clientInfo: {
68
+ name: 'n8n-nodes-composio',
69
+ version: '0.1.1',
70
+ },
71
+ },
72
+ },
73
+ },
74
+ };
75
+ }
76
+ }
77
+ exports.ComposioApi = ComposioApi;
78
+ //# sourceMappingURL=ComposioApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposioApi.credentials.js","sourceRoot":"","sources":["../../credentials/ComposioApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QAErB,gBAAW,GAAG,cAAc,CAAC;QAE7B,qBAAgB,GAAG,mFAAmF,CAAC;QAEvG,SAAI,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,wBAAwB,EAAW,CAAC;QAE/E,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACV,2KAA2K;aAC5K;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,8BAA8B;gBACvC,WAAW,EAAE,2EAA2E;aACxF;YACD;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,wMAAwM;aACzM;YACD;gBACC,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,6MAA6M;aAC9M;SACD,CAAC;QAEF,iBAAY,GAAG;YACd,IAAI,EAAE,SAAkB;YACxB,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,oBAAoB,EAAE,0BAA0B;iBAChD;aACD;SACD,CAAC;QAEF,SAAI,GAAG;YACN,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,MAAM;gBACX,MAAM,EAAE,MAAe;gBACvB,OAAO,EAAE;oBACR,MAAM,EAAE,qCAAqC;oBAC7C,cAAc,EAAE,kBAAkB;iBAClC;gBACD,IAAI,EAAE;oBACL,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,CAAC;oBACL,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE;wBACP,eAAe,EAAE,YAAY;wBAC7B,YAAY,EAAE,EAAE;wBAChB,UAAU,EAAE;4BACX,IAAI,EAAE,oBAAoB;4BAC1B,OAAO,EAAE,OAAO;yBAChB;qBACD;iBACD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA/ED,kCA+EC"}
@@ -0,0 +1,266 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0.00 0.00 180.00 180.00" width="128" height="128">
4
+ <g stroke-width="2.00" fill="none" stroke-linecap="butt">
5
+ <path stroke="#195580" vector-effect="non-scaling-stroke" d="
6
+ M 33.66 89.95
7
+ Q 33.66 100.13 33.67 101.11
8
+ Q 33.74 106.41 34.85 108.21
9
+ Q 36.84 111.43 40.50 112.71
10
+ A 2.89 2.77 52.2 0 0 41.52 112.86
11
+ L 59.07 112.07
12
+ A 0.36 0.35 87.7 0 1 59.44 112.42
13
+ Q 59.55 118.99 59.43 122.79
14
+ Q 59.27 127.73 60.74 130.55
15
+ Q 64.01 136.82 72.53 135.07
16
+ Q 78.63 133.82 87.12 132.09
17
+ A 0.35 0.35 0.0 0 1 87.54 132.43
18
+ L 87.58 146.91
19
+ A 1.13 1.08 -55.0 0 0 87.63 147.24
20
+ Q 89.84 155.56 98.35 155.24
21
+ A 4.44 4.07 33.5 0 0 99.36 155.08
22
+ Q 100.62 154.72 103.96 153.18
23
+ Q 130.98 140.65 139.13 136.95
24
+ C 143.08 135.16 145.93 132.81 146.21 128.71
25
+ Q 146.39 126.10 146.35 114.75
26
+ C 146.33 109.09 145.82 106.27 141.39 103.41
27
+ Q 139.29 102.05 132.32 102.57
28
+ Q 113.89 103.94 91.90 105.64
29
+ A 0.55 0.54 -1.8 0 1 91.31 105.09
30
+ Q 91.33 91.02 91.33 89.96
31
+ Q 91.33 88.90 91.31 74.82
32
+ A 0.55 0.54 1.8 0 1 91.90 74.28
33
+ Q 113.89 75.98 132.32 77.35
34
+ Q 139.29 77.87 141.39 76.51
35
+ C 145.82 73.65 146.33 70.83 146.35 65.17
36
+ Q 146.39 53.82 146.21 51.21
37
+ C 145.93 47.11 143.08 44.76 139.13 42.97
38
+ Q 130.99 39.27 103.97 26.74
39
+ Q 100.63 25.20 99.37 24.84
40
+ A 4.44 4.07 -33.5 0 0 98.36 24.68
41
+ Q 89.85 24.36 87.64 32.67
42
+ A 1.13 1.08 55.0 0 0 87.59 33.00
43
+ L 87.54 47.48
44
+ A 0.35 0.35 0.0 0 1 87.12 47.82
45
+ Q 78.63 46.09 72.53 44.84
46
+ Q 64.01 43.09 60.74 49.36
47
+ Q 59.27 52.18 59.43 57.12
48
+ Q 59.55 60.92 59.44 67.49
49
+ A 0.36 0.35 -87.7 0 1 59.07 67.84
50
+ L 41.52 67.05
51
+ A 2.89 2.77 -52.2 0 0 40.50 67.20
52
+ Q 36.84 68.48 34.85 71.70
53
+ Q 33.74 73.50 33.67 78.80
54
+ Q 33.66 79.78 33.66 89.95"
55
+ />
56
+ <path stroke="#195580" vector-effect="non-scaling-stroke" d="
57
+ M 92.09 52.71
58
+ A 0.62 0.62 0.0 0 0 91.35 53.32
59
+ L 91.32 69.91
60
+ A 0.72 0.72 0.0 0 0 91.99 70.63
61
+ Q 119.75 72.54 134.79 73.80
62
+ Q 137.89 74.06 139.12 73.41
63
+ C 142.93 71.39 143.23 67.45 142.59 63.55
64
+ A 0.78 0.77 1.8 0 0 141.98 62.90
65
+ L 92.09 52.71"
66
+ />
67
+ <path stroke="#195580" vector-effect="non-scaling-stroke" d="
68
+ M 63.95 72.35
69
+ A 0.61 0.61 0.0 0 0 63.30 72.96
70
+ L 63.30 106.95
71
+ A 0.61 0.61 0.0 0 0 63.95 107.56
72
+ L 86.97 106.00
73
+ A 0.61 0.61 0.0 0 0 87.54 105.39
74
+ L 87.54 74.47
75
+ A 0.61 0.61 0.0 0 0 86.97 73.86
76
+ L 63.95 72.35"
77
+ />
78
+ <path stroke="#195580" vector-effect="non-scaling-stroke" d="
79
+ M 92.11 127.16
80
+ L 141.95 117.07
81
+ A 0.78 0.77 -1.7 0 0 142.56 116.43
82
+ C 143.20 112.53 142.91 108.60 139.11 106.57
83
+ Q 137.88 105.92 134.78 106.18
84
+ Q 119.76 107.41 92.04 109.27
85
+ A 0.72 0.72 0.0 0 0 91.37 109.99
86
+ L 91.37 126.55
87
+ A 0.62 0.62 0.0 0 0 92.11 127.16"
88
+ />
89
+ </g>
90
+ <path fill="#FFFFFF" d="
91
+ M 180.00 0.00
92
+ L 180.00 180.00
93
+ L 0.00 180.00
94
+ L 0.00 0.00
95
+ L 180.00 0.00
96
+ Z
97
+ M 33.66 89.95
98
+ Q 33.66 100.13 33.67 101.11
99
+ Q 33.74 106.41 34.85 108.21
100
+ Q 36.84 111.43 40.50 112.71
101
+ A 2.89 2.77 52.2 0 0 41.52 112.86
102
+ L 59.07 112.07
103
+ A 0.36 0.35 87.7 0 1 59.44 112.42
104
+ Q 59.55 118.99 59.43 122.79
105
+ Q 59.27 127.73 60.74 130.55
106
+ Q 64.01 136.82 72.53 135.07
107
+ Q 78.63 133.82 87.12 132.09
108
+ A 0.35 0.35 0.0 0 1 87.54 132.43
109
+ L 87.58 146.91
110
+ A 1.13 1.08 -55.0 0 0 87.63 147.24
111
+ Q 89.84 155.56 98.35 155.24
112
+ A 4.44 4.07 33.5 0 0 99.36 155.08
113
+ Q 100.62 154.72 103.96 153.18
114
+ Q 130.98 140.65 139.13 136.95
115
+ C 143.08 135.16 145.93 132.81 146.21 128.71
116
+ Q 146.39 126.10 146.35 114.75
117
+ C 146.33 109.09 145.82 106.27 141.39 103.41
118
+ Q 139.29 102.05 132.32 102.57
119
+ Q 113.89 103.94 91.90 105.64
120
+ A 0.55 0.54 -1.8 0 1 91.31 105.09
121
+ Q 91.33 91.02 91.33 89.96
122
+ Q 91.33 88.90 91.31 74.82
123
+ A 0.55 0.54 1.8 0 1 91.90 74.28
124
+ Q 113.89 75.98 132.32 77.35
125
+ Q 139.29 77.87 141.39 76.51
126
+ C 145.82 73.65 146.33 70.83 146.35 65.17
127
+ Q 146.39 53.82 146.21 51.21
128
+ C 145.93 47.11 143.08 44.76 139.13 42.97
129
+ Q 130.99 39.27 103.97 26.74
130
+ Q 100.63 25.20 99.37 24.84
131
+ A 4.44 4.07 -33.5 0 0 98.36 24.68
132
+ Q 89.85 24.36 87.64 32.67
133
+ A 1.13 1.08 55.0 0 0 87.59 33.00
134
+ L 87.54 47.48
135
+ A 0.35 0.35 0.0 0 1 87.12 47.82
136
+ Q 78.63 46.09 72.53 44.84
137
+ Q 64.01 43.09 60.74 49.36
138
+ Q 59.27 52.18 59.43 57.12
139
+ Q 59.55 60.92 59.44 67.49
140
+ A 0.36 0.35 -87.7 0 1 59.07 67.84
141
+ L 41.52 67.05
142
+ A 2.89 2.77 -52.2 0 0 40.50 67.20
143
+ Q 36.84 68.48 34.85 71.70
144
+ Q 33.74 73.50 33.67 78.80
145
+ Q 33.66 79.78 33.66 89.95
146
+ Z"
147
+ />
148
+ <path fill="#31aaff" d="
149
+ M 91.33 89.96
150
+ Q 91.33 91.02 91.31 105.09
151
+ A 0.55 0.54 -1.8 0 0 91.90 105.64
152
+ Q 113.89 103.94 132.32 102.57
153
+ Q 139.29 102.05 141.39 103.41
154
+ C 145.82 106.27 146.33 109.09 146.35 114.75
155
+ Q 146.39 126.10 146.21 128.71
156
+ C 145.93 132.81 143.08 135.16 139.13 136.95
157
+ Q 130.98 140.65 103.96 153.18
158
+ Q 100.62 154.72 99.36 155.08
159
+ A 4.44 4.07 33.5 0 1 98.35 155.24
160
+ Q 89.84 155.56 87.63 147.24
161
+ A 1.13 1.08 -55.0 0 1 87.58 146.91
162
+ L 87.54 132.43
163
+ A 0.35 0.35 0.0 0 0 87.12 132.09
164
+ Q 78.63 133.82 72.53 135.07
165
+ Q 64.01 136.82 60.74 130.55
166
+ Q 59.27 127.73 59.43 122.79
167
+ Q 59.55 118.99 59.44 112.42
168
+ A 0.36 0.35 87.7 0 0 59.07 112.07
169
+ L 41.52 112.86
170
+ A 2.89 2.77 52.2 0 1 40.50 112.71
171
+ Q 36.84 111.43 34.85 108.21
172
+ Q 33.74 106.41 33.67 101.11
173
+ Q 33.66 100.13 33.66 89.95
174
+ Q 33.66 79.78 33.67 78.80
175
+ Q 33.74 73.50 34.85 71.70
176
+ Q 36.84 68.48 40.50 67.20
177
+ A 2.89 2.77 -52.2 0 1 41.52 67.05
178
+ L 59.07 67.84
179
+ A 0.36 0.35 -87.7 0 0 59.44 67.49
180
+ Q 59.55 60.92 59.43 57.12
181
+ Q 59.27 52.18 60.74 49.36
182
+ Q 64.01 43.09 72.53 44.84
183
+ Q 78.63 46.09 87.12 47.82
184
+ A 0.35 0.35 0.0 0 0 87.54 47.48
185
+ L 87.59 33.00
186
+ A 1.13 1.08 55.0 0 1 87.64 32.67
187
+ Q 89.85 24.36 98.36 24.68
188
+ A 4.44 4.07 -33.5 0 1 99.37 24.84
189
+ Q 100.63 25.20 103.97 26.74
190
+ Q 130.99 39.27 139.13 42.97
191
+ C 143.08 44.76 145.93 47.11 146.21 51.21
192
+ Q 146.39 53.82 146.35 65.17
193
+ C 146.33 70.83 145.82 73.65 141.39 76.51
194
+ Q 139.29 77.87 132.32 77.35
195
+ Q 113.89 75.98 91.90 74.28
196
+ A 0.55 0.54 1.8 0 0 91.31 74.82
197
+ Q 91.33 88.90 91.33 89.96
198
+ Z
199
+ M 92.09 52.71
200
+ A 0.62 0.62 0.0 0 0 91.35 53.32
201
+ L 91.32 69.91
202
+ A 0.72 0.72 0.0 0 0 91.99 70.63
203
+ Q 119.75 72.54 134.79 73.80
204
+ Q 137.89 74.06 139.12 73.41
205
+ C 142.93 71.39 143.23 67.45 142.59 63.55
206
+ A 0.78 0.77 1.8 0 0 141.98 62.90
207
+ L 92.09 52.71
208
+ Z
209
+ M 63.95 72.35
210
+ A 0.61 0.61 0.0 0 0 63.30 72.96
211
+ L 63.30 106.95
212
+ A 0.61 0.61 0.0 0 0 63.95 107.56
213
+ L 86.97 106.00
214
+ A 0.61 0.61 0.0 0 0 87.54 105.39
215
+ L 87.54 74.47
216
+ A 0.61 0.61 0.0 0 0 86.97 73.86
217
+ L 63.95 72.35
218
+ Z
219
+ M 92.11 127.16
220
+ L 141.95 117.07
221
+ A 0.78 0.77 -1.7 0 0 142.56 116.43
222
+ C 143.20 112.53 142.91 108.60 139.11 106.57
223
+ Q 137.88 105.92 134.78 106.18
224
+ Q 119.76 107.41 92.04 109.27
225
+ A 0.72 0.72 0.0 0 0 91.37 109.99
226
+ L 91.37 126.55
227
+ A 0.62 0.62 0.0 0 0 92.11 127.16
228
+ Z"
229
+ />
230
+ <path fill="#FFFFFF" d="
231
+ M 92.09 52.71
232
+ L 141.98 62.90
233
+ A 0.78 0.77 1.8 0 1 142.59 63.55
234
+ C 143.23 67.45 142.93 71.39 139.12 73.41
235
+ Q 137.89 74.06 134.79 73.80
236
+ Q 119.75 72.54 91.99 70.63
237
+ A 0.72 0.72 0.0 0 1 91.32 69.91
238
+ L 91.35 53.32
239
+ A 0.62 0.62 0.0 0 1 92.09 52.71
240
+ Z"
241
+ />
242
+ <path fill="#FFFFFF" d="
243
+ M 63.95 72.35
244
+ L 86.97 73.86
245
+ A 0.61 0.61 0.0 0 1 87.54 74.47
246
+ L 87.54 105.39
247
+ A 0.61 0.61 0.0 0 1 86.97 106.00
248
+ L 63.95 107.56
249
+ A 0.61 0.61 0.0 0 1 63.30 106.95
250
+ L 63.30 72.96
251
+ A 0.61 0.61 0.0 0 1 63.95 72.35
252
+ Z"
253
+ />
254
+ <path fill="#FFFFFF" d="
255
+ M 91.37 126.55
256
+ L 91.37 109.99
257
+ A 0.72 0.72 0.0 0 1 92.04 109.27
258
+ Q 119.76 107.41 134.78 106.18
259
+ Q 137.88 105.92 139.11 106.57
260
+ C 142.91 108.60 143.20 112.53 142.56 116.43
261
+ A 0.78 0.77 -1.7 0 1 141.95 117.07
262
+ L 92.11 127.16
263
+ A 0.62 0.62 0.0 0 1 91.37 126.55
264
+ Z"
265
+ />
266
+ </svg>