@dataparade/cli 0.0.2 → 0.0.4

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 (74) hide show
  1. package/README.md +25 -0
  2. package/dist/package.json +85 -0
  3. package/dist/src/ai-enrichment/agent-orchestrator.d.ts +2 -0
  4. package/dist/src/ai-enrichment/agent-orchestrator.js +8 -5
  5. package/dist/src/ai-enrichment/providers/hosted-worker-infer-provider.d.ts +10 -0
  6. package/dist/src/ai-enrichment/providers/hosted-worker-infer-provider.js +47 -0
  7. package/dist/src/cli.js +85 -1
  8. package/dist/src/config/env.js +2 -0
  9. package/dist/src/config/resolve.js +3 -0
  10. package/dist/src/config/scan-env.d.ts +1 -0
  11. package/dist/src/config/scan-env.js +5 -0
  12. package/dist/src/config/types.d.ts +1 -0
  13. package/dist/src/config/upload-env.d.ts +1 -0
  14. package/dist/src/config/upload-env.js +10 -0
  15. package/dist/src/config/validate-scan-ai.d.ts +1 -1
  16. package/dist/src/config/validate-scan-ai.js +5 -0
  17. package/dist/src/core/pipeline/ai-orchestrator-options.js +5 -0
  18. package/dist/src/core/pipeline/graph-mapping.js +5 -0
  19. package/dist/src/core/pipeline/infer-data-flow-protocol.d.ts +7 -0
  20. package/dist/src/core/pipeline/infer-data-flow-protocol.js +39 -0
  21. package/dist/src/core/schema/scan-config.schema.d.ts +2 -0
  22. package/dist/src/core/schema/scan-config.schema.js +2 -1
  23. package/dist/src/core/types/config.d.ts +3 -1
  24. package/dist/src/observability/scan-sentry.d.ts +1 -1
  25. package/dist/src/platform-api/dataparade-app-base-url.d.ts +7 -0
  26. package/dist/src/platform-api/dataparade-app-base-url.js +14 -0
  27. package/dist/src/platform-api/upload-client.d.ts +3 -0
  28. package/dist/src/platform-api/upload-client.js +38 -0
  29. package/dist/src/platform-api/upload.types.d.ts +10 -0
  30. package/dist/src/platform-api/upload.types.js +2 -0
  31. package/dist/src/upload/build-preview-url.d.ts +1 -0
  32. package/dist/src/upload/build-preview-url.js +10 -0
  33. package/dist/src/upload/run-upload.d.ts +2 -0
  34. package/dist/src/upload/run-upload.js +18 -0
  35. package/dist/src/upload/types.d.ts +11 -0
  36. package/dist/src/upload/types.js +2 -0
  37. package/dist/tests/unit/analyzers/typescript/property-detection.spec.js +22 -0
  38. package/dist/tests/unit/cli/scan-quota-flow.spec.js +2 -0
  39. package/dist/tests/unit/config/upload-env.spec.d.ts +1 -0
  40. package/dist/tests/unit/config/upload-env.spec.js +12 -0
  41. package/dist/tests/unit/config/validate-scan-ai.spec.js +8 -0
  42. package/dist/tests/unit/core/graph-mapping.spec.js +52 -0
  43. package/dist/tests/unit/core/infer-data-flow-protocol.spec.d.ts +1 -0
  44. package/dist/tests/unit/core/infer-data-flow-protocol.spec.js +37 -0
  45. package/dist/tests/unit/platform-api/dataparade-app-base-url.spec.d.ts +1 -0
  46. package/dist/tests/unit/platform-api/dataparade-app-base-url.spec.js +13 -0
  47. package/dist/tests/unit/platform-api/upload-client.spec.d.ts +1 -0
  48. package/dist/tests/unit/platform-api/upload-client.spec.js +40 -0
  49. package/dist/tests/unit/publish-manifest.spec.d.ts +1 -0
  50. package/dist/tests/unit/publish-manifest.spec.js +18 -0
  51. package/dist/tests/unit/upload/build-preview-url.spec.d.ts +1 -0
  52. package/dist/tests/unit/upload/build-preview-url.spec.js +19 -0
  53. package/package.json +4 -3
  54. package/patterns/README.md +322 -0
  55. package/patterns/actor.patterns.yaml +51 -0
  56. package/patterns/aws-terraform-catalog.snapshot.json +1760 -0
  57. package/patterns/aws-terraform-service-hints.generated.json +1446 -0
  58. package/patterns/azure-terraform-catalog.snapshot.json +1195 -0
  59. package/patterns/azure-terraform-service-hints.generated.json +864 -0
  60. package/patterns/classifier/actors.classifier.yaml +17 -0
  61. package/patterns/classifier/components.classifier.yaml +110 -0
  62. package/patterns/classifier/third-party.classifier.yaml +169 -0
  63. package/patterns/kubernetes-terraform-catalog.snapshot.json +94 -0
  64. package/patterns/kubernetes-terraform-service-hints.generated.json +258 -0
  65. package/patterns/non-pii-signals.rules.yaml +84 -0
  66. package/patterns/pii-signals.rules.yaml +115 -0
  67. package/patterns/property.patterns.yaml +431 -0
  68. package/patterns/provider-topology.rules.yaml +765 -0
  69. package/patterns/python.md +211 -0
  70. package/patterns/python.patterns.yaml +160 -0
  71. package/patterns/terraform.md +37 -0
  72. package/patterns/terraform.patterns.yaml +495 -0
  73. package/patterns/third-party.patterns.yaml +167 -0
  74. package/patterns/typescript.patterns.yaml +139 -0
