@hasna/connectors 0.5.7 → 0.5.9

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 (138) hide show
  1. package/README.md +48 -9
  2. package/bin/index.js +57 -1
  3. package/bin/mcp.js +57 -1
  4. package/bin/serve.js +56 -0
  5. package/connectors/connect-chargebee/.env.example +11 -0
  6. package/connectors/connect-chargebee/CLAUDE.md +272 -0
  7. package/connectors/connect-chargebee/README.md +193 -0
  8. package/connectors/connect-chargebee/package.json +51 -0
  9. package/connectors/connect-chargebee/scripts/release.ts +179 -0
  10. package/connectors/connect-chargebee/src/api/client.ts +213 -0
  11. package/connectors/connect-chargebee/src/api/example.ts +48 -0
  12. package/connectors/connect-chargebee/src/api/index.ts +51 -0
  13. package/connectors/connect-chargebee/src/cli/index.ts +254 -0
  14. package/connectors/connect-chargebee/src/index.ts +103 -0
  15. package/connectors/connect-chargebee/src/types/index.ts +237 -0
  16. package/connectors/connect-chargebee/src/utils/auth.ts +274 -0
  17. package/connectors/connect-chargebee/src/utils/bulk.ts +212 -0
  18. package/connectors/connect-chargebee/src/utils/config.ts +326 -0
  19. package/connectors/connect-chargebee/src/utils/output.ts +175 -0
  20. package/connectors/connect-chargebee/src/utils/settings.ts +114 -0
  21. package/connectors/connect-chargebee/src/utils/storage.ts +198 -0
  22. package/connectors/connect-chargebee/tsconfig.json +16 -0
  23. package/connectors/connect-databricks/.env.example +11 -0
  24. package/connectors/connect-databricks/CLAUDE.md +272 -0
  25. package/connectors/connect-databricks/README.md +193 -0
  26. package/connectors/connect-databricks/package.json +51 -0
  27. package/connectors/connect-databricks/scripts/release.ts +179 -0
  28. package/connectors/connect-databricks/src/api/client.ts +213 -0
  29. package/connectors/connect-databricks/src/api/example.ts +48 -0
  30. package/connectors/connect-databricks/src/api/index.ts +51 -0
  31. package/connectors/connect-databricks/src/cli/index.ts +254 -0
  32. package/connectors/connect-databricks/src/index.ts +103 -0
  33. package/connectors/connect-databricks/src/types/index.ts +237 -0
  34. package/connectors/connect-databricks/src/utils/auth.ts +274 -0
  35. package/connectors/connect-databricks/src/utils/bulk.ts +212 -0
  36. package/connectors/connect-databricks/src/utils/config.ts +326 -0
  37. package/connectors/connect-databricks/src/utils/output.ts +175 -0
  38. package/connectors/connect-databricks/src/utils/settings.ts +114 -0
  39. package/connectors/connect-databricks/src/utils/storage.ts +198 -0
  40. package/connectors/connect-databricks/tsconfig.json +16 -0
  41. package/connectors/connect-datadog/.env.example +11 -0
  42. package/connectors/connect-datadog/CLAUDE.md +170 -0
  43. package/connectors/connect-datadog/README.md +193 -0
  44. package/connectors/connect-datadog/package.json +53 -0
  45. package/connectors/connect-datadog/src/api/client.ts +150 -0
  46. package/connectors/connect-datadog/src/api/index.ts +537 -0
  47. package/connectors/connect-datadog/src/cli/index.ts +958 -0
  48. package/connectors/connect-datadog/src/index.ts +26 -0
  49. package/connectors/connect-datadog/src/types/index.ts +654 -0
  50. package/connectors/connect-datadog/src/utils/config.ts +219 -0
  51. package/connectors/connect-datadog/src/utils/output.ts +119 -0
  52. package/connectors/connect-datadog/tsconfig.json +16 -0
  53. package/connectors/connect-fathom/.env.example +11 -0
  54. package/connectors/connect-fathom/CLAUDE.md +272 -0
  55. package/connectors/connect-fathom/README.md +193 -0
  56. package/connectors/connect-fathom/package.json +51 -0
  57. package/connectors/connect-fathom/scripts/release.ts +179 -0
  58. package/connectors/connect-fathom/src/api/client.ts +213 -0
  59. package/connectors/connect-fathom/src/api/example.ts +48 -0
  60. package/connectors/connect-fathom/src/api/index.ts +51 -0
  61. package/connectors/connect-fathom/src/cli/index.ts +254 -0
  62. package/connectors/connect-fathom/src/index.ts +103 -0
  63. package/connectors/connect-fathom/src/types/index.ts +237 -0
  64. package/connectors/connect-fathom/src/utils/auth.ts +274 -0
  65. package/connectors/connect-fathom/src/utils/bulk.ts +212 -0
  66. package/connectors/connect-fathom/src/utils/config.ts +326 -0
  67. package/connectors/connect-fathom/src/utils/output.ts +175 -0
  68. package/connectors/connect-fathom/src/utils/settings.ts +114 -0
  69. package/connectors/connect-fathom/src/utils/storage.ts +198 -0
  70. package/connectors/connect-fathom/tsconfig.json +16 -0
  71. package/connectors/connect-grafana/.env.example +11 -0
  72. package/connectors/connect-grafana/CLAUDE.md +272 -0
  73. package/connectors/connect-grafana/README.md +193 -0
  74. package/connectors/connect-grafana/package.json +51 -0
  75. package/connectors/connect-grafana/scripts/release.ts +179 -0
  76. package/connectors/connect-grafana/src/api/client.ts +213 -0
  77. package/connectors/connect-grafana/src/api/example.ts +48 -0
  78. package/connectors/connect-grafana/src/api/index.ts +51 -0
  79. package/connectors/connect-grafana/src/cli/index.ts +254 -0
  80. package/connectors/connect-grafana/src/index.ts +103 -0
  81. package/connectors/connect-grafana/src/types/index.ts +237 -0
  82. package/connectors/connect-grafana/src/utils/auth.ts +274 -0
  83. package/connectors/connect-grafana/src/utils/bulk.ts +212 -0
  84. package/connectors/connect-grafana/src/utils/config.ts +326 -0
  85. package/connectors/connect-grafana/src/utils/output.ts +175 -0
  86. package/connectors/connect-grafana/src/utils/settings.ts +114 -0
  87. package/connectors/connect-grafana/src/utils/storage.ts +198 -0
  88. package/connectors/connect-grafana/tsconfig.json +16 -0
  89. package/connectors/connect-paddle/.env.example +11 -0
  90. package/connectors/connect-paddle/CLAUDE.md +272 -0
  91. package/connectors/connect-paddle/README.md +193 -0
  92. package/connectors/connect-paddle/package.json +51 -0
  93. package/connectors/connect-paddle/scripts/release.ts +179 -0
  94. package/connectors/connect-paddle/src/api/client.ts +213 -0
  95. package/connectors/connect-paddle/src/api/example.ts +48 -0
  96. package/connectors/connect-paddle/src/api/index.ts +51 -0
  97. package/connectors/connect-paddle/src/cli/index.ts +254 -0
  98. package/connectors/connect-paddle/src/index.ts +103 -0
  99. package/connectors/connect-paddle/src/types/index.ts +237 -0
  100. package/connectors/connect-paddle/src/utils/auth.ts +274 -0
  101. package/connectors/connect-paddle/src/utils/bulk.ts +212 -0
  102. package/connectors/connect-paddle/src/utils/config.ts +326 -0
  103. package/connectors/connect-paddle/src/utils/output.ts +175 -0
  104. package/connectors/connect-paddle/src/utils/settings.ts +114 -0
  105. package/connectors/connect-paddle/src/utils/storage.ts +198 -0
  106. package/connectors/connect-paddle/tsconfig.json +16 -0
  107. package/connectors/connect-snowflake/.env.example +11 -0
  108. package/connectors/connect-snowflake/CLAUDE.md +272 -0
  109. package/connectors/connect-snowflake/README.md +193 -0
  110. package/connectors/connect-snowflake/package.json +51 -0
  111. package/connectors/connect-snowflake/scripts/release.ts +179 -0
  112. package/connectors/connect-snowflake/src/api/client.ts +213 -0
  113. package/connectors/connect-snowflake/src/api/example.ts +48 -0
  114. package/connectors/connect-snowflake/src/api/index.ts +51 -0
  115. package/connectors/connect-snowflake/src/cli/index.ts +254 -0
  116. package/connectors/connect-snowflake/src/index.ts +103 -0
  117. package/connectors/connect-snowflake/src/types/index.ts +237 -0
  118. package/connectors/connect-snowflake/src/utils/auth.ts +274 -0
  119. package/connectors/connect-snowflake/src/utils/bulk.ts +212 -0
  120. package/connectors/connect-snowflake/src/utils/config.ts +326 -0
  121. package/connectors/connect-snowflake/src/utils/output.ts +175 -0
  122. package/connectors/connect-snowflake/src/utils/settings.ts +114 -0
  123. package/connectors/connect-snowflake/src/utils/storage.ts +198 -0
  124. package/connectors/connect-snowflake/tsconfig.json +16 -0
  125. package/connectors/connect-square/.env.example +11 -0
  126. package/connectors/connect-square/CLAUDE.md +128 -0
  127. package/connectors/connect-square/README.md +193 -0
  128. package/connectors/connect-square/package.json +52 -0
  129. package/connectors/connect-square/src/api/client.ts +152 -0
  130. package/connectors/connect-square/src/api/index.ts +343 -0
  131. package/connectors/connect-square/src/cli/index.ts +579 -0
  132. package/connectors/connect-square/src/index.ts +21 -0
  133. package/connectors/connect-square/src/types/index.ts +809 -0
  134. package/connectors/connect-square/src/utils/config.ts +209 -0
  135. package/connectors/connect-square/src/utils/output.ts +119 -0
  136. package/connectors/connect-square/tsconfig.json +16 -0
  137. package/dist/index.js +56 -0
  138. package/package.json +1 -1
