@fractary/core 0.3.2 → 0.4.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 (122) hide show
  1. package/dist/__tests__/factories.test.d.ts +5 -0
  2. package/dist/__tests__/factories.test.d.ts.map +1 -0
  3. package/dist/__tests__/factories.test.js +66 -0
  4. package/dist/__tests__/factories.test.js.map +1 -0
  5. package/dist/auth/__tests__/create-token-provider.test.d.ts +5 -0
  6. package/dist/auth/__tests__/create-token-provider.test.d.ts.map +1 -0
  7. package/dist/auth/__tests__/create-token-provider.test.js +104 -0
  8. package/dist/auth/__tests__/create-token-provider.test.js.map +1 -0
  9. package/dist/auth/__tests__/github-app-auth.test.d.ts +5 -0
  10. package/dist/auth/__tests__/github-app-auth.test.d.ts.map +1 -0
  11. package/dist/auth/__tests__/github-app-auth.test.js +293 -0
  12. package/dist/auth/__tests__/github-app-auth.test.js.map +1 -0
  13. package/dist/auth/__tests__/static-token-provider.test.d.ts +5 -0
  14. package/dist/auth/__tests__/static-token-provider.test.d.ts.map +1 -0
  15. package/dist/auth/__tests__/static-token-provider.test.js +54 -0
  16. package/dist/auth/__tests__/static-token-provider.test.js.map +1 -0
  17. package/dist/auth/github-app-auth.d.ts +109 -0
  18. package/dist/auth/github-app-auth.d.ts.map +1 -0
  19. package/dist/auth/github-app-auth.js +262 -0
  20. package/dist/auth/github-app-auth.js.map +1 -0
  21. package/dist/auth/github-app-token-provider.d.ts +59 -0
  22. package/dist/auth/github-app-token-provider.d.ts.map +1 -0
  23. package/dist/auth/github-app-token-provider.js +68 -0
  24. package/dist/auth/github-app-token-provider.js.map +1 -0
  25. package/dist/auth/index.d.ts +45 -0
  26. package/dist/auth/index.d.ts.map +1 -0
  27. package/dist/auth/index.js +74 -0
  28. package/dist/auth/index.js.map +1 -0
  29. package/dist/auth/static-token-provider.d.ts +35 -0
  30. package/dist/auth/static-token-provider.d.ts.map +1 -0
  31. package/dist/auth/static-token-provider.js +45 -0
  32. package/dist/auth/static-token-provider.js.map +1 -0
  33. package/dist/auth/types.d.ts +49 -0
  34. package/dist/auth/types.d.ts.map +1 -0
  35. package/dist/auth/types.js +8 -0
  36. package/dist/auth/types.js.map +1 -0
  37. package/dist/common/yaml-config.d.ts +10 -0
  38. package/dist/common/yaml-config.d.ts.map +1 -1
  39. package/dist/common/yaml-config.js.map +1 -1
  40. package/dist/config/__tests__/loader.test.d.ts +5 -0
  41. package/dist/config/__tests__/loader.test.d.ts.map +1 -0
  42. package/dist/config/__tests__/loader.test.js +129 -0
  43. package/dist/config/__tests__/loader.test.js.map +1 -0
  44. package/dist/config/index.d.ts +8 -0
  45. package/dist/config/index.d.ts.map +1 -0
  46. package/dist/config/index.js +27 -0
  47. package/dist/config/index.js.map +1 -0
  48. package/dist/config/loader.d.ts +126 -0
  49. package/dist/config/loader.d.ts.map +1 -0
  50. package/dist/config/loader.js +277 -0
  51. package/dist/config/loader.js.map +1 -0
  52. package/dist/docs/index.d.ts +5 -0
  53. package/dist/docs/index.d.ts.map +1 -1
  54. package/dist/docs/index.js +6 -1
  55. package/dist/docs/index.js.map +1 -1
  56. package/dist/docs/manager.d.ts +27 -0
  57. package/dist/docs/manager.d.ts.map +1 -1
  58. package/dist/docs/manager.js +168 -15
  59. package/dist/docs/manager.js.map +1 -1
  60. package/dist/docs/type-registry.d.ts +123 -0
  61. package/dist/docs/type-registry.d.ts.map +1 -0
  62. package/dist/docs/type-registry.js +393 -0
  63. package/dist/docs/type-registry.js.map +1 -0
  64. package/dist/docs/types.d.ts +93 -0
  65. package/dist/docs/types.d.ts.map +1 -1
  66. package/dist/factories.d.ts +89 -0
  67. package/dist/factories.d.ts.map +1 -0
  68. package/dist/factories.js +228 -0
  69. package/dist/factories.js.map +1 -0
  70. package/dist/file/factory.d.ts +41 -0
  71. package/dist/file/factory.d.ts.map +1 -0
  72. package/dist/file/factory.js +237 -0
  73. package/dist/file/factory.js.map +1 -0
  74. package/dist/file/gcs.d.ts +66 -0
  75. package/dist/file/gcs.d.ts.map +1 -0
  76. package/dist/file/gcs.js +226 -0
  77. package/dist/file/gcs.js.map +1 -0
  78. package/dist/file/gdrive.d.ts +78 -0
  79. package/dist/file/gdrive.d.ts.map +1 -0
  80. package/dist/file/gdrive.js +302 -0
  81. package/dist/file/gdrive.js.map +1 -0
  82. package/dist/file/index.d.ts +13 -1
  83. package/dist/file/index.d.ts.map +1 -1
  84. package/dist/file/index.js +25 -1
  85. package/dist/file/index.js.map +1 -1
  86. package/dist/file/manager.d.ts +83 -2
  87. package/dist/file/manager.d.ts.map +1 -1
  88. package/dist/file/manager.js +125 -4
  89. package/dist/file/manager.js.map +1 -1
  90. package/dist/file/r2.d.ts +56 -0
  91. package/dist/file/r2.d.ts.map +1 -0
  92. package/dist/file/r2.js +96 -0
  93. package/dist/file/r2.js.map +1 -0
  94. package/dist/file/s3.d.ts +61 -0
  95. package/dist/file/s3.d.ts.map +1 -0
  96. package/dist/file/s3.js +258 -0
  97. package/dist/file/s3.js.map +1 -0
  98. package/dist/file/types.d.ts +145 -2
  99. package/dist/file/types.d.ts.map +1 -1
  100. package/dist/index.d.ts +3 -0
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +6 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/logs/index.d.ts +1 -0
  105. package/dist/logs/index.d.ts.map +1 -1
  106. package/dist/logs/index.js +3 -1
  107. package/dist/logs/index.js.map +1 -1
  108. package/dist/logs/manager.d.ts +29 -2
  109. package/dist/logs/manager.d.ts.map +1 -1
  110. package/dist/logs/manager.js +48 -7
  111. package/dist/logs/manager.js.map +1 -1
  112. package/dist/logs/type-registry.d.ts +180 -0
  113. package/dist/logs/type-registry.d.ts.map +1 -0
  114. package/dist/logs/type-registry.js +421 -0
  115. package/dist/logs/type-registry.js.map +1 -0
  116. package/dist/logs/type-registry.test.d.ts +5 -0
  117. package/dist/logs/type-registry.test.d.ts.map +1 -0
  118. package/dist/logs/type-registry.test.js +671 -0
  119. package/dist/logs/type-registry.test.js.map +1 -0
  120. package/dist/logs/types.d.ts +2 -0
  121. package/dist/logs/types.d.ts.map +1 -1
  122. package/package.json +62 -8
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ /**
3
+ * @fractary/core - Storage Factory
4
+ *
5
+ * Factory function for creating storage backends based on configuration.
6
+ * Supports automatic configuration loading from .fractary/config.yaml.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.createStorage = createStorage;
43
+ exports.sourceConfigToStorageConfig = sourceConfigToStorageConfig;
44
+ exports.createStorageFromSource = createStorageFromSource;
45
+ exports.getDefaultStorageType = getDefaultStorageType;
46
+ const local_1 = require("./local");
47
+ /**
48
+ * Create a storage backend from configuration
49
+ *
50
+ * @param config - Storage configuration
51
+ * @returns Storage instance
52
+ */
53
+ function createStorage(config) {
54
+ switch (config.type) {
55
+ case 'local':
56
+ return new local_1.LocalStorage(config.basePath);
57
+ case 's3':
58
+ // Lazy load to avoid hard dependency
59
+ return createS3Storage(config);
60
+ case 'r2':
61
+ return createR2Storage(config);
62
+ case 'gcs':
63
+ return createGCSStorage(config);
64
+ case 'gdrive':
65
+ return createGDriveStorage(config);
66
+ default:
67
+ throw new Error(`Unsupported storage type: ${config.type}`);
68
+ }
69
+ }
70
+ /**
71
+ * Create S3 storage (with lazy module loading and instance caching)
72
+ */
73
+ function createS3Storage(config) {
74
+ let cachedStorage = null;
75
+ return new Proxy({}, {
76
+ get(_target, prop) {
77
+ return async (...args) => {
78
+ if (!cachedStorage) {
79
+ const { S3Storage } = await Promise.resolve().then(() => __importStar(require('./s3')));
80
+ cachedStorage = new S3Storage(config);
81
+ }
82
+ return cachedStorage[prop](...args);
83
+ };
84
+ },
85
+ });
86
+ }
87
+ /**
88
+ * Create R2 storage (with lazy module loading and instance caching)
89
+ */
90
+ function createR2Storage(config) {
91
+ let cachedStorage = null;
92
+ return new Proxy({}, {
93
+ get(_target, prop) {
94
+ return async (...args) => {
95
+ if (!cachedStorage) {
96
+ const { R2Storage } = await Promise.resolve().then(() => __importStar(require('./r2')));
97
+ cachedStorage = new R2Storage(config);
98
+ }
99
+ return cachedStorage[prop](...args);
100
+ };
101
+ },
102
+ });
103
+ }
104
+ /**
105
+ * Create GCS storage (with lazy module loading and instance caching)
106
+ */
107
+ function createGCSStorage(config) {
108
+ let cachedStorage = null;
109
+ return new Proxy({}, {
110
+ get(_target, prop) {
111
+ return async (...args) => {
112
+ if (!cachedStorage) {
113
+ const { GCSStorage } = await Promise.resolve().then(() => __importStar(require('./gcs')));
114
+ cachedStorage = new GCSStorage(config);
115
+ }
116
+ return cachedStorage[prop](...args);
117
+ };
118
+ },
119
+ });
120
+ }
121
+ /**
122
+ * Create Google Drive storage (with lazy module loading and instance caching)
123
+ */
124
+ function createGDriveStorage(config) {
125
+ let cachedStorage = null;
126
+ return new Proxy({}, {
127
+ get(_target, prop) {
128
+ return async (...args) => {
129
+ if (!cachedStorage) {
130
+ const { GDriveStorage } = await Promise.resolve().then(() => __importStar(require('./gdrive')));
131
+ cachedStorage = new GDriveStorage(config);
132
+ }
133
+ return cachedStorage[prop](...args);
134
+ };
135
+ },
136
+ });
137
+ }
138
+ /**
139
+ * Convert a source configuration from config.yaml to a StorageConfig
140
+ *
141
+ * @param source - Source configuration from config.yaml
142
+ * @returns StorageConfig for creating a storage backend
143
+ */
144
+ function sourceConfigToStorageConfig(source) {
145
+ switch (source.type) {
146
+ case 'local':
147
+ return {
148
+ type: 'local',
149
+ basePath: source.local?.basePath || '.',
150
+ };
151
+ case 's3':
152
+ return {
153
+ type: 's3',
154
+ bucket: source.bucket,
155
+ region: source.region || 'us-east-1',
156
+ prefix: source.prefix,
157
+ auth: source.auth
158
+ ? {
159
+ profile: source.auth.profile,
160
+ accessKeyId: expandEnvVar(source.auth.accessKeyId),
161
+ secretAccessKey: expandEnvVar(source.auth.secretAccessKey),
162
+ }
163
+ : undefined,
164
+ publicUrl: source.publicUrl,
165
+ };
166
+ case 'r2':
167
+ return {
168
+ type: 'r2',
169
+ bucket: source.bucket,
170
+ accountId: expandEnvVar(source.accountId) || '',
171
+ accessKeyId: expandEnvVar(source.auth?.accessKeyId) || '',
172
+ secretAccessKey: expandEnvVar(source.auth?.secretAccessKey) || '',
173
+ prefix: source.prefix,
174
+ publicUrl: source.publicUrl,
175
+ };
176
+ case 'gcs':
177
+ return {
178
+ type: 'gcs',
179
+ bucket: source.bucket,
180
+ projectId: source.projectId || '',
181
+ prefix: source.prefix,
182
+ keyFilePath: expandEnvVar(source.auth?.keyFilePath),
183
+ region: source.region,
184
+ };
185
+ case 'gdrive':
186
+ return {
187
+ type: 'gdrive',
188
+ folderId: source.folderId,
189
+ };
190
+ default:
191
+ throw new Error(`Unsupported source type: ${source.type}`);
192
+ }
193
+ }
194
+ /**
195
+ * Expand environment variable references in a string
196
+ *
197
+ * @param value - String potentially containing ${VAR_NAME} references
198
+ * @returns Expanded string with environment variable values
199
+ */
200
+ function expandEnvVar(value) {
201
+ if (!value)
202
+ return value;
203
+ // Match ${VAR_NAME} pattern
204
+ return value.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
205
+ return process.env[varName] || '';
206
+ });
207
+ }
208
+ /**
209
+ * Create a storage backend from a named source in config.yaml
210
+ *
211
+ * @param sourceName - Name of the source (e.g., 'specs', 'logs')
212
+ * @param fileConfig - File plugin configuration from config.yaml
213
+ * @returns Storage instance
214
+ */
215
+ function createStorageFromSource(sourceName, fileConfig) {
216
+ const source = fileConfig.sources?.[sourceName];
217
+ if (!source) {
218
+ throw new Error(`Source '${sourceName}' not found in configuration. Available sources: ${Object.keys(fileConfig.sources || {}).join(', ') || 'none'}`);
219
+ }
220
+ const storageConfig = sourceConfigToStorageConfig(source);
221
+ return createStorage(storageConfig);
222
+ }
223
+ /**
224
+ * Get the default storage type based on configuration
225
+ *
226
+ * @param fileConfig - File plugin configuration
227
+ * @returns Default storage type
228
+ */
229
+ function getDefaultStorageType(fileConfig) {
230
+ if (!fileConfig?.sources) {
231
+ return 'local';
232
+ }
233
+ // Return the type of the first source, or 'local' if none
234
+ const sources = Object.values(fileConfig.sources);
235
+ return sources.length > 0 ? sources[0].type : 'local';
236
+ }
237
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/file/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @fractary/core - GCS Storage Implementation
3
+ *
4
+ * Google Cloud Storage backend for file operations.
5
+ * Uses @google-cloud/storage with lazy loading.
6
+ */
7
+ import { Storage, GCSStorageConfig } from './types';
8
+ /**
9
+ * Google Cloud Storage implementation
10
+ */
11
+ export declare class GCSStorage implements Storage {
12
+ private config;
13
+ private storageClient;
14
+ private bucket;
15
+ constructor(config: GCSStorageConfig);
16
+ /**
17
+ * Get or create the GCS client (lazy loaded)
18
+ */
19
+ private getClient;
20
+ /**
21
+ * Get the full GCS path with optional prefix
22
+ */
23
+ private getPath;
24
+ /**
25
+ * Check if an error is a "not found" error
26
+ * Google Cloud SDK uses error.code (number) or error.errors[].reason
27
+ */
28
+ private isNotFoundError;
29
+ /**
30
+ * Write content to GCS
31
+ */
32
+ write(id: string, content: string): Promise<string>;
33
+ /**
34
+ * Read content from GCS
35
+ */
36
+ read(id: string): Promise<string | null>;
37
+ /**
38
+ * Check if object exists in GCS
39
+ */
40
+ exists(id: string): Promise<boolean>;
41
+ /**
42
+ * List objects in GCS with optional prefix
43
+ */
44
+ list(prefix?: string): Promise<string[]>;
45
+ /**
46
+ * Delete object from GCS
47
+ */
48
+ delete(id: string): Promise<void>;
49
+ /**
50
+ * Get a signed URL for the object
51
+ */
52
+ getUrl(id: string, expiresIn?: number): Promise<string | null>;
53
+ /**
54
+ * Get the bucket name
55
+ */
56
+ getBucket(): string;
57
+ /**
58
+ * Get the project ID
59
+ */
60
+ getProjectId(): string;
61
+ /**
62
+ * Get the configured prefix
63
+ */
64
+ getPrefix(): string | undefined;
65
+ }
66
+ //# sourceMappingURL=gcs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcs.d.ts","sourceRoot":"","sources":["../../src/file/gcs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAMpD;;GAEG;AACH,qBAAa,UAAW,YAAW,OAAO;IACxC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,EAAE,gBAAgB;IAIpC;;OAEG;YACW,SAAS;IA8BvB;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;;OAGG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAazD;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqB9C;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB1C;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkB9C;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevC;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkB3E;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,SAAS;CAGhC"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ /**
3
+ * @fractary/core - GCS Storage Implementation
4
+ *
5
+ * Google Cloud Storage backend for file operations.
6
+ * Uses @google-cloud/storage with lazy loading.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.GCSStorage = void 0;
43
+ /**
44
+ * Google Cloud Storage implementation
45
+ */
46
+ class GCSStorage {
47
+ config;
48
+ storageClient = null;
49
+ bucket = null;
50
+ constructor(config) {
51
+ this.config = config;
52
+ }
53
+ /**
54
+ * Get or create the GCS client (lazy loaded)
55
+ */
56
+ async getClient() {
57
+ if (this.storageClient && this.bucket) {
58
+ return { storage: this.storageClient, bucket: this.bucket };
59
+ }
60
+ try {
61
+ // Dynamic import to avoid hard dependency
62
+ const { Storage: GCStorage } = await Promise.resolve().then(() => __importStar(require('@google-cloud/storage')));
63
+ const clientConfig = {
64
+ projectId: this.config.projectId,
65
+ };
66
+ // Use key file if provided
67
+ if (this.config.keyFilePath) {
68
+ clientConfig.keyFilename = this.config.keyFilePath;
69
+ }
70
+ // Otherwise, use Application Default Credentials (ADC)
71
+ this.storageClient = new GCStorage(clientConfig);
72
+ this.bucket = this.storageClient.bucket(this.config.bucket);
73
+ return { storage: this.storageClient, bucket: this.bucket };
74
+ }
75
+ catch (error) {
76
+ throw new Error('Google Cloud Storage SDK not available. Install with: npm install @google-cloud/storage');
77
+ }
78
+ }
79
+ /**
80
+ * Get the full GCS path with optional prefix
81
+ */
82
+ getPath(id) {
83
+ if (this.config.prefix) {
84
+ return `${this.config.prefix.replace(/\/$/, '')}/${id}`;
85
+ }
86
+ return id;
87
+ }
88
+ /**
89
+ * Check if an error is a "not found" error
90
+ * Google Cloud SDK uses error.code (number) or error.errors[].reason
91
+ */
92
+ isNotFoundError(error) {
93
+ return (error.code === 404 ||
94
+ error.code === 'ENOENT' ||
95
+ error.errors?.some((e) => e.reason === 'notFound'));
96
+ }
97
+ /**
98
+ * Write content to GCS
99
+ */
100
+ async write(id, content) {
101
+ const { bucket } = await this.getClient();
102
+ const path = this.getPath(id);
103
+ const file = bucket.file(path);
104
+ await file.save(content, {
105
+ contentType: 'text/plain; charset=utf-8',
106
+ resumable: false,
107
+ });
108
+ return `gs://${this.config.bucket}/${path}`;
109
+ }
110
+ /**
111
+ * Read content from GCS
112
+ */
113
+ async read(id) {
114
+ const { bucket } = await this.getClient();
115
+ const path = this.getPath(id);
116
+ const file = bucket.file(path);
117
+ try {
118
+ const [exists] = await file.exists();
119
+ if (!exists) {
120
+ return null;
121
+ }
122
+ const [contents] = await file.download();
123
+ return contents.toString('utf-8');
124
+ }
125
+ catch (error) {
126
+ if (this.isNotFoundError(error)) {
127
+ return null;
128
+ }
129
+ throw error;
130
+ }
131
+ }
132
+ /**
133
+ * Check if object exists in GCS
134
+ */
135
+ async exists(id) {
136
+ const { bucket } = await this.getClient();
137
+ const path = this.getPath(id);
138
+ const file = bucket.file(path);
139
+ try {
140
+ const [exists] = await file.exists();
141
+ return exists;
142
+ }
143
+ catch (error) {
144
+ // Only treat "not found" as false, rethrow other errors
145
+ if (this.isNotFoundError(error)) {
146
+ return false;
147
+ }
148
+ throw error;
149
+ }
150
+ }
151
+ /**
152
+ * List objects in GCS with optional prefix
153
+ */
154
+ async list(prefix) {
155
+ const { bucket } = await this.getClient();
156
+ const fullPrefix = prefix ? this.getPath(prefix) : this.config.prefix || '';
157
+ const [files] = await bucket.getFiles({
158
+ prefix: fullPrefix,
159
+ });
160
+ return files.map((file) => {
161
+ let name = file.name;
162
+ // Remove the configured prefix from the path for consistency
163
+ if (this.config.prefix && name.startsWith(this.config.prefix)) {
164
+ name = name.slice(this.config.prefix.length).replace(/^\//, '');
165
+ }
166
+ return name;
167
+ });
168
+ }
169
+ /**
170
+ * Delete object from GCS
171
+ */
172
+ async delete(id) {
173
+ const { bucket } = await this.getClient();
174
+ const path = this.getPath(id);
175
+ const file = bucket.file(path);
176
+ try {
177
+ await file.delete();
178
+ }
179
+ catch (error) {
180
+ // Ignore if file doesn't exist
181
+ if (!this.isNotFoundError(error)) {
182
+ throw error;
183
+ }
184
+ }
185
+ }
186
+ /**
187
+ * Get a signed URL for the object
188
+ */
189
+ async getUrl(id, expiresIn = 86400) {
190
+ const { bucket } = await this.getClient();
191
+ const path = this.getPath(id);
192
+ const file = bucket.file(path);
193
+ try {
194
+ const [url] = await file.getSignedUrl({
195
+ version: 'v4',
196
+ action: 'read',
197
+ expires: Date.now() + expiresIn * 1000,
198
+ });
199
+ return url;
200
+ }
201
+ catch (error) {
202
+ // Fall back to gs:// URI if signing fails (e.g., no key file)
203
+ return `gs://${this.config.bucket}/${path}`;
204
+ }
205
+ }
206
+ /**
207
+ * Get the bucket name
208
+ */
209
+ getBucket() {
210
+ return this.config.bucket;
211
+ }
212
+ /**
213
+ * Get the project ID
214
+ */
215
+ getProjectId() {
216
+ return this.config.projectId;
217
+ }
218
+ /**
219
+ * Get the configured prefix
220
+ */
221
+ getPrefix() {
222
+ return this.config.prefix;
223
+ }
224
+ }
225
+ exports.GCSStorage = GCSStorage;
226
+ //# sourceMappingURL=gcs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcs.js","sourceRoot":"","sources":["../../src/file/gcs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @fractary/core - Google Drive Storage Implementation
3
+ *
4
+ * Google Drive storage backend for file operations.
5
+ * Uses googleapis with lazy loading.
6
+ *
7
+ * Note: Google Drive doesn't use traditional file paths. This implementation
8
+ * maps path-like identifiers to Google Drive files by name within a folder.
9
+ */
10
+ import { Storage, GDriveStorageConfig } from './types';
11
+ /**
12
+ * Google Drive storage implementation
13
+ */
14
+ export declare class GDriveStorage implements Storage {
15
+ private config;
16
+ private driveClient;
17
+ constructor(config: GDriveStorageConfig);
18
+ /**
19
+ * Get or create the Google Drive client (lazy loaded)
20
+ */
21
+ private getClient;
22
+ /**
23
+ * Get the parent folder ID (internal helper)
24
+ */
25
+ private getParentFolderId;
26
+ /**
27
+ * Extract file name from path-like ID
28
+ */
29
+ private getFileName;
30
+ /**
31
+ * Escape a string for use in Google Drive query syntax
32
+ * Single quotes must be escaped with backslash
33
+ */
34
+ private escapeQueryString;
35
+ /**
36
+ * Check if a string looks like a Google Drive file ID
37
+ * Drive file IDs are typically 28-44 characters, alphanumeric with - and _
38
+ */
39
+ private isFileId;
40
+ /**
41
+ * Check if an error is a "not found" error
42
+ * Google APIs uses error.code (number) or error.errors[].reason
43
+ */
44
+ private isNotFoundError;
45
+ /**
46
+ * Find a file by name in the configured folder
47
+ */
48
+ private findFile;
49
+ /**
50
+ * Write content to Google Drive
51
+ */
52
+ write(id: string, content: string): Promise<string>;
53
+ /**
54
+ * Read content from Google Drive
55
+ */
56
+ read(id: string): Promise<string | null>;
57
+ /**
58
+ * Check if file exists in Google Drive
59
+ */
60
+ exists(id: string): Promise<boolean>;
61
+ /**
62
+ * List files in the configured Google Drive folder
63
+ */
64
+ list(prefix?: string): Promise<string[]>;
65
+ /**
66
+ * Delete file from Google Drive
67
+ */
68
+ delete(id: string): Promise<void>;
69
+ /**
70
+ * Get a shareable URL for the file
71
+ */
72
+ getUrl(id: string, _expiresIn?: number): Promise<string | null>;
73
+ /**
74
+ * Get the configured folder ID
75
+ */
76
+ getFolderId(): string;
77
+ }
78
+ //# sourceMappingURL=gdrive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gdrive.d.ts","sourceRoot":"","sources":["../../src/file/gdrive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAMvD;;GAEG;AACH,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAA4B;gBAEnC,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;YACW,SAAS;IA0CvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAKhB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;YACW,QAAQ;IAmBtB;;OAEG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+CzD;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyB9C;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa1C;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkC9C;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvC;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWrE;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB"}