@modudraft/core 0.1.1

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/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@modudraft/core",
3
+ "version": "0.1.1",
4
+ "description": "Modudraft scene model, shape ops, and serialization — no React",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc -b",
16
+ "typecheck": "tsc -b --noEmit"
17
+ },
18
+ "dependencies": {
19
+ "@dagrejs/dagre": "^3.0.0",
20
+ "simple-icons": "^16.23.0",
21
+ "zod": "^4.4.3"
22
+ },
23
+ "devDependencies": {
24
+ "typescript": "~6.0.2"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ }
29
+ }
@@ -0,0 +1,613 @@
1
+ {
2
+ "database": {
3
+ "label": "Database",
4
+ "brandColor": "#7dd3fc",
5
+ "symbolViewBox": "0 0 64 72",
6
+ "symbolSvg": "<ellipse cx='32' cy='12' rx='24' ry='9' fill='none' stroke='currentColor' stroke-width='4'/><path d='M8 12 v44 a24 9 0 0 0 48 0 v-44' fill='none' stroke='currentColor' stroke-width='4'/>",
7
+ "defaultTool": "postgresql",
8
+ "attributes": [
9
+ {
10
+ "key": "replication",
11
+ "label": "Replication",
12
+ "type": "enum",
13
+ "options": ["none", "primary-replica", "multi-primary", "read-replicas"]
14
+ },
15
+ {
16
+ "key": "partitioning",
17
+ "label": "Partitioning",
18
+ "type": "enum",
19
+ "options": ["none", "hash", "range", "list"]
20
+ },
21
+ { "key": "shards", "label": "Shards", "type": "number" },
22
+ {
23
+ "key": "consistency",
24
+ "label": "Consistency",
25
+ "type": "enum",
26
+ "options": ["strong", "eventual", "causal"]
27
+ },
28
+ { "key": "backups", "label": "Backups", "type": "boolean" },
29
+ { "key": "engine-version", "label": "Engine Version", "type": "text" },
30
+ {
31
+ "key": "storage-size",
32
+ "label": "Storage Size",
33
+ "type": "text",
34
+ "suggestions": ["10GB", "100GB", "1TB", "10TB"]
35
+ },
36
+ { "key": "indexes", "label": "Indexes", "type": "text" },
37
+ { "key": "connection-pool", "label": "Connection Pool", "type": "number" }
38
+ ]
39
+ },
40
+ "queue": {
41
+ "label": "Queue",
42
+ "brandColor": "#fbbf24",
43
+ "symbolViewBox": "0 0 88 40",
44
+ "symbolSvg": "<rect x='2' y='8' width='84' height='24' fill='none' stroke='currentColor' stroke-width='4' rx='2'/><line x1='23' y1='8' x2='23' y2='32' stroke='currentColor' stroke-width='3'/><line x1='44' y1='8' x2='44' y2='32' stroke='currentColor' stroke-width='3'/><line x1='65' y1='8' x2='65' y2='32' stroke='currentColor' stroke-width='3'/>",
45
+ "defaultTool": "kafka",
46
+ "attributes": [
47
+ { "key": "partitions", "label": "Partitions", "type": "number" },
48
+ {
49
+ "key": "ordering",
50
+ "label": "Ordering",
51
+ "type": "enum",
52
+ "options": ["none", "per-partition", "global-fifo"]
53
+ },
54
+ {
55
+ "key": "delivery",
56
+ "label": "Delivery",
57
+ "type": "enum",
58
+ "options": ["at-most-once", "at-least-once", "exactly-once"]
59
+ },
60
+ { "key": "dlq", "label": "DLQ", "type": "boolean" },
61
+ {
62
+ "key": "retention",
63
+ "label": "Retention",
64
+ "type": "text",
65
+ "suggestions": ["1d", "7d", "30d", "infinite"]
66
+ },
67
+ {
68
+ "key": "throughput",
69
+ "label": "Throughput",
70
+ "type": "text",
71
+ "suggestions": ["1k/s", "10k/s", "100k/s"]
72
+ },
73
+ {
74
+ "key": "max-message-size",
75
+ "label": "Max Message Size",
76
+ "type": "text",
77
+ "suggestions": ["1KB", "256KB", "1MB", "10MB"]
78
+ }
79
+ ]
80
+ },
81
+ "compute": {
82
+ "label": "Compute",
83
+ "brandColor": "#86efac",
84
+ "symbolViewBox": "0 0 72 48",
85
+ "symbolSvg": "<rect x='2' y='2' width='68' height='44' fill='none' stroke='currentColor' stroke-width='4' rx='4'/><circle cx='14' cy='14' r='3' fill='currentColor'/>",
86
+ "defaultTool": "docker",
87
+ "attributes": [
88
+ { "key": "replicas", "label": "Replicas", "type": "number" },
89
+ {
90
+ "key": "autoscaling",
91
+ "label": "Autoscaling",
92
+ "type": "enum",
93
+ "options": ["none", "horizontal", "vertical"]
94
+ },
95
+ { "key": "stateless", "label": "Stateless", "type": "boolean" },
96
+ {
97
+ "key": "language",
98
+ "label": "Language",
99
+ "type": "text",
100
+ "suggestions": ["go", "java", "python", "node", "rust"]
101
+ },
102
+ {
103
+ "key": "memory",
104
+ "label": "Memory",
105
+ "type": "text",
106
+ "suggestions": ["512MB", "1GB", "4GB"]
107
+ },
108
+ {
109
+ "key": "cpu",
110
+ "label": "CPU",
111
+ "type": "text",
112
+ "suggestions": ["0.25 vCPU", "1 vCPU", "4 vCPU", "16 vCPU"]
113
+ }
114
+ ]
115
+ },
116
+ "cache": {
117
+ "label": "Cache",
118
+ "brandColor": "#f0abfc",
119
+ "symbolViewBox": "0 0 64 52",
120
+ "symbolSvg": "<rect x='6' y='36' width='52' height='12' fill='none' stroke='currentColor' stroke-width='3' rx='2'/><rect x='6' y='20' width='52' height='12' fill='none' stroke='currentColor' stroke-width='3' rx='2'/><rect x='6' y='4' width='52' height='12' fill='none' stroke='currentColor' stroke-width='3' rx='2'/>",
121
+ "defaultTool": "redis",
122
+ "attributes": [
123
+ {
124
+ "key": "eviction",
125
+ "label": "Eviction",
126
+ "type": "enum",
127
+ "options": ["lru", "lfu", "fifo", "ttl-only"]
128
+ },
129
+ {
130
+ "key": "ttl",
131
+ "label": "TTL",
132
+ "type": "text",
133
+ "suggestions": ["60s", "5m", "1h", "24h"]
134
+ },
135
+ {
136
+ "key": "strategy",
137
+ "label": "Strategy",
138
+ "type": "enum",
139
+ "options": [
140
+ "cache-aside",
141
+ "write-through",
142
+ "write-behind",
143
+ "read-through"
144
+ ]
145
+ },
146
+ {
147
+ "key": "size",
148
+ "label": "Size",
149
+ "type": "text",
150
+ "suggestions": ["512MB", "2GB", "8GB", "64GB"]
151
+ }
152
+ ]
153
+ },
154
+ "gateway": {
155
+ "label": "Gateway",
156
+ "brandColor": "#fda4af",
157
+ "symbolViewBox": "0 0 64 56",
158
+ "symbolSvg": "<path d='M4 28 h20 M24 28 L50 10 M24 28 L50 28 M24 28 L50 46' fill='none' stroke='currentColor' stroke-width='4'/><path d='M48 4 l12 6 -12 6z M48 22 l12 6 -12 6z M48 40 l12 6 -12 6z' fill='currentColor'/>",
159
+ "defaultTool": "nginx",
160
+ "attributes": [
161
+ {
162
+ "key": "lb-algorithm",
163
+ "label": "LB Algorithm",
164
+ "type": "enum",
165
+ "options": ["round-robin", "least-connections", "ip-hash", "weighted"]
166
+ },
167
+ {
168
+ "key": "rate-limit",
169
+ "label": "Rate Limit",
170
+ "type": "text",
171
+ "suggestions": ["100/s", "1k/s", "10k/s"]
172
+ },
173
+ {
174
+ "key": "tls-termination",
175
+ "label": "TLS Termination",
176
+ "type": "boolean"
177
+ },
178
+ { "key": "auth-offload", "label": "Auth Offload", "type": "boolean" },
179
+ {
180
+ "key": "timeout",
181
+ "label": "Timeout",
182
+ "type": "text",
183
+ "suggestions": ["5s", "30s", "60s", "300s"]
184
+ }
185
+ ]
186
+ },
187
+ "observability": {
188
+ "label": "Observability",
189
+ "brandColor": "#fdba74",
190
+ "symbolViewBox": "0 0 64 40",
191
+ "symbolSvg": "<path d='M2 20 h12 l6 -14 l8 28 l6 -14 h28' fill='none' stroke='currentColor' stroke-width='4' stroke-linejoin='round'/>",
192
+ "defaultTool": "prometheus",
193
+ "attributes": [
194
+ {
195
+ "key": "signal",
196
+ "label": "Signal",
197
+ "type": "enum",
198
+ "options": ["metrics", "logs", "traces", "all"]
199
+ },
200
+ {
201
+ "key": "retention",
202
+ "label": "Retention",
203
+ "type": "text",
204
+ "suggestions": ["7d", "30d", "90d", "1y"]
205
+ },
206
+ {
207
+ "key": "sampling",
208
+ "label": "Sampling",
209
+ "type": "text",
210
+ "suggestions": ["1%", "10%", "100%"]
211
+ },
212
+ { "key": "alerting", "label": "Alerting", "type": "boolean" }
213
+ ]
214
+ },
215
+ "storage": {
216
+ "label": "Object Storage",
217
+ "brandColor": "#a5b4fc",
218
+ "symbolViewBox": "0 0 64 56",
219
+ "symbolSvg": "<path d='M8 8 h48 l-6 40 a8 6 0 0 1 -8 6 h-20 a8 6 0 0 1 -8 -6 z' fill='none' stroke='currentColor' stroke-width='4'/><line x1='8' y1='18' x2='56' y2='18' stroke='currentColor' stroke-width='3'/>",
220
+ "defaultTool": "minio",
221
+ "attributes": [
222
+ {
223
+ "key": "class",
224
+ "label": "Class",
225
+ "type": "enum",
226
+ "options": ["hot", "warm", "cold", "archive"]
227
+ },
228
+ { "key": "versioning", "label": "Versioning", "type": "boolean" },
229
+ { "key": "encryption", "label": "Encryption", "type": "boolean" },
230
+ { "key": "lifecycle", "label": "Lifecycle Policy", "type": "text" },
231
+ {
232
+ "key": "region-replication",
233
+ "label": "Region Replication",
234
+ "type": "enum",
235
+ "options": ["single-region", "multi-region"]
236
+ }
237
+ ]
238
+ },
239
+ "search": {
240
+ "label": "Search",
241
+ "brandColor": "#5eead4",
242
+ "symbolViewBox": "0 0 56 56",
243
+ "symbolSvg": "<circle cx='24' cy='24' r='16' fill='none' stroke='currentColor' stroke-width='4'/><line x1='36' y1='36' x2='52' y2='52' stroke='currentColor' stroke-width='5' stroke-linecap='round'/>",
244
+ "defaultTool": "elasticsearch",
245
+ "attributes": [
246
+ { "key": "replicas", "label": "Replicas", "type": "number" },
247
+ { "key": "index-count", "label": "Index Count", "type": "number" },
248
+ { "key": "analyzer", "label": "Analyzer", "type": "text" },
249
+ { "key": "full-text", "label": "Full-text", "type": "boolean" }
250
+ ]
251
+ },
252
+ "cdn": {
253
+ "label": "CDN",
254
+ "brandColor": "#93c5fd",
255
+ "symbolViewBox": "0 0 56 56",
256
+ "symbolSvg": "<circle cx='28' cy='28' r='24' fill='none' stroke='currentColor' stroke-width='3.5'/><ellipse cx='28' cy='28' rx='11' ry='24' fill='none' stroke='currentColor' stroke-width='3'/><line x1='4' y1='28' x2='52' y2='28' stroke='currentColor' stroke-width='3'/>",
257
+ "defaultTool": "cloudflare",
258
+ "attributes": [
259
+ { "key": "edge-locations", "label": "Edge Locations", "type": "number" },
260
+ { "key": "waf", "label": "WAF", "type": "boolean" },
261
+ { "key": "cache-policy", "label": "Cache Policy", "type": "text" },
262
+ { "key": "ttl", "label": "TTL", "type": "text" },
263
+ { "key": "invalidation", "label": "Invalidation", "type": "text" }
264
+ ]
265
+ },
266
+ "client": {
267
+ "label": "Client",
268
+ "brandColor": "#d9f99d",
269
+ "symbolViewBox": "0 0 48 56",
270
+ "symbolSvg": "<circle cx='24' cy='14' r='10' fill='none' stroke='currentColor' stroke-width='4'/><path d='M4 52 a20 14 0 0 1 40 0' fill='none' stroke='currentColor' stroke-width='4'/>",
271
+ "defaultTool": "web-client",
272
+ "attributes": [
273
+ {
274
+ "key": "platform",
275
+ "label": "Platform",
276
+ "type": "enum",
277
+ "options": ["web", "ios", "android", "desktop", "cli", "iot"]
278
+ },
279
+ { "key": "offline", "label": "Offline", "type": "boolean" },
280
+ {
281
+ "key": "framework",
282
+ "label": "Framework",
283
+ "type": "text",
284
+ "suggestions": ["react", "vue", "flutter", "swiftui", "kotlin"]
285
+ },
286
+ {
287
+ "key": "auth-method",
288
+ "label": "Auth Method",
289
+ "type": "enum",
290
+ "options": ["session-cookie", "jwt", "api-key", "oauth2"]
291
+ }
292
+ ]
293
+ },
294
+ "auth": {
295
+ "label": "Auth / Identity",
296
+ "brandColor": "#fcd34d",
297
+ "symbolViewBox": "0 0 48 56",
298
+ "symbolSvg": "<path d='M24 2 L44 10 v16 c0 14 -9 22 -20 26 C13 48 4 40 4 26 V10 z' fill='none' stroke='currentColor' stroke-width='4'/><circle cx='24' cy='24' r='5' fill='none' stroke='currentColor' stroke-width='3'/><line x1='24' y1='29' x2='24' y2='38' stroke='currentColor' stroke-width='3'/>",
299
+ "defaultTool": "keycloak",
300
+ "attributes": [
301
+ {
302
+ "key": "protocol",
303
+ "label": "Protocol",
304
+ "type": "enum",
305
+ "options": ["oauth2", "oidc", "saml", "ldap", "jwt"]
306
+ },
307
+ { "key": "mfa", "label": "MFA", "type": "boolean" },
308
+ {
309
+ "key": "sessions",
310
+ "label": "Sessions",
311
+ "type": "enum",
312
+ "options": ["stateless-jwt", "server-session"]
313
+ },
314
+ { "key": "sso", "label": "SSO", "type": "boolean" },
315
+ {
316
+ "key": "token-ttl",
317
+ "label": "Token TTL",
318
+ "type": "text",
319
+ "suggestions": ["15m", "1h", "24h", "7d"]
320
+ }
321
+ ]
322
+ },
323
+ "ml": {
324
+ "label": "AI / ML",
325
+ "brandColor": "#c4b5fd",
326
+ "symbolViewBox": "0 0 60 56",
327
+ "symbolSvg": "<circle cx='12' cy='12' r='6' fill='none' stroke='currentColor' stroke-width='4'/><circle cx='12' cy='44' r='6' fill='none' stroke='currentColor' stroke-width='4'/><circle cx='48' cy='28' r='6' fill='none' stroke='currentColor' stroke-width='4'/><line x1='17' y1='15' x2='43' y2='25' stroke='currentColor' stroke-width='3'/><line x1='17' y1='41' x2='43' y2='31' stroke='currentColor' stroke-width='3'/>",
328
+ "defaultTool": "openai",
329
+ "attributes": [
330
+ {
331
+ "key": "modality",
332
+ "label": "Modality",
333
+ "type": "enum",
334
+ "options": ["llm", "vision", "speech", "embedding", "classic-ml"]
335
+ },
336
+ {
337
+ "key": "serving",
338
+ "label": "Serving",
339
+ "type": "enum",
340
+ "options": ["api", "self-hosted", "edge"]
341
+ },
342
+ { "key": "gpu", "label": "GPU", "type": "boolean" },
343
+ { "key": "model", "label": "Model", "type": "text" },
344
+ {
345
+ "key": "context",
346
+ "label": "Context",
347
+ "type": "text",
348
+ "suggestions": ["8k", "128k", "200k", "1M"]
349
+ },
350
+ {
351
+ "key": "latency-slo",
352
+ "label": "Latency SLO",
353
+ "type": "text",
354
+ "suggestions": ["<100ms", "<500ms", "<2s", "<10s"]
355
+ }
356
+ ]
357
+ },
358
+ "warehouse": {
359
+ "label": "Analytics / Warehouse",
360
+ "brandColor": "#fca5a5",
361
+ "symbolViewBox": "0 0 56 48",
362
+ "symbolSvg": "<line x1='4' y1='44' x2='52' y2='44' stroke='currentColor' stroke-width='4'/><rect x='8' y='28' width='10' height='16' fill='none' stroke='currentColor' stroke-width='3'/><rect x='23' y='18' width='10' height='26' fill='none' stroke='currentColor' stroke-width='3'/><rect x='38' y='8' width='10' height='36' fill='none' stroke='currentColor' stroke-width='3'/>",
363
+ "defaultTool": "snowflake",
364
+ "attributes": [
365
+ {
366
+ "key": "storage-format",
367
+ "label": "Storage Format",
368
+ "type": "enum",
369
+ "options": ["columnar", "row", "lakehouse"]
370
+ },
371
+ {
372
+ "key": "refresh",
373
+ "label": "Refresh",
374
+ "type": "enum",
375
+ "options": ["batch", "streaming", "hybrid"]
376
+ },
377
+ {
378
+ "key": "size",
379
+ "label": "Size",
380
+ "type": "text",
381
+ "suggestions": ["GBs", "TBs", "PBs"]
382
+ },
383
+ { "key": "partitioned", "label": "Partitioned", "type": "boolean" }
384
+ ]
385
+ },
386
+ "pipeline": {
387
+ "label": "Data Pipeline",
388
+ "brandColor": "#67e8f9",
389
+ "symbolViewBox": "0 0 56 56",
390
+ "symbolSvg": "<path d='M6 8 h44 L40 28 L50 48 H6 L16 28 Z' fill='none' stroke='currentColor' stroke-width='4' stroke-linejoin='round'/>",
391
+ "defaultTool": "spark",
392
+ "attributes": [
393
+ {
394
+ "key": "mode",
395
+ "label": "Mode",
396
+ "type": "enum",
397
+ "options": ["batch", "streaming", "micro-batch"]
398
+ },
399
+ {
400
+ "key": "orchestration",
401
+ "label": "Orchestration",
402
+ "type": "enum",
403
+ "options": ["scheduled", "event-driven", "manual"]
404
+ },
405
+ { "key": "parallelism", "label": "Parallelism", "type": "number" },
406
+ { "key": "checkpointing", "label": "Checkpointing", "type": "boolean" }
407
+ ]
408
+ },
409
+ "cicd": {
410
+ "label": "CI / CD",
411
+ "brandColor": "#bef264",
412
+ "symbolViewBox": "0 0 56 56",
413
+ "symbolSvg": "<path d='M28 10 a18 18 0 0 1 16 10' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round'/><path d='M44 20 l4 -8 -8 -2' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/><path d='M28 46 a18 18 0 0 1 -16 -10' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round'/><path d='M12 36 l-4 8 8 2' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/>",
414
+ "defaultTool": "githubactions",
415
+ "attributes": [
416
+ {
417
+ "key": "trigger",
418
+ "label": "Trigger",
419
+ "type": "enum",
420
+ "options": ["push", "pr", "schedule", "manual"]
421
+ },
422
+ {
423
+ "key": "environments",
424
+ "label": "Environments",
425
+ "type": "text",
426
+ "suggestions": ["dev", "staging", "prod"]
427
+ },
428
+ { "key": "approval", "label": "Approval", "type": "boolean" },
429
+ { "key": "parallelism", "label": "Parallelism", "type": "number" }
430
+ ]
431
+ },
432
+ "iac": {
433
+ "label": "Infra as Code",
434
+ "brandColor": "#fdba74",
435
+ "symbolViewBox": "0 0 64 48",
436
+ "symbolSvg": "<rect x='4' y='4' width='56' height='40' fill='none' stroke='currentColor' stroke-width='4' rx='3'/><path d='M22 24 l-8 -6 8 -6' fill='none' stroke='currentColor' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'/><path d='M42 24 l8 -6 -8 -6' fill='none' stroke='currentColor' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'/><line x1='30' y1='30' x2='34' y2='18' stroke='currentColor' stroke-width='3' stroke-linecap='round'/>",
437
+ "defaultTool": "terraform",
438
+ "attributes": [
439
+ {
440
+ "key": "state",
441
+ "label": "State",
442
+ "type": "enum",
443
+ "options": ["remote", "local", "managed"]
444
+ },
445
+ {
446
+ "key": "drift-detection",
447
+ "label": "Drift Detection",
448
+ "type": "boolean"
449
+ },
450
+ { "key": "plan-preview", "label": "Plan Preview", "type": "boolean" },
451
+ { "key": "modules", "label": "Modules", "type": "number" }
452
+ ]
453
+ },
454
+ "serverless": {
455
+ "label": "Serverless",
456
+ "brandColor": "#f9a8d4",
457
+ "symbolViewBox": "0 0 48 56",
458
+ "symbolSvg": "<path d='M10 8 l10 20 -8 0 l10 20' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'/>",
459
+ "defaultTool": "cloudflareworkers",
460
+ "attributes": [
461
+ {
462
+ "key": "trigger",
463
+ "label": "Trigger",
464
+ "type": "enum",
465
+ "options": ["http", "queue", "schedule", "event"]
466
+ },
467
+ {
468
+ "key": "cold-start",
469
+ "label": "Cold Start",
470
+ "type": "text",
471
+ "suggestions": ["<100ms", "<1s", ">1s"]
472
+ },
473
+ {
474
+ "key": "memory",
475
+ "label": "Memory",
476
+ "type": "text",
477
+ "suggestions": ["128MB", "512MB", "1GB"]
478
+ },
479
+ { "key": "concurrency", "label": "Concurrency", "type": "number" },
480
+ {
481
+ "key": "timeout",
482
+ "label": "Timeout",
483
+ "type": "text",
484
+ "suggestions": ["3s", "30s", "5m", "15m"]
485
+ }
486
+ ]
487
+ },
488
+ "secrets": {
489
+ "label": "Secrets",
490
+ "brandColor": "#fde047",
491
+ "symbolViewBox": "0 0 64 32",
492
+ "symbolSvg": "<circle cx='16' cy='16' r='10' fill='none' stroke='currentColor' stroke-width='4'/><line x1='26' y1='16' x2='58' y2='16' stroke='currentColor' stroke-width='4'/><line x1='46' y1='16' x2='46' y2='24' stroke='currentColor' stroke-width='3.5'/><line x1='54' y1='16' x2='54' y2='22' stroke='currentColor' stroke-width='3.5'/>",
493
+ "defaultTool": "vault",
494
+ "attributes": [
495
+ {
496
+ "key": "rotation",
497
+ "label": "Rotation",
498
+ "type": "enum",
499
+ "options": ["none", "manual", "automatic"]
500
+ },
501
+ {
502
+ "key": "access",
503
+ "label": "Access",
504
+ "type": "enum",
505
+ "options": ["iam", "token", "mtls"]
506
+ },
507
+ { "key": "audit-log", "label": "Audit Log", "type": "boolean" },
508
+ { "key": "versioning", "label": "Versioning", "type": "boolean" }
509
+ ]
510
+ },
511
+ "external": {
512
+ "label": "External Service",
513
+ "brandColor": "#cbd5e1",
514
+ "symbolViewBox": "0 0 64 56",
515
+ "symbolSvg": "<rect x='4' y='8' width='40' height='40' fill='none' stroke='currentColor' stroke-width='4' rx='3'/><path d='M44 28 h16' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round'/><path d='M52 20 l8 8 -8 8' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'/>",
516
+ "defaultTool": "stripe",
517
+ "attributes": [
518
+ {
519
+ "key": "provider-sla",
520
+ "label": "SLA",
521
+ "type": "text",
522
+ "suggestions": ["99.9%", "99.95%", "99.99%"]
523
+ },
524
+ {
525
+ "key": "auth",
526
+ "label": "Auth",
527
+ "type": "enum",
528
+ "options": ["api-key", "oauth2", "hmac", "none"]
529
+ },
530
+ { "key": "rate-limit", "label": "Rate Limit", "type": "text" },
531
+ {
532
+ "key": "webhook-callbacks",
533
+ "label": "Webhook Callbacks",
534
+ "type": "boolean"
535
+ }
536
+ ]
537
+ },
538
+ "notification": {
539
+ "label": "Notifications",
540
+ "brandColor": "#f9a8d4",
541
+ "symbolViewBox": "0 0 56 64",
542
+ "symbolSvg": "<path d='M28 4 a16 16 0 0 1 16 16 v16 l6 8 H6 l6 -8 V20 a16 16 0 0 1 16 -16 z' fill='none' stroke='currentColor' stroke-width='4' stroke-linejoin='round'/><path d='M22 52 a6 6 0 0 0 12 0' fill='none' stroke='currentColor' stroke-width='4'/>",
543
+ "defaultTool": "fcm",
544
+ "attributes": [
545
+ {
546
+ "key": "channel",
547
+ "label": "Channel",
548
+ "type": "enum",
549
+ "options": ["push", "email", "sms", "multi"]
550
+ },
551
+ { "key": "batching", "label": "Batching", "type": "boolean" },
552
+ {
553
+ "key": "priority",
554
+ "label": "Priority",
555
+ "type": "enum",
556
+ "options": ["high", "normal", "low"]
557
+ },
558
+ {
559
+ "key": "delivery-guarantee",
560
+ "label": "Delivery Guarantee",
561
+ "type": "enum",
562
+ "options": ["at-most-once", "at-least-once", "exactly-once"]
563
+ }
564
+ ]
565
+ },
566
+ "realtime": {
567
+ "label": "Realtime",
568
+ "brandColor": "#7dd3fc",
569
+ "symbolViewBox": "0 0 64 56",
570
+ "symbolSvg": "<circle cx='32' cy='36' r='4' fill='currentColor'/><path d='M20 48 a16 16 0 0 1 24 0' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round'/><path d='M12 56 a24 24 0 0 1 40 0' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round'/><path d='M28 24 a8 8 0 0 1 8 0' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round'/>",
571
+ "defaultTool": "pusher",
572
+ "attributes": [
573
+ {
574
+ "key": "transport",
575
+ "label": "Transport",
576
+ "type": "enum",
577
+ "options": ["websocket", "sse", "webrtc"]
578
+ },
579
+ {
580
+ "key": "fanout",
581
+ "label": "Fanout",
582
+ "type": "text",
583
+ "suggestions": ["1:1", "1:N", "broadcast"]
584
+ },
585
+ {
586
+ "key": "scale",
587
+ "label": "Scale",
588
+ "type": "text",
589
+ "suggestions": ["1k conns", "100k conns", "1M conns"]
590
+ },
591
+ { "key": "presence", "label": "Presence", "type": "boolean" }
592
+ ]
593
+ },
594
+ "workflow": {
595
+ "label": "Workflow / Scheduler",
596
+ "brandColor": "#fcd34d",
597
+ "symbolViewBox": "0 0 64 64",
598
+ "symbolSvg": "<circle cx='32' cy='32' r='26' fill='none' stroke='currentColor' stroke-width='4'/><path d='M32 16 v16 l10 6' fill='none' stroke='currentColor' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'/><path d='M52 10 a26 26 0 0 1 6 18' fill='none' stroke='currentColor' stroke-width='3.5' stroke-linecap='round'/><path d='M54 6 l4 8 -8 0' fill='currentColor'/>",
599
+ "defaultTool": "temporal",
600
+ "attributes": [
601
+ {
602
+ "key": "schedule",
603
+ "label": "Schedule",
604
+ "type": "text",
605
+ "suggestions": ["cron", "event-driven", "manual"]
606
+ },
607
+ { "key": "retries", "label": "Retries", "type": "number" },
608
+ { "key": "durable", "label": "Durable state", "type": "boolean" },
609
+ { "key": "timeout", "label": "Timeout", "type": "text" },
610
+ { "key": "idempotency", "label": "Idempotency", "type": "boolean" }
611
+ ]
612
+ }
613
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "HTTP": ["HTTPS", "REST", "GraphQL", "SOAP", "Webhook"],
3
+ "RPC": ["gRPC", "Thrift"],
4
+ "Realtime": ["WebSocket", "SSE"],
5
+ "Transport": ["TCP", "UDP"],
6
+ "Messaging": ["AMQP", "MQTT"],
7
+ "Data": ["CDC Stream", "ETL", "Batch"]
8
+ }