package/README.md CHANGED
@@ -1,21 +1,42 @@
1
1
  # Connectors
2
2
 
3
- Open source library of 62 TypeScript API connectors. Install any connector with a single command.
3
+ Open source library of 126 TypeScript API connectors. Set up any connector in 30 seconds.
4
4
 
5
- ## Quick Start
5
+ ## 30-Second Quickstart
6
+
7
+ ```bash
8
+ # Install globally
9
+ bun install -g @hasna/connectors
10
+
11
+ # Set up a connector (install + auth in one step)
12
+ connectors setup stripe --key sk_test_your_key_here
13
+
14
+ # Use it immediately
15
+ connectors run stripe products list
16
+ connectors run stripe customers create --email "test@example.com"
17
+
18
+ # Discover what any connector can do
19
+ connectors ops stripe
20
+ connectors ops gmail
21
+ connectors ops anthropic
22
+ ```
23
+
24
+ **That's it.** `setup` installs the connector and saves your API key. `run` executes any operation. `ops` shows what's available.
25
+
26
+ ## Quick Start (Alternative Methods)
6
27
 
7
28
  ```bash
8
29
  # Interactive mode - browse and select connectors
9
30
  npx @hasna/connectors
10
31
 
11
32
  # Install specific connectors
12
- npx @hasna/connectors install figma stripe github
33
+ connectors install figma stripe github
13
34
 
14
- # List all available connectors
15
- npx @hasna/connectors list
35
+ # List all 126 connectors
36
+ connectors list
16
37
 
17
38
  # Open the auth dashboard
18
- npx @hasna/connectors serve
39
+ connectors serve
19
40
  ```
