@mastra/claude 1.0.0 → 1.0.1-alpha.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.
@@ -0,0 +1,337 @@
1
+ // Generated by ts-to-zod
2
+ import { z } from 'zod';
3
+
4
+ import {
5
+ type BatchMessageRequest,
6
+ type CreateMessageRequest,
7
+ type Block,
8
+ type ToolResultBlock,
9
+ type ContentBlockStartEvent,
10
+ type CreateMessageBatchRequest,
11
+ type Message,
12
+ type MessageStartEvent,
13
+ type MessageStreamEvent,
14
+ type CreateMessageData,
15
+ type CreateMessageResponse,
16
+ type CreateMessageBatchData,
17
+ } from './types.gen';
18
+
19
+ export const textBlockDeltaSchema = z.object({
20
+ text: z.string(),
21
+ type: z.literal('text_delta'),
22
+ });
23
+
24
+ export const inputJsonBlockDeltaSchema = z.object({
25
+ partial_json: z.string().optional(),
26
+ type: z.literal('input_json_delta'),
27
+ });
28
+
29
+ export const cacheControlEphemeralSchema = z.object({
30
+ type: z.literal('ephemeral').optional(),
31
+ });
32
+
33
+ export const typeSchema = z.literal('ephemeral');
34
+
35
+ export const blockDeltaSchema = z.union([textBlockDeltaSchema, inputJsonBlockDeltaSchema]);
36
+
37
+ export const contentBlockStopEventSchema = z.object({
38
+ index: z.number(),
39
+ type: z.literal('content_block_stop'),
40
+ });
41
+
42
+ export const createMessageRequestMetadataSchema = z.object({
43
+ user_id: z.string().optional(),
44
+ });
45
+
46
+ export const errorSchema = z.object({
47
+ type: z.string(),
48
+ message: z.string(),
49
+ });
50
+
51
+ export const errorEventSchema = z.object({
52
+ type: z.literal('error'),
53
+ error: errorSchema,
54
+ });
55
+
56
+ export const imageBlockSourceSchema = z.object({
57
+ data: z.string(),
58
+ media_type: z.union([
59
+ z.literal('image/jpeg'),
60
+ z.literal('image/png'),
61
+ z.literal('image/gif'),
62
+ z.literal('image/webp'),
63
+ ]),
64
+ type: z.literal('base64'),
65
+ });
66
+
67
+ export const mediaTypeSchema = z.union([
68
+ z.literal('image/jpeg'),
69
+ z.literal('image/png'),
70
+ z.literal('image/gif'),
71
+ z.literal('image/webp'),
72
+ ]);
73
+
74
+ export const type2Schema = z.literal('base64');
75
+
76
+ export const messageRoleSchema = z.union([z.literal('user'), z.literal('assistant')]);
77
+
78
+ export const stopReasonSchema = z.union([
79
+ z.literal('end_turn'),
80
+ z.literal('max_tokens'),
81
+ z.literal('stop_sequence'),
82
+ z.literal('tool_use'),
83
+ ]);
84
+
85
+ export const usageSchema = z.object({
86
+ input_tokens: z.number(),
87
+ output_tokens: z.number(),
88
+ cache_creation_input_tokens: z.number().optional(),
89
+ cache_read_input_tokens: z.number().optional(),
90
+ });
91
+
92
+ export const messageBatchRequestCountsSchema = z.object({
93
+ processing: z.number(),
94
+ succeeded: z.number(),
95
+ errored: z.number(),
96
+ canceled: z.number(),
97
+ expired: z.number(),
98
+ });
99
+
100
+ export const processingStatusSchema = z.union([z.literal('in_progress'), z.literal('canceling'), z.literal('ended')]);
101
+
102
+ export const type3Schema = z.literal('message_batch');
103
+
104
+ export const messageDeltaSchema = z.object({
105
+ stop_reason: stopReasonSchema.optional(),
106
+ stop_sequence: z.string().optional(),
107
+ });
108
+
109
+ export const messageDeltaUsageSchema = z.object({
110
+ output_tokens: z.number(),
111
+ });
112
+
113
+ export const messageStopEventSchema = z.object({
114
+ type: z.literal('message_stop'),
115
+ });
116
+
117
+ export const messageDeltaEventSchema = z.object({
118
+ delta: messageDeltaSchema,
119
+ type: z.literal('message_delta'),
120
+ usage: messageDeltaUsageSchema,
121
+ });
122
+
123
+ export const contentBlockDeltaEventSchema = z.object({
124
+ delta: blockDeltaSchema,
125
+ index: z.number(),
126
+ type: z.literal('content_block_delta'),
127
+ });
128
+
129
+ export const pingEventSchema = z.object({
130
+ type: z.literal('ping'),
131
+ });
132
+
133
+ export const messageStreamEventTypeSchema = z.union([
134
+ z.literal('message_start'),
135
+ z.literal('message_delta'),
136
+ z.literal('message_stop'),
137
+ z.literal('content_block_start'),
138
+ z.literal('content_block_delta'),
139
+ z.literal('content_block_stop'),
140
+ z.literal('ping'),
141
+ z.literal('error'),
142
+ ]);
143
+
144
+ export const textBlockSchema = z.object({
145
+ text: z.string(),
146
+ type: z.literal('text').optional(),
147
+ cache_control: cacheControlEphemeralSchema.optional(),
148
+ });
149
+
150
+ export const toolCustomSchema = z.object({
151
+ type: z.literal('ToolCustom').optional(),
152
+ name: z.string(),
153
+ description: z.string().optional(),
154
+ input_schema: z.record(z.unknown()),
155
+ });
156
+
157
+ export const toolComputerUseSchema = z.object({
158
+ type: z.literal('ToolComputerUse').optional(),
159
+ name: z.string().optional(),
160
+ cache_control: cacheControlEphemeralSchema.optional(),
161
+ display_width_px: z.number(),
162
+ display_height_px: z.number(),
163
+ display_number: z.number().optional().nullable(),
164
+ });
165
+
166
+ export const toolTextEditorSchema = z.object({
167
+ type: z.literal('ToolTextEditor').optional(),
168
+ name: z.string().optional(),
169
+ cache_control: cacheControlEphemeralSchema.optional(),
170
+ });
171
+
172
+ export const toolBashSchema = z.object({
173
+ type: z.literal('ToolBash').optional(),
174
+ name: z.string().optional(),
175
+ cache_control: cacheControlEphemeralSchema.optional(),
176
+ });
177
+
178
+ export const toolChoiceTypeSchema = z.union([z.literal('auto'), z.literal('any'), z.literal('tool')]);
179
+
180
+ export const toolUseBlockSchema = z.object({
181
+ id: z.string(),
182
+ name: z.string(),
183
+ input: z.record(z.unknown()),
184
+ type: z.literal('tool_use').optional(),
185
+ cache_control: cacheControlEphemeralSchema.optional(),
186
+ });
187
+
188
+ export const createMessageErrorSchema = z.unknown();
189
+
190
+ export const messageBatchSchema = z.object({
191
+ id: z.string(),
192
+ created_at: z.string(),
193
+ expires_at: z.string(),
194
+ processing_status: z.union([z.literal('in_progress'), z.literal('canceling'), z.literal('ended')]),
195
+ request_counts: messageBatchRequestCountsSchema,
196
+ results_url: z.string().optional().nullable(),
197
+ type: z.literal('message_batch'),
198
+ });
199
+
200
+ export const createMessageBatchErrorSchema = z.unknown();
201
+
202
+ export const retrieveMessageBatchDataSchema = z.object({
203
+ path: z.object({
204
+ id: z.string(),
205
+ }),
206
+ });
207
+
208
+ export const retrieveMessageBatchResponseSchema = messageBatchSchema;
209
+
210
+ export const retrieveMessageBatchErrorSchema = z.unknown();
211
+
212
+ export const imageBlockSchema = z.object({
213
+ source: imageBlockSourceSchema,
214
+ type: z.literal('image').optional(),
215
+ cache_control: cacheControlEphemeralSchema.optional(),
216
+ });
217
+
218
+ export const toolChoiceSchema = z.object({
219
+ type: toolChoiceTypeSchema,
220
+ name: z.string().optional(),
221
+ disable_parallel_tool_use: z.boolean().optional(),
222
+ });
223
+
224
+ export const toolSchema = z.union([toolCustomSchema, toolComputerUseSchema, toolTextEditorSchema, toolBashSchema]);
225
+
226
+ export const createMessageBatchResponseSchema = messageBatchSchema;
227
+
228
+ export const batchMessageRequestSchema: z.ZodSchema<BatchMessageRequest> = z.lazy(() =>
229
+ z.object({
230
+ custom_id: z.string(),
231
+ params: createMessageRequestSchema,
232
+ }),
233
+ );
234
+
235
+ export const createMessageRequestSchema: z.ZodSchema<CreateMessageRequest> = z.lazy(() =>
236
+ z.object({
237
+ model: z.union([
238
+ z.string(),
239
+ z.literal('claude-3-5-sonnet-latest'),
240
+ z.literal('claude-3-5-sonnet-20241022'),
241
+ z.literal('claude-3-5-sonnet-20240620'),
242
+ z.literal('claude-3-opus-latest'),
243
+ z.literal('claude-3-opus-20240229'),
244
+ z.literal('claude-3-sonnet-20240229'),
245
+ z.literal('claude-3-haiku-20240307'),
246
+ z.literal('claude-2.1'),
247
+ z.literal('claude-2.0'),
248
+ z.literal('claude-instant-1.2'),
249
+ ]),
250
+ messages: z.array(messageSchema),
251
+ max_tokens: z.number(),
252
+ metadata: createMessageRequestMetadataSchema.optional(),
253
+ stop_sequences: z.array(z.string()).optional(),
254
+ system: z.union([z.string(), z.array(blockSchema)]).optional(),
255
+ temperature: z.number().optional(),
256
+ tool_choice: toolChoiceSchema.optional(),
257
+ tools: z.array(toolSchema).optional(),
258
+ top_k: z.number().optional(),
259
+ top_p: z.number().optional(),
260
+ stream: z.boolean().optional(),
261
+ }),
262
+ );
263
+
264
+ export const blockSchema: z.ZodSchema<Block> = z.lazy(() =>
265
+ z.union([textBlockSchema, imageBlockSchema, toolUseBlockSchema, toolResultBlockSchema]),
266
+ );
267
+
268
+ export const toolResultBlockSchema: z.ZodSchema<ToolResultBlock> = z.lazy(() =>
269
+ z.object({
270
+ tool_use_id: z.string(),
271
+ content: z.union([z.string(), z.array(blockSchema)]),
272
+ is_error: z.boolean().optional(),
273
+ type: z.literal('tool_result').optional(),
274
+ cache_control: cacheControlEphemeralSchema.optional(),
275
+ }),
276
+ );
277
+
278
+ export const contentBlockStartEventSchema: z.ZodSchema<ContentBlockStartEvent> = z.lazy(() =>
279
+ z.object({
280
+ content_block: blockSchema,
281
+ index: z.number(),
282
+ type: z.literal('content_block_start'),
283
+ }),
284
+ );
285
+
286
+ export const createMessageBatchRequestSchema: z.ZodSchema<CreateMessageBatchRequest> = z.lazy(() =>
287
+ z.object({
288
+ requests: z.array(batchMessageRequestSchema),
289
+ }),
290
+ );
291
+
292
+ export const messageSchema: z.ZodSchema<Message> = z.lazy(() =>
293
+ z.object({
294
+ id: z.string().optional(),
295
+ content: z.union([z.string(), z.array(blockSchema)]),
296
+ role: messageRoleSchema,
297
+ model: z.string().optional(),
298
+ stop_reason: stopReasonSchema.optional(),
299
+ stop_sequence: z.string().optional(),
300
+ type: z.string().optional(),
301
+ usage: usageSchema.optional(),
302
+ }),
303
+ );
304
+
305
+ export const messageStartEventSchema: z.ZodSchema<MessageStartEvent> = z.lazy(() =>
306
+ z.object({
307
+ message: messageSchema,
308
+ type: z.literal('message_start'),
309
+ }),
310
+ );
311
+
312
+ export const messageStreamEventSchema: z.ZodSchema<MessageStreamEvent> = z.lazy(() =>
313
+ z.union([
314
+ messageStartEventSchema,
315
+ messageDeltaEventSchema,
316
+ messageStopEventSchema,
317
+ contentBlockStartEventSchema,
318
+ contentBlockDeltaEventSchema,
319
+ contentBlockStopEventSchema,
320
+ pingEventSchema,
321
+ errorEventSchema,
322
+ ]),
323
+ );
324
+
325
+ export const createMessageDataSchema: z.ZodSchema<CreateMessageData> = z.lazy(() =>
326
+ z.object({
327
+ body: createMessageRequestSchema,
328
+ }),
329
+ );
330
+
331
+ export const createMessageResponseSchema: z.ZodSchema<CreateMessageResponse> = z.lazy(() => messageSchema);
332
+
333
+ export const createMessageBatchDataSchema: z.ZodSchema<CreateMessageBatchData> = z.lazy(() =>
334
+ z.object({
335
+ body: createMessageBatchRequestSchema,
336
+ }),
337
+ );
package/src/index.ts CHANGED
@@ -1,67 +1,58 @@
1
- import { Integration, OpenAPI, IntegrationCredentialType, IntegrationAuth } from '@mastra/core';
2
- import { createClient, type OASClient, type NormalizeOAS } from 'fets';
3
- import { z } from 'zod';
1
+ import { Integration, ToolApi } from '@mastra/core';
4
2
 
