@ariadng/sheets 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -2
- package/README.md +453 -299
- package/bin/sheets.js +3 -0
- package/dist/api/index.d.ts +31 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +87 -0
- package/dist/api/index.js.map +1 -0
- package/dist/auth/constants.d.ts +13 -0
- package/dist/auth/constants.d.ts.map +1 -0
- package/dist/auth/constants.js +21 -0
- package/dist/auth/constants.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +22 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth.d.ts +11 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +14 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/service-account.d.ts +18 -0
- package/dist/auth/service-account.d.ts.map +1 -0
- package/dist/auth/service-account.js +92 -0
- package/dist/auth/service-account.js.map +1 -0
- package/dist/auth/user-auth.d.ts +24 -0
- package/dist/auth/user-auth.d.ts.map +1 -0
- package/dist/auth/user-auth.js +230 -0
- package/dist/auth/user-auth.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +412 -0
- package/dist/cli.js.map +1 -0
- package/dist/http/index.d.ts +19 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +68 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +133 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +58 -79
- package/dist/advanced/index.d.ts +0 -5
- package/dist/advanced/index.d.ts.map +0 -1
- package/dist/advanced/index.js +0 -1063
- package/dist/advanced/index.mjs +0 -1005
- package/dist/advanced/metrics.d.ts +0 -50
- package/dist/advanced/metrics.d.ts.map +0 -1
- package/dist/advanced/rate-limit.d.ts +0 -27
- package/dist/advanced/rate-limit.d.ts.map +0 -1
- package/dist/core/auth.d.ts +0 -33
- package/dist/core/auth.d.ts.map +0 -1
- package/dist/core/client.d.ts +0 -35
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/errors.d.ts +0 -11
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/index.d.ts +0 -6
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -315
- package/dist/core/index.mjs +0 -271
- package/dist/plus/batch.d.ts +0 -25
- package/dist/plus/batch.d.ts.map +0 -1
- package/dist/plus/cache.d.ts +0 -19
- package/dist/plus/cache.d.ts.map +0 -1
- package/dist/plus/index.d.ts +0 -7
- package/dist/plus/index.d.ts.map +0 -1
- package/dist/plus/index.js +0 -742
- package/dist/plus/index.mjs +0 -691
- package/dist/plus/types.d.ts +0 -39
- package/dist/plus/types.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-auth.js","sourceRoot":"","sources":["../../src/auth/user-auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Google Sheets CLI
|
|
4
|
+
* Command-line interface for Google Sheets operations
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
import { createClient } from './api/index.js';
|
|
10
|
+
import { login, loadStoredTokens, deleteTokens } from './auth/index.js';
|
|
11
|
+
const VERSION = '0.2.0';
|
|
12
|
+
// Claude Skill content embedded in the CLI
|
|
13
|
+
const CLAUDE_SKILL_CONTENT = `---
|
|
14
|
+
name: sheets
|
|
15
|
+
description: Read data from Google Sheets spreadsheets. Use this skill when the user wants to fetch, read, or analyze data from a Google Sheets URL or spreadsheet ID.
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Google Sheets CLI
|
|
19
|
+
|
|
20
|
+
Use \`npx @ariadng/sheets\` to read data from Google Sheets.
|
|
21
|
+
|
|
22
|
+
## Authentication
|
|
23
|
+
|
|
24
|
+
Before reading spreadsheets, check if the user is logged in:
|
|
25
|
+
|
|
26
|
+
\`\`\`bash
|
|
27
|
+
npx @ariadng/sheets whoami
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
If not logged in (exit code 1), ask the user to run:
|
|
31
|
+
|
|
32
|
+
\`\`\`bash
|
|
33
|
+
npx @ariadng/sheets login
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
## Extract Spreadsheet ID
|
|
37
|
+
|
|
38
|
+
From a Google Sheets URL like:
|
|
39
|
+
\`https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit\`
|
|
40
|
+
|
|
41
|
+
The spreadsheet ID is the string between \`/d/\` and \`/edit\`.
|
|
42
|
+
|
|
43
|
+
## Commands
|
|
44
|
+
|
|
45
|
+
### Get spreadsheet metadata
|
|
46
|
+
\`\`\`bash
|
|
47
|
+
npx @ariadng/sheets get SPREADSHEET_ID --format json
|
|
48
|
+
\`\`\`
|
|
49
|
+
|
|
50
|
+
### List all sheets
|
|
51
|
+
\`\`\`bash
|
|
52
|
+
npx @ariadng/sheets list SPREADSHEET_ID --format json
|
|
53
|
+
\`\`\`
|
|
54
|
+
|
|
55
|
+
### Read cell values
|
|
56
|
+
\`\`\`bash
|
|
57
|
+
npx @ariadng/sheets read SPREADSHEET_ID "Sheet1!A1:D10" --format json
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
### Read formulas
|
|
61
|
+
\`\`\`bash
|
|
62
|
+
npx @ariadng/sheets read SPREADSHEET_ID "Sheet1!A1:D10" --formula --format json
|
|
63
|
+
\`\`\`
|
|
64
|
+
|
|
65
|
+
## Range Format
|
|
66
|
+
|
|
67
|
+
- \`Sheet1!A1:D10\` - Cells A1 to D10 on Sheet1
|
|
68
|
+
- \`Sheet1!A:A\` - Entire column A
|
|
69
|
+
- \`Sheet1!1:1\` - Entire row 1
|
|
70
|
+
- \`A1:D10\` - Range on first sheet
|
|
71
|
+
|
|
72
|
+
## Tips
|
|
73
|
+
|
|
74
|
+
- Always use \`--format json\` for structured, parseable output
|
|
75
|
+
- Check authentication status before making requests
|
|
76
|
+
- Handle errors gracefully and inform the user
|
|
77
|
+
`;
|
|
78
|
+
function parseArgs(args) {
|
|
79
|
+
const options = { format: 'table', formula: false };
|
|
80
|
+
const positionals = [];
|
|
81
|
+
let command = '';
|
|
82
|
+
for (let i = 0; i < args.length; i++) {
|
|
83
|
+
const arg = args[i];
|
|
84
|
+
if (arg === '--credentials' && args[i + 1]) {
|
|
85
|
+
options.credentials = args[++i];
|
|
86
|
+
}
|
|
87
|
+
else if (arg === '--token' && args[i + 1]) {
|
|
88
|
+
options.token = args[++i];
|
|
89
|
+
}
|
|
90
|
+
else if (arg === '--client' && args[i + 1]) {
|
|
91
|
+
options.client = args[++i];
|
|
92
|
+
}
|
|
93
|
+
else if (arg === '--format' && args[i + 1]) {
|
|
94
|
+
options.format = args[++i];
|
|
95
|
+
}
|
|
96
|
+
else if (arg === '--formula') {
|
|
97
|
+
options.formula = true;
|
|
98
|
+
}
|
|
99
|
+
else if (arg === '--version' || arg === '--help') {
|
|
100
|
+
command = arg;
|
|
101
|
+
}
|
|
102
|
+
else if (!arg.startsWith('-')) {
|
|
103
|
+
if (!command) {
|
|
104
|
+
command = arg;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
positionals.push(arg);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { command, positionals, options };
|
|
112
|
+
}
|
|
113
|
+
function printHelp() {
|
|
114
|
+
console.log(`
|
|
115
|
+
Google Sheets CLI v${VERSION}
|
|
116
|
+
|
|
117
|
+
Usage:
|
|
118
|
+
sheets <command> [options]
|
|
119
|
+
|
|
120
|
+
Commands:
|
|
121
|
+
login Login with Google account
|
|
122
|
+
logout Logout and remove stored tokens
|
|
123
|
+
whoami Show current logged-in user
|
|
124
|
+
auth <credentials-file> Test service account authentication
|
|
125
|
+
get <spreadsheet-id> Get spreadsheet metadata
|
|
126
|
+
list <spreadsheet-id> List sheets in a spreadsheet
|
|
127
|
+
read <spreadsheet-id> <range> Read cell values
|
|
128
|
+
install-claude-skill Install Claude Code skill
|
|
129
|
+
|
|
130
|
+
Options:
|
|
131
|
+
--client <file> OAuth client JSON file (for login)
|
|
132
|
+
--credentials <file> Service account JSON file
|
|
133
|
+
--token <token> OAuth access token
|
|
134
|
+
--format <json|table> Output format (default: table)
|
|
135
|
+
--formula Show formulas instead of values
|
|
136
|
+
--version Show version number
|
|
137
|
+
--help Show help
|
|
138
|
+
|
|
139
|
+
Examples:
|
|
140
|
+
sheets login
|
|
141
|
+
sheets login --client client_secret.json
|
|
142
|
+
sheets get 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms
|
|
143
|
+
sheets read 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms Sheet1!A1:D10
|
|
144
|
+
sheets install-claude-skill
|
|
145
|
+
`);
|
|
146
|
+
}
|
|
147
|
+
function printVersion() {
|
|
148
|
+
console.log(VERSION);
|
|
149
|
+
}
|
|
150
|
+
async function getAuthConfig(options) {
|
|
151
|
+
// Priority: --token > --credentials > stored user tokens
|
|
152
|
+
if (options.token) {
|
|
153
|
+
return { type: 'oauth', accessToken: options.token };
|
|
154
|
+
}
|
|
155
|
+
if (options.credentials) {
|
|
156
|
+
return { type: 'service-account', credentialsPath: options.credentials };
|
|
157
|
+
}
|
|
158
|
+
// Check for stored user tokens
|
|
159
|
+
const storedTokens = await loadStoredTokens();
|
|
160
|
+
if (storedTokens) {
|
|
161
|
+
return { type: 'user' };
|
|
162
|
+
}
|
|
163
|
+
throw new Error('Not authenticated. Run "sheets login" or use --credentials');
|
|
164
|
+
}
|
|
165
|
+
// === Login Commands ===
|
|
166
|
+
async function loadClientCredentials(clientPath) {
|
|
167
|
+
const content = await fs.readFile(clientPath, 'utf-8');
|
|
168
|
+
const data = JSON.parse(content);
|
|
169
|
+
// Support Google's client_secret JSON format
|
|
170
|
+
const installed = data.installed || data.web;
|
|
171
|
+
if (installed) {
|
|
172
|
+
return {
|
|
173
|
+
clientId: installed.client_id,
|
|
174
|
+
clientSecret: installed.client_secret,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// Support simple {clientId, clientSecret} format
|
|
178
|
+
if (data.clientId && data.clientSecret) {
|
|
179
|
+
return data;
|
|
180
|
+
}
|
|
181
|
+
throw new Error('Invalid client credentials file');
|
|
182
|
+
}
|
|
183
|
+
async function cmdLogin(options) {
|
|
184
|
+
try {
|
|
185
|
+
let credentials;
|
|
186
|
+
if (options.client) {
|
|
187
|
+
credentials = await loadClientCredentials(options.client);
|
|
188
|
+
}
|
|
189
|
+
const tokens = await login(credentials);
|
|
190
|
+
console.log(`\nLogin successful! Logged in as ${tokens.email}`);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
const e = error;
|
|
194
|
+
console.error(`Login failed: ${e.message}`);
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async function cmdLogout() {
|
|
199
|
+
await deleteTokens();
|
|
200
|
+
console.log('Logged out successfully.');
|
|
201
|
+
}
|
|
202
|
+
async function cmdWhoami() {
|
|
203
|
+
const tokens = await loadStoredTokens();
|
|
204
|
+
if (!tokens) {
|
|
205
|
+
console.log('Not logged in. Run "sheets login" to authenticate.');
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
console.log(`Logged in as: ${tokens.email || 'Unknown'}`);
|
|
209
|
+
const expiresAt = new Date(tokens.expiresAt);
|
|
210
|
+
const isExpired = Date.now() >= tokens.expiresAt;
|
|
211
|
+
console.log(`Token expires: ${expiresAt.toLocaleString()}${isExpired ? ' (expired, will refresh)' : ''}`);
|
|
212
|
+
}
|
|
213
|
+
// === Service Account Auth ===
|
|
214
|
+
async function cmdAuth(credentialsPath) {
|
|
215
|
+
try {
|
|
216
|
+
await fs.access(credentialsPath);
|
|
217
|
+
const content = await fs.readFile(credentialsPath, 'utf-8');
|
|
218
|
+
const credentials = JSON.parse(content);
|
|
219
|
+
if (credentials.type !== 'service_account') {
|
|
220
|
+
throw new Error('Invalid credentials file: expected service_account type');
|
|
221
|
+
}
|
|
222
|
+
const client = createClient({
|
|
223
|
+
auth: { type: 'service-account', credentialsPath },
|
|
224
|
+
});
|
|
225
|
+
console.log('Testing authentication...');
|
|
226
|
+
console.log(` Project: ${credentials.project_id}`);
|
|
227
|
+
console.log(` Client Email: ${credentials.client_email}`);
|
|
228
|
+
try {
|
|
229
|
+
await client.getSpreadsheet('test-auth-only');
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const e = error;
|
|
233
|
+
if (e.code === 404 || e.code === 403) {
|
|
234
|
+
console.log('\nAuthentication successful!');
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
throw error;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
const e = error;
|
|
242
|
+
console.error(`Authentication failed: ${e.message}`);
|
|
243
|
+
process.exit(1);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// === Claude Skill Installation ===
|
|
247
|
+
async function cmdInstallClaudeSkill() {
|
|
248
|
+
const homeDir = os.homedir();
|
|
249
|
+
const skillDir = path.join(homeDir, '.claude', 'skills', 'sheets');
|
|
250
|
+
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
251
|
+
try {
|
|
252
|
+
// Create the skill directory
|
|
253
|
+
await fs.mkdir(skillDir, { recursive: true });
|
|
254
|
+
// Write the skill file
|
|
255
|
+
await fs.writeFile(skillFile, CLAUDE_SKILL_CONTENT, 'utf-8');
|
|
256
|
+
console.log('Claude skill installed successfully!');
|
|
257
|
+
console.log(`Location: ${skillFile}`);
|
|
258
|
+
console.log('');
|
|
259
|
+
console.log('You can now use /sheets in Claude Code to read Google Sheets data.');
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
const e = error;
|
|
263
|
+
console.error(`Failed to install Claude skill: ${e.message}`);
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// === Spreadsheet Commands ===
|
|
268
|
+
async function cmdGet(spreadsheetId, options) {
|
|
269
|
+
const authConfig = await getAuthConfig(options);
|
|
270
|
+
const client = createClient({ auth: authConfig });
|
|
271
|
+
const spreadsheet = await client.getSpreadsheet(spreadsheetId);
|
|
272
|
+
if (options.format === 'json') {
|
|
273
|
+
console.log(JSON.stringify(spreadsheet, null, 2));
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
console.log(`Title: ${spreadsheet.properties.title}`);
|
|
277
|
+
console.log(`ID: ${spreadsheet.spreadsheetId}`);
|
|
278
|
+
console.log(`Locale: ${spreadsheet.properties.locale || 'N/A'}`);
|
|
279
|
+
console.log(`Timezone: ${spreadsheet.properties.timeZone || 'N/A'}`);
|
|
280
|
+
console.log(`Sheets: ${spreadsheet.sheets.length}`);
|
|
281
|
+
if (spreadsheet.spreadsheetUrl) {
|
|
282
|
+
console.log(`URL: ${spreadsheet.spreadsheetUrl}`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
async function cmdList(spreadsheetId, options) {
|
|
287
|
+
const authConfig = await getAuthConfig(options);
|
|
288
|
+
const client = createClient({ auth: authConfig });
|
|
289
|
+
const sheets = await client.getSheets(spreadsheetId);
|
|
290
|
+
if (options.format === 'json') {
|
|
291
|
+
console.log(JSON.stringify(sheets, null, 2));
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
console.log('Sheets:');
|
|
295
|
+
sheets.forEach((sheet) => {
|
|
296
|
+
const grid = sheet.gridProperties;
|
|
297
|
+
const size = grid ? ` (${grid.rowCount} x ${grid.columnCount})` : '';
|
|
298
|
+
const hidden = sheet.hidden ? ' [hidden]' : '';
|
|
299
|
+
console.log(` ${sheet.index + 1}. ${sheet.title}${size}${hidden}`);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
async function cmdRead(spreadsheetId, range, options) {
|
|
304
|
+
const authConfig = await getAuthConfig(options);
|
|
305
|
+
const client = createClient({ auth: authConfig });
|
|
306
|
+
const valueRange = options.formula
|
|
307
|
+
? await client.getFormulas(spreadsheetId, range)
|
|
308
|
+
: await client.getValues(spreadsheetId, range);
|
|
309
|
+
if (options.format === 'json') {
|
|
310
|
+
console.log(JSON.stringify(valueRange, null, 2));
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
console.log(`Range: ${valueRange.range}`);
|
|
314
|
+
console.log('');
|
|
315
|
+
if (valueRange.values.length === 0) {
|
|
316
|
+
console.log('(empty)');
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
// Calculate column widths
|
|
320
|
+
const colWidths = [];
|
|
321
|
+
valueRange.values.forEach(row => {
|
|
322
|
+
row.forEach((cell, i) => {
|
|
323
|
+
const len = String(cell.value ?? '').length;
|
|
324
|
+
colWidths[i] = Math.max(colWidths[i] || 0, len, 3);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
// Print table
|
|
328
|
+
valueRange.values.forEach(row => {
|
|
329
|
+
const cells = row.map((cell, i) => {
|
|
330
|
+
const val = String(cell.value ?? '');
|
|
331
|
+
return val.padEnd(colWidths[i]);
|
|
332
|
+
});
|
|
333
|
+
console.log(cells.join(' | '));
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// === Main ===
|
|
338
|
+
async function main() {
|
|
339
|
+
const { command, positionals, options } = parseArgs(process.argv.slice(2));
|
|
340
|
+
if (!command || command === 'help' || command === '--help') {
|
|
341
|
+
printHelp();
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
if (command === '--version') {
|
|
345
|
+
printVersion();
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
try {
|
|
349
|
+
switch (command) {
|
|
350
|
+
case 'login':
|
|
351
|
+
await cmdLogin(options);
|
|
352
|
+
break;
|
|
353
|
+
case 'logout':
|
|
354
|
+
await cmdLogout();
|
|
355
|
+
break;
|
|
356
|
+
case 'whoami':
|
|
357
|
+
await cmdWhoami();
|
|
358
|
+
break;
|
|
359
|
+
case 'auth': {
|
|
360
|
+
const credentialsPath = positionals[0];
|
|
361
|
+
if (!credentialsPath) {
|
|
362
|
+
console.error('Usage: sheets auth <credentials-file>');
|
|
363
|
+
process.exit(1);
|
|
364
|
+
}
|
|
365
|
+
await cmdAuth(credentialsPath);
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
case 'get': {
|
|
369
|
+
const spreadsheetId = positionals[0];
|
|
370
|
+
if (!spreadsheetId) {
|
|
371
|
+
console.error('Usage: sheets get <spreadsheet-id>');
|
|
372
|
+
process.exit(1);
|
|
373
|
+
}
|
|
374
|
+
await cmdGet(spreadsheetId, options);
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case 'list': {
|
|
378
|
+
const spreadsheetId = positionals[0];
|
|
379
|
+
if (!spreadsheetId) {
|
|
380
|
+
console.error('Usage: sheets list <spreadsheet-id>');
|
|
381
|
+
process.exit(1);
|
|
382
|
+
}
|
|
383
|
+
await cmdList(spreadsheetId, options);
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
case 'read': {
|
|
387
|
+
const spreadsheetId = positionals[0];
|
|
388
|
+
const range = positionals[1];
|
|
389
|
+
if (!spreadsheetId || !range) {
|
|
390
|
+
console.error('Usage: sheets read <spreadsheet-id> <range>');
|
|
391
|
+
process.exit(1);
|
|
392
|
+
}
|
|
393
|
+
await cmdRead(spreadsheetId, range, options);
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
case 'install-claude-skill':
|
|
397
|
+
await cmdInstallClaudeSkill();
|
|
398
|
+
break;
|
|
399
|
+
default:
|
|
400
|
+
console.error(`Unknown command: ${command}`);
|
|
401
|
+
printHelp();
|
|
402
|
+
process.exit(1);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
catch (error) {
|
|
406
|
+
const e = error;
|
|
407
|
+
console.error(`Error: ${e.message}`);
|
|
408
|
+
process.exit(1);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
main();
|
|
412
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Client for Google Sheets API
|
|
3
|
+
* Uses native Node.js fetch (Node 18+)
|
|
4
|
+
*/
|
|
5
|
+
export interface HttpClientOptions {
|
|
6
|
+
getAccessToken: () => Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
export interface RequestOptions {
|
|
9
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
10
|
+
body?: unknown;
|
|
11
|
+
params?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export declare class HttpClient {
|
|
14
|
+
private getAccessToken;
|
|
15
|
+
constructor(options: HttpClientOptions);
|
|
16
|
+
request<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
17
|
+
private sleep;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,iBAAiB;IAC9B,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,cAAc,CAAwB;gBAElC,OAAO,EAAE,iBAAiB;IAIhC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IA6DxE,OAAO,CAAC,KAAK;CAGhB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Client for Google Sheets API
|
|
3
|
+
* Uses native Node.js fetch (Node 18+)
|
|
4
|
+
*/
|
|
5
|
+
import { SheetsError } from '../types/index.js';
|
|
6
|
+
const BASE_URL = 'https://sheets.googleapis.com/v4';
|
|
7
|
+
const MAX_RETRIES = 3;
|
|
8
|
+
const INITIAL_BACKOFF_MS = 1000;
|
|
9
|
+
export class HttpClient {
|
|
10
|
+
getAccessToken;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.getAccessToken = options.getAccessToken;
|
|
13
|
+
}
|
|
14
|
+
async request(path, options = {}) {
|
|
15
|
+
const { method = 'GET', body, params } = options;
|
|
16
|
+
let url = `${BASE_URL}${path}`;
|
|
17
|
+
if (params) {
|
|
18
|
+
const searchParams = new URLSearchParams(params);
|
|
19
|
+
url += `?${searchParams.toString()}`;
|
|
20
|
+
}
|
|
21
|
+
let lastError = null;
|
|
22
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
23
|
+
try {
|
|
24
|
+
const accessToken = await this.getAccessToken();
|
|
25
|
+
const response = await fetch(url, {
|
|
26
|
+
method,
|
|
27
|
+
headers: {
|
|
28
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
},
|
|
31
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
32
|
+
});
|
|
33
|
+
if (response.status === 429) {
|
|
34
|
+
const backoffMs = INITIAL_BACKOFF_MS * Math.pow(2, attempt);
|
|
35
|
+
await this.sleep(backoffMs);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const data = await response.json();
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
if (data.error) {
|
|
41
|
+
throw new SheetsError({
|
|
42
|
+
code: data.error.code,
|
|
43
|
+
message: data.error.message,
|
|
44
|
+
status: data.error.status,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
48
|
+
}
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
lastError = error;
|
|
53
|
+
if (error instanceof SheetsError && error.code !== 429 && error.code !== 500 && error.code !== 503) {
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
if (attempt < MAX_RETRIES - 1) {
|
|
57
|
+
const backoffMs = INITIAL_BACKOFF_MS * Math.pow(2, attempt);
|
|
58
|
+
await this.sleep(backoffMs);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw lastError || new Error('Request failed after retries');
|
|
63
|
+
}
|
|
64
|
+
sleep(ms) {
|
|
65
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ariadng/google-sheets
|
|
3
|
+
* Google Sheets API interface and CLI tool
|
|
4
|
+
*/
|
|
5
|
+
export { SheetsClient, createClient } from './api/index.js';
|
|
6
|
+
export { createAuthProvider, OAuthAuth, ServiceAccountAuth, UserAuth, login, loadStoredTokens, deleteTokens } from './auth/index.js';
|
|
7
|
+
export type { AuthProvider } from './auth/index.js';
|
|
8
|
+
export { HttpClient } from './http/index.js';
|
|
9
|
+
export type { GridProperties, SheetProperties, Spreadsheet, SpreadsheetProperties, CellValue, CellFormat, Color, TextFormat, ValueRange, GetValuesOptions, BatchGetValuesResponse, ValueRenderOption, DateTimeRenderOption, MajorDimension, AuthConfig, OAuthConfig, ServiceAccountConfig, ServiceAccountCredentials, UserAuthConfig, StoredTokens, SheetsClientOptions, SheetsApiError, SheetsApiErrorDetail, } from './types/index.js';
|
|
10
|
+
export { SheetsError } from './types/index.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrI,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,YAAY,EAER,cAAc,EACd,eAAe,EAEf,WAAW,EACX,qBAAqB,EAErB,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EAEV,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EAEd,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,yBAAyB,EACzB,cAAc,EACd,YAAY,EACZ,mBAAmB,EAEnB,cAAc,EACd,oBAAoB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ariadng/google-sheets
|
|
3
|
+
* Google Sheets API interface and CLI tool
|
|
4
|
+
*/
|
|
5
|
+
// Client
|
|
6
|
+
export { SheetsClient, createClient } from './api/index.js';
|
|
7
|
+
// Auth
|
|
8
|
+
export { createAuthProvider, OAuthAuth, ServiceAccountAuth, UserAuth, login, loadStoredTokens, deleteTokens } from './auth/index.js';
|
|
9
|
+
// HTTP
|
|
10
|
+
export { HttpClient } from './http/index.js';
|
|
11
|
+
export { SheetsError } from './types/index.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO;AACP,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGrI,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAmC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|