20
41
 
21
42
  ## Installation
@@ -69,7 +90,7 @@ connectors open # Open dashboard in browser
69
90
  connectors dashboard # Alias for serve
70
91
  ```
71
92
 
72
- The dashboard shows all 62 connectors with:
93
+ The dashboard shows all 126 connectors with:
73
94
  - Install status and auth type (OAuth, API Key, Bearer)
74
95
  - Configure API keys via dialog
75
96
  - Run OAuth flows for Google connectors
@@ -93,7 +114,25 @@ Add to your MCP config:
93
114
  }
94
115
  ```
95
116
 
96
- Tools: `search_connectors`, `list_connectors`, `list_categories`, `connector_docs`, `connector_info`, `install_connector`, `remove_connector`, `list_installed`, `connector_auth_status`, `configure_auth`
117
+ Tools: `search_connectors`, `list_connectors`, `list_categories`, `connector_docs`, `connector_info`, `install_connector`, `remove_connector`, `list_installed`, `connector_auth_status`, `configure_auth`, `setup_connector`, `list_connector_operations`, `run_connector_operation`
118
+
119
+ ### Use Connectors (ops + run)
120
+
121
+ ```bash
122
+ # Discover what a connector can do
123
+ connectors ops stripe # List all operations
124
+ connectors ops stripe products # Detailed help for products
125
+
126
+ # Execute any operation
127
+ connectors run stripe products list --limit 5
128
+ connectors run anthropic models
129
+ connectors run gmail messages list --limit 10
130
+ connectors run github repo list
131
+
132
+ # One-step setup (install + auth + verify)
133
+ connectors setup anthropic --key your-anthropic-api-key
134
+ connectors setup stripe --key sk_test_your-key
135
+ ```
97
136
 