5
3
  // @ts-ignore
6
- import ClaudeLogo from './assets/claude.svg';
7
- import { openapi } from './openapi';
8
- import { components } from './openapi-components';
9
- import { paths } from './openapi-paths';
4
+ import ClaudeLogo from './assets/claude.png';
5
+ import { comments } from './client/service-comments';
6
+ import * as integrationClient from './client/services.gen';
7
+ import * as zodSchema from './client/zodSchema';
8
+
9
+ type ClaudeConfig = {
10
+ ANTHROPIC_API_KEY: string;
11
+ [key: string]: any;
12
+ };
10
13
 
11
14
  export class ClaudeIntegration extends Integration {
12
- constructor() {
13
- super({
14
- authType: IntegrationCredentialType.API_KEY,
15
- name: 'CLAUDE',
16
- logoUrl: ClaudeLogo,
17
- authConnectionOptions: z.object({
18
- ANTHROPIC_API_KEY: z.string(),
19
- }),
20
- });
15
+ readonly name = 'CLAUDE';
16
+ readonly logoUrl = ClaudeLogo;
17
+ config: ClaudeConfig;
18
+ readonly tools: Record<Exclude<keyof typeof integrationClient, 'client'>, ToolApi>;
19
+ categories = ['ai', 'communications'];
20
+ description = 'Claude is a next generation AI assistant built for work and trained to be safe, accurate, and secure.';
21
+
22
+ constructor({ config }: { config: ClaudeConfig }) {
23
+ super();
24
+
25
+ this.config = config;
26
+ this.tools = this._generateIntegrationTools<typeof this.tools>();
21
27
  }
22
28
 
23
- getOpenApiSpec() {
24
- return { paths, components } as unknown as OpenAPI;
29
+ protected get toolSchemas() {
30
+ return zodSchema;
25
31
  }
26
32
 
27
- getApiClient = async ({ connectionId }: { connectionId: string }): Promise<OASClient<NormalizeOAS<openapi>>> => {
28
- const connection = await this.dataLayer?.getConnection({ name: this.name, connectionId });
29
-
30
- if (!connection) {
31
- throw new Error(`Connection not found for connectionId: ${connectionId}`);
32
- }
33
-
34
- const credential = await this.dataLayer?.getCredentialsByConnection(connection.id);
35
- const value = credential?.value as Record<string, string>;
33
+ protected get toolDocumentations() {
34
+ return comments;
35
+ }
36
36
 
37
- const client = createClient<NormalizeOAS<openapi>>({
38
- endpoint: `https://api.anthropic.com/v1`,
39
- globalParams: {
40
- headers: {
41
- 'x-api-key': value?.['ANTHROPIC_API_KEY'],
42
- },
43
- },
37
+ protected get baseClient() {
38
+ integrationClient.client.setConfig({
39
+ baseUrl: `https://api.anthropic.com/v1`,
44
40
  });
41
+ return integrationClient;
42
+ }
45
43
 
46
- return client;
47
- };
44
+ getApiClient = async () => {
45
+ const value = {
46
+ 'x-api-key': this.config?.['ANTHROPIC_API_KEY'],
47
+ } as Record<string, any>;
48
48
 
49
- registerEvents() {
50
- this.events = {};
51
- return this.events;
52
- }
49
+ const baseClient = this.baseClient;
53
50
 
54
- getAuthenticator() {
55
- return new IntegrationAuth({
56
- dataAccess: this.dataLayer!,
57
- // @ts-ignore
58
- onConnectionCreated: () => {
59
- // TODO
60
- },
61
- config: {
62
- INTEGRATION_NAME: this.name,
63
- AUTH_TYPE: this.config.authType,
64
- },
51
+ baseClient.client.interceptors.request.use((request, options) => {
52
+ request.headers.set('x-api-key', value?.['ANTHROPIC_API_KEY']);
53
+ return request;
65
54
  });
66
- }
55
+
56
+ return integrationClient;
57
+ };
67
58
  }
@@ -1,64 +0,0 @@
1
- <svg
2
- id="katman_1"
3
- data-name="katman 1"
4
- version="1.1"
5
- viewBox="0 0 689.97997 148.17999"
6
- sodipodi:docname="Claude_Ai.svg"
7
- width="689.97998"
8
- height="148.17999"
9
- inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
10
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
11
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
- xmlns="http://www.w3.org/2000/svg"
13
- xmlns:svg="http://www.w3.org/2000/svg">
14
- <sodipodi:namedview
15
- id="namedview152"
16
- pagecolor="#ffffff"
17
- bordercolor="#000000"
18
- borderopacity="0.25"
19
- inkscape:showpageshadow="2"
20
- inkscape:pageopacity="0.0"
21
- inkscape:pagecheckerboard="0"
22
- inkscape:deskcolor="#d1d1d1"
23
- showgrid="false"
24
- inkscape:zoom="1.3086279"
25
- inkscape:cx="345.39995"
26
- inkscape:cy="73.741361"
27
- inkscape:window-width="1920"
28
- inkscape:window-height="991"
29
- inkscape:window-x="-9"
30
- inkscape:window-y="-9"
31
- inkscape:window-maximized="1"
32
- inkscape:current-layer="katman_1" />
33
- <defs
34
- id="defs145">
35
- <style
36
- id="style143">
37
- .cls-1 {
38
- fill: #0f0f0d;
39
- }
40
-
41
- .cls-1, .cls-2 {
42
- stroke-width: 0px;
43
- }
44
-
45
- .cls-2 {
46
- fill: #d97757;
47
- }
48
- </style>
49
- </defs>
50
- <g
51
- id="g314"
52
- transform="translate(-75.96,-223.53)">
53
- <path
54
- class="cls-2"
55
- d="m 105.01,322.07 29.14,-16.35 0.49,-1.42 -0.49,-0.79 h -1.42 l -4.87,-0.3 -16.65,-0.45 -14.44,-0.6 -13.99,-0.75 -3.52,-0.75 -3.3,-4.35 0.34,-2.17 2.96,-1.99 4.24,0.37 9.37,0.64 14.06,0.97 10.2,0.6 15.11,1.57 h 2.4 l 0.34,-0.97 -0.82,-0.6 -0.64,-0.6 -14.55,-9.86 -15.75,-10.42 -8.25,-6 -4.46,-3.04 -2.25,-2.85 -0.97,-6.22 4.05,-4.46 5.44,0.37 1.39,0.37 5.51,4.24 11.77,9.11 15.37,11.32 2.25,1.87 0.9,-0.64 0.11,-0.45 -1.01,-1.69 -8.36,-15.11 -8.92,-15.37 -3.97,-6.37 -1.05,-3.82 c -0.37,-1.57 -0.64,-2.89 -0.64,-4.5 l 4.61,-6.26 2.55,-0.82 6.15,0.82 2.59,2.25 3.82,8.74 6.19,13.76 9.6,18.71 2.81,5.55 1.5,5.14 0.56,1.57 h 0.97 v -0.9 l 0.79,-10.54 1.46,-12.94 1.42,-16.65 0.49,-4.69 2.32,-5.62 4.61,-3.04 3.6,1.72 2.96,4.24 -0.41,2.74 -1.76,11.44 -3.45,17.92 -2.25,12 h 1.31 l 1.5,-1.5 6.07,-8.06 10.2,-12.75 4.5,-5.06 5.25,-5.59 3.37,-2.66 h 6.37 l 4.69,6.97 -2.1,7.2 -6.56,8.32 -5.44,7.05 -7.8,10.5 -4.87,8.4 0.45,0.67 1.16,-0.11 17.62,-3.75 9.52,-1.72 11.36,-1.95 5.14,2.4 0.56,2.44 -2.02,4.99 -12.15,3 -14.25,2.85 -21.22,5.02 -0.26,0.19 0.3,0.37 9.56,0.9 4.09,0.22 h 10.01 l 18.64,1.39 4.87,3.22 2.92,3.94 -0.49,3 -7.5,3.82 -10.12,-2.4 -23.62,-5.62 -8.1,-2.02 h -1.12 v 0.67 l 6.75,6.6 12.37,11.17 15.49,14.4 0.79,3.56 -1.99,2.81 -2.1,-0.3 -13.61,-10.24 -5.25,-4.61 -11.89,-10.01 h -0.79 v 1.05 l 2.74,4.01 14.47,21.75 0.75,6.67 -1.05,2.17 -3.75,1.31 -4.12,-0.75 -8.47,-11.89 -8.74,-13.39 -7.05,-12 -0.86,0.49 -4.16,44.81 -1.95,2.29 -4.5,1.72 -3.75,-2.85 -1.99,-4.61 1.99,-9.11 2.4,-11.89 1.95,-9.45 1.76,-11.74 1.05,-3.9 -0.07,-0.26 -0.86,0.11 -8.85,12.15 -13.46,18.19 -10.65,11.4 -2.55,1.01 -4.42,-2.29 0.41,-4.09 2.47,-3.64 14.74,-18.75 8.89,-11.62 5.74,-6.71 -0.04,-0.97 h -0.34 l -39.15,25.42 -6.97,0.9 -3,-2.81 0.37,-4.61 1.42,-1.5 11.77,-8.1 -0.04,0.04 z"
56
- shape-rendering="optimizeQuality"
57
- id="path147" />
58
- <path
59
- class="cls-1"
60
- d="m 317.73,349.33 c -18.82,0 -31.69,-10.5 -37.76,-26.66 -3.17,-8.42 -4.74,-17.36 -4.61,-26.36 0,-27.11 12.15,-45.94 39,-45.94 18.04,0 29.17,7.87 35.51,26.66 h 7.72 l -1.05,-25.91 c -10.8,-6.97 -24.3,-10.5 -40.72,-10.5 -23.14,0 -42.82,10.35 -53.77,29.02 -5.66,9.86 -8.53,21.07 -8.32,32.44 0,20.74 9.79,39.11 28.16,49.31 10.06,5.37 21.34,8.04 32.74,7.72 17.92,0 32.14,-3.41 44.74,-9.37 l 3.26,-28.57 h -7.87 c -4.72,13.05 -10.35,20.89 -19.69,25.05 -4.57,2.06 -10.35,3.11 -17.32,3.11 z m 81.18,-98.96 0.75,-12.75 h -5.32 l -23.7,7.12 v 3.86 l 10.5,4.87 v 89.17 c 0,6.07 -3.11,7.42 -11.25,8.44 v 6.52 h 40.31 v -6.52 c -8.17,-1.01 -11.25,-2.36 -11.25,-8.44 V 250.4 l -0.04,-0.04 z m 160.31,108.75 h 3.11 l 27.26,-5.17 v -6.67 l -3.82,-0.3 c -6.37,-0.6 -8.02,-1.91 -8.02,-7.12 v -47.55 l 0.75,-15.26 h -4.31 l -25.76,3.71 v 6.52 l 2.51,0.45 c 6.97,1.01 9.04,2.96 9.04,7.84 v 42.37 c -6.67,5.17 -13.05,8.44 -20.62,8.44 -8.4,0 -13.61,-4.27 -13.61,-14.25 v -39.79 l 0.75,-15.26 h -4.42 l -25.8,3.71 v 6.52 l 2.66,0.45 c 6.97,1.01 9.04,2.96 9.04,7.84 v 39.11 c 0,16.57 9.37,24.45 24.3,24.45 11.4,0 20.74,-6.07 27.75,-14.51 l -0.75,14.51 -0.04,-0.04 z M 484.3,306.36 c 0,-21.19 -11.25,-29.32 -31.57,-29.32 -17.92,0 -30.94,7.42 -30.94,19.72 0,3.67 1.31,6.49 3.97,8.44 l 13.65,-1.8 c -0.6,-4.12 -0.9,-6.64 -0.9,-7.69 0,-6.97 3.71,-10.5 11.25,-10.5 11.14,0 16.76,7.84 16.76,20.44 v 4.12 l -28.12,8.44 c -9.37,2.55 -14.7,4.76 -18.26,9.94 -1.89,3.17 -2.8,6.82 -2.62,10.5 0,12 8.25,20.47 22.35,20.47 10.2,0 19.24,-4.61 27.11,-13.35 2.81,8.74 7.12,13.35 14.81,13.35 6.22,0 11.85,-2.51 16.87,-7.42 l -1.5,-5.17 c -2.17,0.6 -4.27,0.9 -6.49,0.9 -4.31,0 -6.37,-3.41 -6.37,-10.09 v -30.97 z m -36,40.76 c -7.69,0 -12.45,-4.46 -12.45,-12.3 0,-5.32 2.51,-8.44 7.87,-10.24 l 22.8,-7.24 v 21.9 c -7.27,5.51 -11.55,7.87 -18.22,7.87 z m 237.36,6.82 v -6.67 l -3.86,-0.3 c -6.37,-0.6 -7.99,-1.91 -7.99,-7.12 v -89.47 l 0.75,-12.75 h -5.36 l -23.7,7.12 v 3.86 l 10.5,4.87 v 29.32 c -5.91,-4.05 -12.98,-6.08 -20.14,-5.77 -23.55,0 -41.92,17.92 -41.92,44.74 0,22.09 13.2,37.35 34.95,37.35 11.25,0 21.04,-5.47 27.11,-13.95 l -0.75,13.95 h 3.15 l 27.26,-5.17 v 0 z m -49.35,-68.02 c 11.25,0 19.69,6.52 19.69,18.52 v 33.75 c -5.18,5.16 -12.23,8 -19.54,7.87 -16.12,0 -24.3,-12.75 -24.3,-29.77 0,-19.12 9.34,-30.37 24.15,-30.37 z M 743.3,302.8 c -2.1,-9.9 -8.17,-15.52 -16.61,-15.52 -12.6,0 -21.34,9.49 -21.34,23.1 0,20.14 10.65,33.19 27.86,33.19 11.48,-0.12 22.04,-6.33 27.71,-16.31 l 5.02,1.35 c -2.25,17.47 -18.07,30.52 -37.5,30.52 -22.8,0 -38.51,-16.87 -38.51,-40.87 0,-24 17.06,-41.21 39.86,-41.21 17.02,0 29.02,10.24 32.89,28.01 l -59.4,18.22 v -8.02 l 40.01,-12.41 v -0.04 z"
61
- shape-rendering="optimizeQuality"
62
- id="path149" />
63
- </g>
64
- </svg>