lettactl 0.2.1 → 0.3.1
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/README.md +57 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +20 -4
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/validate.d.ts +4 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +31 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-manager.d.ts.map +1 -1
- package/dist/lib/agent-manager.js +19 -6
- package/dist/lib/agent-manager.js.map +1 -1
- package/dist/lib/block-manager.d.ts +4 -0
- package/dist/lib/block-manager.d.ts.map +1 -1
- package/dist/lib/block-manager.js +8 -0
- package/dist/lib/block-manager.js.map +1 -1
- package/dist/lib/bucket-config-validator.d.ts +20 -0
- package/dist/lib/bucket-config-validator.d.ts.map +1 -0
- package/dist/lib/bucket-config-validator.js +95 -0
- package/dist/lib/bucket-config-validator.js.map +1 -0
- package/dist/lib/config-validators.d.ts +62 -0
- package/dist/lib/config-validators.d.ts.map +1 -0
- package/dist/lib/config-validators.js +380 -0
- package/dist/lib/config-validators.js.map +1 -0
- package/dist/lib/diff-engine.d.ts +5 -0
- package/dist/lib/diff-engine.d.ts.map +1 -1
- package/dist/lib/diff-engine.js +47 -14
- package/dist/lib/diff-engine.js.map +1 -1
- package/dist/lib/file-content-tracker.d.ts +5 -2
- package/dist/lib/file-content-tracker.d.ts.map +1 -1
- package/dist/lib/file-content-tracker.js +20 -2
- package/dist/lib/file-content-tracker.js.map +1 -1
- package/dist/lib/fleet-parser.d.ts +7 -1
- package/dist/lib/fleet-parser.d.ts.map +1 -1
- package/dist/lib/fleet-parser.js +24 -3
- package/dist/lib/fleet-parser.js.map +1 -1
- package/dist/lib/storage-backend.d.ts +47 -0
- package/dist/lib/storage-backend.d.ts.map +1 -0
- package/dist/lib/storage-backend.js +280 -0
- package/dist/lib/storage-backend.js.map +1 -0
- package/dist/lib/storage-error-handler.d.ts +44 -0
- package/dist/lib/storage-error-handler.d.ts.map +1 -0
- package/dist/lib/storage-error-handler.js +176 -0
- package/dist/lib/storage-error-handler.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-backend.js","sourceRoot":"","sources":["../../src/lib/storage-backend.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcH;;GAEG;AACH,MAAa,qBAAqB;IAIhC,YAAY,UAAwD,EAAE;QAH9D,aAAQ,GAAqB,EAAE,CAAC;QAItC,oCAAoC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAE5C,qEAAqE;QACrE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,MAAoB;QACvC,mCAAmC;QACnC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,yBAAyB;QACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,QAAQ,4CAA4C,CAAC,CAAC;QAC5F,CAAC;QAED,4BAA4B;QAC5B,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,QAAQ,gEAAgE,CAAC,CAAC;IAChH,CAAC;IAEO,oBAAoB,CAAC,MAAW;QACtC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,8FAA8F;gBAC9F,YAAY;gBACZ,gBAAgB;gBAChB,wBAAwB;gBACxB,uBAAuB;gBACvB,iBAAiB,CAClB,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;QAEnE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,kDAAkD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACxE,2CAA2C;gBAC3C,YAAY;gBACZ,gBAAgB;gBAChB,wBAAwB;gBACxB,uBAAuB;gBACvB,iBAAiB,CAClB,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrH,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,mDAAmD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC7E,0CAA0C;gBAC1C,YAAY;gBACZ,gBAAgB;gBAChB,wBAAwB;gBACxB,uBAAuB;gBACvB,iBAAiB,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAhGD,sDAgGC;AAED;;GAEG;AACH,uCAAwB;AACxB,2CAA4B;AAC5B,+BAA+B;AAE/B,MAAa,iBAAiB;IAC5B,YAAoB,WAAmB,EAAE;QAArB,aAAQ,GAAR,QAAQ,CAAa;IAAG,CAAC;IAE7C,SAAS,CAAC,GAAW;QACnB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACtC,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjD,OAAO,IAAA,eAAQ,EAAC,eAAe,CAAC,CAAA;IAClC,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;CACF;AAtBD,8CAsBC;AAED;;GAEG;AACH,uDAAoD;AACpD,mEAA6D;AAE7D,MAAa,sBAAsB;IAGjC;QACE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,2DAA2D;QAC3D,IAAI,CAAC,QAAQ,GAAG,IAAA,0BAAY,EAC1B,OAAO,CAAC,GAAG,CAAC,YAAa,EACzB,OAAO,CAAC,GAAG,CAAC,iBAAkB,EAC9B;YACE,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE;SAChC,CACF,CAAA;IACH,CAAC;IAEO,mBAAmB;QACzB,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,wDAAwD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAChF,kBAAkB;gBAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvD,oCAAoC,CACrC,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,uEAAuE,GAAG,EAAE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,MAAM,KAAK,CAAC,CAAC,gCAAgC;YAC/C,CAAC;YACD,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,IAAI;gBACvC,mDAAmD,CACpD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,QAAgB;QACnD,IAAI,CAAC;YACH,8DAA8D;YAC9D,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAEzC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO;iBACrE,IAAI,CAAC,MAAM,CAAC;iBACZ,IAAI,CAAC,MAAM,EAAE;gBACZ,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YAEL,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;gBAChE,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;oBACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACpC,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CACV,kBAAkB,QAAQ,gBAAgB,MAAM,oBAAoB,IAAI,6CAA6C,CACtH,CAAC;oBACJ,CAAC;yBAAM,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO;wBAC3C,OAAO,CAAC,IAAI,CACV,kBAAkB,QAAQ,gBAAgB,MAAM,oBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,gDAAgD,CAC/J,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO;iBAChD,IAAI,CAAC,MAAM,CAAC;iBACZ,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAErB,IAAI,KAAK,EAAE,CAAC;gBACV,2CAAmB,CAAC,mBAAmB,CAAC,KAAK,EAAE;oBAC7C,QAAQ,EAAE,UAAU;oBACpB,SAAS,EAAE,UAAU;oBACrB,MAAM;oBACN,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,2CAAmB,CAAC,mBAAmB,CACrC,EAAE,OAAO,EAAE,gCAAgC,EAAE,EAC7C,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAClE,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAE1B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,2EAA2E;YAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACjD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,2CAAmB,CAAC,mBAAmB,CAAC,KAAK,EAAE;gBAC7C,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,UAAU;gBACrB,MAAM;gBACN,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,aAAqB,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO;iBAChD,IAAI,CAAC,MAAM,CAAC;iBACZ,IAAI,CAAC,UAAU,EAAE;gBAChB,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE;aAChD,CAAC,CAAA;YAEJ,IAAI,KAAK,EAAE,CAAC;gBACV,2CAAmB,CAAC,mBAAmB,CAAC,KAAK,EAAE;oBAC7C,QAAQ,EAAE,UAAU;oBACpB,SAAS,EAAE,MAAM;oBACjB,MAAM;oBACN,QAAQ,EAAE,UAAU;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,IAAI,EAAE,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAC7B,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CACtD,IAAI,EAAE,CAAA;QAET,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,2CAAmB,CAAC,mBAAmB,CAAC,KAAK,EAAE;gBAC7C,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,MAAM;gBACjB,MAAM;gBACN,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AA1JD,wDA0JC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized error handling for storage backends
|
|
3
|
+
* Provides consistent error messages and handling across different cloud providers
|
|
4
|
+
*/
|
|
5
|
+
export interface StorageErrorContext {
|
|
6
|
+
provider: string;
|
|
7
|
+
operation: string;
|
|
8
|
+
bucket?: string;
|
|
9
|
+
filePath?: string;
|
|
10
|
+
pattern?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class StorageErrorHandler {
|
|
13
|
+
/**
|
|
14
|
+
* Handle HTTP status-based errors with provider-specific context
|
|
15
|
+
*/
|
|
16
|
+
static handleHttpError(error: any, context: StorageErrorContext, statusCode?: number): never;
|
|
17
|
+
/**
|
|
18
|
+
* Handle provider-specific errors with fallback to generic handling
|
|
19
|
+
*/
|
|
20
|
+
static handleProviderError(error: any, context: StorageErrorContext): never;
|
|
21
|
+
/**
|
|
22
|
+
* Handle Supabase-specific error patterns
|
|
23
|
+
*/
|
|
24
|
+
private static handleSupabaseError;
|
|
25
|
+
/**
|
|
26
|
+
* Handle AWS S3-specific error patterns
|
|
27
|
+
* TODO: Implement when S3 backend is added
|
|
28
|
+
*/
|
|
29
|
+
private static handleS3Error;
|
|
30
|
+
/**
|
|
31
|
+
* Handle Google Cloud Storage-specific error patterns
|
|
32
|
+
* TODO: Implement when GCS backend is added
|
|
33
|
+
*/
|
|
34
|
+
private static handleGCSError;
|
|
35
|
+
/**
|
|
36
|
+
* Generic error handling for unknown or unexpected errors
|
|
37
|
+
*/
|
|
38
|
+
private static handleGenericError;
|
|
39
|
+
/**
|
|
40
|
+
* Wrap async storage operations with consistent error handling
|
|
41
|
+
*/
|
|
42
|
+
static wrapStorageOperation<T>(operation: () => Promise<T>, context: StorageErrorContext): Promise<T>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=storage-error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-error-handler.d.ts","sourceRoot":"","sources":["../../src/lib/storage-error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,mBAAmB;IAE9B;;OAEG;IACH,MAAM,CAAC,eAAe,CACpB,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,mBAAmB,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,KAAK;IAwDR;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,mBAAmB,GAC3B,KAAK;IAeR;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA6ClC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAM5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAK7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA4BjC;;OAEG;WACU,oBAAoB,CAAC,CAAC,EACjC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC;CAOd"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Centralized error handling for storage backends
|
|
4
|
+
* Provides consistent error messages and handling across different cloud providers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.StorageErrorHandler = void 0;
|
|
8
|
+
class StorageErrorHandler {
|
|
9
|
+
/**
|
|
10
|
+
* Handle HTTP status-based errors with provider-specific context
|
|
11
|
+
*/
|
|
12
|
+
static handleHttpError(error, context, statusCode) {
|
|
13
|
+
const { provider, operation, bucket, filePath } = context;
|
|
14
|
+
const resource = bucket && filePath ? `${bucket}/${filePath}` : bucket || filePath || 'resource';
|
|
15
|
+
let errorMessage = `Failed to ${operation} ${resource} (${provider})`;
|
|
16
|
+
const status = statusCode || error.status || error.originalError?.status;
|
|
17
|
+
switch (status) {
|
|
18
|
+
case 400:
|
|
19
|
+
if (provider.toLowerCase() === 'supabase') {
|
|
20
|
+
// Check if error indicates bucket doesn't exist
|
|
21
|
+
if (error.message && (error.message.includes('bucket') || error.message.includes('not found'))) {
|
|
22
|
+
errorMessage += `: Bucket '${bucket}' not found. Check: 1) bucket name is spelled correctly, 2) bucket exists in your Supabase project, 3) you're connected to the right project.`;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
errorMessage += `: Bad request - this could be: 1) bucket '${bucket}' doesn't exist, 2) file '${filePath}' doesn't exist, 3) bucket is private (needs RLS policy or make bucket public), 4) wrong RLS policy configuration, 5) invalid file path '${filePath}', 6) malformed request, or 7) something else (Supabase error messages aren't clear here). Check: bucket exists, file exists, is public or has proper RLS, and file path is correct.`;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
errorMessage += `: Bad request - this could be: 1) bucket '${bucket}' doesn't exist, 2) invalid file path '${filePath}', or 3) malformed request. Check bucket exists and path is correct.`;
|
|
30
|
+
}
|
|
31
|
+
break;
|
|
32
|
+
case 401:
|
|
33
|
+
errorMessage += `: Unauthorized. Please check your ${provider} credentials.`;
|
|
34
|
+
break;
|
|
35
|
+
case 403:
|
|
36
|
+
errorMessage += `: Access denied. Please check your ${provider} credentials and bucket permissions.`;
|
|
37
|
+
break;
|
|
38
|
+
case 404:
|
|
39
|
+
if (filePath) {
|
|
40
|
+
errorMessage += `: File not found. Please check that '${filePath}' exists in the '${bucket}' bucket.`;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
errorMessage += `: Resource not found. Please check the bucket or path exists.`;
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
case 429:
|
|
47
|
+
errorMessage += `: Rate limit exceeded. Please try again later.`;
|
|
48
|
+
break;
|
|
49
|
+
case 500:
|
|
50
|
+
case 502:
|
|
51
|
+
case 503:
|
|
52
|
+
case 504:
|
|
53
|
+
errorMessage += `: ${provider} service outage or maintenance (HTTP ${status}). This is a server-side issue. Please try again in a few minutes or check ${provider} status page.`;
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
if (status >= 500 && status < 600) {
|
|
57
|
+
errorMessage += `: ${provider} server error (HTTP ${status}). Please try again or contact ${provider} support.`;
|
|
58
|
+
}
|
|
59
|
+
else if (status) {
|
|
60
|
+
errorMessage += `: HTTP ${status} error. Check ${provider} Storage configuration.`;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
errorMessage += `: Unknown error. Check ${provider} Storage configuration and network connectivity.`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
throw new Error(errorMessage);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle provider-specific errors with fallback to generic handling
|
|
70
|
+
*/
|
|
71
|
+
static handleProviderError(error, context) {
|
|
72
|
+
const { provider } = context;
|
|
73
|
+
switch (provider.toLowerCase()) {
|
|
74
|
+
case 'supabase':
|
|
75
|
+
return this.handleSupabaseError(error, context);
|
|
76
|
+
case 's3':
|
|
77
|
+
return this.handleS3Error(error, context);
|
|
78
|
+
case 'gcs':
|
|
79
|
+
return this.handleGCSError(error, context);
|
|
80
|
+
default:
|
|
81
|
+
return this.handleGenericError(error, context);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Handle Supabase-specific error patterns
|
|
86
|
+
*/
|
|
87
|
+
static handleSupabaseError(error, context) {
|
|
88
|
+
// Handle StorageUnknownError - check status to differentiate bucket vs auth issues
|
|
89
|
+
if (error.__isStorageError && error.name === 'StorageUnknownError') {
|
|
90
|
+
const status = error.originalError?.status;
|
|
91
|
+
if (status === 400) {
|
|
92
|
+
throw new Error(`Failed to ${context.operation} ${context.bucket}/${context.filePath} (supabase): ` +
|
|
93
|
+
`Bucket '${context.bucket}' doesn't exist. Check: 1) bucket name is spelled correctly, ` +
|
|
94
|
+
`2) bucket exists in your Supabase project, 3) you're connected to the right project.`);
|
|
95
|
+
}
|
|
96
|
+
else if (!error.originalError || Object.keys(error.originalError).length === 0) {
|
|
97
|
+
throw new Error(`Failed to ${context.operation} ${context.bucket}/${context.filePath} (supabase): ` +
|
|
98
|
+
'Authentication error. Please check your SUPABASE_ANON_KEY is correct and not expired. ' +
|
|
99
|
+
'Get a new one from Supabase Dashboard > Settings > API.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Handle Supabase StorageError with originalError
|
|
103
|
+
if (error.__isStorageError && error.originalError && error.originalError.status) {
|
|
104
|
+
return this.handleHttpError(error, context, error.originalError.status);
|
|
105
|
+
}
|
|
106
|
+
// Handle direct Supabase error messages
|
|
107
|
+
if (error.message) {
|
|
108
|
+
if (error.message.includes('Object not found')) {
|
|
109
|
+
context.operation = 'download';
|
|
110
|
+
return this.handleHttpError(error, context, 404);
|
|
111
|
+
}
|
|
112
|
+
if (error.message.includes('Bucket not found') || error.message.includes('The resource you requested could not be found')) {
|
|
113
|
+
throw new Error(`Failed to ${context.operation} ${context.bucket}/${context.filePath} (supabase): ` +
|
|
114
|
+
`Bucket '${context.bucket}' doesn't exist. Check: 1) bucket name is spelled correctly, ` +
|
|
115
|
+
`2) bucket exists in your Supabase project, 3) you're connected to the right project.`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Fallback to generic handling
|
|
119
|
+
return this.handleGenericError(error, context);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Handle AWS S3-specific error patterns
|
|
123
|
+
* TODO: Implement when S3 backend is added
|
|
124
|
+
*/
|
|
125
|
+
static handleS3Error(error, context) {
|
|
126
|
+
// S3-specific error handling will go here
|
|
127
|
+
// e.g., NoSuchBucket, NoSuchKey, AccessDenied, etc.
|
|
128
|
+
return this.handleGenericError(error, context);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Handle Google Cloud Storage-specific error patterns
|
|
132
|
+
* TODO: Implement when GCS backend is added
|
|
133
|
+
*/
|
|
134
|
+
static handleGCSError(error, context) {
|
|
135
|
+
// GCS-specific error handling will go here
|
|
136
|
+
return this.handleGenericError(error, context);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Generic error handling for unknown or unexpected errors
|
|
140
|
+
*/
|
|
141
|
+
static handleGenericError(error, context) {
|
|
142
|
+
const { provider, operation, bucket, filePath } = context;
|
|
143
|
+
const resource = bucket && filePath ? `${bucket}/${filePath}` : bucket || filePath || 'resource';
|
|
144
|
+
// Handle SSL/certificate issues common in corporate environments
|
|
145
|
+
if (error.code === 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' ||
|
|
146
|
+
error.code === 'CERT_UNTRUSTED' ||
|
|
147
|
+
error.code === 'SELF_SIGNED_CERT_IN_CHAIN' ||
|
|
148
|
+
error.message?.includes('certificate') ||
|
|
149
|
+
error.message?.includes('SSL') ||
|
|
150
|
+
error.message?.includes('TLS')) {
|
|
151
|
+
throw new Error(`SSL/Certificate error connecting to ${provider}: ${error.message}. ` +
|
|
152
|
+
`If you're on a corporate network, try: 1) disconnect/reconnect VPN, 2) check with IT about certificate issues, 3) try from a different network.`);
|
|
153
|
+
}
|
|
154
|
+
let errorMessage = `${provider} storage error while trying to ${operation} ${resource}`;
|
|
155
|
+
if (error.message) {
|
|
156
|
+
errorMessage += `: ${error.message}`;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
errorMessage += `: ${JSON.stringify(error)}`;
|
|
160
|
+
}
|
|
161
|
+
throw new Error(errorMessage);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Wrap async storage operations with consistent error handling
|
|
165
|
+
*/
|
|
166
|
+
static async wrapStorageOperation(operation, context) {
|
|
167
|
+
try {
|
|
168
|
+
return await operation();
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
this.handleProviderError(error, context);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.StorageErrorHandler = StorageErrorHandler;
|
|
176
|
+
//# sourceMappingURL=storage-error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-error-handler.js","sourceRoot":"","sources":["../../src/lib/storage-error-handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lettactl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "kubectl-style CLI for managing Letta AI agent fleets",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -44,9 +44,11 @@
|
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@letta-ai/letta-client": "^1.3.2",
|
|
47
|
+
"@supabase/supabase-js": "^2.86.2",
|
|
47
48
|
"chalk": "^5.6.2",
|
|
48
49
|
"cli-table3": "^0.6.5",
|
|
49
50
|
"commander": "^14.0.2",
|
|
51
|
+
"glob": "^13.0.0",
|
|
50
52
|
"js-yaml": "^4.1.1",
|
|
51
53
|
"ora": "^9.0.0"
|
|
52
54
|
},
|