@inferencesh/sdk 0.6.10 → 0.6.12

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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/actions.js +3 -3
  3. package/dist/agent/actions.test.js +6 -0
  4. package/dist/api/agents.d.ts +10 -0
  5. package/dist/api/agents.js +17 -3
  6. package/dist/api/agents.test.js +215 -0
  7. package/dist/api/api-keys.d.ts +24 -0
  8. package/dist/api/api-keys.js +26 -0
  9. package/dist/api/api-keys.test.d.ts +1 -0
  10. package/dist/api/api-keys.test.js +44 -0
  11. package/dist/api/apps.js +1 -1
  12. package/dist/api/apps.test.js +71 -3
  13. package/dist/api/chats.d.ts +14 -0
  14. package/dist/api/chats.js +18 -0
  15. package/dist/api/chats.test.js +52 -0
  16. package/dist/api/engines.d.ts +12 -0
  17. package/dist/api/engines.js +18 -0
  18. package/dist/api/engines.test.js +78 -0
  19. package/dist/api/files.test.js +183 -0
  20. package/dist/api/flow-runs.test.js +42 -0
  21. package/dist/api/flows.d.ts +4 -0
  22. package/dist/api/flows.js +6 -0
  23. package/dist/api/flows.test.js +75 -0
  24. package/dist/api/integrations.d.ts +41 -0
  25. package/dist/api/integrations.js +56 -0
  26. package/dist/api/integrations.test.d.ts +1 -0
  27. package/dist/api/integrations.test.js +109 -0
  28. package/dist/api/knowledge.d.ts +112 -0
  29. package/dist/api/knowledge.js +163 -0
  30. package/dist/api/knowledge.test.d.ts +1 -0
  31. package/dist/api/knowledge.test.js +94 -0
  32. package/dist/api/mcp-servers.d.ts +45 -0
  33. package/dist/api/mcp-servers.js +62 -0
  34. package/dist/api/mcp-servers.test.d.ts +1 -0
  35. package/dist/api/mcp-servers.test.js +64 -0
  36. package/dist/api/projects.d.ts +29 -0
  37. package/dist/api/projects.js +38 -0
  38. package/dist/api/projects.test.d.ts +1 -0
  39. package/dist/api/projects.test.js +52 -0
  40. package/dist/api/search.d.ts +21 -0
  41. package/dist/api/search.js +20 -0
  42. package/dist/api/search.test.d.ts +1 -0
  43. package/dist/api/search.test.js +39 -0
  44. package/dist/api/secrets.d.ts +29 -0
  45. package/dist/api/secrets.js +38 -0
  46. package/dist/api/secrets.test.d.ts +1 -0
  47. package/dist/api/secrets.test.js +61 -0
  48. package/dist/api/tasks.d.ts +13 -1
  49. package/dist/api/tasks.js +18 -0
  50. package/dist/api/tasks.test.js +134 -0
  51. package/dist/api/teams.d.ts +71 -0
  52. package/dist/api/teams.js +92 -0
  53. package/dist/api/teams.test.d.ts +1 -0
  54. package/dist/api/teams.test.js +79 -0
  55. package/dist/http/client.d.ts +5 -0
  56. package/dist/http/client.js +42 -23
  57. package/dist/http/client.test.js +245 -0
  58. package/dist/http/errors.test.js +13 -0
  59. package/dist/index.d.ts +25 -0
  60. package/dist/index.js +25 -0
  61. package/dist/tool-builder.test.js +11 -1
  62. package/dist/types.d.ts +110 -5
  63. package/dist/types.js +58 -2
  64. package/package.json +4 -4
package/dist/types.d.ts CHANGED
@@ -404,6 +404,14 @@ export interface AuthResponse {
404
404
  redirect_to?: string;
405
405
  provider?: string;
406
406
  }