@@ -0,0 +1,495 @@
1
+ # Terraform structural patterns (block syntax, references, type hints, satellites).
2
+ # All matching rules live here — analyzers compile these at load time.
3
+
4
+ version: 1
5
+
6
+ syntax:
7
+ # Line must look like a top-level Terraform block before deeper regex checks.
8
+ block_line_probe_regex: "^(?:resource|data|module|provider)\\s+"
9
+ block_patterns:
10
+ - kind: resource
11
+ regex: '^resource\s+"([^"]+)"\s+"([^"]+)"\s*\{\s*$'
12
+ resource_type_group: 1
13
+ block_name_group: 2
14
+ - kind: data
15
+ regex: '^data\s+"([^"]+)"\s+"([^"]+)"\s*\{\s*$'
16
+ resource_type_group: 1
17
+ block_name_group: 2
18
+ - kind: module
19
+ regex: '^module\s+"([^"]+)"\s*\{\s*$'
20
+ block_name_group: 1
21
+ - kind: provider
22
+ regex: '^provider\s+"([^"]+)"\s*\{\s*$'
23
+ block_name_group: 1
24
+
25
+ # First-token skip list for generic reference extraction (HCL reserved / meta).
26
+ reserved_reference_first_tokens:
27
+ - var
28
+ - local
29
+ - module
30
+ - each
31
+ - path
32
+ - terraform
33
+ - count
34
+
35
+ # Order: first matching regex wins for each body span (global iteration).
36
+ reference_patterns:
37
+ - id: data_block_refs
38
+ regex: "\\bdata\\.([a-z0-9_]+)\\.([a-z0-9_]+)\\b"
39
+ flags: gi
40
+ template: "data.$1.$2"
41
+ - id: resource_and_intermediate_attr_refs
42
+ regex: "\\b([a-z][a-z0-9_]*)\\.([a-z0-9_]+)(?:\\.[a-z0-9_]+)?\\b"
43
+ flags: gi
44
+ template: "$1.$2"
45
+ skip_when_first_token_reserved: true
46
+
47
+ # Satellite resources attach to an existing primary resource (same file) and do not become separate nodes.
48
+ satellite_resource_rules:
49
+ - id: s3_bucket_scoped_attachments
50
+ child_resource_type_regex: '^aws_s3_bucket_(acl|ownership_controls|logging|versioning|public_access_block|server_side_encryption_configuration|lifecycle_configuration|replication_configuration|website|cors_configuration|policy|object_lock_configuration|notification)$'
51
+ parent_address_from_body_line:
52
+ regex: '^\s*bucket\s*=\s*((?:[a-z][a-z0-9_]*)\.([a-z0-9_]+))(?:\.[a-z0-9_.]+)?\s*$'
53
+ capture_group: 1
54
+
55
+ # resource_type regex: first match wins (list order matters).
56
+ resource_type_hints:
57
+ - id: aws_db_instance
58
+ resource_type_regex: "^aws_db_instance$"
59
+ componentSubType: database
60
+ cloud_provider: aws
61
+ - id: aws_rds_cluster
62
+ resource_type_regex: "^aws_rds_cluster$"
63
+ componentSubType: database
64
+ cloud_provider: aws
65
+ - id: aws_dynamodb_table
66
+ resource_type_regex: "^aws_dynamodb_table$"
67
+ componentSubType: database
68
+ cloud_provider: aws
69
+ - id: aws_elasticache_cluster
70
+ resource_type_regex: "^aws_elasticache_cluster$"
71
+ componentSubType: cache
72
+ cloud_provider: aws
73
+ - id: aws_s3_bucket_exact
74
+ resource_type_regex: "^aws_s3_bucket$"
75
+ componentSubType: storage
76
+ cloud_provider: aws
77
+ - id: aws_s3_family
78
+ resource_type_regex: "^aws_s3_"
79
+ componentSubType: storage
80
+ cloud_provider: aws
81
+ - id: aws_lambda_function
82
+ resource_type_regex: "^aws_lambda_function$"
83
+ componentSubType: function
84
+ cloud_provider: aws
85
+ - id: aws_sqs_queue
86
+ resource_type_regex: "^aws_sqs_queue$"
87
+ componentSubType: queue
88
+ cloud_provider: aws
89
+ - id: aws_sns_topic
90
+ resource_type_regex: "^aws_sns_topic$"
91
+ componentSubType: queue
92
+ cloud_provider: aws
93
+ - id: aws_api_gateway_rest_api
94
+ resource_type_regex: "^aws_api_gateway_rest_api$"
95
+ componentSubType: api
96
+ cloud_provider: aws
97
+ - id: aws_api_gateway_resource
98
+ resource_type_regex: "^aws_api_gateway_resource$"
99
+ componentSubType: api
100
+ cloud_provider: aws
101
+ - id: aws_api_gateway_method
102
+ resource_type_regex: "^aws_api_gateway_method$"
103
+ componentSubType: api
104
+ cloud_provider: aws
105
+ - id: aws_api_gateway_integration
106
+ resource_type_regex: "^aws_api_gateway_integration$"
107
+ componentSubType: api
108
+ cloud_provider: aws
109
+ - id: aws_api_gateway_deployment
110
+ resource_type_regex: "^aws_api_gateway_deployment$"
111
+ componentSubType: api
112
+ cloud_provider: aws
113
+ - id: aws_api_gatewayv2_api
114
+ resource_type_regex: "^aws_api_gatewayv2_api$"
115
+ componentSubType: api
116
+ cloud_provider: aws
117
+ - id: aws_cognito_user_pool
118
+ resource_type_regex: "^aws_cognito_user_pool$"
119
+ componentSubType: auth_service
120
+ cloud_provider: aws
121
+ - id: aws_iam_family
122
+ resource_type_regex: "^aws_iam_"
123
+ componentSubType: auth_service
124
+ cloud_provider: aws
125
+ - id: aws_lambda_permission
126
+ resource_type_regex: "^aws_lambda_permission$"
127
+ componentSubType: auth_service
128
+ cloud_provider: aws
129
+ - id: aws_ecs_service
130
+ resource_type_regex: "^aws_ecs_service$"
131
+ componentSubType: container
132
+ cloud_provider: aws
133
+ - id: aws_apprunner_service
134
+ resource_type_regex: "^aws_apprunner_service$"
135
+ componentSubType: service
136
+ cloud_provider: aws
137
+ - id: aws_eks_cluster
138
+ resource_type_regex: "^aws_eks_cluster$"
139
+ componentSubType: container
140
+ cloud_provider: aws
141
+ # AWS — extended families (parity with TS/Python db / cache / messaging / compute / config).
142
+ - id: aws_rds_family
143
+ resource_type_regex: "^aws_rds_"
144
+ componentSubType: database
145
+ cloud_provider: aws
146
+ - id: aws_docdb_family
147
+ resource_type_regex: "^aws_docdb_"
148
+ componentSubType: database
149
+ cloud_provider: aws
150
+ - id: aws_neptune_family
151
+ resource_type_regex: "^aws_neptune_"
152
+ componentSubType: database
153
+ cloud_provider: aws
154
+ - id: aws_redshift_family
155
+ resource_type_regex: "^aws_redshift_"
156
+ componentSubType: database
157
+ cloud_provider: aws
158
+ - id: aws_timestream_family
159
+ resource_type_regex: "^aws_timestream"
160
+ componentSubType: database
161
+ cloud_provider: aws
162
+ - id: aws_qldb_family
163
+ resource_type_regex: "^aws_qldb_"
164
+ componentSubType: database
165
+ cloud_provider: aws
166
+ - id: aws_dynamodb_family
167
+ resource_type_regex: "^aws_dynamodb_"
168
+ componentSubType: database
169
+ cloud_provider: aws
170
+ - id: aws_elasticache_family
171
+ resource_type_regex: "^aws_elasticache_"
172
+ componentSubType: cache
173
+ cloud_provider: aws
174
+ - id: aws_memorydb_family
175
+ resource_type_regex: "^aws_memorydb_"
176
+ componentSubType: cache
177
+ cloud_provider: aws
178
+ - id: aws_dax_family
179
+ resource_type_regex: "^aws_dax_"
180
+ componentSubType: cache
181
+ cloud_provider: aws
182
+ - id: aws_kinesis_family
183
+ resource_type_regex: "^aws_kinesis_"
184
+ componentSubType: queue
185
+ cloud_provider: aws
186
+ - id: aws_msk_family
187
+ resource_type_regex: "^aws_msk_"
188
+ componentSubType: queue
189
+ cloud_provider: aws
190
+ - id: aws_eventbridge_family
191
+ resource_type_regex: "^aws_cloudwatch_event_"
192
+ componentSubType: queue
193
+ cloud_provider: aws
194
+ - id: aws_scheduler_family
195
+ resource_type_regex: "^aws_scheduler_"
196
+ componentSubType: queue
197
+ cloud_provider: aws
198
+ - id: aws_ecs_family
199
+ resource_type_regex: "^aws_ecs_"
200
+ componentSubType: container
201
+ cloud_provider: aws
202
+ - id: aws_eks_family
203
+ resource_type_regex: "^aws_eks_"
204
+ componentSubType: container
205
+ cloud_provider: aws
206
+ - id: aws_elastic_beanstalk_family
207
+ resource_type_regex: "^aws_elastic_beanstalk_"
208
+ componentSubType: container
209
+ cloud_provider: aws
210
+ - id: aws_batch_family
211
+ resource_type_regex: "^aws_batch_"
212
+ componentSubType: container
213
+ cloud_provider: aws
214
+ - id: aws_apigatewayv2_family
215
+ resource_type_regex: "^aws_apigatewayv2_"
216
+ componentSubType: api
217
+ cloud_provider: aws
218
+ - id: aws_cognito_family
219
+ resource_type_regex: "^aws_cognito_"
220
+ componentSubType: auth_service
221
+ cloud_provider: aws
222
+ - id: aws_secretsmanager_family
223
+ resource_type_regex: "^aws_secretsmanager_"
224
+ componentSubType: config
225
+ cloud_provider: aws
226
+ - id: aws_ssm_parameter_family
227
+ resource_type_regex: "^aws_ssm_parameter"
228
+ componentSubType: config
229
+ cloud_provider: aws
230
+ - id: aws_ssm_document
231
+ resource_type_regex: "^aws_ssm_document$"
232
+ componentSubType: config
233
+ cloud_provider: aws
234
+ - id: hashicorp_random_family
235
+ resource_type_regex: "^random_"
236
+ componentSubType: application
237
+ cloud_provider: terraform
238
+ - id: archive_file
239
+ resource_type_regex: "^archive_file$"
240
+ componentSubType: application
241
+ cloud_provider: terraform
242
+ - id: google_sql_database_instance
243
+ resource_type_regex: "^google_sql_database_instance$"
244
+ componentSubType: database
245
+ cloud_provider: gcp
246
+ - id: google_storage_bucket
247
+ resource_type_regex: "^google_storage_bucket$"
248
+ componentSubType: storage
249
+ cloud_provider: gcp
250
+ - id: google_cloudfunctions_function
251
+ resource_type_regex: "^google_cloudfunctions_function$"
252
+ componentSubType: function
253
+ cloud_provider: gcp
254
+ - id: google_pubsub_topic
255
+ resource_type_regex: "^google_pubsub_topic$"
256
+ componentSubType: queue
257
+ cloud_provider: gcp
258
+ - id: google_bigquery_family
259
+ resource_type_regex: "^google_bigquery_"
260
+ componentSubType: database
261
+ cloud_provider: gcp
262
+ - id: google_spanner_family
263
+ resource_type_regex: "^google_spanner_"
264
+ componentSubType: database
265
+ cloud_provider: gcp
266
+ - id: google_firestore_family
267
+ resource_type_regex: "^google_firestore_"
268
+ componentSubType: database
269
+ cloud_provider: gcp
270
+ - id: google_datastore_family
271
+ resource_type_regex: "^google_datastore_"
272
+ componentSubType: database
273
+ cloud_provider: gcp
274
+ - id: google_redis_instance
275
+ resource_type_regex: "^google_redis_instance$"
276
+ componentSubType: cache
277
+ cloud_provider: gcp
278
+ - id: google_memcache_instance
279
+ resource_type_regex: "^google_memcache_instance$"
280
+ componentSubType: cache
281
+ cloud_provider: gcp
282
+ - id: google_storage_family
283
+ resource_type_regex: "^google_storage_"
284
+ componentSubType: storage
285
+ cloud_provider: gcp
286
+ - id: google_pubsub_family
287
+ resource_type_regex: "^google_pubsub_"
288
+ componentSubType: queue
289
+ cloud_provider: gcp
290
+ - id: google_cloud_tasks_family
291
+ resource_type_regex: "^google_cloud_tasks_"
292
+ componentSubType: queue
293
+ cloud_provider: gcp
294
+ - id: google_cloud_scheduler_family
295
+ resource_type_regex: "^google_cloud_scheduler_"
296
+ componentSubType: queue
297
+ cloud_provider: gcp
298
+ - id: google_api_gateway_family
299
+ resource_type_regex: "^google_api_gateway_"
300
+ componentSubType: api
301
+ cloud_provider: gcp
302
+ - id: google_apigateway_family
303
+ resource_type_regex: "^google_apigateway_"
304
+ componentSubType: api
305
+ cloud_provider: gcp
306
+ - id: google_endpoints_service
307
+ resource_type_regex: "^google_endpoints_service$"
308
+ componentSubType: api
309
+ cloud_provider: gcp
310
+ - id: google_cloud_run_service
311
+ resource_type_regex: "^google_cloud_run_(v2_)?service$"
312
+ componentSubType: service
313
+ cloud_provider: gcp
314
+ - id: google_cloud_run_family
315
+ resource_type_regex: "^google_cloud_run_"
316
+ componentSubType: container
317
+ cloud_provider: gcp
318
+ - id: google_container_cluster
319
+ resource_type_regex: "^google_container_cluster$"
320
+ componentSubType: container
321
+ cloud_provider: gcp
322
+ - id: google_container_node_pool
323
+ resource_type_regex: "^google_container_node_pool$"
324
+ componentSubType: container
325
+ cloud_provider: gcp
326
+ - id: google_cloudfunctions2_family
327
+ resource_type_regex: "^google_cloudfunctions2_"
328
+ componentSubType: function
329
+ cloud_provider: gcp
330
+ - id: google_iam_family
331
+ resource_type_regex: "^google_(project|organization|folder|billing_account|service_account)_iam_"
332
+ componentSubType: auth_service
333
+ cloud_provider: gcp
334
+ - id: google_service_account
335
+ resource_type_regex: "^google_service_account$"
336
+ componentSubType: auth_service
337
+ cloud_provider: gcp
338
+ - id: google_kms_family
339
+ resource_type_regex: "^google_kms_"
340
+ componentSubType: auth_service
341
+ cloud_provider: gcp
342
+ - id: google_secret_manager_family
343
+ resource_type_regex: "^google_secret_manager_"
344
+ componentSubType: config
345
+ cloud_provider: gcp
346
+ - id: azurerm_sql_database
347
+ resource_type_regex: "^azurerm_sql_database$"
348
+ componentSubType: database
349
+ cloud_provider: azure
350
+ - id: azurerm_storage_account
351
+ resource_type_regex: "^azurerm_storage_account$"
352
+ componentSubType: storage
353
+ cloud_provider: azure
354
+ - id: azurerm_function_app
355
+ resource_type_regex: "^azurerm_function_app$"
356
+ componentSubType: function
357
+ cloud_provider: azure
358
+ - id: azurerm_linux_function_app
359
+ resource_type_regex: "^azurerm_linux_function_app$"
360
+ componentSubType: function
361
+ cloud_provider: azure
362
+ - id: azurerm_windows_function_app
363
+ resource_type_regex: "^azurerm_windows_function_app$"
364
+ componentSubType: function
365
+ cloud_provider: azure
366
+ - id: azurerm_linux_web_app
367
+ resource_type_regex: "^azurerm_linux_web_app$"
368
+ componentSubType: service
369
+ cloud_provider: azure
370
+ - id: azurerm_windows_web_app
371
+ resource_type_regex: "^azurerm_windows_web_app$"
372
+ componentSubType: service
373
+ cloud_provider: azure
374
+ - id: azurerm_cosmosdb_family
375
+ resource_type_regex: "^azurerm_cosmosdb_"
376
+ componentSubType: database
377
+ cloud_provider: azure
378
+ - id: azurerm_postgresql_family
379
+ resource_type_regex: "^azurerm_postgresql_"
380
+ componentSubType: database
381
+ cloud_provider: azure
382
+ - id: azurerm_mysql_family
383
+ resource_type_regex: "^azurerm_mysql_"
384
+ componentSubType: database
385
+ cloud_provider: azure
386
+ - id: azurerm_mariadb_family
387
+ resource_type_regex: "^azurerm_mariadb_"
388
+ componentSubType: database
389
+ cloud_provider: azure
390
+ - id: azurerm_mssql_family
391
+ resource_type_regex: "^azurerm_mssql_"
392
+ componentSubType: database
393
+ cloud_provider: azure
394
+ - id: azurerm_redis_family
395
+ resource_type_regex: "^azurerm_redis_"
396
+ componentSubType: cache
397
+ cloud_provider: azure
398
+ - id: azurerm_kusto_family
399
+ resource_type_regex: "^azurerm_kusto_"
400
+ componentSubType: database
401
+ cloud_provider: azure
402
+ - id: azurerm_storage_family
403
+ resource_type_regex: "^azurerm_storage_"
404
+ componentSubType: storage
405
+ cloud_provider: azure
406
+ - id: azurerm_servicebus_family
407
+ resource_type_regex: "^azurerm_servicebus_"
408
+ componentSubType: queue
409
+ cloud_provider: azure
410
+ - id: azurerm_eventhub_family
411
+ resource_type_regex: "^azurerm_eventhub"
412
+ componentSubType: queue
413
+ cloud_provider: azure
414
+ - id: azurerm_relay_family
415
+ resource_type_regex: "^azurerm_relay_"
416
+ componentSubType: queue
417
+ cloud_provider: azure
418
+ - id: azurerm_api_management
419
+ resource_type_regex: "^azurerm_api_management"
420
+ componentSubType: api
421
+ cloud_provider: azure
422
+ - id: azurerm_kubernetes_cluster
423
+ resource_type_regex: "^azurerm_kubernetes_cluster$"
424
+ componentSubType: container
425
+ cloud_provider: azure
426
+ - id: azurerm_container_family
427
+ resource_type_regex: "^azurerm_container_"
428
+ componentSubType: container
429
+ cloud_provider: azure
430
+ - id: azurerm_role_family
431
+ resource_type_regex: "^azurerm_(role_assignment|role_definition|user_assigned_identity)"
432
+ componentSubType: auth_service
433
+ cloud_provider: azure
434
+ - id: azurerm_key_vault_family
435
+ resource_type_regex: "^azurerm_key_vault"
436
+ componentSubType: config
437
+ cloud_provider: azure
438
+ - id: azapi_resource
439
+ resource_type_regex: "^azapi_"
440
+ componentSubType: application
441
+ cloud_provider: azure
442
+ - id: aws_default_family
443
+ resource_type_regex: "^aws_"
444
+ componentSubType: application
445
+ cloud_provider: aws
446
+ - id: google_default_family
447
+ resource_type_regex: "^google_"
448
+ componentSubType: application
449
+ cloud_provider: gcp
450
+ - id: azurerm_default_family
451
+ resource_type_regex: "^azurerm_"
452
+ componentSubType: application
453
+ cloud_provider: azure
454
+ - id: kubernetes_deployment
455
+ resource_type_regex: "^kubernetes_deployment$"
456
+ componentSubType: service
457
+ cloud_provider: kubernetes
458
+ - id: kubernetes_service
459
+ resource_type_regex: "^kubernetes_service$"
460
+ componentSubType: api
461
+ cloud_provider: kubernetes
462
+ - id: kubernetes_ingress_v1
463
+ resource_type_regex: "^kubernetes_ingress_v1$"
464
+ componentSubType: api
465
+ cloud_provider: kubernetes
466
+ - id: kubernetes_secret
467
+ resource_type_regex: "^kubernetes_secret$"
468
+ componentSubType: config
469
+ cloud_provider: kubernetes
470
+ - id: kubernetes_persistent_volume_claim
471
+ resource_type_regex: "^kubernetes_persistent_volume_claim$"
472
+ componentSubType: storage
473
+ cloud_provider: kubernetes
474
+ - id: kubernetes_namespace
475
+ resource_type_regex: "^kubernetes_namespace$"
476
+ componentSubType: container
477
+ cloud_provider: kubernetes
478
+ - id: kubernetes_default_family
479
+ resource_type_regex: "^kubernetes_"
480
+ componentSubType: service
481
+ cloud_provider: kubernetes
482
+ - id: fallback
483
+ resource_type_regex: ".*"
484
+ componentSubType: application
485
+ cloud_provider: unknown
486
+
487
+ provider_service_names:
488
+ - provider_key_regex: "^aws$"
489
+ serviceName: Amazon Web Services
490
+ - provider_key_regex: "^google$"
491
+ serviceName: Google Cloud
492
+ - provider_key_regex: "^(azurerm|azapi)$"
493
+ serviceName: Microsoft Azure
494
+ - provider_key_regex: "^kubernetes$"
495
+ serviceName: Kubernetes
@@ -0,0 +1,167 @@
1
+ ---
2
+ # Shared third-party detection config for external API calls / SDKs.
3
+ # Language-agnostic structure; TS/JS analyzer is the first consumer.
4
+ #
5
+ # This file defines *how* to recognize external API calls and known services
6
+ # (Stripe, SendGrid, Twilio, etc.). The classifier then uses
7
+ # classifier/third-party.classifier.yaml to map serviceName → third_party components.
8
+
9
+ http_clients:
10
+ - clientId: fetch_axios_got
11
+ patternId: external_api_call
12
+ regexes:
13
+ - "\\b(fetch|axios\\.(get|post|put|delete|patch)|got)\\s*\\(\\s*[\"'`](https?:\\/\\/[^\"'`]+)[\"'`]"
14
+ confidence: 0.9
15
+ # Literal https URL in object config (e.g. axios({ url: "https://api.vendor/..." })).
16
+ - clientId: object_url_literal_https
17
+ patternId: external_api_call
18
+ regexes:
19
+ - "\\b(url)()\\s*:\\s*[\"'`](https?:\\/\\/[^\"'`]+)[\"'`]"
20
+ confidence: 0.8
21
+
22
+ # url_host_patterns: optional overrides when the auto-derived registrable host
23
+ # (last two DNS labels) is not the canonical catalog key — e.g. api.stripe.com → stripe.
24
+ # Unknown vendors do not need entries: detection falls back to hostname-based keys.
25
+ services:
26
+ - serviceName: stripe
27
+ patternId: external_api_call
28
+ importFragments:
29
+ - stripe
30
+ confidence: 0.85
31
+ url_host_patterns:
32
+ - stripe.com
33
+ - api.stripe.com
34
+ - serviceName: sendgrid
35
+ patternId: external_api_call
36
+ importFragments:
37
+ - sendgrid
38
+ confidence: 0.85
39
+ url_host_patterns:
40
+ - sendgrid.com
41
+ - serviceName: twilio
42
+ patternId: external_api_call
43
+ importFragments:
44
+ - twilio
45
+ confidence: 0.85
46
+ url_host_patterns:
47
+ - twilio.com
48
+ - api.twilio.com
49
+ - serviceName: openai
50
+ patternId: external_api_call
51
+ importFragments:
52
+ - openai
53
+ confidence: 0.85
54
+ url_host_patterns:
55
+ - openai.com
56
+ - api.openai.com
57
+ - serviceName: anthropic
58
+ patternId: external_api_call
59
+ importFragments:
60
+ - '@anthropic-ai/'
61
+ - anthropic
62
+ confidence: 0.85
63
+ url_host_patterns:
64
+ - anthropic.com
65
+ - api.anthropic.com
66
+ - serviceName: openrouter
67
+ patternId: external_api_call
68
+ importFragments:
69
+ - openrouter
70
+ - '@openrouter/'
71
+ confidence: 0.85
72
+ url_host_patterns:
73
+ - openrouter.ai
74
+ - openrouter.com
75
+ - serviceName: google_ai
76
+ patternId: external_api_call
77
+ importFragments:
78
+ - '@google/genai'
79
+ - '@google-ai/'
80
+ - '@google-cloud/vertexai'
81
+ - vertexai
82
+ confidence: 0.85
83
+ url_host_patterns:
84
+ - generativelanguage.googleapis.com
85
+ - aiplatform.googleapis.com
86
+ - vertexai.googleapis.com
87
+ - serviceName: aws
88
+ patternId: external_api_call
89
+ importFragments:
90
+ - "@aws-sdk/"
91
+ - boto3
92
+ confidence: 0.85
93
+ url_host_patterns:
94
+ - amazonaws.com
95
+ - aws.amazon.com
96
+ - serviceName: auth0
97
+ patternId: external_api_call
98
+ importFragments:
99
+ - "@auth0/"
100
+ - "auth0"
101
+ confidence: 0.85
102
+ url_host_patterns:
103
+ - auth0.com
104
+ - auth0
105
+ - serviceName: firebase
106
+ patternId: external_api_call
107
+ importFragments:
108
+ - firebase
109
+ confidence: 0.85
110
+ url_host_patterns:
111
+ - firebase.com
112
+ - firebase.google
113
+ - firebasestorage.googleapis.com
114
+
115
+ # Database / BaaS platforms used for auth, storage, and database.
116
+ - serviceName: supabase
117
+ patternId: external_api_call
118
+ importFragments:
119
+ - "@supabase/supabase-js"
120
+ - supabase
121
+ - supabase-py
122
+ - supabase_py
123
+ confidence: 0.85
124
+ url_host_patterns:
125
+ - supabase.co
126
+ - supabase.com
127
+
128
+ # Additional payment processors.
129
+ - serviceName: braintree
130
+ patternId: external_api_call
131
+ importFragments:
132
+ - braintree
133
+ confidence: 0.85
134
+ url_host_patterns:
135
+ - braintreepayments.com
136
+ - api.braintreepayments.com
137
+
138
+ - serviceName: adyen
139
+ patternId: external_api_call
140
+ importFragments:
141
+ - adyen
142
+ confidence: 0.85
143
+ url_host_patterns:
144
+ - adyen.com
145
+ - checkout.adyen.com
146
+
147
+ - serviceName: paypal
148
+ patternId: external_api_call
149
+ importFragments:
150
+ - paypal
151
+ confidence: 0.85
152
+ url_host_patterns:
153
+ - paypal.com
154
+ - api.paypal.com
155
+ - paypalobjects.com
156
+
157
+ # Error monitoring / observability.
158
+ - serviceName: sentry
159
+ patternId: external_api_call
160
+ importFragments:
161
+ - "@sentry/"
162
+ - sentry
163
+ confidence: 0.85
164
+ url_host_patterns:
165
+ - sentry.io
166
+ - ingest.sentry.io
167
+