@wealthfolio/addon-sdk 1.0.0 → 3.0.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/CHANGELOG.md +19 -8
- package/README.md +226 -146
- package/dist/{chunk-3OBZP7TN.mjs → chunk-6MGUTH7T.js} +10 -40
- package/dist/chunk-6MGUTH7T.js.map +1 -0
- package/dist/{index.mjs → index.js} +70 -23
- package/dist/index.js.map +1 -0
- package/dist/{permissions.mjs → permissions.js} +2 -2
- package/dist/src/data-types.d.ts +713 -0
- package/dist/src/goal-progress.d.ts +7 -0
- package/dist/src/host-api.d.ts +566 -0
- package/dist/src/index.d.ts +29 -0
- package/dist/src/manifest.d.ts +176 -0
- package/dist/{permissions.d.mts → src/permissions.d.ts} +16 -18
- package/dist/src/query-keys.d.ts +44 -0
- package/dist/src/types.d.ts +88 -0
- package/dist/src/utils.d.ts +24 -0
- package/dist/src/version.d.ts +4 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.js +1 -0
- package/package.json +28 -17
- package/dist/chunk-3OBZP7TN.mjs.map +0 -1
- package/dist/index.d.mts +0 -279
- package/dist/index.mjs.map +0 -1
- package/dist/types-CxtChQdm.d.mts +0 -1137
- package/dist/types.d.mts +0 -2
- package/dist/types.mjs +0 -1
- /package/dist/{permissions.mjs.map → permissions.js.map} +0 -0
- /package/dist/{types.mjs.map → types.js.map} +0 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Addon manifest and metadata types
|
|
3
|
+
*/
|
|
4
|
+
import type { Permission } from './permissions';
|
|
5
|
+
/**
|
|
6
|
+
* Unified addon manifest structure that handles both development and runtime scenarios
|
|
7
|
+
* This represents both what developers write in their manifest.json and installed addon metadata
|
|
8
|
+
*/
|
|
9
|
+
export interface AddonManifest {
|
|
10
|
+
/** Unique addon identifier (lowercase, no spaces, hyphens allowed) */
|
|
11
|
+
id: string;
|
|
12
|
+
/** Human-readable addon name */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Semantic version (e.g., "1.0.0") */
|
|
15
|
+
version: string;
|
|
16
|
+
/** Brief description of the addon's functionality */
|
|
17
|
+
description?: string;
|
|
18
|
+
/** Author name or organization */
|
|
19
|
+
author?: string;
|
|
20
|
+
/** Compatible SDK version */
|
|
21
|
+
sdkVersion?: string;
|
|
22
|
+
/** Main entry point file (relative to addon root) */
|
|
23
|
+
main?: string;
|
|
24
|
+
/** Whether the addon is enabled by default */
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
/** Permission declarations for security review */
|
|
27
|
+
permissions?: Permission[];
|
|
28
|
+
/** Addon homepage or documentation URL */
|
|
29
|
+
homepage?: string;
|
|
30
|
+
/** Support or issues URL */
|
|
31
|
+
repository?: string;
|
|
32
|
+
/** License identifier (e.g., "MIT", "Apache-2.0") */
|
|
33
|
+
license?: string;
|
|
34
|
+
/** Minimum Wealthfolio version required */
|
|
35
|
+
minWealthfolioVersion?: string;
|
|
36
|
+
/** Keywords for discoverability */
|
|
37
|
+
keywords?: string[];
|
|
38
|
+
/** Addon icon (base64 or relative path) */
|
|
39
|
+
icon?: string;
|
|
40
|
+
/** Installation timestamp in ISO format */
|
|
41
|
+
installedAt?: string;
|
|
42
|
+
/** Last update timestamp */
|
|
43
|
+
updatedAt?: string;
|
|
44
|
+
/** Installation source */
|
|
45
|
+
source?: 'local' | 'store' | 'sideload';
|
|
46
|
+
/** File size in bytes */
|
|
47
|
+
size?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Type guard to check if a manifest has been installed (has runtime fields)
|
|
51
|
+
*/
|
|
52
|
+
export declare function isInstalledManifest(manifest: AddonManifest): manifest is Required<Pick<AddonManifest, 'main' | 'enabled' | 'installedAt'>> & AddonManifest;
|
|
53
|
+
/**
|
|
54
|
+
* Helper type for development manifests (without runtime fields)
|
|
55
|
+
*/
|
|
56
|
+
export type DevelopmentManifest = Omit<AddonManifest, 'installedAt' | 'updatedAt' | 'source' | 'size'>;
|
|
57
|
+
/**
|
|
58
|
+
* Helper type for installed manifests (with runtime fields)
|
|
59
|
+
*/
|
|
60
|
+
export type InstalledManifest = Required<Pick<AddonManifest, 'main' | 'enabled' | 'installedAt'>> & AddonManifest;
|
|
61
|
+
/**
|
|
62
|
+
* Addon file information
|
|
63
|
+
*/
|
|
64
|
+
export interface AddonFile {
|
|
65
|
+
/** File name */
|
|
66
|
+
name: string;
|
|
67
|
+
/** File content */
|
|
68
|
+
content: string;
|
|
69
|
+
/** Whether this is the main entry point */
|
|
70
|
+
is_main: boolean;
|
|
71
|
+
/** File size in bytes */
|
|
72
|
+
size?: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extracted addon package
|
|
76
|
+
*/
|
|
77
|
+
export interface ExtractedAddon {
|
|
78
|
+
/** Addon metadata from manifest */
|
|
79
|
+
metadata: AddonManifest;
|
|
80
|
+
/** List of files in the addon package */
|
|
81
|
+
files: AddonFile[];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Installed addon information
|
|
85
|
+
*/
|
|
86
|
+
export interface InstalledAddon {
|
|
87
|
+
/** Addon metadata */
|
|
88
|
+
metadata: AddonManifest;
|
|
89
|
+
/** Installation path */
|
|
90
|
+
path?: string;
|
|
91
|
+
/** Whether the addon is currently active */
|
|
92
|
+
active?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Addon installation result
|
|
96
|
+
*/
|
|
97
|
+
export interface AddonInstallResult {
|
|
98
|
+
/** Whether installation was successful */
|
|
99
|
+
success: boolean;
|
|
100
|
+
/** Error message if installation failed */
|
|
101
|
+
error?: string;
|
|
102
|
+
/** Installed addon metadata */
|
|
103
|
+
addon?: AddonManifest;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Addon validation result
|
|
107
|
+
*/
|
|
108
|
+
export interface AddonValidationResult {
|
|
109
|
+
/** Whether the addon is valid */
|
|
110
|
+
valid: boolean;
|
|
111
|
+
/** List of validation errors */
|
|
112
|
+
errors: string[];
|
|
113
|
+
/** List of validation warnings */
|
|
114
|
+
warnings: string[];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Addon update information
|
|
118
|
+
*/
|
|
119
|
+
export interface AddonUpdateInfo {
|
|
120
|
+
/** Current installed version */
|
|
121
|
+
currentVersion: string;
|
|
122
|
+
/** Latest available version */
|
|
123
|
+
latestVersion: string;
|
|
124
|
+
/** Whether an update is available */
|
|
125
|
+
updateAvailable: boolean;
|
|
126
|
+
/** Download URL for the update */
|
|
127
|
+
downloadUrl?: string;
|
|
128
|
+
/** Release notes for the latest version */
|
|
129
|
+
releaseNotes?: string;
|
|
130
|
+
/** Release date of the latest version */
|
|
131
|
+
releaseDate?: string;
|
|
132
|
+
/** Changelog URL */
|
|
133
|
+
changelogUrl?: string;
|
|
134
|
+
/** Whether this is a critical security update */
|
|
135
|
+
isCritical?: boolean;
|
|
136
|
+
/** Breaking changes in this update */
|
|
137
|
+
hasBreakingChanges?: boolean;
|
|
138
|
+
/** Minimum Wealthfolio version required for this update */
|
|
139
|
+
minWealthfolioVersion?: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Addon update check result
|
|
143
|
+
*/
|
|
144
|
+
export interface AddonUpdateCheckResult {
|
|
145
|
+
/** Addon ID */
|
|
146
|
+
addonId: string;
|
|
147
|
+
/** Update information */
|
|
148
|
+
updateInfo: AddonUpdateInfo;
|
|
149
|
+
/** Any errors during update check */
|
|
150
|
+
error?: string;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Addon store listing
|
|
154
|
+
*/
|
|
155
|
+
export interface AddonStoreListing {
|
|
156
|
+
/** Addon metadata */
|
|
157
|
+
metadata: AddonManifest;
|
|
158
|
+
/** Download URL */
|
|
159
|
+
downloadUrl: string;
|
|
160
|
+
/** Number of downloads */
|
|
161
|
+
downloads?: number;
|
|
162
|
+
/** Average rating */
|
|
163
|
+
rating?: number;
|
|
164
|
+
/** Number of reviews */
|
|
165
|
+
reviewCount?: number;
|
|
166
|
+
/** Whether it's verified by Wealthfolio team */
|
|
167
|
+
verified?: boolean;
|
|
168
|
+
/** Last update date */
|
|
169
|
+
lastUpdated?: string;
|
|
170
|
+
/** Screenshots or images */
|
|
171
|
+
images?: string[];
|
|
172
|
+
/** Release notes for the latest version */
|
|
173
|
+
releaseNotes?: string;
|
|
174
|
+
/** Changelog URL */
|
|
175
|
+
changelogUrl?: string;
|
|
176
|
+
}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* Security risk levels for addon operations
|
|
6
6
|
*/
|
|
7
|
-
type RiskLevel = 'low' | 'medium' | 'high';
|
|
7
|
+
export type RiskLevel = 'low' | 'medium' | 'high';
|
|
8
8
|
/**
|
|
9
9
|
* Function permission details with declaration and detection tracking
|
|
10
10
|
*/
|
|
11
|
-
interface FunctionPermission {
|
|
11
|
+
export interface FunctionPermission {
|
|
12
12
|
/** Function name */
|
|
13
13
|
name: string;
|
|
14
14
|
/** Whether this function was declared by the developer in manifest */
|
|
@@ -21,7 +21,7 @@ interface FunctionPermission {
|
|
|
21
21
|
/**
|
|
22
22
|
* Permission requirement for specific addon functionality
|
|
23
23
|
*/
|
|
24
|
-
interface Permission {
|
|
24
|
+
export interface Permission {
|
|
25
25
|
/** Permission category identifier */
|
|
26
26
|
category: string;
|
|
27
27
|
/** List of API functions this permission grants access to with their declaration/detection status */
|
|
@@ -32,7 +32,7 @@ interface Permission {
|
|
|
32
32
|
/**
|
|
33
33
|
* Permission category definition
|
|
34
34
|
*/
|
|
35
|
-
interface PermissionCategory {
|
|
35
|
+
export interface PermissionCategory {
|
|
36
36
|
/** Unique category identifier */
|
|
37
37
|
id: string;
|
|
38
38
|
/** Display name for the category */
|
|
@@ -47,53 +47,51 @@ interface PermissionCategory {
|
|
|
47
47
|
/**
|
|
48
48
|
* Predefined permission categories with their associated functions and risk levels
|
|
49
49
|
*/
|
|
50
|
-
declare const PERMISSION_CATEGORIES: PermissionCategory[];
|
|
50
|
+
export declare const PERMISSION_CATEGORIES: PermissionCategory[];
|
|
51
51
|
/**
|
|
52
52
|
* Helper functions for permission management
|
|
53
53
|
*/
|
|
54
54
|
/**
|
|
55
55
|
* Create a FunctionPermission object
|
|
56
56
|
*/
|
|
57
|
-
declare function createFunctionPermission(name: string, isDeclared?: boolean, isDetected?: boolean, detectedAt?: string): FunctionPermission;
|
|
57
|
+
export declare function createFunctionPermission(name: string, isDeclared?: boolean, isDetected?: boolean, detectedAt?: string): FunctionPermission;
|
|
58
58
|
/**
|
|
59
59
|
* Get permission category by ID
|
|
60
60
|
*/
|
|
61
|
-
declare function getPermissionCategory(id: string): PermissionCategory | undefined;
|
|
61
|
+
export declare function getPermissionCategory(id: string): PermissionCategory | undefined;
|
|
62
62
|
/**
|
|
63
63
|
* Get permission categories by risk level
|
|
64
64
|
*/
|
|
65
|
-
declare function getPermissionCategoriesByRisk(riskLevel: RiskLevel): PermissionCategory[];
|
|
65
|
+
export declare function getPermissionCategoriesByRisk(riskLevel: RiskLevel): PermissionCategory[];
|
|
66
66
|
/**
|
|
67
67
|
* Get the risk level for a specific function
|
|
68
68
|
*/
|
|
69
|
-
declare function getFunctionRiskLevel(functionName: string): RiskLevel | undefined;
|
|
69
|
+
export declare function getFunctionRiskLevel(functionName: string): RiskLevel | undefined;
|
|
70
70
|
/**
|
|
71
71
|
* Check if a function requires a specific permission category
|
|
72
72
|
*/
|
|
73
|
-
declare function isPermissionRequired(functionName: string, categoryId: string): boolean;
|
|
73
|
+
export declare function isPermissionRequired(functionName: string, categoryId: string): boolean;
|
|
74
74
|
/**
|
|
75
75
|
* Get all declared functions from a permission
|
|
76
76
|
*/
|
|
77
|
-
declare function getDeclaredFunctions(permission: Permission): string[];
|
|
77
|
+
export declare function getDeclaredFunctions(permission: Permission): string[];
|
|
78
78
|
/**
|
|
79
79
|
* Get all detected functions from a permission
|
|
80
80
|
*/
|
|
81
|
-
declare function getDetectedFunctions(permission: Permission): string[];
|
|
81
|
+
export declare function getDetectedFunctions(permission: Permission): string[];
|
|
82
82
|
/**
|
|
83
83
|
* Get functions that were detected but not declared (potential security concern)
|
|
84
84
|
*/
|
|
85
|
-
declare function getUndeclaredDetectedFunctions(permission: Permission): string[];
|
|
85
|
+
export declare function getUndeclaredDetectedFunctions(permission: Permission): string[];
|
|
86
86
|
/**
|
|
87
87
|
* Check if a permission has any undeclared detected functions
|
|
88
88
|
*/
|
|
89
|
-
declare function hasUndeclaredDetectedFunctions(permission: Permission): boolean;
|
|
89
|
+
export declare function hasUndeclaredDetectedFunctions(permission: Permission): boolean;
|
|
90
90
|
/**
|
|
91
91
|
* Add a detected function to a permission
|
|
92
92
|
*/
|
|
93
|
-
declare function addDetectedFunction(permission: Permission, functionName: string, detectedAt?: string): Permission;
|
|
93
|
+
export declare function addDetectedFunction(permission: Permission, functionName: string, detectedAt?: string): Permission;
|
|
94
94
|
/**
|
|
95
95
|
* Mark a function as declared in a permission
|
|
96
96
|
*/
|
|
97
|
-
declare function markFunctionAsDeclared(permission: Permission, functionName: string): Permission;
|
|
98
|
-
|
|
99
|
-
export { type FunctionPermission, PERMISSION_CATEGORIES, type Permission, type PermissionCategory, type RiskLevel, addDetectedFunction, createFunctionPermission, getDeclaredFunctions, getDetectedFunctions, getFunctionRiskLevel, getPermissionCategoriesByRisk, getPermissionCategory, getUndeclaredDetectedFunctions, hasUndeclaredDetectedFunctions, isPermissionRequired, markFunctionAsDeclared };
|
|
97
|
+
export declare function markFunctionAsDeclared(permission: Permission, functionName: string): Permission;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Query Keys for React Query
|
|
3
|
+
* These keys should match the main application's query keys to ensure cache consistency
|
|
4
|
+
*/
|
|
5
|
+
export declare const QueryKeys: {
|
|
6
|
+
readonly ACCOUNTS: "accounts";
|
|
7
|
+
readonly ACCOUNTS_SUMMARY: "accounts_summary";
|
|
8
|
+
readonly ACTIVITY_DATA: "activity-data";
|
|
9
|
+
readonly ACTIVITIES: "activities";
|
|
10
|
+
readonly HOLDINGS: "holdings";
|
|
11
|
+
readonly HOLDING: "holding";
|
|
12
|
+
readonly INCOME_SUMMARY: "incomeSummary";
|
|
13
|
+
readonly PORTFOLIO_SUMMARY: "portfolioSummary";
|
|
14
|
+
readonly QUOTE_HISTORY: "quoteHistory";
|
|
15
|
+
readonly GOALS: "goals";
|
|
16
|
+
readonly GOALS_ALLOCATIONS: "goals_allocations";
|
|
17
|
+
readonly SETTINGS: "settings";
|
|
18
|
+
readonly EXCHANGE_RATES: "exchangeRates";
|
|
19
|
+
readonly EXCHANGE_RATE_SYMBOLS: "exchange_rate_symbols";
|
|
20
|
+
readonly QUOTE: "quote";
|
|
21
|
+
readonly CONTRIBUTION_LIMITS: "contributionLimits";
|
|
22
|
+
readonly CONTRIBUTION_LIMIT_PROGRESS: "contributionLimitProgress";
|
|
23
|
+
readonly ASSET_DATA: "asset_data";
|
|
24
|
+
readonly IMPORT_MAPPING: "import_mapping";
|
|
25
|
+
readonly PERFORMANCE_SUMMARY: "performanceSummary";
|
|
26
|
+
readonly PERFORMANCE_HISTORY: "performanceHistory";
|
|
27
|
+
readonly HISTORY_VALUATION: "historyValuation";
|
|
28
|
+
readonly valuationHistory: (id: string) => string[];
|
|
29
|
+
readonly ACCOUNTS_SIMPLE_PERFORMANCE: "accountsSimplePerformance";
|
|
30
|
+
readonly accountsSimplePerformance: (accountIds: string[]) => string[];
|
|
31
|
+
readonly MARKET_DATA_PROVIDERS: "marketDataProviders";
|
|
32
|
+
readonly MARKET_DATA_PROVIDER_SETTINGS: "marketDataProviderSettings";
|
|
33
|
+
readonly transactions: "transactions";
|
|
34
|
+
readonly latestValuations: "latest-valuations";
|
|
35
|
+
readonly symbolSearch: "symbol-search";
|
|
36
|
+
readonly ASSET_HISTORY: "asset-history";
|
|
37
|
+
readonly INSTALLED_ADDONS: "installedAddons";
|
|
38
|
+
readonly ADDON_STORE_LISTINGS: "addonStoreListings";
|
|
39
|
+
readonly ADDON_AUTO_UPDATE_CHECK: "addonAutoUpdateCheck";
|
|
40
|
+
readonly secrets: {
|
|
41
|
+
readonly apiKey: (providerId: string) => string[];
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export type QueryKeys = typeof QueryKeys;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { HostAPI } from './host-api';
|
|
3
|
+
/**
|
|
4
|
+
* Core types for addon development
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Handle returned from sidebar item creation
|
|
8
|
+
*/
|
|
9
|
+
export interface SidebarItemHandle {
|
|
10
|
+
/** Remove the sidebar item */
|
|
11
|
+
remove(): void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for adding a sidebar item
|
|
15
|
+
*/
|
|
16
|
+
export interface SidebarItemConfig {
|
|
17
|
+
/** Unique identifier for the sidebar item */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Display text for the sidebar item */
|
|
20
|
+
label: string;
|
|
21
|
+
/** Optional icon name or React component */
|
|
22
|
+
icon?: string | React.ReactNode;
|
|
23
|
+
/** Optional route to navigate to when clicked */
|
|
24
|
+
route?: string;
|
|
25
|
+
/** Optional ordering priority (lower numbers appear first) */
|
|
26
|
+
order?: number;
|
|
27
|
+
/** Optional click handler (if no route provided) */
|
|
28
|
+
onClick?: () => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Configuration for adding a route
|
|
32
|
+
*/
|
|
33
|
+
export interface RouteConfig {
|
|
34
|
+
/** Route path pattern */
|
|
35
|
+
path: string;
|
|
36
|
+
/** Lazy-loaded React component */
|
|
37
|
+
component: React.LazyExoticComponent<React.ComponentType<unknown>>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sidebar management interface
|
|
41
|
+
*/
|
|
42
|
+
export interface SidebarManager {
|
|
43
|
+
/**
|
|
44
|
+
* Add an item to the application sidebar
|
|
45
|
+
* @param config Configuration for the sidebar item
|
|
46
|
+
* @returns Handle to remove the item
|
|
47
|
+
*/
|
|
48
|
+
addItem(config: SidebarItemConfig): SidebarItemHandle;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Router management interface
|
|
52
|
+
*/
|
|
53
|
+
export interface RouterManager {
|
|
54
|
+
/**
|
|
55
|
+
* Register a new route in the application
|
|
56
|
+
* @param route Route configuration
|
|
57
|
+
*/
|
|
58
|
+
add(route: RouteConfig): void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Event callback type for Tauri events
|
|
62
|
+
*/
|
|
63
|
+
export type EventCallback<T> = (event: {
|
|
64
|
+
payload: T;
|
|
65
|
+
}) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Unlisten function type for event listeners
|
|
68
|
+
*/
|
|
69
|
+
export type UnlistenFn = () => void;
|
|
70
|
+
/**
|
|
71
|
+
* Main addon context interface providing access to Wealthfolio APIs
|
|
72
|
+
*/
|
|
73
|
+
export interface AddonContext {
|
|
74
|
+
/** Sidebar management */
|
|
75
|
+
sidebar: SidebarManager;
|
|
76
|
+
/** Router management */
|
|
77
|
+
router: RouterManager;
|
|
78
|
+
/** Register a callback for addon cleanup */
|
|
79
|
+
onDisable(callback: () => void): void;
|
|
80
|
+
/** Access to host application APIs */
|
|
81
|
+
api: HostAPI;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Addon enable function signature
|
|
85
|
+
*/
|
|
86
|
+
export type AddonEnableFunction = (context: AddonContext) => void | {
|
|
87
|
+
disable?: () => void;
|
|
88
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for addon development
|
|
3
|
+
*/
|
|
4
|
+
import type { AddonManifest, AddonValidationResult } from './manifest';
|
|
5
|
+
/**
|
|
6
|
+
* Validates an addon manifest
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateManifest(manifest: AddonManifest): AddonValidationResult;
|
|
9
|
+
/**
|
|
10
|
+
* Checks if an addon version is compatible with the current SDK
|
|
11
|
+
*/
|
|
12
|
+
export declare function isCompatibleVersion(addonSdkVersion?: string, currentSdkVersion?: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Formats addon size in human-readable format
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatAddonSize(bytes: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Generates a unique addon ID from a name
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateAddonId(name: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Type guard to check if an object is a valid addon manifest
|
|
23
|
+
*/
|
|
24
|
+
export declare function isAddonManifest(obj: unknown): obj is AddonManifest;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@types+react@19.2.13/node_modules/@types/react/global.d.ts","../../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.13/node_modules/@types/react/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.13/node_modules/@types/react/jsx-runtime.d.ts","../src/data-types.ts","../src/goal-progress.ts","../src/types.ts","../src/host-api.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/subscribable.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/focusmanager.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/removable.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/hydration-blevg2lp.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/infinitequeryobserver.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/notifymanager.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/onlinemanager.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/queriesobserver.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/timeoutmanager.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/streamedquery.d.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.90.20/node_modules/@tanstack/query-core/build/modern/index.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/types.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/usequeries.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/queryoptions.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/usequery.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/usesuspensequery.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/usesuspenseinfinitequery.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/usesuspensequeries.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/useprefetchquery.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/useprefetchinfinitequery.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/infinitequeryoptions.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/queryclientprovider.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/queryerrorresetboundary.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/hydrationboundary.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/useisfetching.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/usemutationstate.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/usemutation.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/mutationoptions.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/useinfinitequery.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/isrestoringprovider.d.ts","../../../node_modules/.pnpm/@tanstack+react-query@5.90.20_react@19.2.4/node_modules/@tanstack/react-query/build/modern/index.d.ts","../src/query-keys.ts","../src/permissions.ts","../src/manifest.ts","../package.json","../src/version.ts","../src/utils.ts","../../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.13/node_modules/@types/react-dom/index.d.ts","../src/index.ts"],"fileIdsList":[[68],[68,70],[68,69,70,71,72,73,74,75,76,77],[68,70,71],[62,78],[62,63,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],[78,79],[62],[62,63],[78],[78,79,88],[78,79,81],[60,61],[63],[63,64],[63,64,66],[62,63,64,65,66,67,98,99,100,101,103,104,105],[63,100],[62,63,67],[63,101,103],[63,102]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"f123246a7b6c04d80b9b57fadfc6c90959ec6d5c0d4c8e620e06e2811ae3a052","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"d8e2276a232dbb849497502a846b17dcc1a5d9152bad88a95f937f0549d03228","signature":"3d2a6878d89651fdf9b969592f4662a7215845ff241b21b7ef9dd279bf7eee80"},{"version":"e9a999b6912c3adb6ca769819b3eba5cc65173e3dcd0780a79023020ebf200e8","signature":"ed470e2274b36f87f4d53dacdd0e3eaeb41264aa5bc3bad4260a40ab1f668a50"},{"version":"22d182f4ad8c6bd2e1924fdddc290ee86cd71f6210b56fd7ba8510249bc88810","signature":"825372ca95e5ce5f7d4afb76ece079d557ade924c3bac38213737603d2a32bc1"},{"version":"e59a63f8dc78d0a3a1ba5e3b57942a4753a47a14289845408a17227485c2411d","signature":"810114183f34d583bcd4736c8a84fc101fd7f8e8807d924ca278a1de99c56d40"},{"version":"50cf7a23fc93928995caec8d7956206990f82113beeb6b3242dae8124edc3ca0","impliedFormat":99},{"version":"352031ac2e53031b69a09355e09ad7d95361edf32cc827cfe2417d80247a5a50","impliedFormat":99},{"version":"9971931daaf18158fc38266e838d56eb5d9d1f13360b1181bb4735a05f534c03","impliedFormat":99},{"version":"06d635a90365afe107c7e2daaa9851f5d3f062d78ebe4524b1b23b122469a1e2","impliedFormat":99},{"version":"aa103fbc4677b71d3deda20d37088cc2f39c3db8c2566ddf516b56ce7532d00a","impliedFormat":99},{"version":"0c5b705d31420477189618154d1b6a9bb62a34fa6055f56ade1a316f6adb6b3a","impliedFormat":99},{"version":"853b8bdb5da8c8e5d31e4d715a8057d8e96059d6774b13545c3616ed216b890c","impliedFormat":99},{"version":"430f4fa4e99e5e0a7ca2bbdde84abc8536bdfde4fd0de26009db508b8f571bb5","impliedFormat":99},{"version":"fe3c64bf61fcfec9b9861725c6d92de03f33748a01d982760ccfa798d777cf9d","impliedFormat":99},{"version":"1120a39f36c968298e2ca1d8cb1405389f9696f6b49e13b335626a94c16930bb","impliedFormat":99},{"version":"0a049adb920f3b42e1933c037052bcbc5e78b4704ad080bf078353c7f8ed6225","impliedFormat":99},{"version":"2bb7e3f4061e7fdb62652ffb077ca2a01b55e9d898409e37fe1ae97acab894ea","impliedFormat":99},{"version":"c363b57a3dfab561bfe884baacf8568eea085bd5e11ccf0992fac67537717d90","impliedFormat":99},{"version":"1757a53a602a8991886070f7ba4d81258d70e8dca133b256ae6a1a9f08cd73b3","impliedFormat":99},{"version":"084c09a35a9611e1777c02343c11ab8b1be48eb4895bbe6da90222979940b4a6","impliedFormat":99},{"version":"4b3049a2c849f0217ff4def308637931661461c329e4cf36aeb31db34c4c0c64","impliedFormat":99},{"version":"6245aa515481727f994d1cf7adfc71e36b5fc48216a92d7e932274cee3268000","impliedFormat":99},{"version":"d542fb814a8ceb7eb858ecd5a41434274c45a7d511b9d46feb36d83b437b08d5","impliedFormat":99},{"version":"660ce583eaa09bb39eef5ad7af9d1b5f027a9d1fbf9f76bf5b9dc9ef1be2830e","impliedFormat":99},{"version":"b7d9ca4e3248f643fa86ff11872623fdc8ed2c6009836bec0e38b163b6faed0c","impliedFormat":99},{"version":"ac7a28ab421ea564271e1a9de78d70d68c65fab5cbb6d5c5568afcf50496dd61","impliedFormat":99},{"version":"d4f7a7a5f66b9bc6fbfd53fa08dcf8007ff752064df816da05edfa35abd2c97c","impliedFormat":99},{"version":"1f38ecf63dead74c85180bf18376dc6bc152522ef3aedf7b588cadbbd5877506","impliedFormat":99},{"version":"82fb33c00b1300c19591105fc25ccf78acba220f58d162b120fe3f4292a5605f","impliedFormat":99},{"version":"facde2bec0f59cf92f4635ece51b2c3fa2d0a3bbb67458d24af61e7e6b8f003c","impliedFormat":99},{"version":"4669194e4ca5f7c160833bbb198f25681e629418a6326aba08cf0891821bfe8f","impliedFormat":99},{"version":"db185b403e30e91c5b90f3f2cfa062832d764c9d7df3ad7f5db7e17596344fe8","impliedFormat":99},{"version":"669b62a7169354658d4ae1e043ad8203728655492a8f70a940a11ca5ed4d5029","impliedFormat":99},{"version":"a95cd11c5c8bc03eab4011f8e339a48f9a87293e90c0bf3e9003d7a6f833f557","impliedFormat":99},{"version":"e9bc0db0144701fab1e98c4d595a293c7c840d209b389144142f0adbc36b5ec2","impliedFormat":99},{"version":"9d884b885c4b2d89286685406b45911dcaab03e08e948850e3e41e29af69561c","impliedFormat":99},{"version":"31fb7ea2ae7970de6100243671490c5cf91c8feddf72686bd6b0f37569143b17","signature":"ebf0e04ca57f13a995b074817803bb8cb86078edcb97a42f8146295efc31c885"},{"version":"468266ed7095b2dcedbc51455ec82550a0185291caf7e770ae52245d32bd0ce0","signature":"c7f6d3fb10a9e47cb60b0547d34c6e666354eb00460fe08333d3fd37a503f090"},{"version":"f3e76b04368c7fd94559fc1476e742dcf7ab229fd10b84041cbc5b643161445f","signature":"83190209db45833d4ece114448f5f6f1dde2e68076961d4ea4d1e2cb03dc85c3"},"a28a14bfe1fa1714a48eaefda8757b8c370545e4b333420d6f7b8c039ffa70e6",{"version":"0be1bb5ea4d9ea191a1318786bb0fae4fcb29632268479b5285b20930bb60355","signature":"eb63b664e3561a8888fbd9ec8b81bb6d3063e7be5cf2d2a155d0654273a6d4d7"},{"version":"903da13ad1d4d95f9eb983055d64fbe3780e65b5cbee450a45f6e7be5335dc4c","signature":"a92f0554e1f858fc1d3671d255bd3b972767362047272f866c84767ed9423129"},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"62650ad4eb759fdb947745a8e58a8980d7ac3665d17782be7f0917cf48d617ed","signature":"8275f8d85cc610587966082c4ffaa979be7c7b244ec498d51e3f26095e6d35f7"}],"root":[[64,67],[99,104],106],"options":{"allowImportingTsExtensions":true,"allowSyntheticDefaultImports":true,"alwaysStrict":true,"composite":true,"declaration":true,"emitDeclarationOnly":true,"esModuleInterop":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":9,"useDefineForClassFields":true},"referencedMap":[[69,1],[71,2],[78,3],[72,4],[74,1],[75,4],[77,4],[91,5],[98,6],[88,7],[97,8],[95,7],[89,5],[90,9],[81,7],[79,10],[96,11],[92,10],[94,7],[93,10],[87,10],[86,7],[80,7],[82,12],[84,7],[85,7],[83,7],[105,8],[62,13],[63,8],[102,14],[64,14],[65,15],[67,16],[106,17],[101,18],[100,14],[99,14],[66,19],[104,20],[103,21]],"latestChangedDtsFile":"./src/index.d.ts","version":"5.9.3"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
package/package.json
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wealthfolio/addon-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "TypeScript SDK for building Wealthfolio addons with enhanced functionality and type safety",
|
|
5
|
-
"main": "dist/index.
|
|
6
|
-
"types": "dist/index.d.
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/src/index.d.ts",
|
|
7
8
|
"exports": {
|
|
8
9
|
".": {
|
|
9
|
-
"import": "./dist/index.
|
|
10
|
-
"types": "./dist/index.d.
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/src/index.d.ts"
|
|
11
12
|
},
|
|
12
13
|
"./types": {
|
|
13
|
-
"import": "./dist/types.
|
|
14
|
-
"types": "./dist/types.d.
|
|
14
|
+
"import": "./dist/types.js",
|
|
15
|
+
"types": "./dist/src/types.d.ts"
|
|
15
16
|
},
|
|
16
17
|
"./permissions": {
|
|
17
|
-
"import": "./dist/permissions.
|
|
18
|
-
"types": "./dist/permissions.d.
|
|
18
|
+
"import": "./dist/permissions.js",
|
|
19
|
+
"types": "./dist/src/permissions.d.ts"
|
|
19
20
|
}
|
|
20
21
|
},
|
|
21
22
|
"files": [
|
|
@@ -44,20 +45,30 @@
|
|
|
44
45
|
"url": "https://github.com/afadil/wealthfolio/issues"
|
|
45
46
|
},
|
|
46
47
|
"scripts": {
|
|
47
|
-
"build": "tsup",
|
|
48
|
+
"build": "tsup && pnpm run build:types",
|
|
48
49
|
"dev": "tsup --watch",
|
|
49
50
|
"clean": "rm -rf dist",
|
|
50
|
-
"lint": "
|
|
51
|
+
"lint": "eslint .",
|
|
52
|
+
"lint:fix": "eslint . --fix",
|
|
53
|
+
"lint:quiet": "eslint . --quiet",
|
|
54
|
+
"format": "prettier --write .",
|
|
55
|
+
"format:check": "prettier --check .",
|
|
56
|
+
"type-check": "tsc --noEmit",
|
|
57
|
+
"build:types": "tsc -p tsconfig.json",
|
|
51
58
|
"prepack": "npm run build"
|
|
52
59
|
},
|
|
53
|
-
"devDependencies": {
|
|
54
|
-
"tsup": "^8.5.0",
|
|
55
|
-
"typescript": "^5.8.3"
|
|
56
|
-
},
|
|
57
60
|
"peerDependencies": {
|
|
58
|
-
"react": "^
|
|
61
|
+
"react": "^19.2.4",
|
|
62
|
+
"react-dom": "^19.2.4"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@tanstack/react-query": "^5.90.20",
|
|
66
|
+
"@types/react": "^19.2.13",
|
|
67
|
+
"@types/react-dom": "^19.2.3",
|
|
68
|
+
"tsup": "^8.5.1",
|
|
69
|
+
"typescript": "^5.9.3"
|
|
59
70
|
},
|
|
60
71
|
"engines": {
|
|
61
72
|
"node": ">=20.0.0"
|
|
62
73
|
}
|
|
63
|
-
}
|
|
74
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/permissions.ts"],"sourcesContent":["/**\n * Permission system types and constants for Wealthfolio addons\n */\n\n/**\n * Security risk levels for addon operations\n */\nexport type RiskLevel = 'low' | 'medium' | 'high';\n\n/**\n * Function permission details with declaration and detection tracking\n */\nexport interface FunctionPermission {\n /** Function name */\n name: string;\n /** Whether this function was declared by the developer in manifest */\n isDeclared: boolean;\n /** Whether this function was detected by static analysis during installation */\n isDetected: boolean;\n /** ISO timestamp when this function was detected (if isDetected is true) */\n detectedAt?: string;\n}\n\n/**\n * Permission requirement for specific addon functionality\n */\nexport interface Permission {\n /** Permission category identifier */\n category: string;\n /** List of API functions this permission grants access to with their declaration/detection status */\n functions: FunctionPermission[];\n /** Human-readable explanation of why this permission is needed */\n purpose: string;\n}\n\n/**\n * Permission category definition\n */\nexport interface PermissionCategory {\n /** Unique category identifier */\n id: string;\n /** Display name for the category */\n name: string;\n /** Detailed description of what this category covers */\n description: string;\n /** List of API functions in this category */\n functions: string[];\n /** Security risk level for this category */\n riskLevel: RiskLevel;\n}\n\n\n/**\n * Predefined permission categories with their associated functions and risk levels\n */\nexport const PERMISSION_CATEGORIES: PermissionCategory[] = [\n {\n id: 'accounts',\n name: 'Account Management',\n description: 'Access to account information and settings',\n functions: ['getAll', 'create'],\n riskLevel: 'high',\n },\n {\n id: 'portfolio',\n name: 'Portfolio Data',\n description: 'Access to holdings, portfolio performance, and account valuations',\n functions: [\n 'getHoldings',\n 'getHolding',\n 'update',\n 'recalculate',\n 'getIncomeSummary',\n 'getHistoricalValuations',\n 'getLatestValuations',\n ],\n riskLevel: 'high',\n },\n {\n id: 'activities',\n name: 'Transaction History',\n description: 'Access to transaction records and activity management',\n functions: [\n 'getAll',\n 'search',\n 'create',\n 'update',\n 'saveMany',\n 'import',\n 'checkImport',\n 'getImportMapping',\n 'saveImportMapping',\n ],\n riskLevel: 'high',\n },\n {\n id: 'market-data',\n name: 'Market Data',\n description: 'Access to market prices, quotes, and financial data',\n functions: [\n 'searchTicker',\n 'syncHistory',\n 'sync',\n 'getProviders',\n ],\n riskLevel: 'low',\n },\n {\n id: 'assets',\n name: 'Asset Management',\n description: 'Access to asset profiles and data sources',\n functions: [\n 'getProfile',\n 'updateProfile',\n 'updateDataSource',\n ],\n riskLevel: 'medium',\n },\n {\n id: 'quotes',\n name: 'Quote Management',\n description: 'Access to price quotes and historical data',\n functions: [\n 'update',\n 'getHistory',\n ],\n riskLevel: 'low',\n },\n {\n id: 'performance',\n name: 'Performance Analytics',\n description: 'Access to performance calculations and metrics',\n functions: [\n 'calculateHistory',\n 'calculateSummary',\n 'calculateAccountsSimple',\n ],\n riskLevel: 'medium',\n },\n {\n id: 'currency',\n name: 'Exchange Rates',\n description: 'Access to currency exchange rates and conversion data',\n functions: ['getAll', 'update', 'add'],\n riskLevel: 'low',\n },\n {\n id: 'goals',\n name: 'Goals Management',\n description: 'Access to financial goals and allocations',\n functions: [\n 'getAll',\n 'create',\n 'update',\n 'updateAllocations',\n 'getAllocations',\n ],\n riskLevel: 'medium',\n },\n {\n id: 'contribution-limits',\n name: 'Contribution Limits',\n description: 'Access to contribution limits and deposit calculations',\n functions: [\n 'getAll',\n 'create',\n 'update',\n 'calculateDeposits',\n ],\n riskLevel: 'medium',\n },\n {\n id: 'settings',\n name: 'Application Settings',\n description: 'Access to application settings and configuration',\n functions: ['get', 'update', 'backupDatabase'],\n riskLevel: 'medium',\n },\n {\n id: 'files',\n name: 'File Operations',\n description: 'Access to file dialogs and file system operations',\n functions: ['openCsvDialog', 'openSaveDialog'],\n riskLevel: 'medium',\n },\n {\n id: 'secrets',\n name: 'Secrets Management',\n description: 'Access to secure storage for addon secrets',\n functions: ['set', 'get', 'delete'],\n riskLevel: 'high',\n },\n {\n id: 'events',\n name: 'Event Listeners',\n description: 'Access to application events and notifications',\n functions: [\n 'onDropHover',\n 'onDrop',\n 'onDropCancelled',\n 'onUpdateStart',\n 'onUpdateComplete',\n 'onUpdateError',\n 'onSyncStart',\n 'onSyncComplete',\n ],\n riskLevel: 'low',\n },\n {\n id: 'ui',\n name: 'User Interface',\n description: 'Access to modify navigation and add UI components',\n functions: ['sidebar.addItem', 'router.add'],\n riskLevel: 'low',\n },\n];\n\n/**\n * Helper functions for permission management\n */\n\n/**\n * Create a FunctionPermission object\n */\nexport function createFunctionPermission(\n name: string,\n isDeclared: boolean = false,\n isDetected: boolean = false,\n detectedAt?: string\n): FunctionPermission {\n return {\n name,\n isDeclared,\n isDetected,\n detectedAt: isDetected ? (detectedAt || new Date().toISOString()) : undefined\n };\n}\n\n/**\n * Get permission category by ID\n */\nexport function getPermissionCategory(id: string): PermissionCategory | undefined {\n return PERMISSION_CATEGORIES.find(category => category.id === id);\n}\n\n/**\n * Get permission categories by risk level\n */\nexport function getPermissionCategoriesByRisk(riskLevel: RiskLevel): PermissionCategory[] {\n return PERMISSION_CATEGORIES.filter(category => category.riskLevel === riskLevel);\n}\n\n/**\n * Get the risk level for a specific function\n */\nexport function getFunctionRiskLevel(functionName: string): RiskLevel | undefined {\n const category = PERMISSION_CATEGORIES.find(cat => \n cat.functions.includes(functionName)\n );\n return category?.riskLevel;\n}\n\n/**\n * Check if a function requires a specific permission category\n */\nexport function isPermissionRequired(functionName: string, categoryId: string): boolean {\n const category = getPermissionCategory(categoryId);\n return category ? category.functions.includes(functionName) : false;\n}\n\n/**\n * Get all declared functions from a permission\n */\nexport function getDeclaredFunctions(permission: Permission): string[] {\n return permission.functions\n .filter(func => func.isDeclared)\n .map(func => func.name);\n}\n\n/**\n * Get all detected functions from a permission\n */\nexport function getDetectedFunctions(permission: Permission): string[] {\n return permission.functions\n .filter(func => func.isDetected)\n .map(func => func.name);\n}\n\n/**\n * Get functions that were detected but not declared (potential security concern)\n */\nexport function getUndeclaredDetectedFunctions(permission: Permission): string[] {\n return permission.functions\n .filter(func => func.isDetected && !func.isDeclared)\n .map(func => func.name);\n}\n\n/**\n * Check if a permission has any undeclared detected functions\n */\nexport function hasUndeclaredDetectedFunctions(permission: Permission): boolean {\n return permission.functions.some(func => func.isDetected && !func.isDeclared);\n}\n\n/**\n * Add a detected function to a permission\n */\nexport function addDetectedFunction(\n permission: Permission, \n functionName: string, \n detectedAt?: string\n): Permission {\n const existingFunc = permission.functions.find(f => f.name === functionName);\n \n if (existingFunc) {\n // Update existing function to mark as detected\n existingFunc.isDetected = true;\n existingFunc.detectedAt = detectedAt || new Date().toISOString();\n } else {\n // Add new detected function\n permission.functions.push(createFunctionPermission(\n functionName, \n false, \n true, \n detectedAt\n ));\n }\n \n return permission;\n}\n\n/**\n * Mark a function as declared in a permission\n */\nexport function markFunctionAsDeclared(\n permission: Permission, \n functionName: string\n): Permission {\n const existingFunc = permission.functions.find(f => f.name === functionName);\n \n if (existingFunc) {\n existingFunc.isDeclared = true;\n } else {\n // Add new declared function\n permission.functions.push(createFunctionPermission(functionName, true, false));\n }\n \n return permission;\n}\n"],"mappings":";AAuDO,IAAM,wBAA8C;AAAA,EACzD;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,CAAC,UAAU,QAAQ;AAAA,IAC9B,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,CAAC,UAAU,UAAU,KAAK;AAAA,IACrC,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,CAAC,OAAO,UAAU,gBAAgB;AAAA,IAC7C,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,CAAC,iBAAiB,gBAAgB;AAAA,IAC7C,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,CAAC,OAAO,OAAO,QAAQ;AAAA,IAClC,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,CAAC,mBAAmB,YAAY;AAAA,IAC3C,WAAW;AAAA,EACb;AACF;AASO,SAAS,yBACd,MACA,aAAsB,OACtB,aAAsB,OACtB,YACoB;AACpB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,aAAc,eAAc,oBAAI,KAAK,GAAE,YAAY,IAAK;AAAA,EACtE;AACF;AAKO,SAAS,sBAAsB,IAA4C;AAChF,SAAO,sBAAsB,KAAK,cAAY,SAAS,OAAO,EAAE;AAClE;AAKO,SAAS,8BAA8B,WAA4C;AACxF,SAAO,sBAAsB,OAAO,cAAY,SAAS,cAAc,SAAS;AAClF;AAKO,SAAS,qBAAqB,cAA6C;AAChF,QAAM,WAAW,sBAAsB;AAAA,IAAK,SAC1C,IAAI,UAAU,SAAS,YAAY;AAAA,EACrC;AACA,SAAO,UAAU;AACnB;AAKO,SAAS,qBAAqB,cAAsB,YAA6B;AACtF,QAAM,WAAW,sBAAsB,UAAU;AACjD,SAAO,WAAW,SAAS,UAAU,SAAS,YAAY,IAAI;AAChE;AAKO,SAAS,qBAAqB,YAAkC;AACrE,SAAO,WAAW,UACf,OAAO,UAAQ,KAAK,UAAU,EAC9B,IAAI,UAAQ,KAAK,IAAI;AAC1B;AAKO,SAAS,qBAAqB,YAAkC;AACrE,SAAO,WAAW,UACf,OAAO,UAAQ,KAAK,UAAU,EAC9B,IAAI,UAAQ,KAAK,IAAI;AAC1B;AAKO,SAAS,+BAA+B,YAAkC;AAC/E,SAAO,WAAW,UACf,OAAO,UAAQ,KAAK,cAAc,CAAC,KAAK,UAAU,EAClD,IAAI,UAAQ,KAAK,IAAI;AAC1B;AAKO,SAAS,+BAA+B,YAAiC;AAC9E,SAAO,WAAW,UAAU,KAAK,UAAQ,KAAK,cAAc,CAAC,KAAK,UAAU;AAC9E;AAKO,SAAS,oBACd,YACA,cACA,YACY;AACZ,QAAM,eAAe,WAAW,UAAU,KAAK,OAAK,EAAE,SAAS,YAAY;AAE3E,MAAI,cAAc;AAEhB,iBAAa,aAAa;AAC1B,iBAAa,aAAa,eAAc,oBAAI,KAAK,GAAE,YAAY;AAAA,EACjE,OAAO;AAEL,eAAW,UAAU,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAKO,SAAS,uBACd,YACA,cACY;AACZ,QAAM,eAAe,WAAW,UAAU,KAAK,OAAK,EAAE,SAAS,YAAY;AAE3E,MAAI,cAAc;AAChB,iBAAa,aAAa;AAAA,EAC5B,OAAO;AAEL,eAAW,UAAU,KAAK,yBAAyB,cAAc,MAAM,KAAK,CAAC;AAAA,EAC/E;AAEA,SAAO;AACT;","names":[]}
|