407
+ /**
408
+ * DeviceAuthInitRequest is the optional body for initiating device auth.
409
+ * TokenKind selects the credential minted on approval; empty means
410
+ * DeviceTokenKindAPIKey (legacy CLIs send no body).
411
+ */
412
+ export interface DeviceAuthInitRequest {
413
+ token_kind?: DeviceTokenKind;
414
+ }
407
415
  export interface DeviceAuthResponse {
408
416
  user_code: string;
409
417
  device_code: string;
@@ -414,7 +422,15 @@ export interface DeviceAuthResponse {
414
422
  }
415
423
  export interface DeviceAuthPollResponse {
416
424
  status: DeviceAuthStatus;
425
+ /**
426
+ * ApiKey is set for legacy device-auth API key logins.
427
+ * TODO: remove once CLIs older than the session-token release are retired.
428
+ */
417
429
  api_key?: string;
430
+ /**
431
+ * SessionToken is set when the flow was initiated with token_kind=session.
432
+ */
433
+ session_token?: string;
418
434
  team_id?: string;
419
435
  }
420
436
  export interface TeamCreateRequest {
@@ -860,12 +876,17 @@ export interface SecretRequirement {
860
876
  optional?: boolean;
861
877
  }
862
878
  /**
863
- * IntegrationRequirement defines an integration capability that an app requires.
879
+ * IntegrationRequirement defines an integration that an app requires.
880
+ * Key is the provider slug (e.g. "bytedance", "google").
881
+ * Secrets lists the specific env var names to inject from this integration.
882
+ * Scopes lists OAuth scopes needed (for OAuth integrations).
864
883
  */
865
884
  export interface IntegrationRequirement {
866
885
  key: string;
867
886
  description?: string;
868
887
  optional?: boolean;
888
+ secrets?: string[];
889
+ scopes?: string[];
869
890
  }
870
891
  /**
871
892
  * AppDTO is the API response for a full app.
@@ -949,6 +970,7 @@ export interface AppStoreListingDTO {
949
970
  allows_cloud_workers: boolean;
950
971
  max_concurrency: number;
951
972
  max_concurrency_per_team: number;
973
+ min_concurrency: number;
952
974
  tags?: string[];
953
975
  }
954
976
  /**
@@ -984,6 +1006,7 @@ export interface AuthSessionDTO {
984
1006
  browser: string;
985
1007
  browser_version: string;
986
1008
  auth_method: string;
1009
+ scopes?: Scope[];
987
1010
  current: boolean;
988
1011
  }
989
1012
  /**
@@ -1459,6 +1482,7 @@ export interface InstanceTypeBootTime {
1459
1482
  * IntegrationDTO for API responses (never exposes tokens)
1460
1483
  */
1461
1484
  export interface IntegrationDTO extends BaseModelDTO, PermissionModelDTO {
1485
+ scope: IntegrationScope;
1462
1486
  provider: IntegrationProvider;
1463
1487
  type: IntegrationAuthType;
1464
1488
  auth: IntegrationAuthType;
@@ -1480,6 +1504,7 @@ export interface IntegrationDTO extends BaseModelDTO, PermissionModelDTO {
1480
1504
  * IntegrationConfigDTO is the API response for integration configuration
1481
1505
  */
1482
1506
  export interface IntegrationConfigDTO {
1507
+ slug: string;
1483
1508
  provider: string;
1484
1509
  type: string;
1485
1510
  auth: string;
@@ -1772,6 +1797,8 @@ export interface MenuDTO extends BaseModelDTO, PermissionModelDTO {
1772
1797
  */
1773
1798
  export interface PlanLimit {
1774
1799
  type: EntitlementType;
1800
+ label?: string;
1801
+ unit?: string;
1775
1802
  enabled?: boolean;
1776
1803
  unlimited?: boolean;
1777
1804
  limit?: number;
@@ -1977,22 +2004,49 @@ export interface SuggestResult {
1977
2004
  command: string;
1978
2005
  score: number;
1979
2006
  }
2007
+ /**
2008
+ * RequirementType identifies the kind of missing requirement.
2009
+ */
2010
+ export type RequirementType = string;
2011
+ /**
2012
+ * Requirement error types
2013
+ */
2014
+ export declare const RequirementTypeSecret: RequirementType;
2015
+ /**
2016
+ * Requirement error types
2017
+ */
2018
+ export declare const RequirementTypeIntegration: RequirementType;
2019
+ /**
2020
+ * Requirement error types
2021
+ */
2022
+ export declare const RequirementTypeScope: RequirementType;
1980
2023
  /**
1981
2024
  * RequirementError represents a single missing requirement with actionable info
1982
2025
  */
1983
2026
  export interface RequirementError {
1984
- type: string;
2027
+ type: RequirementType;
1985
2028
  key: string;
1986
2029
  message: string;
1987
2030
  action?: SetupAction;
1988
2031
  }
2032
+ /**
2033
+ * SetupActionType identifies the kind of action needed to resolve a requirement.
2034
+ */
2035
+ export type SetupActionType = string;
2036
+ export declare const SetupActionAddSecret: SetupActionType;
2037
+ export declare const SetupActionConnect: SetupActionType;
2038
+ export declare const SetupActionAddScopes: SetupActionType;
1989
2039
  /**
1990
2040
  * SetupAction provides actionable info for resolving a missing requirement
1991
2041
  */
1992
2042
  export interface SetupAction {
1993
- type: string;
2043
+ type: SetupActionType;
1994
2044
  provider?: string;
2045
+ provider_name?: string;
1995
2046
  scopes?: string[];
2047
+ scope_descriptions?: {
2048
+ [key: string]: string;
2049
+ };
1996
2050
  }
1997
2051
  /**
1998
2052
  * CheckRequirementsRequest is the request body for checking requirements
@@ -2413,6 +2467,8 @@ export interface UserMetadataDTO {
2413
2467
  use_case_reason: string;
2414
2468
  use_case_privacy: string;
2415
2469
  signup_source: string;
2470
+ terms_accepted_at?: string;
2471
+ terms_version: string;
2416
2472
  }
2417
2473
  /**
2418
2474
  * WidgetAction represents an action triggered by a widget button
@@ -2681,6 +2737,7 @@ export type EngineStatus = string;
2681
2737
  export declare const EngineStatusRunning: EngineStatus;
2682
2738
  export declare const EngineStatusPending: EngineStatus;
2683
2739
  export declare const EngineStatusDraining: EngineStatus;
2740
+ export declare const EngineStatusDisconnected: EngineStatus;
2684
2741
  export declare const EngineStatusStopping: EngineStatus;
2685
2742
  export declare const EngineStatusStopped: EngineStatus;
2686
2743
  /**
@@ -2781,6 +2838,8 @@ export declare const GraphNodeTypeResource: GraphNodeType;
2781
2838
  export declare const GraphNodeTypeApproval: GraphNodeType;
2782
2839
  export declare const GraphNodeTypeConditional: GraphNodeType;
2783
2840
  export declare const GraphNodeTypeFlowNode: GraphNodeType;
2841
+ export declare const GraphNodeTypeTrigger: GraphNodeType;
2842
+ export declare const GraphNodeTypeIntegrationRequirement: GraphNodeType;
2784
2843
  /**
2785
2844
  * GraphNodeStatus represents the status of a node
2786
2845
  */
@@ -3007,19 +3066,47 @@ export declare const DeviceAuthStatusDenied: DeviceAuthStatus;
3007
3066
  export declare const DeviceAuthStatusValid: DeviceAuthStatus;
3008
3067
  export declare const DeviceAuthStatusInvalid: DeviceAuthStatus;
3009
3068
  export declare const DeviceAuthStatusLoading: DeviceAuthStatus;
3069
+ /**
3070
+ * DeviceTokenKind selects the credential minted when a device auth flow is approved.
3071
+ */
3072
+ export type DeviceTokenKind = string;
3073
+ /**
3074
+ * DeviceTokenKindSession mints a revocable CLI session (acts as the user,
3075
+ * supports team switching via X-Team-ID).
3076
+ */
3077
+ export declare const DeviceTokenKindSession: DeviceTokenKind;
3078
+ /**
3079
+ * DeviceTokenKindAPIKey mints a device-scoped API key.
3080
+ * TODO: retire once CLIs older than the session-token release are gone.
3081
+ */
3082
+ export declare const DeviceTokenKindAPIKey: DeviceTokenKind;
3010
3083
  export type EntitlementResource = string;
3084
+ /**
3085
+ * Capacity limits — scale with tier
3086
+ */
3011
3087
  export declare const ResourceAPIKeys: EntitlementResource;
3012
3088
  export declare const ResourceConnectors: EntitlementResource;
3013
3089
  export declare const ResourceKnowledgeBases: EntitlementResource;
3014
- export declare const ResourcePrivateApps: EntitlementResource;
3015
3090
  export declare const ResourceStorageMB: EntitlementResource;
3016
3091
  export declare const ResourceConcurrency: EntitlementResource;
3017
3092
  export declare const ResourceRatePerMin: EntitlementResource;
3018
3093
  export declare const ResourceSeats: EntitlementResource;
3094
+ export declare const ResourceTriggers: EntitlementResource;
3095
+ export declare const ResourceRetentionDays: EntitlementResource;
3096
+ /**
3097
+ * Legacy — kept for DB compatibility, no longer in plan seeds
3098
+ */
3099
+ export declare const ResourcePrivateApps: EntitlementResource;
3019
3100
  export declare const ResourceTaskExecutions: EntitlementResource;
3101
+ /**
3102
+ * Feature gates — only what has real cost/complexity
3103
+ */
3104
+ export declare const ResourceFeatureBYOK: EntitlementResource;
3105
+ /**
3106
+ * Legacy feature gates — kept for DB compatibility, no longer gated
3107
+ */
3020
3108
  export declare const ResourceFeatureScopes: EntitlementResource;
3021
3109
  export declare const ResourceFeatureWebhooks: EntitlementResource;
3022
- export declare const ResourceFeatureBYOK: EntitlementResource;
3023
3110
  export declare const ResourceFeatureTeamBilling: EntitlementResource;
3024
3111
  export declare const ResourceFeatureAutoRecharge: EntitlementResource;
3025
3112
  export declare const ResourceFeatureInvoices: EntitlementResource;
@@ -3037,6 +3124,7 @@ export declare const ContentUnrated: ContentRating;
3037
3124
  */
3038
3125
  export type IntegrationProvider = string;
3039
3126
  export declare const IntegrationProviderGoogle: IntegrationProvider;
3127
+ export declare const IntegrationProviderGoogleSA: IntegrationProvider;
3040
3128
  export declare const IntegrationProviderSlack: IntegrationProvider;
3041
3129
  export declare const IntegrationProviderNotion: IntegrationProvider;
3042
3130
  export declare const IntegrationProviderGitHub: IntegrationProvider;
@@ -3060,10 +3148,23 @@ export declare const IntegrationAuthTypeMCP: IntegrationAuthType;
3060
3148
  * IntegrationStatus represents the status of an integration connection.
3061
3149
  */
3062
3150
  export type IntegrationStatus = string;
3151
+ export declare const IntegrationStatusPending: IntegrationStatus;
3063
3152
  export declare const IntegrationStatusConnected: IntegrationStatus;
3064
3153
  export declare const IntegrationStatusDisconnected: IntegrationStatus;
3065
3154
  export declare const IntegrationStatusExpired: IntegrationStatus;
3066
3155
  export declare const IntegrationStatusError: IntegrationStatus;
3156
+ /**
3157
+ * IntegrationScope distinguishes platform-provided vs team-owned integrations.
3158
+ */
3159
+ export type IntegrationScope = string;
3160
+ /**
3161
+ * IntegrationScopeTeam is owned by a user/team (BYOK credentials, user connections)
3162
+ */
3163
+ export declare const IntegrationScopeTeam: IntegrationScope;
3164
+ /**
3165
+ * IntegrationScopePlatform is owned by the platform (managed credentials, admin-configured)
3166
+ */
3167
+ export declare const IntegrationScopePlatform: IntegrationScope;
3067
3168
  export type WidgetNodeType = string;
3068
3169
  export declare const WidgetNodeTypeText: WidgetNodeType;
3069
3170
  export declare const WidgetNodeTypeMarkdown: WidgetNodeType;
@@ -3121,6 +3222,10 @@ export declare const NotificationTypePaymentFailed: NotificationType;
3121
3222
  export declare const NotificationTypeUsageSummary: NotificationType;
3122
3223
  export declare const NotificationTypeSpendingLimit: NotificationType;
3123
3224
  export declare const NotificationTypeInvoice: NotificationType;
3225
+ export declare const NotificationTypeSubscriptionCreated: NotificationType;
3226
+ export declare const NotificationTypeSubscriptionCredit: NotificationType;
3227
+ export declare const NotificationTypeSubscriptionCanceled: NotificationType;
3228
+ export declare const NotificationTypeSubscriptionTrialEnding: NotificationType;
3124
3229
  /**
3125
3230
  * Account notifications
3126
3231
  */
package/dist/types.js CHANGED
@@ -246,6 +246,21 @@ export const ScopeGroupEngines = "engines";
246
246
  export const ScopeGroupApiKeys = "apikeys";
247
247
  export const ScopeGroupUser = "user";
248
248
  export const ScopeGroupSettings = "settings";
249
+ /**
250
+ * Requirement error types
251
+ */
252
+ export const RequirementTypeSecret = "secret";
253
+ /**
254
+ * Requirement error types
255
+ */
256
+ export const RequirementTypeIntegration = "integration";
257
+ /**
258
+ * Requirement error types
259
+ */
260
+ export const RequirementTypeScope = "scope";
261
+ export const SetupActionAddSecret = "add_secret";
262
+ export const SetupActionConnect = "connect";
263
+ export const SetupActionAddScopes = "add_scopes";
249
264
  export const AppCategoryImage = "image";
250
265
  export const AppCategoryVideo = "video";
251
266
  export const AppCategoryAudio = "audio";
@@ -298,6 +313,7 @@ export const IntegrationTypeTelegram = "telegram";
298
313
  export const EngineStatusRunning = "running";
299
314
  export const EngineStatusPending = "pending";
300
315
  export const EngineStatusDraining = "draining";
316
+ export const EngineStatusDisconnected = "disconnected";
301
317
  export const EngineStatusStopping = "stopping";
302
318
  export const EngineStatusStopped = "stopped";
303
319
  export const WorkerStatusReserved = "reserved";
@@ -318,6 +334,8 @@ export const GraphNodeTypeResource = "resource";
318
334
  export const GraphNodeTypeApproval = "approval";
319
335
  export const GraphNodeTypeConditional = "conditional";
320
336
  export const GraphNodeTypeFlowNode = "flow_node";
337
+ export const GraphNodeTypeTrigger = "trigger";
338
+ export const GraphNodeTypeIntegrationRequirement = "integration_requirement";
321
339
  export const GraphNodeStatusPending = "pending";
322
340
  export const GraphNodeStatusReady = "ready";
323
341
  export const GraphNodeStatusRunning = "running";
@@ -479,18 +497,42 @@ export const DeviceAuthStatusDenied = "denied";
479
497
  export const DeviceAuthStatusValid = "valid";
480
498
  export const DeviceAuthStatusInvalid = "invalid";
481
499
  export const DeviceAuthStatusLoading = "loading";
500
+ /**
501
+ * DeviceTokenKindSession mints a revocable CLI session (acts as the user,
502
+ * supports team switching via X-Team-ID).
503
+ */
504
+ export const DeviceTokenKindSession = "session";
505
+ /**
506
+ * DeviceTokenKindAPIKey mints a device-scoped API key.
507
+ * TODO: retire once CLIs older than the session-token release are gone.
508
+ */
509
+ export const DeviceTokenKindAPIKey = "api_key";
510
+ /**
511
+ * Capacity limits — scale with tier
512
+ */
482
513
  export const ResourceAPIKeys = "api_keys";
483
514
  export const ResourceConnectors = "connectors";
484
515
  export const ResourceKnowledgeBases = "knowledge_bases";
485
- export const ResourcePrivateApps = "private_apps";
486
516
  export const ResourceStorageMB = "storage_mb";
487
517
  export const ResourceConcurrency = "concurrency";
488
518
  export const ResourceRatePerMin = "rate_per_min";
489
519
  export const ResourceSeats = "seats";
520
+ export const ResourceTriggers = "triggers";
521
+ export const ResourceRetentionDays = "retention_days";
522
+ /**
523
+ * Legacy — kept for DB compatibility, no longer in plan seeds
524
+ */
525
+ export const ResourcePrivateApps = "private_apps";
490
526
  export const ResourceTaskExecutions = "task_executions";
527
+ /**
528
+ * Feature gates — only what has real cost/complexity
529
+ */
530
+ export const ResourceFeatureBYOK = "feature:byok";
531
+ /**
532
+ * Legacy feature gates — kept for DB compatibility, no longer gated
533
+ */
491
534
  export const ResourceFeatureScopes = "feature:scopes";
492
535
  export const ResourceFeatureWebhooks = "feature:webhooks";
493
- export const ResourceFeatureBYOK = "feature:byok";
494
536
  export const ResourceFeatureTeamBilling = "feature:team_billing";
495
537
  export const ResourceFeatureAutoRecharge = "feature:auto_recharge";
496
538
  export const ResourceFeatureInvoices = "feature:invoices";
@@ -503,6 +545,7 @@ export const ContentViolenceGraphic = "violence_graphic";
503
545
  export const ContentGore = "gore";
504
546
  export const ContentUnrated = "unrated";
505
547
  export const IntegrationProviderGoogle = "google";
548
+ export const IntegrationProviderGoogleSA = "google-sa";
506
549
  export const IntegrationProviderSlack = "slack";
507
550
  export const IntegrationProviderNotion = "notion";
508
551
  export const IntegrationProviderGitHub = "github";
@@ -518,10 +561,19 @@ export const IntegrationAuthTypeOAuth = "oauth";
518
561
  export const IntegrationAuthTypeAPIKey = "api_key";
519
562
  export const IntegrationAuthTypeWIF = "wif";
520
563
  export const IntegrationAuthTypeMCP = "mcp";
564
+ export const IntegrationStatusPending = "pending";
521
565
  export const IntegrationStatusConnected = "connected";
522
566
  export const IntegrationStatusDisconnected = "disconnected";
523
567
  export const IntegrationStatusExpired = "expired";
524
568
  export const IntegrationStatusError = "error";
569
+ /**
570
+ * IntegrationScopeTeam is owned by a user/team (BYOK credentials, user connections)
571
+ */
572
+ export const IntegrationScopeTeam = "team";
573
+ /**
574
+ * IntegrationScopePlatform is owned by the platform (managed credentials, admin-configured)
575
+ */
576
+ export const IntegrationScopePlatform = "platform";
525
577
  export const WidgetNodeTypeText = "text";
526
578
  export const WidgetNodeTypeMarkdown = "markdown";
527
579
  export const WidgetNodeTypeImage = "image";
@@ -566,6 +618,10 @@ export const NotificationTypePaymentFailed = "payment_failed";
566
618
  export const NotificationTypeUsageSummary = "usage_summary";
567
619
  export const NotificationTypeSpendingLimit = "spending_limit";
568
620
  export const NotificationTypeInvoice = "invoice";
621
+ export const NotificationTypeSubscriptionCreated = "subscription_created";
622
+ export const NotificationTypeSubscriptionCredit = "subscription_credit";
623
+ export const NotificationTypeSubscriptionCanceled = "subscription_canceled";
624
+ export const NotificationTypeSubscriptionTrialEnding = "subscription_trial_ending";
569
625
  /**
570
626
  * Account notifications
571
627
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inferencesh/sdk",
3
- "version": "0.6.10",
3
+ "version": "0.6.12",
4
4
  "description": "Official JavaScript/TypeScript SDK for inference.sh - Run AI models with a simple API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -41,11 +41,11 @@
41
41
  },
42
42
  "scripts": {
43
43
  "build": "tsc",
44
- "test": "jest --testPathIgnorePatterns=integration",
44
+ "test": "jest --testPathIgnorePatterns=/integration\\.test\\.ts$ --testPathIgnorePatterns=\\.integration\\.test\\.ts$",
45
45
  "test:integration": "jest --testPathPattern=integration --testTimeout=120000 --runInBand",
46
46
  "test:all": "jest --testTimeout=120000 --runInBand",
47
- "test:watch": "jest --watch --testPathIgnorePatterns=integration",
48
- "test:coverage": "jest --coverage --testPathIgnorePatterns=integration",
47
+ "test:watch": "jest --watch --testPathIgnorePatterns=/integration\\.test\\.ts$ --testPathIgnorePatterns=\\.integration\\.test\\.ts$",
48
+ "test:coverage": "jest --coverage --testPathIgnorePatterns=/integration\\.test\\.ts$ --testPathIgnorePatterns=\\.integration\\.test\\.ts$",
49
49
  "lint": "eslint src --ext .ts",
50
50
  "lint:fix": "eslint src --ext .ts --fix",
51
51
  "format": "prettier --write \"src/**/*.ts\"",