@api-doctor/cli 0.0.1 → 0.0.3

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,1316 @@
1
+ declare const plugin: {
2
+ readonly meta: {
3
+ readonly name: "@api-doctor/cli";
4
+ readonly version: "0.0.1";
5
+ };
6
+ readonly rules: {
7
+ readonly 'resend-webhook-signature': {
8
+ meta: {
9
+ type: string;
10
+ docs: {
11
+ description: string;
12
+ category: string;
13
+ cwe: string;
14
+ owasp: string;
15
+ rationale: string;
16
+ docsUrl: string;
17
+ recommended: boolean;
18
+ };
19
+ messages: {
20
+ missingVerification: string;
21
+ };
22
+ };
23
+ create(context: any): {
24
+ ImportDeclaration(node: any): void;
25
+ ExportNamedDeclaration(node: any): void;
26
+ CallExpression(node: any): void;
27
+ MemberExpression(node: any): void;
28
+ 'Program:exit'(): void;
29
+ };
30
+ };
31
+ readonly 'resend-api-key-hardcoded': {
32
+ meta: {
33
+ type: string;
34
+ docs: {
35
+ description: string;
36
+ category: string;
37
+ cwe: string;
38
+ owasp: string;
39
+ rationale: string;
40
+ docsUrl: string;
41
+ recommended: boolean;
42
+ };
43
+ messages: {
44
+ hardcodedApiKey: string;
45
+ };
46
+ schema: never[];
47
+ };
48
+ create(context: any): {
49
+ Literal(node: any): void;
50
+ TemplateElement(node: any): void;
51
+ };
52
+ };
53
+ readonly 'resend-api-key-in-client-bundle': {
54
+ meta: {
55
+ type: string;
56
+ docs: {
57
+ description: string;
58
+ category: string;
59
+ cwe: string;
60
+ owasp: string;
61
+ rationale: string;
62
+ docsUrl: string;
63
+ recommended: boolean;
64
+ };
65
+ messages: {
66
+ clientBundleImport: string;
67
+ };
68
+ schema: never[];
69
+ };
70
+ create(context: any): {
71
+ Program(node: any): void;
72
+ ImportDeclaration(node: any): void;
73
+ JSXElement(): void;
74
+ JSXFragment(): void;
75
+ 'Program:exit'(): void;
76
+ };
77
+ };
78
+ readonly 'resend-marketing-via-batch-send': {
79
+ meta: {
80
+ type: string;
81
+ docs: {
82
+ description: string;
83
+ category: string;
84
+ rationale: string;
85
+ docsUrl: string;
86
+ recommended: boolean;
87
+ };
88
+ messages: {
89
+ marketingViaBatch: string;
90
+ };
91
+ schema: never[];
92
+ };
93
+ create(context: any): {
94
+ CallExpression(node: any): void;
95
+ };
96
+ };
97
+ readonly 'resend-marketing-missing-unsubscribe': {
98
+ meta: {
99
+ type: string;
100
+ docs: {
101
+ description: string;
102
+ category: string;
103
+ rationale: string;
104
+ docsUrl: string;
105
+ recommended: boolean;
106
+ };
107
+ messages: {
108
+ missingUnsubscribe: string;
109
+ };
110
+ schema: never[];
111
+ };
112
+ create(context: any): {
113
+ CallExpression(node: any): void;
114
+ };
115
+ };
116
+ readonly 'resend-test-domain-in-production-path': {
117
+ meta: {
118
+ type: string;
119
+ docs: {
120
+ description: string;
121
+ category: string;
122
+ rationale: string;
123
+ docsUrl: string;
124
+ recommended: boolean;
125
+ };
126
+ messages: {
127
+ testDomain: string;
128
+ };
129
+ schema: never[];
130
+ };
131
+ create(context: any): {
132
+ Literal?: undefined;
133
+ TemplateElement?: undefined;
134
+ } | {
135
+ Literal(node: any): void;
136
+ TemplateElement(node: any): void;
137
+ };
138
+ };
139
+ readonly 'resend-from-address-not-friendly-format': {
140
+ meta: {
141
+ type: string;
142
+ docs: {
143
+ description: string;
144
+ category: string;
145
+ rationale: string;
146
+ docsUrl: string;
147
+ recommended: boolean;
148
+ };
149
+ messages: {
150
+ bareFromAddress: string;
151
+ };
152
+ schema: never[];
153
+ };
154
+ create(context: any): {
155
+ CallExpression(node: any): void;
156
+ };
157
+ };
158
+ readonly 'resend-batch-size-not-enforced': {
159
+ meta: {
160
+ type: string;
161
+ docs: {
162
+ description: string;
163
+ category: string;
164
+ rationale: string;
165
+ docsUrl: string;
166
+ recommended: boolean;
167
+ };
168
+ messages: {
169
+ batchSizeNotEnforced: string;
170
+ };
171
+ schema: never[];
172
+ };
173
+ create(context: any): {
174
+ FunctionDeclaration(node: any): void;
175
+ FunctionExpression(node: any): void;
176
+ ArrowFunctionExpression(node: any): void;
177
+ ForStatement(node: any): void;
178
+ ForOfStatement(node: any): void;
179
+ ForInStatement(node: any): void;
180
+ WhileStatement(node: any): void;
181
+ DoWhileStatement(node: any): void;
182
+ BinaryExpression(node: any): void;
183
+ CallExpression(node: any): void;
184
+ 'Program:exit'(): void;
185
+ };
186
+ };
187
+ readonly 'resend-missing-idempotency-key': {
188
+ meta: {
189
+ type: string;
190
+ docs: {
191
+ description: string;
192
+ category: string;
193
+ rationale: string;
194
+ docsUrl: string;
195
+ recommended: boolean;
196
+ };
197
+ messages: {
198
+ missingIdempotencyKey: string;
199
+ };
200
+ schema: never[];
201
+ };
202
+ create(context: any): {
203
+ CallExpression(node: any): void;
204
+ };
205
+ };
206
+ readonly 'resend-no-error-code-mapping': {
207
+ meta: {
208
+ type: string;
209
+ docs: {
210
+ description: string;
211
+ category: string;
212
+ rationale: string;
213
+ docsUrl: string;
214
+ recommended: boolean;
215
+ };
216
+ messages: {
217
+ noErrorCodeMapping: string;
218
+ };
219
+ schema: never[];
220
+ };
221
+ create(context: any): {
222
+ FunctionDeclaration(node: any): void;
223
+ FunctionExpression(node: any): void;
224
+ ArrowFunctionExpression(node: any): void;
225
+ VariableDeclarator(node: any): void;
226
+ IfStatement(node: any): void;
227
+ CallExpression(node: any): void;
228
+ 'Program:exit'(): void;
229
+ };
230
+ };
231
+ readonly 'resend-webhook-no-idempotency': {
232
+ meta: {
233
+ type: string;
234
+ docs: {
235
+ description: string;
236
+ category: string;
237
+ rationale: string;
238
+ docsUrl: string;
239
+ recommended: boolean;
240
+ };
241
+ messages: {
242
+ noIdempotency: string;
243
+ };
244
+ schema: never[];
245
+ };
246
+ create(context: any): {
247
+ ImportDeclaration(node: any): void;
248
+ ExportNamedDeclaration(node: any): void;
249
+ NewExpression(node: any): void;
250
+ CallExpression(node: any): void;
251
+ MemberExpression(node: any): void;
252
+ 'Program:exit'(): void;
253
+ };
254
+ };
255
+ readonly 'resend-missing-tags': {
256
+ meta: {
257
+ type: string;
258
+ docs: {
259
+ description: string;
260
+ category: string;
261
+ rationale: string;
262
+ docsUrl: string;
263
+ recommended: boolean;
264
+ };
265
+ messages: {
266
+ missingTags: string;
267
+ };
268
+ schema: never[];
269
+ };
270
+ create(context: any): {
271
+ CallExpression(node: any): void;
272
+ };
273
+ };
274
+ readonly 'resend-request-id-not-logged': {
275
+ meta: {
276
+ type: string;
277
+ docs: {
278
+ description: string;
279
+ category: string;
280
+ rationale: string;
281
+ docsUrl: string;
282
+ recommended: boolean;
283
+ };
284
+ messages: {
285
+ requestIdNotLogged: string;
286
+ };
287
+ schema: never[];
288
+ };
289
+ create(context: any): {
290
+ ImportDeclaration(node: any): void;
291
+ CatchClause(node: any): void;
292
+ IfStatement(node: any): void;
293
+ MemberExpression(node: any): void;
294
+ Literal(node: any): void;
295
+ 'Program:exit'(): void;
296
+ };
297
+ };
298
+ readonly 'supabase-scope-queries-by-tenant-column': {
299
+ meta: {
300
+ type: string;
301
+ docs: {
302
+ description: string;
303
+ category: string;
304
+ rationale: string;
305
+ docsUrl: string;
306
+ recommended: boolean;
307
+ };
308
+ messages: {
309
+ missingTenantFilter: string;
310
+ };
311
+ schema: never[];
312
+ };
313
+ create(context: any): {
314
+ 'CallExpression:exit'(node: any): void;
315
+ 'Program:exit'(): void;
316
+ };
317
+ };
318
+ readonly 'supabase-validate-uuid-columns': {
319
+ meta: {
320
+ type: string;
321
+ docs: {
322
+ description: string;
323
+ category: string;
324
+ rationale: string;
325
+ docsUrl: string;
326
+ recommended: boolean;
327
+ };
328
+ messages: {
329
+ missingUuidValidation: string;
330
+ };
331
+ schema: never[];
332
+ };
333
+ create(context: any): {
334
+ VariableDeclarator(node: any): void;
335
+ BinaryExpression(node: any): void;
336
+ CallExpression(node: any): void;
337
+ };
338
+ };
339
+ readonly 'supabase-order-by-timestamp-not-identity': {
340
+ meta: {
341
+ type: string;
342
+ docs: {
343
+ description: string;
344
+ category: string;
345
+ rationale: string;
346
+ docsUrl: string;
347
+ recommended: boolean;
348
+ };
349
+ messages: {
350
+ orderByIdentity: string;
351
+ };
352
+ schema: never[];
353
+ };
354
+ create(context: any): {
355
+ 'CallExpression:exit'(node: any): void;
356
+ };
357
+ };
358
+ readonly 'supabase-consistent-input-length-limits': {
359
+ meta: {
360
+ type: string;
361
+ docs: {
362
+ description: string;
363
+ category: string;
364
+ rationale: string;
365
+ docsUrl: string;
366
+ recommended: boolean;
367
+ };
368
+ messages: {
369
+ inconsistentLengthLimit: string;
370
+ };
371
+ schema: never[];
372
+ };
373
+ create(context: any): {
374
+ BinaryExpression(node: any): void;
375
+ CallExpression(node: any): void;
376
+ };
377
+ };
378
+ readonly 'supabase-idempotent-mutations': {
379
+ meta: {
380
+ type: string;
381
+ docs: {
382
+ description: string;
383
+ category: string;
384
+ rationale: string;
385
+ docsUrl: string;
386
+ recommended: boolean;
387
+ };
388
+ messages: {
389
+ missingIdempotencyKey: string;
390
+ };
391
+ schema: never[];
392
+ };
393
+ create(context: any): {
394
+ CallExpression(node: any): void;
395
+ };
396
+ };
397
+ readonly 'supabase-fail-fast-env-validation': {
398
+ meta: {
399
+ type: string;
400
+ docs: {
401
+ description: string;
402
+ category: string;
403
+ rationale: string;
404
+ docsUrl: string;
405
+ recommended: boolean;
406
+ };
407
+ messages: {
408
+ missingEnvValidation: string;
409
+ };
410
+ schema: never[];
411
+ };
412
+ create(context: any): {
413
+ ImportDeclaration(node: any): void;
414
+ VariableDeclarator(node: any): void;
415
+ IfStatement(node: any): void;
416
+ CallExpression(node: any): void;
417
+ };
418
+ };
419
+ readonly 'supabase-no-user-metadata-authz': {
420
+ meta: {
421
+ type: string;
422
+ docs: {
423
+ description: string;
424
+ category: string;
425
+ cwe: string;
426
+ owasp: string;
427
+ rationale: string;
428
+ docsUrl: string;
429
+ recommended: boolean;
430
+ };
431
+ messages: {
432
+ userMetadataAuthzRead: string;
433
+ userMetadataAuthzWrite: string;
434
+ };
435
+ schema: never[];
436
+ };
437
+ create(context: any): {
438
+ MemberExpression(node: any): void;
439
+ CallExpression(node: any): void;
440
+ };
441
+ };
442
+ readonly 'supabase-single-without-error-check': {
443
+ meta: {
444
+ type: string;
445
+ docs: {
446
+ description: string;
447
+ category: string;
448
+ rationale: string;
449
+ docsUrl: string;
450
+ recommended: boolean;
451
+ };
452
+ messages: {
453
+ missingErrorCheck: string;
454
+ };
455
+ schema: never[];
456
+ };
457
+ create(context: any): {
458
+ VariableDeclarator(node: any): void;
459
+ AssignmentExpression(node: any): void;
460
+ ExpressionStatement(node: any): void;
461
+ };
462
+ };
463
+ readonly 'supabase-non-atomic-replace-pattern': {
464
+ meta: {
465
+ type: string;
466
+ docs: {
467
+ description: string;
468
+ category: string;
469
+ rationale: string;
470
+ docsUrl: string;
471
+ recommended: boolean;
472
+ };
473
+ messages: {
474
+ nonAtomicReplace: string;
475
+ };
476
+ schema: never[];
477
+ };
478
+ create(context: any): {
479
+ FunctionDeclaration(node: any): void;
480
+ 'FunctionDeclaration:exit'(node: any): void;
481
+ FunctionExpression(node: any): void;
482
+ 'FunctionExpression:exit'(node: any): void;
483
+ ArrowFunctionExpression(node: any): void;
484
+ 'ArrowFunctionExpression:exit'(node: any): void;
485
+ VariableDeclarator(node: any): void;
486
+ ExpressionStatement(node: any): void;
487
+ };
488
+ };
489
+ readonly 'supabase-unchecked-mutation-error': {
490
+ meta: {
491
+ type: string;
492
+ docs: {
493
+ description: string;
494
+ category: string;
495
+ rationale: string;
496
+ docsUrl: string;
497
+ recommended: boolean;
498
+ };
499
+ messages: {
500
+ uncheckedMutation: string;
501
+ };
502
+ schema: never[];
503
+ };
504
+ create(context: any): {
505
+ ExpressionStatement(node: any): void;
506
+ VariableDeclarator(node: any): void;
507
+ AssignmentExpression(node: any): void;
508
+ };
509
+ };
510
+ readonly 'supabase-realtime-missing-filter': {
511
+ meta: {
512
+ type: string;
513
+ docs: {
514
+ description: string;
515
+ category: string;
516
+ rationale: string;
517
+ docsUrl: string;
518
+ recommended: boolean;
519
+ };
520
+ messages: {
521
+ missingFilter: string;
522
+ };
523
+ schema: never[];
524
+ };
525
+ create(context: any): {
526
+ CallExpression(node: any): void;
527
+ };
528
+ };
529
+ readonly 'supabase-storage-error-not-surfaced': {
530
+ meta: {
531
+ type: string;
532
+ docs: {
533
+ description: string;
534
+ category: string;
535
+ rationale: string;
536
+ docsUrl: string;
537
+ recommended: boolean;
538
+ };
539
+ messages: {
540
+ uploadErrorNotSurfaced: string;
541
+ };
542
+ schema: never[];
543
+ };
544
+ create(context: any): {
545
+ VariableDeclarator(node: any): void;
546
+ IfStatement(node: any): void;
547
+ 'Program:exit'(): void;
548
+ };
549
+ };
550
+ readonly 'auth0-required-audience-validation': {
551
+ meta: {
552
+ type: string;
553
+ docs: {
554
+ description: string;
555
+ category: string;
556
+ cwe: string;
557
+ owasp: string;
558
+ rationale: string;
559
+ docsUrl: string;
560
+ recommended: boolean;
561
+ };
562
+ messages: {
563
+ missingAudience: string;
564
+ conditionalAudience: string;
565
+ };
566
+ };
567
+ create(context: any): {
568
+ ImportDeclaration(node: any): void;
569
+ CallExpression(node: any): void;
570
+ };
571
+ };
572
+ readonly 'auth0-no-account-link-without-verified-email': {
573
+ meta: {
574
+ type: string;
575
+ docs: {
576
+ description: string;
577
+ category: string;
578
+ cwe: string;
579
+ owasp: string;
580
+ rationale: string;
581
+ docsUrl: string;
582
+ recommended: boolean;
583
+ };
584
+ messages: {
585
+ unverifiedEmailLink: string;
586
+ };
587
+ };
588
+ create(context: any): {
589
+ Program(node: any): void;
590
+ 'Program:exit'(): void;
591
+ FunctionDeclaration(node: any): void;
592
+ 'FunctionDeclaration:exit'(): void;
593
+ FunctionExpression(node: any): void;
594
+ 'FunctionExpression:exit'(): void;
595
+ ArrowFunctionExpression(node: any): void;
596
+ 'ArrowFunctionExpression:exit'(): void;
597
+ CallExpression(node: any): void;
598
+ MemberExpression(node: any): void;
599
+ Literal(node: any): void;
600
+ };
601
+ };
602
+ readonly 'auth0-dead-claim-verification-check': {
603
+ meta: {
604
+ type: string;
605
+ docs: {
606
+ description: string;
607
+ category: string;
608
+ rationale: string;
609
+ docsUrl: string;
610
+ recommended: boolean;
611
+ };
612
+ messages: {
613
+ deadVerificationCheck: string;
614
+ };
615
+ };
616
+ create(context: any): {
617
+ CallExpression(node: any): void;
618
+ };
619
+ };
620
+ readonly 'auth0-jwks-refresh-on-unknown-kid': {
621
+ meta: {
622
+ type: string;
623
+ docs: {
624
+ description: string;
625
+ category: string;
626
+ rationale: string;
627
+ docsUrl: string;
628
+ recommended: boolean;
629
+ };
630
+ messages: {
631
+ noRefreshOnMiss: string;
632
+ };
633
+ };
634
+ create(context: any): {
635
+ Program(node: any): void;
636
+ CallExpression(node: any): void;
637
+ BinaryExpression(node: any): void;
638
+ 'Program:exit'(): void;
639
+ };
640
+ };
641
+ readonly 'firebase-missing-app-check': {
642
+ meta: {
643
+ type: string;
644
+ docs: {
645
+ description: string;
646
+ category: string;
647
+ cwe: string;
648
+ owasp: string;
649
+ rationale: string;
650
+ docsUrl: string;
651
+ recommended: boolean;
652
+ };
653
+ messages: {
654
+ missingAppCheck: string;
655
+ };
656
+ schema: never[];
657
+ };
658
+ create(context: any): {
659
+ ImportDeclaration?: undefined;
660
+ CallExpression?: undefined;
661
+ 'Program:exit'?: undefined;
662
+ } | {
663
+ ImportDeclaration(node: any): void;
664
+ CallExpression(node: any): void;
665
+ 'Program:exit'(): void;
666
+ };
667
+ };
668
+ readonly 'firebase-unhandled-auth-popup-rejection': {
669
+ meta: {
670
+ type: string;
671
+ docs: {
672
+ description: string;
673
+ category: string;
674
+ rationale: string;
675
+ docsUrl: string;
676
+ recommended: boolean;
677
+ };
678
+ messages: {
679
+ unhandledPopupRejection: string;
680
+ };
681
+ schema: never[];
682
+ };
683
+ create(context: any): {
684
+ ImportDeclaration(node: any): void;
685
+ TryStatement(node: any): void;
686
+ CallExpression(node: any): void;
687
+ 'Program:exit'(): void;
688
+ };
689
+ };
690
+ readonly 'firebase-rtdb-list-read-for-single-item': {
691
+ meta: {
692
+ type: string;
693
+ docs: {
694
+ description: string;
695
+ category: string;
696
+ rationale: string;
697
+ docsUrl: string;
698
+ recommended: boolean;
699
+ };
700
+ messages: {
701
+ listReadForSingleItem: string;
702
+ };
703
+ schema: never[];
704
+ };
705
+ create(context: any): {
706
+ VariableDeclarator(node: any): void;
707
+ CallExpression(node: any): void;
708
+ 'Program:exit'(): void;
709
+ };
710
+ };
711
+ readonly 'firebase-unvalidated-external-data-to-rtdb': {
712
+ meta: {
713
+ type: string;
714
+ docs: {
715
+ description: string;
716
+ category: string;
717
+ rationale: string;
718
+ docsUrl: string;
719
+ recommended: boolean;
720
+ };
721
+ messages: {
722
+ unvalidatedWrite: string;
723
+ };
724
+ schema: never[];
725
+ };
726
+ create(context: any): {
727
+ ImportDeclaration(node: any): void;
728
+ FunctionDeclaration(node: any): void;
729
+ FunctionExpression(node: any): void;
730
+ ArrowFunctionExpression(node: any): void;
731
+ CallExpression(node: any): void;
732
+ 'Program:exit'(): void;
733
+ };
734
+ };
735
+ readonly 'firebase-rtdb-batch-write-not-atomic': {
736
+ meta: {
737
+ type: string;
738
+ docs: {
739
+ description: string;
740
+ category: string;
741
+ rationale: string;
742
+ docsUrl: string;
743
+ recommended: boolean;
744
+ };
745
+ messages: {
746
+ batchWriteNotAtomic: string;
747
+ };
748
+ schema: never[];
749
+ };
750
+ create(context: any): {
751
+ ImportDeclaration(node: any): void;
752
+ VariableDeclarator(node: any): void;
753
+ CallExpression(node: any): void;
754
+ };
755
+ };
756
+ readonly 'firebase-rtdb-listener-error-not-handled': {
757
+ meta: {
758
+ type: string;
759
+ docs: {
760
+ description: string;
761
+ category: string;
762
+ rationale: string;
763
+ docsUrl: string;
764
+ recommended: boolean;
765
+ };
766
+ messages: {
767
+ listenerErrorNotHandled: string;
768
+ };
769
+ schema: never[];
770
+ };
771
+ create(context: any): {
772
+ ImportDeclaration(node: any): void;
773
+ CallExpression(node: any): void;
774
+ };
775
+ };
776
+ readonly 'firebase-effect-deps-whole-user-object': {
777
+ meta: {
778
+ type: string;
779
+ docs: {
780
+ description: string;
781
+ category: string;
782
+ rationale: string;
783
+ docsUrl: string;
784
+ recommended: boolean;
785
+ };
786
+ messages: {
787
+ wholeUserObjectDep: string;
788
+ };
789
+ schema: never[];
790
+ };
791
+ create(context: any): {
792
+ CallExpression(node: any): void;
793
+ };
794
+ };
795
+ readonly 'firebase-rtdb-write-promise-not-handled': {
796
+ meta: {
797
+ type: string;
798
+ docs: {
799
+ description: string;
800
+ category: string;
801
+ rationale: string;
802
+ docsUrl: string;
803
+ recommended: boolean;
804
+ };
805
+ messages: {
806
+ writePromiseNotHandled: string;
807
+ };
808
+ schema: never[];
809
+ };
810
+ create(context: any): {
811
+ ImportDeclaration(node: any): void;
812
+ TryStatement(node: any): void;
813
+ ReturnStatement(node: any): void;
814
+ AwaitExpression(node: any): void;
815
+ CallExpression(node: any): void;
816
+ 'Program:exit'(): void;
817
+ };
818
+ };
819
+ readonly 'lovable-no-client-side-secret-fetch': {
820
+ meta: {
821
+ type: string;
822
+ docs: {
823
+ description: string;
824
+ category: string;
825
+ cwe: string;
826
+ owasp: string;
827
+ rationale: string;
828
+ docsUrl: string;
829
+ recommended: boolean;
830
+ };
831
+ messages: {
832
+ clientSideSecretFetch: string;
833
+ };
834
+ };
835
+ create(context: any): {
836
+ VariableDeclarator(node: any): void;
837
+ CallExpression(node: any): void;
838
+ };
839
+ };
840
+ readonly 'lovable-paid-flag-without-edge-function': {
841
+ meta: {
842
+ type: string;
843
+ docs: {
844
+ description: string;
845
+ category: string;
846
+ cwe: string;
847
+ owasp: string;
848
+ rationale: string;
849
+ docsUrl: string;
850
+ recommended: boolean;
851
+ };
852
+ messages: {
853
+ paidFlagWithoutPayment: string;
854
+ };
855
+ };
856
+ create(context: any): {
857
+ Program(node: any): void;
858
+ 'Program:exit'(): void;
859
+ FunctionDeclaration(node: any): void;
860
+ 'FunctionDeclaration:exit'(): void;
861
+ FunctionExpression(node: any): void;
862
+ 'FunctionExpression:exit'(): void;
863
+ ArrowFunctionExpression(node: any): void;
864
+ 'ArrowFunctionExpression:exit'(): void;
865
+ Literal(node: any): void;
866
+ JSXText(node: any): void;
867
+ TemplateElement(node: any): void;
868
+ CallExpression(node: any): void;
869
+ };
870
+ };
871
+ readonly 'lovable-expiry-column-never-checked': {
872
+ meta: {
873
+ type: string;
874
+ docs: {
875
+ description: string;
876
+ category: string;
877
+ rationale: string;
878
+ docsUrl: string;
879
+ recommended: boolean;
880
+ };
881
+ messages: {
882
+ expiryNeverChecked: string;
883
+ };
884
+ };
885
+ create(context: any): {
886
+ CallExpression(node: any): void;
887
+ BinaryExpression(node: any): void;
888
+ 'Program:exit'(): void;
889
+ };
890
+ };
891
+ readonly 'lovable-silent-catch-on-provider-call': {
892
+ meta: {
893
+ type: string;
894
+ docs: {
895
+ description: string;
896
+ category: string;
897
+ rationale: string;
898
+ docsUrl: string;
899
+ recommended: boolean;
900
+ };
901
+ messages: {
902
+ silentCatch: string;
903
+ };
904
+ };
905
+ create(context: any): {
906
+ TryStatement(node: any): void;
907
+ };
908
+ };
909
+ readonly 'browserbase-no-conditional-authz-on-anonymous-user': {
910
+ meta: {
911
+ type: string;
912
+ docs: {
913
+ description: string;
914
+ category: string;
915
+ cwe: string;
916
+ owasp: string;
917
+ rationale: string;
918
+ docsUrl: string;
919
+ recommended: boolean;
920
+ };
921
+ messages: {
922
+ conditionalAuthz: string;
923
+ };
924
+ schema: never[];
925
+ };
926
+ create(context: any): {
927
+ FunctionDeclaration(node: any): void;
928
+ FunctionExpression(node: any): void;
929
+ ArrowFunctionExpression(node: any): void;
930
+ IfStatement(node: any): void;
931
+ CallExpression(node: any): void;
932
+ 'Program:exit'(): void;
933
+ };
934
+ };
935
+ readonly 'browserbase-no-connect-url-in-api-response': {
936
+ meta: {
937
+ type: string;
938
+ docs: {
939
+ description: string;
940
+ category: string;
941
+ cwe: string;
942
+ owasp: string;
943
+ rationale: string;
944
+ docsUrl: string;
945
+ recommended: boolean;
946
+ };
947
+ messages: {
948
+ connectUrlInResponse: string;
949
+ };
950
+ schema: never[];
951
+ };
952
+ create(context: any): {
953
+ CallExpression(node: any): void;
954
+ };
955
+ };
956
+ readonly 'browserbase-session-id-requires-ownership-check': {
957
+ meta: {
958
+ type: string;
959
+ docs: {
960
+ description: string;
961
+ category: string;
962
+ cwe: string;
963
+ rationale: string;
964
+ docsUrl: string;
965
+ recommended: boolean;
966
+ };
967
+ messages: {
968
+ missingOwnershipCheck: string;
969
+ };
970
+ schema: never[];
971
+ };
972
+ create(context: any): {
973
+ FunctionDeclaration(node: any): void;
974
+ FunctionExpression(node: any): void;
975
+ ArrowFunctionExpression(node: any): void;
976
+ CallExpression(node: any): void;
977
+ 'Program:exit'(): void;
978
+ };
979
+ };
980
+ readonly 'browserbase-no-concurrent-shared-context': {
981
+ meta: {
982
+ type: string;
983
+ docs: {
984
+ description: string;
985
+ category: string;
986
+ rationale: string;
987
+ docsUrl: string;
988
+ recommended: boolean;
989
+ };
990
+ messages: {
991
+ concurrentSharedContext: string;
992
+ };
993
+ schema: never[];
994
+ };
995
+ create(context: any): {
996
+ VariableDeclarator(node: any): void;
997
+ CallExpression(node: any): void;
998
+ };
999
+ };
1000
+ readonly 'browserbase-mobile-device-requires-os-setting': {
1001
+ meta: {
1002
+ type: string;
1003
+ docs: {
1004
+ description: string;
1005
+ category: string;
1006
+ rationale: string;
1007
+ docsUrl: string;
1008
+ recommended: boolean;
1009
+ };
1010
+ messages: {
1011
+ missingOsSetting: string;
1012
+ };
1013
+ schema: never[];
1014
+ };
1015
+ create(context: any): {
1016
+ IfStatement(node: any): void;
1017
+ Property(node: any): void;
1018
+ AssignmentExpression(node: any): void;
1019
+ 'Program:exit'(): void;
1020
+ };
1021
+ };
1022
+ readonly 'browserbase-use-typed-exception-status-not-substring': {
1023
+ meta: {
1024
+ type: string;
1025
+ docs: {
1026
+ description: string;
1027
+ category: string;
1028
+ rationale: string;
1029
+ docsUrl: string;
1030
+ recommended: boolean;
1031
+ };
1032
+ messages: {
1033
+ substringStatusMatch: string;
1034
+ };
1035
+ schema: never[];
1036
+ };
1037
+ create(context: any): {
1038
+ CatchClause(node: any): void;
1039
+ };
1040
+ };
1041
+ readonly 'browserbase-release-session-on-connect-failure': {
1042
+ meta: {
1043
+ type: string;
1044
+ docs: {
1045
+ description: string;
1046
+ category: string;
1047
+ rationale: string;
1048
+ docsUrl: string;
1049
+ recommended: boolean;
1050
+ };
1051
+ messages: {
1052
+ sessionNotReleasedOnFailure: string;
1053
+ };
1054
+ schema: never[];
1055
+ };
1056
+ create(context: any): {
1057
+ AwaitExpression(node: any): void;
1058
+ TryStatement(node: any): void;
1059
+ CallExpression(node: any): void;
1060
+ 'Program:exit'(): void;
1061
+ };
1062
+ };
1063
+ readonly 'browserbase-dont-stack-custom-retry-on-sdk-retry': {
1064
+ meta: {
1065
+ type: string;
1066
+ docs: {
1067
+ description: string;
1068
+ category: string;
1069
+ rationale: string;
1070
+ docsUrl: string;
1071
+ recommended: boolean;
1072
+ };
1073
+ messages: {
1074
+ stackedRetry: string;
1075
+ };
1076
+ schema: never[];
1077
+ };
1078
+ create(context: any): {
1079
+ ForStatement(node: any): void;
1080
+ WhileStatement(node: any): void;
1081
+ DoWhileStatement(node: any): void;
1082
+ CallExpression(node: any): void;
1083
+ };
1084
+ };
1085
+ readonly 'browserbase-no-overbroad-error-substring-match': {
1086
+ meta: {
1087
+ type: string;
1088
+ docs: {
1089
+ description: string;
1090
+ category: string;
1091
+ rationale: string;
1092
+ docsUrl: string;
1093
+ recommended: boolean;
1094
+ };
1095
+ messages: {
1096
+ overbroadMatch: string;
1097
+ };
1098
+ schema: never[];
1099
+ };
1100
+ create(context: any): {
1101
+ IfStatement(node: any): void;
1102
+ };
1103
+ };
1104
+ readonly 'browserbase-use-sdk-not-raw-requests': {
1105
+ meta: {
1106
+ type: string;
1107
+ docs: {
1108
+ description: string;
1109
+ category: string;
1110
+ rationale: string;
1111
+ docsUrl: string;
1112
+ recommended: boolean;
1113
+ };
1114
+ messages: {
1115
+ rawRequestToBrowserbase: string;
1116
+ };
1117
+ schema: never[];
1118
+ };
1119
+ create(context: any): {
1120
+ VariableDeclarator(node: any): void;
1121
+ CallExpression(node: any): void;
1122
+ };
1123
+ };
1124
+ readonly 'browserbase-centralize-request-release': {
1125
+ meta: {
1126
+ type: string;
1127
+ docs: {
1128
+ description: string;
1129
+ category: string;
1130
+ rationale: string;
1131
+ docsUrl: string;
1132
+ recommended: boolean;
1133
+ };
1134
+ messages: {
1135
+ inlineRequestRelease: string;
1136
+ };
1137
+ schema: never[];
1138
+ };
1139
+ create(context: any): {
1140
+ CallExpression?: undefined;
1141
+ } | {
1142
+ CallExpression(node: any): void;
1143
+ };
1144
+ };
1145
+ readonly 'openai-cua-no-domain-allowlist': {
1146
+ meta: {
1147
+ type: string;
1148
+ docs: {
1149
+ description: string;
1150
+ category: string;
1151
+ cwe: string;
1152
+ owasp: string;
1153
+ rationale: string;
1154
+ docsUrl: string;
1155
+ recommended: boolean;
1156
+ };
1157
+ messages: {
1158
+ noOriginCheck: string;
1159
+ };
1160
+ };
1161
+ create(context: any): {
1162
+ Program(node: any): void;
1163
+ 'Program:exit'(): void;
1164
+ FunctionDeclaration(node: any): void;
1165
+ 'FunctionDeclaration:exit'(): void;
1166
+ FunctionExpression(node: any): void;
1167
+ 'FunctionExpression:exit'(): void;
1168
+ ArrowFunctionExpression(node: any): void;
1169
+ 'ArrowFunctionExpression:exit'(): void;
1170
+ CallExpression(node: any): void;
1171
+ NewExpression(node: any): void;
1172
+ MemberExpression(node: any): void;
1173
+ Identifier(node: any): void;
1174
+ };
1175
+ };
1176
+ readonly 'openai-cua-scroll-delta-default-zero': {
1177
+ meta: {
1178
+ type: string;
1179
+ docs: {
1180
+ description: string;
1181
+ category: string;
1182
+ rationale: string;
1183
+ docsUrl: string;
1184
+ recommended: boolean;
1185
+ };
1186
+ messages: {
1187
+ nonZeroDefault: string;
1188
+ };
1189
+ };
1190
+ create(context: any): {
1191
+ LogicalExpression(node: any): void;
1192
+ IfStatement(node: any): void;
1193
+ };
1194
+ };
1195
+ readonly 'openai-cua-structured-step-metadata-not-text-json': {
1196
+ meta: {
1197
+ type: string;
1198
+ docs: {
1199
+ description: string;
1200
+ category: string;
1201
+ rationale: string;
1202
+ docsUrl: string;
1203
+ recommended: boolean;
1204
+ };
1205
+ messages: {
1206
+ textJsonExtraction: string;
1207
+ };
1208
+ };
1209
+ create(context: any): {
1210
+ Program(node: any): void;
1211
+ 'Program:exit'(): void;
1212
+ FunctionDeclaration(node: any): void;
1213
+ 'FunctionDeclaration:exit'(): void;
1214
+ FunctionExpression(node: any): void;
1215
+ 'FunctionExpression:exit'(): void;
1216
+ ArrowFunctionExpression(node: any): void;
1217
+ 'ArrowFunctionExpression:exit'(): void;
1218
+ CallExpression(node: any): void;
1219
+ };
1220
+ };
1221
+ readonly 'openai-cua-no-blind-safety-check-ack': {
1222
+ meta: {
1223
+ type: string;
1224
+ docs: {
1225
+ description: string;
1226
+ category: string;
1227
+ rationale: string;
1228
+ docsUrl: string;
1229
+ recommended: boolean;
1230
+ };
1231
+ messages: {
1232
+ blindAck: string;
1233
+ };
1234
+ };
1235
+ create(context: any): {
1236
+ CallExpression(node: any): void;
1237
+ };
1238
+ };
1239
+ readonly 'openai-cua-retry-transient-turn-errors': {
1240
+ meta: {
1241
+ type: string;
1242
+ docs: {
1243
+ description: string;
1244
+ category: string;
1245
+ rationale: string;
1246
+ docsUrl: string;
1247
+ recommended: boolean;
1248
+ };
1249
+ messages: {
1250
+ noTurnRetry: string;
1251
+ };
1252
+ };
1253
+ create(context: any): {
1254
+ ForStatement(): void;
1255
+ 'ForStatement:exit'(): void;
1256
+ WhileStatement(): void;
1257
+ 'WhileStatement:exit'(): void;
1258
+ DoWhileStatement(): void;
1259
+ 'DoWhileStatement:exit'(): void;
1260
+ ForOfStatement(): void;
1261
+ 'ForOfStatement:exit'(): void;
1262
+ ForInStatement(): void;
1263
+ 'ForInStatement:exit'(): void;
1264
+ TryStatement(node: any): void;
1265
+ };
1266
+ };
1267
+ readonly 'openai-cua-check-response-status-incomplete': {
1268
+ meta: {
1269
+ type: string;
1270
+ docs: {
1271
+ description: string;
1272
+ category: string;
1273
+ rationale: string;
1274
+ docsUrl: string;
1275
+ recommended: boolean;
1276
+ };
1277
+ messages: {
1278
+ missingIncompleteCheck: string;
1279
+ };
1280
+ };
1281
+ create(context: any): {
1282
+ Program(node: any): void;
1283
+ 'Program:exit'(): void;
1284
+ FunctionDeclaration(node: any): void;
1285
+ 'FunctionDeclaration:exit'(): void;
1286
+ FunctionExpression(node: any): void;
1287
+ 'FunctionExpression:exit'(): void;
1288
+ ArrowFunctionExpression(node: any): void;
1289
+ 'ArrowFunctionExpression:exit'(): void;
1290
+ CallExpression(node: any): void;
1291
+ ObjectExpression(node: any): void;
1292
+ BinaryExpression(node: any): void;
1293
+ };
1294
+ };
1295
+ readonly 'openai-cua-set-safety-identifier': {
1296
+ meta: {
1297
+ type: string;
1298
+ docs: {
1299
+ description: string;
1300
+ category: string;
1301
+ rationale: string;
1302
+ docsUrl: string;
1303
+ recommended: boolean;
1304
+ };
1305
+ messages: {
1306
+ missingSafetyIdentifier: string;
1307
+ };
1308
+ };
1309
+ create(context: any): {
1310
+ CallExpression(node: any): void;
1311
+ };
1312
+ };
1313
+ };
1314
+ };
1315
+
1316
+ export { plugin as default, plugin };