@pfm-platform/shared 0.2.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.cjs +424 -414
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3869 -982
- package/dist/index.d.ts +3869 -982
- package/dist/index.js +396 -397
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
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.
|
|
61
|
-
name: z.string()
|
|
62
|
-
}).nullable();
|
|
63
|
-
var CashEdgeAccountTypeSchema = z.object({
|
|
126
|
+
id: z.string().uuid(),
|
|
64
127
|
name: z.string(),
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
129
|
-
|
|
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
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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.
|
|
217
|
+
id: z.string().uuid()
|
|
160
218
|
});
|
|
161
219
|
var AccountArchiveSchema = z.object({
|
|
162
|
-
id: z.
|
|
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
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
|
190
|
-
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
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
|
|
239
|
-
|
|
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
|
-
|
|
270
|
+
amount: z.number().finite(),
|
|
245
271
|
posted_at: z.string(),
|
|
246
|
-
nickname: z.string().optional().default("
|
|
247
|
-
original_name: z.string().optional().default("
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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 =
|
|
260
|
-
id:
|
|
261
|
-
nickname:
|
|
262
|
-
|
|
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().
|
|
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
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
|
|
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
|
-
|
|
395
|
-
|
|
396
|
-
|
|
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
|
|
407
|
-
|
|
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
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
})
|
|
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.
|
|
420
|
-
name: z.string().max(255),
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
|
430
|
-
|
|
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:
|
|
442
|
-
status:
|
|
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
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
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
|
|
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.
|
|
503
|
+
target_value: z.number().positive(),
|
|
489
504
|
target_completion_on: z.string().optional(),
|
|
490
|
-
target_contribution: z.
|
|
491
|
-
account_ids: z.array(z.
|
|
492
|
-
|
|
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.
|
|
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.
|
|
513
|
+
target_value: z.number().positive(),
|
|
500
514
|
target_completion_on: z.string().optional(),
|
|
501
|
-
target_contribution: z.
|
|
502
|
-
account_ids: z.array(z.
|
|
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
|
|
508
|
-
|
|
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
|
|
609
|
-
|
|
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
|
|
615
|
-
|
|
616
|
-
|
|
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
|
|
674
|
-
|
|
675
|
-
|
|
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.
|
|
694
|
-
|
|
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
|
-
|
|
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.
|
|
708
|
-
})
|
|
710
|
+
source_id: z.string().nullable().optional()
|
|
711
|
+
});
|
|
709
712
|
var AlertUpdateSchema = z.object({
|
|
710
|
-
options: z.
|
|
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.
|
|
715
|
-
})
|
|
717
|
+
source_id: z.string().nullable().optional()
|
|
718
|
+
});
|
|
716
719
|
var AlertDestinationsUpdateSchema = AlertDestinationsSchema;
|
|
717
|
-
var
|
|
718
|
-
|
|
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
|
-
|
|
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.
|
|
750
|
-
|
|
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.
|
|
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.
|
|
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
|
|
843
|
-
|
|
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,
|
|
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
|