@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.
Files changed (72) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +453 -299
  3. package/bin/sheets.js +3 -0
  4. package/dist/api/index.d.ts +31 -0
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/index.js +87 -0
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/auth/constants.d.ts +13 -0
  9. package/dist/auth/constants.d.ts.map +1 -0
  10. package/dist/auth/constants.js +21 -0
  11. package/dist/auth/constants.js.map +1 -0
  12. package/dist/auth/index.d.ts +13 -0
  13. package/dist/auth/index.d.ts.map +1 -0
  14. package/dist/auth/index.js +22 -0
  15. package/dist/auth/index.js.map +1 -0
  16. package/dist/auth/oauth.d.ts +11 -0
  17. package/dist/auth/oauth.d.ts.map +1 -0
  18. package/dist/auth/oauth.js +14 -0
  19. package/dist/auth/oauth.js.map +1 -0
  20. package/dist/auth/service-account.d.ts +18 -0
  21. package/dist/auth/service-account.d.ts.map +1 -0
  22. package/dist/auth/service-account.js +92 -0
  23. package/dist/auth/service-account.js.map +1 -0
  24. package/dist/auth/user-auth.d.ts +24 -0
  25. package/dist/auth/user-auth.d.ts.map +1 -0
  26. package/dist/auth/user-auth.js +230 -0
  27. package/dist/auth/user-auth.js.map +1 -0
  28. package/dist/cli.d.ts +7 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +412 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/http/index.d.ts +19 -0
  33. package/dist/http/index.d.ts.map +1 -0
  34. package/dist/http/index.js +68 -0
  35. package/dist/http/index.js.map +1 -0
  36. package/dist/index.d.ts +11 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +12 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/types/index.d.ts +133 -0
  41. package/dist/types/index.d.ts.map +1 -0
  42. package/dist/types/index.js +16 -0
  43. package/dist/types/index.js.map +1 -0
  44. package/package.json +58 -79
  45. package/dist/advanced/index.d.ts +0 -5
  46. package/dist/advanced/index.d.ts.map +0 -1
  47. package/dist/advanced/index.js +0 -1063
  48. package/dist/advanced/index.mjs +0 -1005
  49. package/dist/advanced/metrics.d.ts +0 -50
  50. package/dist/advanced/metrics.d.ts.map +0 -1
  51. package/dist/advanced/rate-limit.d.ts +0 -27
  52. package/dist/advanced/rate-limit.d.ts.map +0 -1
  53. package/dist/core/auth.d.ts +0 -33
  54. package/dist/core/auth.d.ts.map +0 -1
  55. package/dist/core/client.d.ts +0 -35
  56. package/dist/core/client.d.ts.map +0 -1
  57. package/dist/core/errors.d.ts +0 -11
  58. package/dist/core/errors.d.ts.map +0 -1
  59. package/dist/core/index.d.ts +0 -6
  60. package/dist/core/index.d.ts.map +0 -1
  61. package/dist/core/index.js +0 -315
  62. package/dist/core/index.mjs +0 -271
  63. package/dist/plus/batch.d.ts +0 -25
  64. package/dist/plus/batch.d.ts.map +0 -1
  65. package/dist/plus/cache.d.ts +0 -19
  66. package/dist/plus/cache.d.ts.map +0 -1
  67. package/dist/plus/index.d.ts +0 -7
  68. package/dist/plus/index.d.ts.map +0 -1
  69. package/dist/plus/index.js +0 -742
  70. package/dist/plus/index.mjs +0 -691
  71. package/dist/plus/types.d.ts +0 -39
  72. package/dist/plus/types.d.ts.map +0 -1