98
137
  ### JSON Output (for scripts & agents)
99
138
 
@@ -106,7 +145,7 @@ connectors info stripe --json
106
145
  connectors docs gmail --json
107
146
  ```
108
147
 
109
- ## Available Connectors (62)
148
+ ## Available Connectors (126)
110
149
 
111
150
  ### AI & ML (12)
112
151
  | Connector | Description |
package/bin/index.js CHANGED
@@ -2801,6 +2801,62 @@ var init_registry = __esm(() => {
2801
2801
  description: "Visual collaboration and whiteboarding",
2802
2802
  category: "Business Tools",
2803
2803
  tags: ["whiteboard", "collaboration", "design"]
2804
+ },
2805
+ {
2806
+ name: "square",
2807
+ displayName: "Square",
2808
+ description: "Payments, POS, and commerce",
2809
+ category: "Commerce & Finance",
2810
+ tags: ["payments", "pos", "commerce"]
2811
+ },
2812
+ {
2813
+ name: "paddle",
2814
+ displayName: "Paddle",
2815
+ description: "SaaS billing and payments",
2816
+ category: "Commerce & Finance",
2817
+ tags: ["payments", "billing", "saas"]
2818
+ },
2819
+ {
2820
+ name: "chargebee",
2821
+ displayName: "Chargebee",
2822
+ description: "Subscription billing and revenue management",
2823
+ category: "Commerce & Finance",
2824
+ tags: ["billing", "subscriptions"]
2825
+ },
2826
+ {
2827
+ name: "fathom",
2828
+ displayName: "Fathom Analytics",
2829
+ description: "Privacy-first website analytics",
2830
+ category: "Data & Analytics",
2831
+ tags: ["analytics", "privacy"]
2832
+ },
2833
+ {
2834
+ name: "snowflake",
2835
+ displayName: "Snowflake",
2836
+ description: "Cloud data warehouse",
2837
+ category: "Data & Analytics",
2838
+ tags: ["data", "warehouse", "sql"]
2839
+ },
2840
+ {
2841
+ name: "databricks",
2842
+ displayName: "Databricks",
2843
+ description: "Data lakehouse and ML platform",
2844
+ category: "Data & Analytics",
2845
+ tags: ["data", "ml", "lakehouse"]
2846
+ },
2847
+ {
2848
+ name: "datadog",
2849
+ displayName: "Datadog",
2850
+ description: "Monitoring and observability",
2851
+ category: "Developer Tools",
2852
+ tags: ["monitoring", "observability", "apm"]
2853
+ },
2854
+ {
2855
+ name: "grafana",
2856
+ displayName: "Grafana",
2857
+ description: "Dashboards and observability",
2858
+ category: "Developer Tools",
2859
+ tags: ["monitoring", "dashboards", "observability"]
2804
2860
  }
2805
2861
  ];
2806
2862
  });
@@ -7314,7 +7370,7 @@ var PRESETS = {
7314
7370
  commerce: { description: "Commerce and finance", connectors: ["stripe", "shopify", "revolut", "mercury", "pandadoc"] }
7315
7371
  };
7316
7372
  var program2 = new Command;
7317
- program2.name("connectors").description("Install API connectors for your project").version("0.5.7").enablePositionalOptions();
7373
+ program2.name("connectors").description("Install API connectors for your project").version("0.5.9").enablePositionalOptions();
7318
7374
  program2.command("interactive", { isDefault: true }).alias("i").description("Interactive connector browser").action(() => {
7319
7375
  if (!isTTY) {
7320
7376
  console.log(`Non-interactive environment detected. Use a subcommand:
package/bin/mcp.js CHANGED
@@ -20289,6 +20289,62 @@ var CONNECTORS = [
20289
20289
  description: "Visual collaboration and whiteboarding",
20290
20290
  category: "Business Tools",
20291
20291
  tags: ["whiteboard", "collaboration", "design"]
20292
+ },
20293
+ {
20294
+ name: "square",
20295
+ displayName: "Square",
20296
+ description: "Payments, POS, and commerce",
20297
+ category: "Commerce & Finance",
20298
+ tags: ["payments", "pos", "commerce"]
20299
+ },
20300
+ {
20301
+ name: "paddle",
20302
+ displayName: "Paddle",
20303
+ description: "SaaS billing and payments",
20304
+ category: "Commerce & Finance",
20305
+ tags: ["payments", "billing", "saas"]
20306
+ },
20307
+ {
20308
+ name: "chargebee",
20309
+ displayName: "Chargebee",
20310
+ description: "Subscription billing and revenue management",
20311
+ category: "Commerce & Finance",
20312
+ tags: ["billing", "subscriptions"]
20313
+ },
20314
+ {
20315
+ name: "fathom",
20316
+ displayName: "Fathom Analytics",
20317
+ description: "Privacy-first website analytics",
20318
+ category: "Data & Analytics",
20319
+ tags: ["analytics", "privacy"]
20320
+ },
20321
+ {
20322
+ name: "snowflake",
20323
+ displayName: "Snowflake",
20324
+ description: "Cloud data warehouse",
20325
+ category: "Data & Analytics",
20326
+ tags: ["data", "warehouse", "sql"]
20327
+ },
20328
+ {
20329
+ name: "databricks",
20330
+ displayName: "Databricks",
20331
+ description: "Data lakehouse and ML platform",
20332
+ category: "Data & Analytics",
20333
+ tags: ["data", "ml", "lakehouse"]
20334
+ },
20335
+ {
20336
+ name: "datadog",
20337
+ displayName: "Datadog",
20338
+ description: "Monitoring and observability",
20339
+ category: "Developer Tools",
20340
+ tags: ["monitoring", "observability", "apm"]
20341
+ },
20342
+ {
20343
+ name: "grafana",
20344
+ displayName: "Grafana",
20345
+ description: "Dashboards and observability",
20346
+ category: "Developer Tools",
20347
+ tags: ["monitoring", "dashboards", "observability"]
20292
20348
  }
20293
20349
  ];
