@pfm-platform/shared 0.1.0 → 0.2.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/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
- import { createContext, useState, useContext } from 'react';
1
+ import { createContext, useState, useContext, useEffect, useCallback, useMemo } from 'react';
2
2
  import { jsx } from 'react/jsx-runtime';
3
+ import { createClient } from '@supabase/supabase-js';
3
4
  import { z } from 'zod';
4
5
 
5
6
  // src/contexts/AppModeContext.tsx
@@ -23,7 +24,82 @@ function useAppMode() {
23
24
  }
24
25
  return context;
25
26
  }
27
+ var supabaseUrl = typeof import.meta !== "undefined" ? import.meta.env?.VITE_SUPABASE_URL ?? "" : process.env.VITE_SUPABASE_URL ?? "";
28
+ var supabaseAnonKey = typeof import.meta !== "undefined" ? import.meta.env?.VITE_SUPABASE_ANON_KEY ?? "" : process.env.VITE_SUPABASE_ANON_KEY ?? "";
29
+ var supabase = createClient(
30
+ supabaseUrl || "http://placeholder.invalid",
31
+ supabaseAnonKey || "placeholder-key"
32
+ );
33
+ function createSupabaseClient(url, anonKey) {
34
+ return createClient(
35
+ url ?? supabaseUrl,
36
+ anonKey ?? supabaseAnonKey
37
+ );
38
+ }
39
+ var AuthContext = createContext(null);
40
+ function AuthProvider({ children }) {
41
+ const [user, setUser] = useState(null);
42
+ const [session, setSession] = useState(null);
43
+ const [isLoading, setIsLoading] = useState(true);
44
+ useEffect(() => {
45
+ supabase.auth.getSession().then(({ data: { session: initialSession } }) => {
46
+ setSession(initialSession);
47
+ setUser(initialSession?.user ?? null);
48
+ setIsLoading(false);
49
+ });
50
+ const { data: { subscription } } = supabase.auth.onAuthStateChange(
51
+ (_event, newSession) => {
52
+ setSession(newSession);
53
+ setUser(newSession?.user ?? null);
54
+ setIsLoading(false);
55
+ }
56
+ );
57
+ return () => {
58
+ subscription.unsubscribe();
59
+ };
60
+ }, []);
61
+ const signIn = useCallback(async (email, password) => {
62
+ const { error } = await supabase.auth.signInWithPassword({ email, password });
63
+ return { error };
64
+ }, []);
65
+ const signUp = useCallback(async (email, password) => {
66
+ const { error } = await supabase.auth.signUp({ email, password });
67
+ return { error };
68
+ }, []);
69
+ const signOut = useCallback(async () => {
70
+ const { error } = await supabase.auth.signOut();
71
+ return { error };
72
+ }, []);
73
+ const resetPassword = useCallback(async (email) => {
74
+ const { error } = await supabase.auth.resetPasswordForEmail(email);
75
+ return { error };
76
+ }, []);
77
+ const value = useMemo(() => ({
78
+ user,
79
+ session,
80
+ isLoading,
81
+ isAuthenticated: !!session,
82
+ signIn,
83
+ signUp,
84
+ signOut,
85
+ resetPassword
86
+ }), [user, session, isLoading, signIn, signUp, signOut, resetPassword]);
87
+ return /* @__PURE__ */ jsx(AuthContext.Provider, { value, children });
88
+ }
26
89
  var AccountTypeSchema = z.enum([
90
+ "CHECKING",
91
+ "SAVINGS",
92
+ "CREDITCARD",
93
+ "INVESTMENT",
94
+ "LOAN"
95
+ ]);
96
+ var AccountStateSchema = z.enum([
97
+ "active",
98
+ "closed",
99
+ "archived",
100
+ "pending_deletion"
101
+ ]);
102
+ var DisplayAccountTypeSchema = z.enum([
27
103
  "checking",
28
104
  "savings",
29
105
  "cards",
@@ -40,239 +116,196 @@ var AccountTypeSchema = z.enum([
40
116
  "commercial",
41
117
  "creditline"
42
118
  ]);
43
- var AccountStateSchema = z.enum([
44
- "active",
45
- "closed",
46
- "archived",
47
- "pending_deletion"
48
- ]);
49
119
  var AggregationTypeSchema = z.enum([
50
120
  "finicity",
51
121
  "cashedge",
52
- "partner"
53
- ]);
54
- var PreferredBalanceTypeSchema = z.enum([
55
- "Available",
56
- "Current",
57
- "Outstanding"
122
+ "partner",
123
+ "manual"
58
124
  ]);
59
125
  var FinancialInstitutionSchema = z.object({
60
- id: z.number().int(),
61
- name: z.string()
62
- }).nullable();
63
- var CashEdgeAccountTypeSchema = z.object({
126
+ id: z.string().uuid(),
64
127
  name: z.string(),
65
- acct_type: z.string(),
66
- ext_type: z.string(),
67
- group: z.string()
68
- }).nullable();
69
- var AccountErrorSchema = z.object({
70
- message: z.string(),
71
- code: z.string(),
72
- actionable: z.boolean(),
73
- description: z.string().optional()
74
- // Finicity-specific field
128
+ ofx_org: z.string().nullable().optional(),
129
+ ofx_fid: z.string().nullable().optional(),
130
+ created_at: z.string().nullable().optional()
75
131
  }).nullable();
76
- var OtherBalanceSchema = z.object({
77
- balance_type: z.string(),
78
- balance: z.string().regex(/^\d+\.\d+$/)
79
- });
80
132
  var AccountSchema = z.object({
81
- // ========================================
82
- // Core Identifiers
83
- // ========================================
84
- id: z.number().int().positive(),
133
+ id: z.string().uuid(),
134
+ user_id: z.string().uuid(),
135
+ institution_id: z.string().uuid(),
85
136
  name: z.string().min(1),
86
- // ========================================
87
- // Balance Fields (STRINGS, not numbers!)
88
- // ========================================
89
- balance: z.string().regex(/^-?\d+\.\d{1,2}$/, {
90
- message: 'Balance must be a string in format "1234.56" with 1-2 decimal places'
91
- }),
92
- locked_balance: z.string().regex(/^-?\d+\.\d+$/).nullable().optional(),
93
- preferred_balance_type: PreferredBalanceTypeSchema.nullable().optional(),
94
- // ========================================
95
- // Type and State
96
- // ========================================
97
137
  account_type: AccountTypeSchema,
98
- display_account_type: z.string().optional(),
99
- state: AccountStateSchema,
100
- // ========================================
101
- // Aggregation Fields
102
- // ========================================
103
- aggregation_type: AggregationTypeSchema,
104
- reference_id: z.string().optional(),
105
- harvest_updated_at: z.string().datetime().nullable(),
106
- // ========================================
107
- // Include Flags (6 booleans)
108
- // ========================================
109
- include_in_expenses: z.boolean(),
110
- include_in_budget: z.boolean(),
111
- include_in_cashflow: z.boolean(),
112
- include_in_dashboard: z.boolean(),
113
- include_in_goals: z.boolean(),
114
- include_in_networth: z.boolean(),
115
- // ========================================
116
- // Nested Objects
117
- // ========================================
118
- fi: FinancialInstitutionSchema,
119
- cashedge_account_type: CashEdgeAccountTypeSchema,
120
- error: AccountErrorSchema.optional(),
121
- other_balances: z.array(OtherBalanceSchema).optional()
122
- });
123
- var AccountsResponseSchema = z.object({
124
- accounts: z.array(AccountSchema)
138
+ account_number_masked: z.string().nullable().optional(),
139
+ currency: z.string().default("USD"),
140
+ is_active: z.boolean().default(true),
141
+ // New columns from migration 20260215000001
142
+ balance: z.number().default(0),
143
+ state: AccountStateSchema.default("active"),
144
+ display_account_type: DisplayAccountTypeSchema.nullable().optional(),
145
+ include_in_expenses: z.boolean().default(true),
146
+ include_in_budget: z.boolean().default(true),
147
+ include_in_cashflow: z.boolean().default(true),
148
+ include_in_dashboard: z.boolean().default(true),
149
+ include_in_goals: z.boolean().default(false),
150
+ include_in_networth: z.boolean().default(true),
151
+ aggregation_type: AggregationTypeSchema.nullable().optional(),
152
+ created_at: z.string().nullable().optional(),
153
+ updated_at: z.string().nullable().optional()
154
+ });
155
+ var AccountWithInstitutionSchema = AccountSchema.extend({
156
+ institution: FinancialInstitutionSchema
157
+ });
158
+ var AccountsResponseSchema = z.array(AccountSchema);
159
+ var AccountsWithInstitutionResponseSchema = z.array(AccountWithInstitutionSchema);
160
+ var AccountCreateSchema = z.object({
161
+ user_id: z.string().uuid(),
162
+ institution_id: z.string().uuid(),
163
+ name: z.string().min(1),
164
+ account_type: AccountTypeSchema,
165
+ account_number_masked: z.string().nullable().optional(),
166
+ currency: z.string().default("USD"),
167
+ is_active: z.boolean().default(true),
168
+ balance: z.number().default(0),
169
+ state: AccountStateSchema.default("active"),
170
+ display_account_type: DisplayAccountTypeSchema.nullable().optional(),
171
+ include_in_expenses: z.boolean().default(true),
172
+ include_in_budget: z.boolean().default(true),
173
+ include_in_cashflow: z.boolean().default(true),
174
+ include_in_dashboard: z.boolean().default(true),
175
+ include_in_goals: z.boolean().default(false),
176
+ include_in_networth: z.boolean().default(true),
177
+ aggregation_type: AggregationTypeSchema.nullable().optional()
125
178
  });
126
179
  var AccountCreateSchemaAdmin = z.object({
180
+ user_id: z.string().uuid(),
181
+ institution_id: z.string().uuid(),
127
182
  name: z.string().optional().default("Test Account"),
128
- balance: z.string().optional().default("1000.00"),
129
- account_type: AccountTypeSchema.optional().default("checking"),
183
+ account_type: AccountTypeSchema.optional().default("CHECKING"),
184
+ account_number_masked: z.string().nullable().optional(),
185
+ currency: z.string().optional().default("USD"),
186
+ is_active: z.boolean().optional().default(true),
187
+ balance: z.number().optional().default(0),
130
188
  state: AccountStateSchema.optional().default("active"),
131
- aggregation_type: AggregationTypeSchema.optional().default("partner"),
132
- // Include flags - all optional with defaults
189
+ display_account_type: DisplayAccountTypeSchema.nullable().optional(),
133
190
  include_in_expenses: z.boolean().optional().default(true),
134
191
  include_in_budget: z.boolean().optional().default(true),
135
192
  include_in_cashflow: z.boolean().optional().default(true),
136
193
  include_in_dashboard: z.boolean().optional().default(true),
137
194
  include_in_goals: z.boolean().optional().default(false),
138
195
  include_in_networth: z.boolean().optional().default(true),
139
- // Optional fields
140
- locked_balance: z.string().regex(/^-?\d+\.\d+$/).nullable().optional(),
141
- preferred_balance_type: PreferredBalanceTypeSchema.nullable().optional(),
142
- display_account_type: z.string().optional(),
143
- reference_id: z.string().optional(),
144
- harvest_updated_at: z.string().datetime().nullable().optional(),
145
- other_balances: z.array(OtherBalanceSchema).optional().default([]),
146
- // Nested objects
147
- fi: FinancialInstitutionSchema.optional(),
148
- cashedge_account_type: CashEdgeAccountTypeSchema.optional(),
149
- error: AccountErrorSchema.optional()
150
- }).strict();
151
- var AccountCreateSchemaUser = AccountSchema.omit({
152
- id: true
153
- }).strict();
154
- var AccountCreateSchema = AccountCreateSchemaUser;
155
- var AccountUpdateSchema = AccountSchema.partial().required({
156
- id: true
196
+ aggregation_type: AggregationTypeSchema.nullable().optional()
197
+ });
198
+ var AccountCreateSchemaUser = AccountCreateSchema;
199
+ var AccountUpdateSchema = z.object({
200
+ name: z.string().min(1).optional(),
201
+ account_type: AccountTypeSchema.optional(),
202
+ account_number_masked: z.string().nullable().optional(),
203
+ currency: z.string().optional(),
204
+ is_active: z.boolean().optional(),
205
+ balance: z.number().optional(),
206
+ state: AccountStateSchema.optional(),
207
+ display_account_type: DisplayAccountTypeSchema.nullable().optional(),
208
+ include_in_expenses: z.boolean().optional(),
209
+ include_in_budget: z.boolean().optional(),
210
+ include_in_cashflow: z.boolean().optional(),
211
+ include_in_dashboard: z.boolean().optional(),
212
+ include_in_goals: z.boolean().optional(),
213
+ include_in_networth: z.boolean().optional(),
214
+ aggregation_type: AggregationTypeSchema.nullable().optional()
157
215
  });
158
216
  var AccountDeleteSchema = z.object({
159
- id: z.number().int().positive()
217
+ id: z.string().uuid()
160
218
  });
161
219
  var AccountArchiveSchema = z.object({
162
- id: z.number().int().positive()
163
- });
164
- var PendingAccountSchema = z.object({
165
- account_ids: z.array(z.number().int()),
166
- institution_id: z.number().int()
167
- });
168
- var PendingAccountsResponseSchema = z.object({
169
- pending_accounts: z.array(PendingAccountSchema)
170
- });
171
- var PendingAccountDeleteSchema = z.object({
172
- accountId: z.number().int().positive()
173
- });
174
- var InvestmentHoldingSchema = z.object({
175
- symbol: z.string(),
176
- description: z.string().optional(),
177
- quantity: z.number().finite(),
178
- price: z.number().finite().positive(),
179
- value: z.string().regex(/^\d+\.\d{2}$/),
180
- // String format like other amounts
181
- cost_basis: z.string().regex(/^\d+\.\d{2}$/).optional(),
182
- unrealized_gain_loss: z.string().regex(/^-?\d+\.\d{2}$/).optional()
220
+ id: z.string().uuid()
183
221
  });
184
- var InvestmentSchema = z.object({
185
- account_id: z.number().int(),
186
- holdings: z.array(InvestmentHoldingSchema),
187
- total_value: z.string().regex(/^\d+\.\d{2}$/)
222
+ var FinancialInstitutionRowSchema = z.object({
223
+ id: z.string().uuid(),
224
+ user_id: z.string().uuid(),
225
+ name: z.string().min(1),
226
+ ofx_org: z.string().nullable().optional(),
227
+ ofx_fid: z.string().nullable().optional(),
228
+ created_at: z.string().nullable().optional()
188
229
  });
189
- var InvestmentsResponseSchema = z.object({
190
- investments: z.array(InvestmentSchema)
230
+ var InstitutionCreateSchema = z.object({
231
+ user_id: z.string().uuid(),
232
+ name: z.string().min(1),
233
+ ofx_org: z.string().nullable().optional(),
234
+ ofx_fid: z.string().nullable().optional()
191
235
  });
192
236
  var TransactionTypeSchema = z.enum(["Debit", "Credit"]);
193
237
  var TransactionTagSchema = z.object({
194
- name: z.string(),
195
- balance: z.number().finite()
196
- });
197
- var TransactionLinksSchema = z.object({
198
- account: z.number().int()
238
+ id: z.string().uuid(),
239
+ transaction_id: z.string().uuid(),
240
+ tag_name: z.string(),
241
+ amount: z.number().finite().nullable(),
242
+ created_at: z.string().nullable().optional()
199
243
  });
200
244
  var TransactionSchema = z.object({
201
- // ========================================
202
- // Core Identifiers
203
- // ========================================
204
- id: z.string().regex(/^\d{4}_\d{2}_\d{2}_\w+_\d+$/, {
205
- message: "Transaction ID must be in format YYYY_MM_DD_referenceId_accountId"
206
- }),
245
+ id: z.string().uuid(),
246
+ user_id: z.string().uuid(),
247
+ account_id: z.string().uuid(),
248
+ legacy_id: z.string().nullable().optional(),
207
249
  reference_id: z.string(),
208
- // ========================================
209
- // Transaction Details
210
- // ========================================
211
250
  transaction_type: TransactionTypeSchema,
251
+ amount: z.number().finite(),
212
252
  memo: z.string().nullable().optional(),
213
- balance: z.number().finite().positive(),
214
- // NUMBER in legacy data, not string
215
- // ========================================
216
- // Timestamps
217
- // ========================================
218
- // Note: Legacy uses RFC 3339 format with offset (e.g., "2020-08-06T00:00:00.000+00:00")
219
- // Zod's .datetime() is too strict (requires 'Z'), so we use string validation
220
253
  posted_at: z.string(),
221
- created_at: z.string(),
222
- deleted_at: z.string().nullable().optional(),
223
- // ========================================
224
- // Names
225
- // ========================================
226
254
  nickname: z.string(),
227
255
  original_name: z.string(),
228
- // ========================================
229
- // Optional Fields
230
- // ========================================
231
256
  check_number: z.string().nullable().optional(),
232
- // ========================================
233
- // Nested Objects
234
- // ========================================
235
- tags: z.array(TransactionTagSchema),
236
- links: TransactionLinksSchema
257
+ deleted_at: z.string().nullable().optional(),
258
+ created_at: z.string().nullable().optional(),
259
+ updated_at: z.string().nullable().optional()
237
260
  });
238
- var TransactionsResponseSchema = z.object({
239
- transactions: z.array(TransactionSchema)
261
+ var TransactionWithTagsSchema = TransactionSchema.extend({
262
+ transaction_tags: z.array(TransactionTagSchema).default([])
240
263
  });
264
+ var TransactionsResponseSchema = z.array(TransactionWithTagsSchema);
241
265
  var TransactionCreateSchemaAdmin = z.object({
266
+ user_id: z.string().uuid(),
267
+ account_id: z.string().uuid(),
242
268
  reference_id: z.string(),
243
269
  transaction_type: TransactionTypeSchema,
244
- balance: z.number().positive(),
270
+ amount: z.number().finite(),
245
271
  posted_at: z.string(),
246
- nickname: z.string().optional().default("Test Transaction"),
247
- original_name: z.string().optional().default("Test Transaction"),
272
+ nickname: z.string().optional().default(""),
273
+ original_name: z.string().optional().default(""),
248
274
  memo: z.string().nullable().optional(),
249
275
  check_number: z.string().nullable().optional(),
250
- deleted_at: z.string().nullable().optional(),
251
- tags: z.array(TransactionTagSchema).optional().default([]),
252
- links: TransactionLinksSchema
253
- }).strict();
254
- var TransactionCreateSchemaUser = TransactionSchema.omit({
255
- id: true,
256
- created_at: true
276
+ legacy_id: z.string().nullable().optional(),
277
+ deleted_at: z.string().nullable().optional()
278
+ });
279
+ var TransactionCreateSchemaUser = z.object({
280
+ user_id: z.string().uuid(),
281
+ account_id: z.string().uuid(),
282
+ reference_id: z.string().min(1),
283
+ transaction_type: TransactionTypeSchema,
284
+ amount: z.number().finite().positive(),
285
+ posted_at: z.string().min(1),
286
+ nickname: z.string().min(1),
287
+ original_name: z.string().min(1),
288
+ memo: z.string().nullable().optional(),
289
+ check_number: z.string().nullable().optional()
257
290
  }).strict();
258
291
  var TransactionCreateSchema = TransactionCreateSchemaUser;
259
- var TransactionUpdateSchema = TransactionSchema.pick({
260
- id: true,
261
- nickname: true,
262
- tags: true
292
+ var TransactionUpdateSchema = z.object({
293
+ id: z.string().uuid(),
294
+ nickname: z.string().optional(),
295
+ memo: z.string().nullable().optional(),
296
+ amount: z.number().finite().optional(),
297
+ transaction_type: TransactionTypeSchema.optional(),
298
+ posted_at: z.string().optional(),
299
+ check_number: z.string().nullable().optional()
263
300
  }).strict();
264
301
  var TransactionTaggingRegularSchema = z.object({
265
302
  type: z.literal("regular"),
266
303
  repeat: z.boolean(),
267
- // Apply to all future matching transactions
268
304
  regular: z.array(z.string())
269
- // Tag names
270
305
  });
271
306
  var TransactionTaggingSplitItemSchema = z.object({
272
307
  name: z.string(),
273
- // Tag name
274
308
  value: z.number().finite().positive()
275
- // Split amount
276
309
  });
277
310
  var TransactionTaggingSplitSchema = z.object({
278
311
  type: z.literal("split"),
@@ -284,20 +317,13 @@ var TransactionTaggingSchema = z.discriminatedUnion("type", [
284
317
  ]);
285
318
  var TransactionSearchParamsSchema = z.object({
286
319
  begin_on: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
287
- // RFC 3339 date "2020-01-01"
288
320
  end_on: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
289
- // RFC 3339 date "2020-12-31"
290
321
  q: z.string().optional(),
291
- // Search query
292
322
  untagged: z.enum(["0", "1"]).optional(),
293
- // "0" = false, "1" = true
294
323
  tags: z.array(z.string()).optional()
295
- // Filter by tag names
296
324
  });
297
325
  var TransactionDeleteSchema = z.object({
298
- id: z.string().regex(/^\d{4}_\d{2}_\d{2}_\w+_\d+$/, {
299
- message: "Transaction ID must be in format YYYY_MM_DD_referenceId_accountId"
300
- })
326
+ id: z.string().uuid()
301
327
  });
302
328
  var CashflowEventTypeSchema = z.enum(["bill", "income"]);
303
329
  var RecurrenceFrequencySchema = z.enum([
@@ -371,184 +397,174 @@ var CashflowEventsResponseSchema = z.object({
371
397
  events: z.array(CashflowEventSchema)
372
398
  });
373
399
  var BudgetStateSchema = z.enum(["under", "risk", "over"]);
374
- var BudgetLinksSchema = z.object({
375
- accounts: z.array(z.number().int()),
376
- budget_histories: z.array(z.number().int())
400
+ var BudgetTagSchema = z.object({
401
+ budget_id: z.string().uuid(),
402
+ tag_name: z.string()
403
+ });
404
+ var BudgetAccountSchema = z.object({
405
+ budget_id: z.string().uuid(),
406
+ account_id: z.string().uuid()
377
407
  });
378
408
  var BudgetSchema = z.object({
379
- // ========================================
380
- // Core Identifiers
381
- // ========================================
382
- id: z.number().int().positive(),
383
- // ========================================
384
- // Time Period
385
- // ========================================
409
+ id: z.string().uuid(),
410
+ user_id: z.string().uuid(),
411
+ name: z.string().max(255),
386
412
  month: z.number().int().min(1).max(12),
387
413
  year: z.number().int(),
388
- // ========================================
389
- // Budget Details
390
- // ========================================
391
- name: z.string().max(255),
392
- state: BudgetStateSchema,
414
+ budget_amount: z.number().finite(),
393
415
  spent: z.number().finite(),
394
- // NUMBER in legacy data, not string
395
- budget_amount: z.number().finite().positive(),
396
- // NUMBER in legacy data, not string
397
- // ========================================
398
- // Category Association
399
- // ========================================
400
- tag_names: z.array(z.string()),
401
- // ========================================
402
- // Related Resources
403
- // ========================================
404
- links: BudgetLinksSchema
416
+ state: z.string(),
417
+ show_on_dashboard: z.boolean(),
418
+ created_at: z.string().nullable().optional(),
419
+ updated_at: z.string().nullable().optional()
405
420
  });
406
- var BudgetsResponseSchema = z.object({
407
- budgets: z.array(BudgetSchema)
421
+ var BudgetWithRelationsSchema = BudgetSchema.extend({
422
+ budget_tags: z.array(BudgetTagSchema).default([]),
423
+ budget_accounts: z.array(BudgetAccountSchema).default([])
408
424
  });
425
+ var BudgetsResponseSchema = z.array(BudgetWithRelationsSchema);
409
426
  var BudgetCreateSchema = z.object({
427
+ user_id: z.string().uuid(),
410
428
  name: z.string().max(255),
411
- budget_amount: z.number().finite().positive(),
412
- tag_names: z.array(z.string()),
413
- account_list: z.array(z.number().int()).optional(),
414
- // Becomes links.accounts in response
415
- show_on_dashboard: z.boolean().optional(),
416
- other: z.boolean().optional()
417
- }).strict();
429
+ month: z.number().int().min(1).max(12),
430
+ year: z.number().int(),
431
+ budget_amount: z.number().finite(),
432
+ spent: z.number().finite().optional(),
433
+ state: z.string().optional(),
434
+ show_on_dashboard: z.boolean().optional()
435
+ });
418
436
  var BudgetUpdateSchema = z.object({
419
- id: z.number().int().positive(),
420
- name: z.string().max(255),
421
- budget_amount: z.number().finite().positive(),
422
- tag_names: z.array(z.string()),
423
- account_list: z.array(z.number().int()).optional(),
424
- show_on_dashboard: z.boolean().optional(),
425
- other: z.boolean().optional()
426
- }).strict();
437
+ id: z.string().uuid(),
438
+ name: z.string().max(255).optional(),
439
+ month: z.number().int().min(1).max(12).optional(),
440
+ year: z.number().int().optional(),
441
+ budget_amount: z.number().finite().optional(),
442
+ spent: z.number().finite().optional(),
443
+ state: z.string().optional(),
444
+ show_on_dashboard: z.boolean().optional()
445
+ });
427
446
  var GoalStateSchema = z.enum(["active", "completed", "archived"]);
428
447
  var GoalStatusSchema = z.enum(["complete", "over", "risk", "under"]);
429
- var GoalLinksSchema = z.object({
430
- accounts: z.array(z.number().int())
431
- });
432
- var BaseGoalSchema = z.object({
433
- // ========================================
434
- // Core Identifiers
435
- // ========================================
436
- id: z.number().int().positive(),
437
- // ========================================
438
- // Goal Details
439
- // ========================================
448
+ var SavingsGoalRowSchema = z.object({
449
+ id: z.string().uuid(),
450
+ user_id: z.string().uuid(),
440
451
  name: z.string().max(255),
441
- state: GoalStateSchema,
442
- status: GoalStatusSchema,
443
- // ========================================
444
- // Visual Elements
445
- // ========================================
452
+ state: z.string(),
453
+ status: z.string(),
446
454
  image_name: z.string(),
447
455
  image_url: z.string(),
448
- // ========================================
449
- // Progress Tracking
450
- // ========================================
451
- percent_complete: z.number().int().min(0).max(100),
456
+ percent_complete: z.number(),
452
457
  complete: z.boolean(),
453
- // ========================================
454
- // Monetary Values (STRINGS with decimal pattern)
455
- // ========================================
456
- initial_value: z.string().regex(/^\d+\.\d{2}$/),
457
- current_value: z.string().regex(/^\d+\.\d{2}$/),
458
- target_value: z.string().regex(/^\d+\.\d{2}$/),
459
- monthly_contribution: z.string().regex(/^\d+\.\d{2}$/),
460
- remaining_monthly_contribution: z.string().regex(/^\d+\.\d{2}$/),
461
- // ========================================
462
- // Optional Fields
463
- // ========================================
464
- current_progress: z.string().regex(/^\d+\.\d{2}$/).optional(),
465
- target_contribution: z.string().regex(/^\d+\.\d{2}$/).optional(),
466
- target_completion_on: z.string(),
467
- // Date string YYYY-MM-DD
468
- // ========================================
469
- // Timestamps
470
- // ========================================
471
- // Note: Using string validation (not .datetime()) for legacy RFC 3339 format
472
- created_at: z.string(),
473
- updated_at: z.string(),
474
- // ========================================
475
- // Related Resources
476
- // ========================================
477
- links: GoalLinksSchema
478
- });
479
- var SavingsGoalSchema = BaseGoalSchema.extend({
480
- // Savings goals may have weight for distributing account balance
481
- weight: z.number().int().min(1).max(99).optional()
458
+ initial_value: z.number(),
459
+ current_value: z.number(),
460
+ target_value: z.number(),
461
+ monthly_contribution: z.number(),
462
+ remaining_monthly_contribution: z.number(),
463
+ current_progress: z.number().nullable(),
464
+ target_contribution: z.number().nullable(),
465
+ target_completion_on: z.string().nullable(),
466
+ weight: z.number().nullable(),
467
+ created_at: z.string().nullable(),
468
+ updated_at: z.string().nullable()
469
+ });
470
+ var PayoffGoalRowSchema = z.object({
471
+ id: z.string().uuid(),
472
+ user_id: z.string().uuid(),
473
+ name: z.string().max(255),
474
+ state: z.string(),
475
+ status: z.string(),
476
+ image_name: z.string(),
477
+ image_url: z.string(),
478
+ percent_complete: z.number(),
479
+ complete: z.boolean(),
480
+ initial_value: z.number(),
481
+ current_value: z.number(),
482
+ target_value: z.number(),
483
+ monthly_contribution: z.number(),
484
+ remaining_monthly_contribution: z.number(),
485
+ current_progress: z.number().nullable(),
486
+ target_contribution: z.number().nullable(),
487
+ target_completion_on: z.string().nullable(),
488
+ created_at: z.string().nullable(),
489
+ updated_at: z.string().nullable()
490
+ });
491
+ var GoalAccountRowSchema = z.object({
492
+ id: z.string().uuid(),
493
+ goal_type: z.string(),
494
+ goal_id: z.string().uuid(),
495
+ account_id: z.string().uuid()
482
496
  });
483
- var PayoffGoalSchema = BaseGoalSchema;
497
+ var SavingsGoalsResponseSchema = z.array(SavingsGoalRowSchema);
498
+ var PayoffGoalsResponseSchema = z.array(PayoffGoalRowSchema);
484
499
  var GoalCreateSchema = z.object({
485
500
  name: z.string().max(255),
486
501
  state: GoalStateSchema.optional(),
487
502
  image_name: z.string(),
488
- target_value: z.string().regex(/^\d+\.\d{2}$/),
503
+ target_value: z.number().positive(),
489
504
  target_completion_on: z.string().optional(),
490
- target_contribution: z.string().regex(/^\d+\.\d{2}$/).optional(),
491
- account_ids: z.array(z.number().int()).optional()
492
- // Becomes links.accounts in response
493
- }).strict();
505
+ target_contribution: z.number().optional(),
506
+ account_ids: z.array(z.string().uuid()).optional()
507
+ });
494
508
  var GoalUpdateSchema = z.object({
495
- id: z.number().int().positive(),
509
+ id: z.string().uuid(),
496
510
  name: z.string().max(255),
497
511
  state: GoalStateSchema.optional(),
498
512
  image_name: z.string(),
499
- target_value: z.string().regex(/^\d+\.\d{2}$/),
513
+ target_value: z.number().positive(),
500
514
  target_completion_on: z.string().optional(),
501
- target_contribution: z.string().regex(/^\d+\.\d{2}$/).optional(),
502
- account_ids: z.array(z.number().int()).optional()
503
- }).strict();
504
- var SavingsGoalsResponseSchema = z.object({
505
- savings_goals: z.array(SavingsGoalSchema)
515
+ target_contribution: z.number().optional(),
516
+ account_ids: z.array(z.string().uuid()).optional()
506
517
  });
507
- var PayoffGoalsResponseSchema = z.object({
508
- payoff_goals: z.array(PayoffGoalSchema)
518
+ var GoalImageSchema = z.object({
519
+ id: z.string(),
520
+ name: z.string(),
521
+ url: z.string()
509
522
  });
510
523
  var GoalImagesResponseSchema = z.object({
511
- images: z.array(
512
- z.object({
513
- id: z.number().int().positive(),
514
- name: z.string(),
515
- url: z.string()
516
- })
517
- )
524
+ images: z.array(GoalImageSchema)
518
525
  });
519
526
  var UserSexSchema = z.enum(["Male", "Female"]);
527
+ var UserProfileRowSchema = z.object({
528
+ id: z.string().uuid(),
529
+ login: z.string(),
530
+ email: z.string(),
531
+ login_count: z.number().int().nonnegative(),
532
+ last_login_at: z.string().nullable(),
533
+ custom_tags: z.unknown(),
534
+ // JSONB
535
+ custom_settings: z.unknown(),
536
+ // JSONB
537
+ first_name: z.string(),
538
+ last_name: z.string(),
539
+ postal_code: z.string(),
540
+ birth_year: z.number().int().min(1901).nullable(),
541
+ sex: z.enum(["Male", "Female"]).nullable(),
542
+ city: z.string().nullable(),
543
+ state: z.string().nullable(),
544
+ created_at: z.string().nullable(),
545
+ updated_at: z.string().nullable()
546
+ });
520
547
  var UserSchema = z.object({
521
- // ========================================
522
548
  // Core Identifiers
523
- // ========================================
524
549
  id: z.string(),
525
550
  // Partner customer ID (STRING, not integer)
526
551
  login: z.string(),
527
552
  email: z.string().email(),
528
- // ========================================
529
553
  // Login Tracking
530
- // ========================================
531
554
  login_count: z.number().int().nonnegative(),
532
555
  last_login_at: z.string(),
533
556
  // RFC 3339 datetime format
534
- // ========================================
535
557
  // Customization
536
- // ========================================
537
558
  custom_tags: z.array(z.string()),
538
559
  custom_settings: z.object({}).passthrough(),
539
560
  // Arbitrary key-value pairs
540
- // ========================================
541
561
  // Profile Information
542
- // ========================================
543
562
  first_name: z.string(),
544
563
  last_name: z.string(),
545
564
  postal_code: z.string(),
546
565
  birth_year: z.number().int().min(1901),
547
566
  sex: UserSexSchema,
548
- // ========================================
549
567
  // Optional Location Fields
550
- // ========================================
551
- // Note: city and state appear in OpenAPI but not in legacy mock data
552
568
  city: z.string().optional(),
553
569
  state: z.string().optional()
554
570
  });
@@ -605,16 +621,18 @@ var UserUpdateSchemaUser = z.object({
605
621
  state: z.string().optional()
606
622
  }).strict();
607
623
  var UserUpdateSchema = UserUpdateSchemaUser;
608
- var UserTagsSchema = z.object({
609
- userTags: z.array(z.string())
610
- });
611
- var DefaultTagsSchema = z.object({
612
- defaultTags: z.array(z.string())
624
+ var DefaultTagRowSchema = z.object({
625
+ name: z.string(),
626
+ created_at: z.string().nullable()
613
627
  });
614
- var TagsResponseSchema = z.object({
615
- userTags: z.array(z.string()),
616
- defaultTags: z.array(z.string())
628
+ var UserTagRowSchema = z.object({
629
+ user_id: z.string().uuid(),
630
+ name: z.string(),
631
+ color: z.string().nullable(),
632
+ created_at: z.string().nullable()
617
633
  });
634
+ var DefaultTagsResponseSchema = z.array(DefaultTagRowSchema);
635
+ var UserTagsResponseSchema = z.array(UserTagRowSchema);
618
636
  var TagsUpdateSchema = z.array(z.string()).min(0);
619
637
  var TagCreateSchemaAdmin = z.object({
620
638
  name: z.string()
@@ -670,84 +688,60 @@ var AlertDestinationsSchema = z.object({
670
688
  sms_number: z.string().regex(/^\d{10}$/).nullable(),
671
689
  partner_sms_enabled: z.boolean()
672
690
  });
673
- var AlertSchema = z.object({
674
- // ========================================
675
- // Core Identifiers
676
- // ========================================
677
- id: z.number().int().positive(),
691
+ var AlertRowSchema = z.object({
692
+ id: z.string().uuid(),
693
+ user_id: z.string().uuid(),
678
694
  type: AlertTypeSchema,
679
- // ========================================
680
- // Alert Configuration
681
- // ========================================
682
- options: z.object({}).passthrough(),
683
- // Dynamic options per alert type
684
- // ========================================
685
- // Delivery Settings
686
- // ========================================
695
+ options: z.record(z.string(), z.unknown()),
687
696
  email_delivery: z.boolean(),
688
697
  sms_delivery: z.boolean(),
689
- // ========================================
690
- // Source Object Reference
691
- // ========================================
692
698
  source_type: AlertSourceTypeSchema,
693
- source_id: z.union([z.string(), z.number().int()]).optional(),
694
- // STRING in legacy ("41"), but can be int
695
- // ========================================
696
- // Full Source Object (Nested)
697
- // ========================================
698
- // Note: Source is fully nested Account, Goal, Budget, etc. object
699
- // Using unknown for flexibility since it's a oneOf in OpenAPI
700
- source: z.unknown().optional()
699
+ source_id: z.string().nullable(),
700
+ created_at: z.string().nullable(),
701
+ updated_at: z.string().nullable()
701
702
  });
703
+ var AlertsResponseSchema = z.array(AlertRowSchema);
702
704
  var AlertCreateSchema = z.object({
703
- options: z.object({}).passthrough(),
705
+ type: AlertTypeSchema,
706
+ options: z.record(z.string(), z.unknown()),
704
707
  email_delivery: z.boolean(),
705
708
  sms_delivery: z.boolean(),
706
709
  source_type: AlertSourceTypeSchema.optional(),
707
- source_id: z.union([z.string(), z.number().int()]).optional()
708
- }).strict();
710
+ source_id: z.string().nullable().optional()
711
+ });
709
712
  var AlertUpdateSchema = z.object({
710
- options: z.object({}).passthrough(),
713
+ options: z.record(z.string(), z.unknown()),
711
714
  email_delivery: z.boolean(),
712
715
  sms_delivery: z.boolean(),
713
716
  source_type: AlertSourceTypeSchema.optional(),
714
- source_id: z.union([z.string(), z.number().int()]).optional()
715
- }).strict();
717
+ source_id: z.string().nullable().optional()
718
+ });
716
719
  var AlertDestinationsUpdateSchema = AlertDestinationsSchema;
717
- var AlertsResponseSchema = z.object({
718
- alerts: z.array(AlertSchema)
720
+ var NotificationRowSchema = z.object({
721
+ id: z.string().uuid(),
722
+ user_id: z.string().uuid(),
723
+ alert_id: z.string().uuid().nullable(),
724
+ alert_type: AlertTypeSchema,
725
+ message: z.string(),
726
+ is_read: z.boolean(),
727
+ created_at: z.string().nullable()
719
728
  });
720
729
  var NotificationSchema = z.object({
721
- // ========================================
722
- // Core Identifiers
723
- // ========================================
724
- id: z.number().int().positive(),
725
- // User ID - links notification to specific user
730
+ id: z.string().uuid(),
726
731
  user_id: z.string(),
727
- // Alert ID - references the source alert that triggered this notification
728
- alert_id: z.number().int().positive(),
729
- // ========================================
730
- // Notification Content
731
- // ========================================
732
+ alert_id: z.string().uuid().nullable(),
732
733
  message: z.string(),
733
- // ========================================
734
- // Alert Reference
735
- // ========================================
736
- // Links to Alert domain - uses same AlertType enum
737
734
  alert_type: AlertTypeSchema,
738
- // ========================================
739
- // Read Status
740
- // ========================================
741
- // Tracks whether user has read this notification
742
735
  is_read: z.boolean().default(false),
743
- // ========================================
744
- // Timestamps
745
- // ========================================
746
- // RFC 3339 datetime string (e.g., "2018-01-01T16:54:15Z")
747
736
  created_at: z.string()
748
737
  });
749
- var NotificationsResponseSchema = z.object({
750
- notifications: z.array(NotificationSchema)
738
+ var NotificationsResponseSchema = z.array(NotificationRowSchema);
739
+ var NotificationPreferencesRowSchema = z.object({
740
+ user_id: z.string().uuid(),
741
+ email_notifications: z.boolean(),
742
+ push_notifications: z.boolean(),
743
+ frequency: z.enum(["realtime", "daily", "weekly"]),
744
+ updated_at: z.string().nullable()
751
745
  });
752
746
  var NotificationCreateSchemaAdmin = z.object({
753
747
  message: z.string(),
@@ -774,34 +768,28 @@ var NotificationPreferencesUpdateSchema = z.object({
774
768
  pushNotifications: z.boolean().optional(),
775
769
  frequency: NotificationFrequencySchema.optional()
776
770
  });
771
+ var PartnerRowSchema = z.object({
772
+ id: z.string().uuid(),
773
+ domain: z.string(),
774
+ product_name: z.string(),
775
+ browser_title: z.string(),
776
+ partner_alerts_enabled: z.boolean(),
777
+ demo: z.boolean(),
778
+ modules: z.record(z.string(), z.unknown()),
779
+ featured_searches: z.array(z.unknown()),
780
+ created_at: z.string().nullable()
781
+ });
777
782
  var PartnerSchema = z.object({
778
- // ========================================
779
- // Core Identifiers
780
- // ========================================
781
- id: z.number().int().positive(),
782
- // ========================================
783
- // Partner Configuration
784
- // ========================================
783
+ id: z.string().uuid(),
785
784
  domain: z.string(),
786
785
  product_name: z.string(),
787
786
  browser_title: z.string(),
788
- // ========================================
789
- // Feature Flags
790
- // ========================================
791
787
  partner_alerts_enabled: z.boolean(),
792
788
  demo: z.boolean(),
793
- // ========================================
794
- // Dynamic Configuration Objects
795
- // ========================================
796
- // Modules contains partner-specific feature configuration
797
- // Structure varies by partner (aggregation, mobile, etc.)
798
789
  modules: z.object({}).passthrough(),
799
- // Featured searches configuration array
800
790
  featured_searches: z.array(z.unknown())
801
791
  });
802
- var PartnersResponseSchema = z.object({
803
- partners: z.array(PartnerSchema)
804
- });
792
+ var PartnersResponseSchema = z.array(PartnerRowSchema);
805
793
  var PartnerCreateSchemaAdmin = z.object({
806
794
  domain: z.string(),
807
795
  product_name: z.string(),
@@ -823,7 +811,7 @@ var PartnerUpdateSchemaAdmin = z.object({
823
811
  });
824
812
  var PartnerUpdateSchemaUser = z.never();
825
813
  var PartnerDeleteSchema = z.object({
826
- id: z.number().int().positive()
814
+ id: z.string().uuid()
827
815
  });
828
816
  var ExpenseSchema = z.object({
829
817
  // ========================================
@@ -839,9 +827,13 @@ var ExpenseSchema = z.object({
839
827
  // STRING with decimal format: "1.74", "102.19", "1219.83"
840
828
  amount: z.string().regex(/^\d+\.\d{2}$/)
841
829
  });
842
- var ExpensesResponseSchema = z.object({
843
- expenses: z.array(ExpenseSchema)
830
+ var ExpenseRowSchema = z.object({
831
+ user_id: z.string().nullable(),
832
+ tag: z.string().nullable(),
833
+ amount: z.number().nullable()
844
834
  });
835
+ var ExpensesViewResponseSchema = z.array(ExpenseRowSchema);
836
+ var ExpensesResponseSchema = z.array(ExpenseSchema);
845
837
  var ExpenseCreateSchemaAdmin = z.object({
846
838
  tag: z.string(),
847
839
  amount: z.string()
@@ -1013,6 +1005,13 @@ var CashEdgeLoginResponseSchema = z.object({
1013
1005
  expires_at: z.string().optional(),
1014
1006
  status: z.string().optional()
1015
1007
  });
1008
+ function useAuth() {
1009
+ const context = useContext(AuthContext);
1010
+ if (!context) {
1011
+ throw new Error("useAuth must be used within an AuthProvider");
1012
+ }
1013
+ return context;
1014
+ }
1016
1015
 
1017
1016
  // src/utils/chartUtils.ts
1018
1017
  function formatCurrency(value) {
@@ -1306,6 +1305,6 @@ var SPRING_CONFIG = {
1306
1305
  }
1307
1306
  };
1308
1307
 
1309
- export { ANIMATION_DURATIONS, ANIMATION_EASING, AccountArchiveSchema, AccountCreateSchema, AccountCreateSchemaAdmin, AccountCreateSchemaUser, AccountDeleteSchema, AccountErrorSchema, AccountSchema, AccountStateSchema, AccountTypeSchema, AccountUpdateSchema, AccountsResponseSchema, AggregationTypeSchema, AlertCreateSchema, AlertDestinationsSchema, AlertDestinationsUpdateSchema, AlertSchema, AlertSourceTypeSchema, AlertTypeSchema, AlertUpdateSchema, AlertsResponseSchema, AppModeContext, AppModeProvider, AuthenticateRequestSchema, AuthenticateResponseSchema, BudgetCreateSchema, BudgetLinksSchema, BudgetSchema, BudgetStateSchema, BudgetUpdateSchema, BudgetsResponseSchema, CHART_DIMENSIONS, CashEdgeAccountTypeSchema, CashEdgeLoginRequestSchema, CashEdgeLoginResponseSchema, CashflowEventCreateSchema, CashflowEventFilterSchema, CashflowEventSchema, CashflowEventTypeSchema, CashflowEventUpdateSchema, CashflowEventsResponseSchema, ClassifyAccountsRequestSchema, DefaultTagsSchema, ExpenseCreateSchemaAdmin, ExpenseCreateSchemaUser, ExpenseDeleteSchema, ExpenseSchema, ExpenseSearchParamsSchema, ExpenseUpdateSchemaAdmin, ExpenseUpdateSchemaUser, ExpensesResponseSchema, FinancialInstitutionSchema, GoalCreateSchema, GoalImagesResponseSchema, GoalLinksSchema, GoalStateSchema, GoalStatusSchema, GoalUpdateSchema, InstitutionLoginParameterSchema, InstitutionSchema, InstitutionSearchMetaSchema, InstitutionsResponseSchema, InvestmentHoldingSchema, InvestmentSchema, InvestmentsResponseSchema, MFARequestSchema, MFAResponseSchema, NetWorthAccountCreateSchema, NetWorthAccountDeleteSchema, NetWorthAccountTypeSchema, NetWorthAccountUpdateSchema, NetWorthAssetSchema, NetWorthDebtSchema, NetWorthHistorySchema, NetWorthMetaSchema, NetWorthResponseSchema, NetWorthSchema, NotificationCreateSchemaAdmin, NotificationCreateSchemaUser, NotificationFrequencySchema, NotificationPreferencesSchema, NotificationPreferencesUpdateSchema, NotificationSchema, NotificationUpdateSchemaAdmin, NotificationUpdateSchemaUser, NotificationsResponseSchema, OtherBalanceSchema, PartnerCreateSchemaAdmin, PartnerCreateSchemaUser, PartnerDeleteSchema, PartnerSchema, PartnerUpdateSchemaAdmin, PartnerUpdateSchemaUser, PartnersResponseSchema, PayoffGoalSchema, PayoffGoalsResponseSchema, PendingAccountDeleteSchema, PendingAccountSchema, PendingAccountsResponseSchema, PreferredBalanceTypeSchema, RecurrenceFrequencySchema, SPRING_CONFIG, SavingsGoalSchema, SavingsGoalsResponseSchema, TagColorSchema, TagCreateSchemaAdmin, TagCreateSchemaUser, TagDeleteSchema, TagReportItemSchema, TagUsageDataPointSchema, TagUsageReportSchema, TagUsageStatSchema, TagUsageStatsSchema, TagsResponseSchema, TagsUpdateSchema, TransactionCreateSchema, TransactionCreateSchemaAdmin, TransactionCreateSchemaUser, TransactionDeleteSchema, TransactionLinksSchema, TransactionSchema, TransactionSearchParamsSchema, TransactionTagSchema, TransactionTaggingRegularSchema, TransactionTaggingSchema, TransactionTaggingSplitItemSchema, TransactionTaggingSplitSchema, TransactionTypeSchema, TransactionUpdateSchema, TransactionsResponseSchema, UpdateCredentialsRequestSchema, UpdateCredentialsResponseSchema, UserCreateSchema, UserCreateSchemaAdmin, UserCreateSchemaUser, UserSchema, UserSexSchema, UserTagsSchema, UserUpdateSchema, UserUpdateSchemaAdmin, UserUpdateSchemaUser, arcVariants, createTransition, fadeVariants, formatCurrency, formatCurrencyAbbreviated, formatPercentage, getChartColors, getChartThemeConfig, getColorByIndex, listContainerVariants, listItemVariants, panelVariants, progressVariants, textVariants, useAppMode };
1308
+ export { ANIMATION_DURATIONS, ANIMATION_EASING, AccountArchiveSchema, AccountCreateSchema, AccountCreateSchemaAdmin, AccountCreateSchemaUser, AccountDeleteSchema, AccountSchema, AccountStateSchema, AccountTypeSchema, AccountUpdateSchema, AccountWithInstitutionSchema, AccountsResponseSchema, AccountsWithInstitutionResponseSchema, AggregationTypeSchema, AlertCreateSchema, AlertDestinationsSchema, AlertDestinationsUpdateSchema, AlertRowSchema, AlertSourceTypeSchema, AlertTypeSchema, AlertUpdateSchema, AlertsResponseSchema, AppModeContext, AppModeProvider, AuthContext, AuthProvider, AuthenticateRequestSchema, AuthenticateResponseSchema, BudgetAccountSchema, BudgetCreateSchema, BudgetSchema, BudgetStateSchema, BudgetTagSchema, BudgetUpdateSchema, BudgetWithRelationsSchema, BudgetsResponseSchema, CHART_DIMENSIONS, CashEdgeLoginRequestSchema, CashEdgeLoginResponseSchema, CashflowEventCreateSchema, CashflowEventFilterSchema, CashflowEventSchema, CashflowEventTypeSchema, CashflowEventUpdateSchema, CashflowEventsResponseSchema, ClassifyAccountsRequestSchema, DefaultTagRowSchema, DefaultTagsResponseSchema, DisplayAccountTypeSchema, ExpenseCreateSchemaAdmin, ExpenseCreateSchemaUser, ExpenseDeleteSchema, ExpenseRowSchema, ExpenseSchema, ExpenseSearchParamsSchema, ExpenseUpdateSchemaAdmin, ExpenseUpdateSchemaUser, ExpensesResponseSchema, ExpensesViewResponseSchema, FinancialInstitutionRowSchema, FinancialInstitutionSchema, GoalAccountRowSchema, GoalCreateSchema, GoalImageSchema, GoalImagesResponseSchema, GoalStateSchema, GoalStatusSchema, GoalUpdateSchema, InstitutionCreateSchema, InstitutionLoginParameterSchema, InstitutionSchema, InstitutionSearchMetaSchema, InstitutionsResponseSchema, MFARequestSchema, MFAResponseSchema, NetWorthAccountCreateSchema, NetWorthAccountDeleteSchema, NetWorthAccountTypeSchema, NetWorthAccountUpdateSchema, NetWorthAssetSchema, NetWorthDebtSchema, NetWorthHistorySchema, NetWorthMetaSchema, NetWorthResponseSchema, NetWorthSchema, NotificationCreateSchemaAdmin, NotificationCreateSchemaUser, NotificationFrequencySchema, NotificationPreferencesRowSchema, NotificationPreferencesSchema, NotificationPreferencesUpdateSchema, NotificationRowSchema, NotificationSchema, NotificationUpdateSchemaAdmin, NotificationUpdateSchemaUser, NotificationsResponseSchema, PartnerCreateSchemaAdmin, PartnerCreateSchemaUser, PartnerDeleteSchema, PartnerRowSchema, PartnerSchema, PartnerUpdateSchemaAdmin, PartnerUpdateSchemaUser, PartnersResponseSchema, PayoffGoalRowSchema, PayoffGoalsResponseSchema, RecurrenceFrequencySchema, SPRING_CONFIG, SavingsGoalRowSchema, SavingsGoalsResponseSchema, TagColorSchema, TagCreateSchemaAdmin, TagCreateSchemaUser, TagDeleteSchema, TagReportItemSchema, TagUsageDataPointSchema, TagUsageReportSchema, TagUsageStatSchema, TagUsageStatsSchema, TagsUpdateSchema, TransactionCreateSchema, TransactionCreateSchemaAdmin, TransactionCreateSchemaUser, TransactionDeleteSchema, TransactionSchema, TransactionSearchParamsSchema, TransactionTagSchema, TransactionTaggingRegularSchema, TransactionTaggingSchema, TransactionTaggingSplitItemSchema, TransactionTaggingSplitSchema, TransactionTypeSchema, TransactionUpdateSchema, TransactionWithTagsSchema, TransactionsResponseSchema, UpdateCredentialsRequestSchema, UpdateCredentialsResponseSchema, UserCreateSchema, UserCreateSchemaAdmin, UserCreateSchemaUser, UserProfileRowSchema, UserSchema, UserSexSchema, UserTagRowSchema, UserTagsResponseSchema, UserUpdateSchema, UserUpdateSchemaAdmin, UserUpdateSchemaUser, arcVariants, createSupabaseClient, createTransition, fadeVariants, formatCurrency, formatCurrencyAbbreviated, formatPercentage, getChartColors, getChartThemeConfig, getColorByIndex, listContainerVariants, listItemVariants, panelVariants, progressVariants, supabase, textVariants, useAppMode, useAuth };
1310
1309
  //# sourceMappingURL=index.js.map
1311
1310
  //# sourceMappingURL=index.js.map