@@ -1,50 +0,0 @@
1
- import { GoogleSheetsCore } from '../core';
2
- export interface Metrics {
3
- totalRequests: number;
4
- successfulRequests: number;
5
- failedRequests: number;
6
- retryCount: number;
7
- averageLatency: number;
8
- rateLimitHits: number;
9
- errorsByCode: Map<string | number, number>;
10
- requestsByMethod: Map<string, number>;
11
- }
12
- export declare class MetricsCollector {
13
- private metrics;
14
- private latencies;
15
- private readonly maxLatencySamples;
16
- private startTime;
17
- recordRequest(method: string, duration: number, success: boolean, retries?: number, error?: any): void;
18
- recordRateLimitHit(): void;
19
- getMetrics(): Readonly<Metrics>;
20
- getSummary(): {
21
- totalRequests: number;
22
- successRate: number;
23
- averageLatency: number;
24
- rateLimitHits: number;
25
- uptimeSeconds: number;
26
- requestsPerSecond: number;
27
- };
28
- reset(): void;
29
- }
30
- export declare function withMetrics(client: GoogleSheetsCore): GoogleSheetsCore & {
31
- metrics: MetricsCollector;
32
- };
33
- export declare class PerformanceMonitor {
34
- private operations;
35
- record(operation: string, duration: number): void;
36
- getStats(operation: string): {
37
- count: number;
38
- average: number;
39
- min: number;
40
- max: number;
41
- } | null;
42
- getAllStats(): Map<string, {
43
- count: number;
44
- average: number;
45
- min: number;
46
- max: number;
47
- }>;
48
- reset(): void;
49
- }
50
- //# sourceMappingURL=metrics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/advanced/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,MAAM,WAAW,OAAO;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,OAAO,CASb;IAEF,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IACzC,OAAO,CAAC,SAAS,CAAc;IAE/B,aAAa,CACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,OAAO,SAAI,EACX,KAAK,CAAC,EAAE,GAAG,GACT,IAAI;IAwCP,kBAAkB,IAAI,IAAI;IAI1B,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC;IAQ/B,UAAU,IAAI;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;KAC1B;IAiBD,KAAK,IAAI,IAAI;CAcb;AAKD,wBAAgB,WAAW,CAC1B,MAAM,EAAE,gBAAgB,GACtB,gBAAgB,GAAG;IAAE,OAAO,EAAE,gBAAgB,CAAA;CAAE,CA8DlD;AAKD,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,UAAU,CAQd;IAEJ,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgBjD,QAAQ,CACP,SAAS,EAAE,MAAM,GACf;QACF,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACZ,GAAG,IAAI;IAYR,WAAW,IAAI,GAAG,CACjB,MAAM,EACN;QACC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACZ,CACD;IAeD,KAAK,IAAI,IAAI;CAGb"}
@@ -1,27 +0,0 @@
1
- import { GoogleSheetsCore } from '../core';
2
- export declare class AdaptiveRateLimiter {
3
- private successRate;
4
- private baseDelay;
5
- private requestTimes;
6
- private readonly windowMs;
7
- private readonly maxRequestsPerWindow;
8
- execute<T>(fn: () => Promise<T>): Promise<T>;
9
- getStats(): {
10
- requestsInWindow: number;
11
- successRate: number;
12
- baseDelay: number;
13
- };
14
- reset(): void;
15
- }
16
- export declare function withAdaptiveRateLimit(client: GoogleSheetsCore): GoogleSheetsCore;
17
- export declare class TokenBucketRateLimiter {
18
- private tokens;
19
- private lastRefill;
20
- private readonly maxTokens;
21
- private readonly refillRate;
22
- constructor(maxTokens?: number, refillRate?: number);
23
- acquire(tokens?: number): Promise<void>;
24
- getAvailableTokens(): number;
25
- }
26
- export declare function withTokenBucketRateLimit(client: GoogleSheetsCore, maxTokens?: number, refillRate?: number): GoogleSheetsCore;
27
- //# sourceMappingURL=rate-limit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/advanced/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAErC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAoDlD,QAAQ,IAAI;QACX,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KAClB;IAgBD,KAAK,IAAI,IAAI;CAKb;AAKD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CA0BhF;AAKD,qBAAa,sBAAsB;IAClC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,SAAS,SAAM,EAAE,UAAU,SAAI;IAOrC,OAAO,CAAC,MAAM,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxC,kBAAkB,IAAI,MAAM;CAO5B;AAKD,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,gBAAgB,EACxB,SAAS,SAAM,EACf,UAAU,SAAI,GACZ,gBAAgB,CA2BlB"}
@@ -1,33 +0,0 @@
1
- import { GoogleAuth, OAuth2Client, JWT } from 'google-auth-library';
2
- export interface ServiceAccountKey {
3
- type: string;
4
- project_id: string;
5
- private_key_id: string;
6
- private_key: string;
7
- client_email: string;
8
- client_id: string;
9
- auth_uri: string;
10
- token_uri: string;
11
- auth_provider_x509_cert_url: string;
12
- client_x509_cert_url: string;
13
- universe_domain?: string;
14
- }
15
- export interface OAuth2Credentials {
16
- client_id: string;
17
- client_secret: string;
18
- redirect_uris: string[];
19
- }
20
- export interface OAuth2Token {
21
- access_token?: string | null;
22
- refresh_token?: string | null;
23
- scope?: string;
24
- token_type?: string | null;
25
- expiry_date?: number | null;
26
- }
27
- export declare function createServiceAccountAuth(keyFile: string | ServiceAccountKey): Promise<JWT>;
28
- export declare function createOAuth2Client(credentials: OAuth2Credentials, tokenPath?: string): Promise<OAuth2Client>;
29
- export declare function generateAuthUrl(client: OAuth2Client, scopes?: string[]): string;
30
- export declare function getTokenFromCode(client: OAuth2Client, code: string): Promise<OAuth2Token>;
31
- export declare function saveToken(tokens: OAuth2Token, path: string): Promise<void>;
32
- export declare function createAuth(auth: GoogleAuth | OAuth2Client | JWT | ServiceAccountKey | string): GoogleAuth | OAuth2Client | JWT | Promise<JWT>;
33
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAGpE,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B,EAAE,MAAM,CAAC;IACpC,oBAAoB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAKD,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,MAAM,GAAG,iBAAiB,GACjC,OAAO,CAAC,GAAG,CAAC,CAad;AAKD,wBAAsB,kBAAkB,CACvC,WAAW,EAAE,iBAAiB,EAC9B,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CAkBvB;AAKD,wBAAgB,eAAe,CAC9B,MAAM,EAAE,YAAY,EACpB,MAAM,GAAE,MAAM,EAAqD,GACjE,MAAM,CAKR;AAKD,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,WAAW,CAAC,CAItB;AAKD,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;AAKD,wBAAgB,UAAU,CACzB,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,iBAAiB,GAAG,MAAM,GAChE,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAKhD"}
@@ -1,35 +0,0 @@
1
- import { sheets_v4 } from 'googleapis';
2
- import { GoogleAuth, OAuth2Client, JWT } from 'google-auth-library';
3
- export interface GoogleSheetsConfig {
4
- auth: GoogleAuth | OAuth2Client | JWT;
5
- retryConfig?: {
6
- maxAttempts?: number;
7
- maxDelay?: number;
8
- initialDelay?: number;
9
- };
10
- }
11
- export interface RetryConfig {
12
- maxAttempts: number;
13
- maxDelay: number;
14
- initialDelay: number;
15
- }
16
- export declare class GoogleSheetsCore {
17
- private sheets;
18
- private retryConfig;
19
- constructor(config: GoogleSheetsConfig);
20
- read(spreadsheetId: string, range: string): Promise<any[][]>;
21
- write(spreadsheetId: string, range: string, values: any[][]): Promise<sheets_v4.Schema$UpdateValuesResponse>;
22
- append(spreadsheetId: string, range: string, values: any[][]): Promise<sheets_v4.Schema$AppendValuesResponse>;
23
- clear(spreadsheetId: string, range: string): Promise<sheets_v4.Schema$ClearValuesResponse>;
24
- batchRead(spreadsheetId: string, ranges: string[]): Promise<sheets_v4.Schema$ValueRange[]>;
25
- batchWrite(spreadsheetId: string, data: Array<{
26
- range: string;
27
- values: any[][];
28
- }>): Promise<sheets_v4.Schema$BatchUpdateValuesResponse>;
29
- batchClear(spreadsheetId: string, ranges: string[]): Promise<sheets_v4.Schema$BatchClearValuesResponse>;
30
- getSpreadsheet(spreadsheetId: string): Promise<sheets_v4.Schema$Spreadsheet>;
31
- getApi(): sheets_v4.Sheets;
32
- private withRetry;
33
- private isRetryable;
34
- }
35
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAGpE,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC;IACtC,WAAW,CAAC,EAAE;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACF;AAED,MAAM,WAAW,WAAW;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE,kBAAkB;IAmBhC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAgB5D,KAAK,CACV,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,GAAG,EAAE,EAAE,GACb,OAAO,CAAC,SAAS,CAAC,2BAA2B,CAAC;IAe3C,MAAM,CACX,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,GAAG,EAAE,EAAE,GACb,OAAO,CAAC,SAAS,CAAC,2BAA2B,CAAC;IAgB3C,KAAK,CACV,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,0BAA0B,CAAC;IAa1C,SAAS,CACd,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;IAanC,UAAU,CACf,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAA;KAAE,CAAC,GAC7C,OAAO,CAAC,SAAS,CAAC,gCAAgC,CAAC;IAmBhD,UAAU,CACf,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,SAAS,CAAC,+BAA+B,CAAC;IAa/C,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAYlF,MAAM,IAAI,SAAS,CAAC,MAAM;YAOZ,SAAS;IA+BvB,OAAO,CAAC,WAAW;CAUnB"}
@@ -1,11 +0,0 @@
1
- export declare class GoogleSheetsError extends Error {
2
- code?: number | string;
3
- isRetryable: boolean;
4
- originalError?: any;
5
- constructor(originalError: any);
6
- isRateLimitError(): boolean;
7
- isPermissionError(): boolean;
8
- isNotFoundError(): boolean;
9
- getUserMessage(): string;
10
- }
11
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAGA,qBAAa,iBAAkB,SAAQ,KAAK;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;gBAEf,aAAa,EAAE,GAAG;IAwB9B,gBAAgB,IAAI,OAAO;IAO3B,iBAAiB,IAAI,OAAO;IAO5B,eAAe,IAAI,OAAO;IAO1B,cAAc,IAAI,MAAM;CAYxB"}
@@ -1,6 +0,0 @@
1
- export { GoogleSheetsCore } from './client';
2
- export type { GoogleSheetsConfig, RetryConfig } from './client';
3
- export { createServiceAccountAuth, createOAuth2Client, generateAuthUrl, getTokenFromCode, saveToken, createAuth, } from './auth';
4
- export type { ServiceAccountKey, OAuth2Credentials, OAuth2Token, } from './auth';
5
- export { GoogleSheetsError } from './errors';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EACN,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,UAAU,GACV,MAAM,QAAQ,CAAC;AAChB,YAAY,EACX,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,GACX,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
@@ -1,315 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/core/index.ts
31
- var core_exports = {};
32
- __export(core_exports, {
33
- GoogleSheetsCore: () => GoogleSheetsCore,
34
- GoogleSheetsError: () => GoogleSheetsError,
35
- createAuth: () => createAuth,
36
- createOAuth2Client: () => createOAuth2Client,
37
- createServiceAccountAuth: () => createServiceAccountAuth,
38
- generateAuthUrl: () => generateAuthUrl,
39
- getTokenFromCode: () => getTokenFromCode,
40
- saveToken: () => saveToken
41
- });
42
- module.exports = __toCommonJS(core_exports);
43
-
44
- // src/core/client.ts
45
- var import_googleapis = require("googleapis");
46
-
47
- // src/core/errors.ts
48
- var GoogleSheetsError = class extends Error {
49
- constructor(originalError) {
50
- const message = originalError.response?.data?.error?.message || originalError.message || "Unknown error";
51
- super(message);
52
- this.name = "GoogleSheetsError";
53
- this.code = originalError.response?.status || originalError.code;
54
- this.originalError = originalError;
55
- const retryableCodes = [429, 500, 502, 503, 504, "ECONNRESET", "ETIMEDOUT", "ENOTFOUND"];
56
- this.isRetryable = retryableCodes.includes(this.code);
57
- if (originalError.stack) {
58
- this.stack = originalError.stack;
59
- }
60
- }
61
- /**
62
- * Check if error is a rate limit error
63
- */
64
- isRateLimitError() {
65
- return this.code === 429;
66
- }
67
- /**
68
- * Check if error is a permission error
69
- */
70
- isPermissionError() {
71
- return this.code === 403;
72
- }
73
- /**
74
- * Check if error is a not found error
75
- */
76
- isNotFoundError() {
77
- return this.code === 404;
78
- }
79
- /**
80
- * Get a user-friendly error message
81
- */
82
- getUserMessage() {
83
- if (this.isPermissionError()) {
84
- return "Permission denied. Please ensure the spreadsheet is shared with the service account or you have proper OAuth permissions.";
85
- }
86
- if (this.isRateLimitError()) {
87
- return "Rate limit exceeded. Please wait before making more requests.";
88
- }
89
- if (this.isNotFoundError()) {
90
- return "Spreadsheet or range not found. Please check the ID and range are correct.";
91
- }
92
- return this.message;
93
- }
94
- };
95
-
96
- // src/core/client.ts
97
- var GoogleSheetsCore = class {
98
- constructor(config) {
99
- this.sheets = import_googleapis.google.sheets({
100
- version: "v4",
101
- auth: config.auth
102
- });
103
- this.retryConfig = {
104
- maxAttempts: config.retryConfig?.maxAttempts ?? 3,
105
- maxDelay: config.retryConfig?.maxDelay ?? 1e4,
106
- initialDelay: config.retryConfig?.initialDelay ?? 1e3
107
- };
108
- }
109
- /**
110
- * Read values from a spreadsheet
111
- * @param spreadsheetId The spreadsheet ID
112
- * @param range A1 notation range (e.g., 'Sheet1!A1:B10')
113
- * @returns 2D array of values
114
- */
115
- async read(spreadsheetId, range) {
116
- return this.withRetry(async () => {
117
- const response = await this.sheets.spreadsheets.values.get({
118
- spreadsheetId,
119
- range
120
- });
121
- return response.data.values || [];
122
- });
123
- }
124
- /**
125
- * Write values to a spreadsheet
126
- * @param spreadsheetId The spreadsheet ID
127
- * @param range A1 notation range
128
- * @param values 2D array of values to write
129
- */
130
- async write(spreadsheetId, range, values) {
131
- return this.withRetry(async () => {
132
- const response = await this.sheets.spreadsheets.values.update({
133
- spreadsheetId,
134
- range,
135
- valueInputOption: "USER_ENTERED",
136
- requestBody: { values }
137
- });
138
- return response.data;
139
- });
140
- }
141
- /**
142
- * Append values to a spreadsheet
143
- */
144
- async append(spreadsheetId, range, values) {
145
- return this.withRetry(async () => {
146
- const response = await this.sheets.spreadsheets.values.append({
147
- spreadsheetId,
148
- range,
149
- valueInputOption: "USER_ENTERED",
150
- insertDataOption: "INSERT_ROWS",
151
- requestBody: { values }
152
- });
153
- return response.data;
154
- });
155
- }
156
- /**
157
- * Clear values in a range
158
- */
159
- async clear(spreadsheetId, range) {
160
- return this.withRetry(async () => {
161
- const response = await this.sheets.spreadsheets.values.clear({
162
- spreadsheetId,
163
- range
164
- });
165
- return response.data;
166
- });
167
- }
168
- /**
169
- * Batch read multiple ranges
170
- */
171
- async batchRead(spreadsheetId, ranges) {
172
- return this.withRetry(async () => {
173
- const response = await this.sheets.spreadsheets.values.batchGet({
174
- spreadsheetId,
175
- ranges
176
- });
177
- return response.data.valueRanges || [];
178
- });
179
- }
180
- /**
181
- * Batch update multiple ranges
182
- */
183
- async batchWrite(spreadsheetId, data) {
184
- return this.withRetry(async () => {
185
- const response = await this.sheets.spreadsheets.values.batchUpdate({
186
- spreadsheetId,
187
- requestBody: {
188
- data: data.map((item) => ({
189
- range: item.range,
190
- values: item.values
191
- })),
192
- valueInputOption: "USER_ENTERED"
193
- }
194
- });
195
- return response.data;
196
- });
197
- }
198
- /**
199
- * Batch clear multiple ranges
200
- */
201
- async batchClear(spreadsheetId, ranges) {
202
- return this.withRetry(async () => {
203
- const response = await this.sheets.spreadsheets.values.batchClear({
204
- spreadsheetId,
205
- requestBody: { ranges }
206
- });
207
- return response.data;
208
- });
209
- }
210
- /**
211
- * Get spreadsheet metadata
212
- */
213
- async getSpreadsheet(spreadsheetId) {
214
- return this.withRetry(async () => {
215
- const response = await this.sheets.spreadsheets.get({
216
- spreadsheetId
217
- });
218
- return response.data;
219
- });
220
- }
221
- /**
222
- * Get the underlying Sheets API instance for advanced usage
223
- */
224
- getApi() {
225
- return this.sheets;
226
- }
227
- /**
228
- * Simple exponential backoff retry logic
229
- */
230
- async withRetry(fn) {
231
- let lastError;
232
- for (let attempt = 0; attempt < this.retryConfig.maxAttempts; attempt++) {
233
- try {
234
- return await fn();
235
- } catch (error) {
236
- lastError = error;
237
- if (!this.isRetryable(error) || attempt === this.retryConfig.maxAttempts - 1) {
238
- throw new GoogleSheetsError(error);
239
- }
240
- const baseDelay = Math.min(
241
- this.retryConfig.initialDelay * Math.pow(2, attempt),
242
- this.retryConfig.maxDelay
243
- );
244
- const jitter = Math.random() * 1e3;
245
- const delay = baseDelay + jitter;
246
- await new Promise((resolve) => setTimeout(resolve, delay));
247
- }
248
- }
249
- throw new GoogleSheetsError(lastError);
250
- }
251
- isRetryable(error) {
252
- const retryableCodes = [429, 500, 502, 503, 504];
253
- const retryableErrors = ["ECONNRESET", "ETIMEDOUT", "ENOTFOUND"];
254
- return retryableCodes.includes(error.code) || retryableCodes.includes(error.response?.status) || retryableErrors.includes(error.code);
255
- }
256
- };
257
-
258
- // src/core/auth.ts
259
- var import_google_auth_library = require("google-auth-library");
260
- var fs = __toESM(require("fs/promises"));
261
- async function createServiceAccountAuth(keyFile) {
262
- const key = typeof keyFile === "string" ? JSON.parse(await fs.readFile(keyFile, "utf8")) : keyFile;
263
- const jwt = new import_google_auth_library.JWT({
264
- email: key.client_email,
265
- key: key.private_key,
266
- scopes: ["https://www.googleapis.com/auth/spreadsheets"]
267
- });
268
- return jwt;
269
- }
270
- async function createOAuth2Client(credentials, tokenPath) {
271
- const client = new import_google_auth_library.OAuth2Client(
272
- credentials.client_id,
273
- credentials.client_secret,
274
- credentials.redirect_uris[0]
275
- );
276
- if (tokenPath) {
277
- try {
278
- const token = JSON.parse(await fs.readFile(tokenPath, "utf8"));
279
- client.setCredentials(token);
280
- } catch {
281
- }
282
- }
283
- return client;
284
- }
285
- function generateAuthUrl(client, scopes = ["https://www.googleapis.com/auth/spreadsheets"]) {
286
- return client.generateAuthUrl({
287
- access_type: "offline",
288
- scope: scopes
289
- });
290
- }
291
- async function getTokenFromCode(client, code) {
292
- const { tokens } = await client.getToken(code);
293
- client.setCredentials(tokens);
294
- return tokens;
295
- }
296
- async function saveToken(tokens, path) {
297
- await fs.writeFile(path, JSON.stringify(tokens, null, 2));
298
- }
299
- function createAuth(auth) {
300
- if (auth instanceof import_google_auth_library.GoogleAuth || auth instanceof import_google_auth_library.OAuth2Client || auth instanceof import_google_auth_library.JWT) {
301
- return auth;
302
- }
303
- return createServiceAccountAuth(auth);
304
- }
305
- // Annotate the CommonJS export names for ESM import in node:
306
- 0 && (module.exports = {
307
- GoogleSheetsCore,
308
- GoogleSheetsError,
309
- createAuth,
310
- createOAuth2Client,
311
- createServiceAccountAuth,
312
- generateAuthUrl,
313
- getTokenFromCode,
314
- saveToken
315
- });