20294
20350
  function getConnectorsByCategory(category) {
@@ -20796,7 +20852,7 @@ async function getConnectorCommandHelp(name, command) {
20796
20852
  loadConnectorVersions();
20797
20853
  var server = new McpServer({
20798
20854
  name: "connectors",
20799
- version: "0.5.7"
20855
+ version: "0.5.9"
20800
20856
  });
20801
20857
  server.registerTool("search_connectors", {
20802
20858
  title: "Search Connectors",
package/bin/serve.js CHANGED
@@ -894,6 +894,62 @@ var CONNECTORS = [
894
894
  description: "Visual collaboration and whiteboarding",
895
895
  category: "Business Tools",
896
896
  tags: ["whiteboard", "collaboration", "design"]
897
+ },
898
+ {
899
+ name: "square",
900
+ displayName: "Square",
901
+ description: "Payments, POS, and commerce",
902
+ category: "Commerce & Finance",
903
+ tags: ["payments", "pos", "commerce"]
904
+ },
905
+ {
906
+ name: "paddle",
907
+ displayName: "Paddle",
908
+ description: "SaaS billing and payments",
909
+ category: "Commerce & Finance",
910
+ tags: ["payments", "billing", "saas"]
911
+ },
912
+ {
913
+ name: "chargebee",
914
+ displayName: "Chargebee",
915
+ description: "Subscription billing and revenue management",
916
+ category: "Commerce & Finance",
917
+ tags: ["billing", "subscriptions"]
918
+ },
919
+ {
920
+ name: "fathom",
921
+ displayName: "Fathom Analytics",
922
+ description: "Privacy-first website analytics",
923
+ category: "Data & Analytics",
924
+ tags: ["analytics", "privacy"]
925
+ },
926
+ {
927
+ name: "snowflake",
928
+ displayName: "Snowflake",
929
+ description: "Cloud data warehouse",
930
+ category: "Data & Analytics",
931
+ tags: ["data", "warehouse", "sql"]
932
+ },
933
+ {
934
+ name: "databricks",
935
+ displayName: "Databricks",
936
+ description: "Data lakehouse and ML platform",
937
+ category: "Data & Analytics",
938
+ tags: ["data", "ml", "lakehouse"]
939
+ },
940
+ {
941
+ name: "datadog",
942
+ displayName: "Datadog",
943
+ description: "Monitoring and observability",
944
+ category: "Developer Tools",
945
+ tags: ["monitoring", "observability", "apm"]
946
+ },
947
+ {
948
+ name: "grafana",
949
+ displayName: "Grafana",
950
+ description: "Dashboards and observability",
951
+ category: "Developer Tools",
952
+ tags: ["monitoring", "dashboards", "observability"]
897
953
  }
898
954
  ];
899
955
  function getConnector(name) {
@@ -0,0 +1,11 @@
1
+ # API Credentials
2
+ # TODO: Update variable names and instructions for your API
3
+ # Example: PERPLEXITY_API_KEY, OPENAI_API_KEY, etc.
4
+
5
+ CONNECTOR_API_KEY=your-api-key-here
6
+
7
+ # Optional: API secret (if your API requires it)
8
+ # CONNECTOR_API_SECRET=your-api-secret-here
9
+
10
+ # Optional: Custom base URL (if needed)
11
+ # CONNECTOR_BASE_URL=https://api.example.com
@@ -0,0 +1,272 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ scaffold-connector is a TypeScript template for building API connector CLIs. It provides multi-profile configuration, Bearer token authentication (customizable), OAuth2 support, and a clean CLI structure using Commander.js.
8
+
9
+ **This is a SCAFFOLD** - meant to be cloned and customized for specific APIs.
10
+
11
+ ## Build & Run Commands
12
+
13
+ ```bash
14
+ # Install dependencies
15
+ bun install
16
+
17
+ # Run CLI in development
18
+ bun run dev
19
+
20
+ # Build for distribution
21
+ bun run build
22
+
23
+ # Type check
24
+ bun run typecheck
25
+
26
+ # Run specific commands
27
+ bun run dev profile list
28
+ bun run dev config show
29
+ bun run dev example list
30
+
31
+ # Release (auto-bump patch version and publish)
32
+ bun run release
33
+ bun run release:dry # Preview only
34
+ ```
35
+
36
+ ## Code Style
37
+
38
+ - TypeScript with strict mode
39
+ - ESM modules (type: module)
40
+ - Use async/await for all async operations
41
+ - Minimal dependencies: commander, chalk only
42
+ - Type annotations required everywhere
43
+ - Use interfaces for all API types
44
+
45
+ ## Project Structure
46
+
47
+ ```
48
+ src/
49
+ ├── api/
50
+ │ ├── client.ts # HTTP client with auth, retry, timeout
51
+ │ ├── example.ts # Example API module (template)
52
+ │ └── index.ts # Main connector class
53
+ ├── cli/
54
+ │ └── index.ts # CLI commands
55
+ ├── types/
56
+ │ └── index.ts # Type definitions
57
+ ├── utils/
58
+ │ ├── auth.ts # OAuth2 authentication
59
+ │ ├── bulk.ts # Bulk operation utilities
60
+ │ ├── config.ts # Multi-profile configuration
61
+ │ ├── output.ts # CLI output formatting
62
+ │ ├── settings.ts # User preferences storage
63
+ │ └── storage.ts # Local data storage
64
+ ├── index.ts # Library exports
65
+ scripts/
66
+ └── release.ts # Release automation
67
+ ```
68
+
69
+ ## Key Patterns
70
+
71
+ ### Multi-Profile Configuration
72
+
73
+ Profiles stored in `~/.connect/{connector-name}/profiles/`:
74
+ - Each profile is a separate JSON file
75
+ - `current_profile` file tracks active profile
76
+ - `--profile` flag overrides for single command
77
+ - Environment variables override profile config
78
+
79
+ ### Authentication
80
+
81
+ **Bearer Token (Default)** in `src/api/client.ts`:
82
+ ```typescript
83
+ 'Authorization': `Bearer ${this.apiKey}`,
84
+ ```
85
+
86
+ **Supported Auth Methods:**
87
+ - Bearer token: `'Authorization': 'Bearer ${token}'`
88
+ - API Key header: `'X-API-Key': ${apiKey}`
89
+ - Basic auth: `'Authorization': 'Basic ' + base64(key:secret)`
90
+ - OAuth2: Use the auth utilities (see below)
91
+
92
+ ### OAuth2 Authentication
93
+
94
+ For APIs that require OAuth2, use the auth utilities:
95
+
96
+ ```typescript
97
+ import { getAuthUrl, startCallbackServer, getValidAccessToken } from './utils/auth';
98
+
99
+ // Start OAuth flow
100
+ const authUrl = getAuthUrl({ scopes: 'read write' });
101
+ // Open authUrl in browser
102
+ const result = await startCallbackServer();
103
+ if (result.success) {
104
+ saveOAuthTokens(result.tokens);
105
+ }
106
+
107
+ // Get valid access token (auto-refreshes if needed)
108
+ const token = await getValidAccessToken();
109
+ ```
110
+
111
+ ### Settings Storage
112
+
113
+ Store user preferences with the settings utility:
114
+
115
+ ```typescript
116
+ import { getSetting, setSetting, loadSettings } from './utils/settings';
117
+
118
+ // Get a setting
119
+ const format = getSetting('defaultFormat');
120
+
121
+ // Set a setting
122
+ setSetting('verboseOutput', true);
123
+ ```
124
+
125
+ ### Local Data Storage
126
+
127
+ Store local data (like contacts, cache) with the storage utility:
128
+
129
+ ```typescript
130
+ import { createStorage, type Storable } from './utils/storage';
131
+
132
+ interface Contact extends Storable {
133
+ id: string;
134
+ email: string;
135
+ name?: string;
136
+ }
137
+
138
+ const contacts = createStorage<Contact>('contacts');
139
+
140
+ // Save
141
+ contacts.save({ id: 'user@example.com', email: 'user@example.com', name: 'User' });
142
+
143
+ // Get
144
+ const contact = contacts.get('user@example.com');
145
+
146
+ // Search
147
+ const results = contacts.searchByText('example');
148
+ ```
149
+
150
+ ### Bulk Operations
151
+
152
+ Process multiple items with concurrency control:
153
+
154
+ ```typescript
155
+ import { executeBulk, createProgressReporter } from './utils/bulk';
156
+
157
+ const result = await executeBulk(
158
+ {
159
+ items: users,
160
+ concurrency: 5,
161
+ dryRun: false,
162
+ onProgress: createProgressReporter('Updating users'),
163
+ },
164
+ async (user) => {
165
+ await api.updateUser(user.id, { status: 'active' });
166
+ }
167
+ );
168
+
169
+ console.log(`Success: ${result.success}, Failed: ${result.failed}`);
170
+ ```
171
+
172
+ ### Retry and Rate Limiting
173
+
174
+ The HTTP client includes built-in retry logic:
175
+
176
+ ```typescript
177
+ // Retries are automatic for 429 (rate limit) and 5xx errors
178
+ const data = await client.get('/endpoint', { retries: 3, timeout: 30000 });
179
+ ```
180
+
181
+ ### Adding New API Modules
182
+
183
+ 1. Create file in `src/api/` following `example.ts` pattern
184
+ 2. Add to exports in `src/api/index.ts`
185
+ 3. Add types in `src/types/index.ts`
186
+ 4. Add CLI commands in `src/cli/index.ts`
187
+
188
+ ## TODO Markers
189
+
190
+ When customizing this scaffold, search for `TODO` comments:
191
+
192
+ - `src/cli/index.ts:22-24` - CONNECTOR_NAME, VERSION, description
193
+ - `src/utils/config.ts:5-6` - CONNECTOR_NAME, env var prefix
194
+ - `src/utils/auth.ts:10-15` - OAuth URLs and scopes
195
+ - `src/api/client.ts:5` - DEFAULT_BASE_URL
196
+ - `src/api/client.ts:55-60` - Authentication method
197
+ - `src/api/index.ts:7` - Rename Connector class
198
+ - `src/types/index.ts` - Replace example types
199
+
200
+ ## Environment Variables
201
+
202
+ | Variable | Description |
203
+ |----------|-------------|
204
+ | `CONNECTOR_API_KEY` | API key (overrides profile) |
205
+ | `CONNECTOR_TOKEN` | Token (alias for API key) |
206
+ | `CONNECTOR_API_SECRET` | API secret (optional) |
207
+ | `CONNECTOR_BASE_URL` | Override base URL |
208
+
209
+ ## CLI Global Flags
210
+
211
+ | Flag | Description |
212
+ |------|-------------|
213
+ | `-k, --api-key <key>` | Override API key for this command |
214
+ | `-p, --profile <name>` | Use specific profile |
215
+ | `-f, --format <format>` | Output format (json, pretty, table) |
216
+ | `-v, --verbose` | Enable debug output |
217
+
218
+ ## Data Storage
219
+
220
+ ```
221
+ ~/.connect/{connector-name}/
222
+ ├── current_profile # Active profile name
223
+ ├── settings.json # User preferences
224
+ ├── data/ # Local data storage
225
+ │ └── {entity}/ # Entity-specific storage
226
+ │ └── *.json
227
+ └── profiles/
228
+ ├── default.json # Default profile
229
+ └── {name}.json # Named profiles
230
+ ```
231
+
232
+ Profile JSON structure:
233
+ ```json
234
+ {
235
+ "apiKey": "sk-xxx",
236
+ "token": "sk-xxx",
237
+ "apiSecret": "optional",
238
+ "accessToken": "oauth-access-token",
239
+ "refreshToken": "oauth-refresh-token",
240
+ "expiresAt": 1234567890,
241
+ "clientId": "oauth-client-id",
242
+ "clientSecret": "oauth-client-secret"
243
+ }
244
+ ```
245
+
246
+ ## Dependencies
247
+
248
+ - commander: CLI framework
249
+ - chalk: Terminal styling
250
+
251
+ ## Error Handling
252
+
253
+ The scaffold includes enhanced error types:
254
+
255
+ ```typescript
256
+ import { ConnectorApiError, parseApiError } from './types';
257
+
258
+ try {
259
+ await api.get('/endpoint');
260
+ } catch (err) {
261
+ if (err instanceof ConnectorApiError) {
262
+ if (err.isRateLimited()) {
263
+ // Handle rate limiting
264
+ }
265
+ if (err.isAuthError()) {
266
+ // Handle auth errors
267
+ }
268
+ console.log(err.getUserMessage());
269
+ console.log(err.documentationUrl);
270
+ }
271
+ }
272
+ ```