@yigemo/choosefire 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +83 -0
  2. package/contracts/choosefire-family-wealth/v2/capability-matrix.v1.json +464 -0
  3. package/contracts/choosefire-family-wealth/v2/golden/performance.v1.json +79 -0
  4. package/contracts/choosefire-family-wealth/v2/golden/r2-contract.v1.json +1070 -0
  5. package/contracts/choosefire-family-wealth/v2/golden/scenarios.v1.json +241 -0
  6. package/contracts/choosefire-family-wealth/v2/golden/transport.v1.json +207 -0
  7. package/contracts/choosefire-family-wealth/v2/manifest.json +58 -0
  8. package/contracts/choosefire-family-wealth/v2/openapi.generated.json +2605 -0
  9. package/contracts/choosefire-family-wealth/v2/runtime-schemas/family-wealth.v2.schema.json +2127 -0
  10. package/contracts/choosefire-family-wealth/v2/taxonomies/account-types.v1.json +41 -0
  11. package/contracts/choosefire-family-wealth/v2/taxonomies/asset-classes.v1.json +45 -0
  12. package/contracts/choosefire-family-wealth/v2/taxonomies/transaction-types.v1.json +57 -0
  13. package/contracts/choosefire-financial-workspace/v1/field-registry.generated.json +137 -0
  14. package/contracts/choosefire-financial-workspace/v1/field-registry.manifest.json +11 -0
  15. package/contracts/choosefire-financial-workspace/v1/golden/commands.invalid.json +583 -0
  16. package/contracts/choosefire-financial-workspace/v1/golden/commands.valid.json +201 -0
  17. package/contracts/choosefire-financial-workspace/v1/golden/cursors.invalid.json +82 -0
  18. package/contracts/choosefire-financial-workspace/v1/golden/errors.invalid.json +191 -0
  19. package/contracts/choosefire-financial-workspace/v1/golden/errors.valid.json +298 -0
  20. package/contracts/choosefire-financial-workspace/v1/golden/fingerprints.json +105 -0
  21. package/contracts/choosefire-financial-workspace/v1/golden/projections.invalid.json +3543 -0
  22. package/contracts/choosefire-financial-workspace/v1/golden/projections.valid.json +2953 -0
  23. package/contracts/choosefire-financial-workspace/v1/manifest.json +69 -0
  24. package/contracts/choosefire-financial-workspace/v1/openapi.generated.json +1987 -0
  25. package/contracts/choosefire-financial-workspace/v1/runtime-schemas/financial-workspace.v1.schema.json +1496 -0
  26. package/dist/args.d.ts +5 -0
  27. package/dist/args.js +60 -0
  28. package/dist/args.js.map +1 -0
  29. package/dist/auth.d.ts +55 -0
  30. package/dist/auth.js +480 -0
  31. package/dist/auth.js.map +1 -0
  32. package/dist/commands.d.ts +4 -0
  33. package/dist/commands.js +637 -0
  34. package/dist/commands.js.map +1 -0
  35. package/dist/config.d.ts +10 -0
  36. package/dist/config.js +74 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/family-wealth-v2-contracts.d.ts +276 -0
  39. package/dist/family-wealth-v2-contracts.js +77 -0
  40. package/dist/family-wealth-v2-contracts.js.map +1 -0
  41. package/dist/family-wealth-v2-http.d.ts +65 -0
  42. package/dist/family-wealth-v2-http.js +340 -0
  43. package/dist/family-wealth-v2-http.js.map +1 -0
  44. package/dist/financial-workspace-contracts.d.ts +191 -0
  45. package/dist/financial-workspace-contracts.js +282 -0
  46. package/dist/financial-workspace-contracts.js.map +1 -0
  47. package/dist/http.d.ts +76 -0
  48. package/dist/http.js +446 -0
  49. package/dist/http.js.map +1 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.js +50 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/output.d.ts +18 -0
  54. package/dist/output.js +111 -0
  55. package/dist/output.js.map +1 -0
  56. package/dist/token-store.d.ts +27 -0
  57. package/dist/token-store.js +408 -0
  58. package/dist/token-store.js.map +1 -0
  59. package/dist/types.d.ts +65 -0
  60. package/dist/types.js +5 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +43 -0
@@ -0,0 +1,340 @@
1
+ import { FamilyWealthV2ResponseInvalidError, parseFamilyWealthV2Error, parseFamilyWealthV2Success, validateFamilyWealthV2, } from './family-wealth-v2-contracts.js';
2
+ const ROOT = '/choosefire/v2/workspace';
3
+ const MAX_RESPONSE_BYTES = 1024 * 1024;
4
+ export class FamilyWealthV2DisabledError extends Error {
5
+ code = 'FAMILY_WEALTH_V2_DISABLED';
6
+ constructor() {
7
+ super('ChooseFIRE family wealth v2 is disabled.');
8
+ this.name = 'FamilyWealthV2DisabledError';
9
+ }
10
+ }
11
+ export class FamilyWealthV2AuthRequiredError extends Error {
12
+ code = 'AUTH_REQUIRED';
13
+ constructor() {
14
+ super('ChooseFIRE workspace authentication is required.');
15
+ this.name = 'FamilyWealthV2AuthRequiredError';
16
+ }
17
+ }
18
+ export class FamilyWealthV2ScopeRequiredError extends Error {
19
+ requiredScope;
20
+ code = 'ACCOUNT_SCOPE_REQUIRED';
21
+ constructor(requiredScope) {
22
+ super(`The workspace credential requires ${requiredScope}.`);
23
+ this.requiredScope = requiredScope;
24
+ this.name = 'FamilyWealthV2ScopeRequiredError';
25
+ }
26
+ }
27
+ export class FamilyWealthV2HttpError extends Error {
28
+ status;
29
+ code;
30
+ data;
31
+ requestId;
32
+ constructor(status, code, message, data, requestId) {
33
+ super(message);
34
+ this.status = status;
35
+ this.code = code;
36
+ this.data = data;
37
+ this.requestId = requestId;
38
+ this.name = 'FamilyWealthV2HttpError';
39
+ }
40
+ }
41
+ export class FamilyWealthV2RemoteUnavailableError extends Error {
42
+ code = 'REMOTE_UNAVAILABLE';
43
+ constructor() {
44
+ super('ChooseFIRE family wealth v2 is unavailable.');
45
+ this.name = 'FamilyWealthV2RemoteUnavailableError';
46
+ }
47
+ }
48
+ export class FamilyWealthV2RemoteOutcomeUnknownError extends Error {
49
+ command;
50
+ code = 'REMOTE_OUTCOME_UNKNOWN';
51
+ recovery;
52
+ constructor(command) {
53
+ super('The initialization outcome is unknown; retry the exact command with the same keys.');
54
+ this.command = command;
55
+ this.name = 'FamilyWealthV2RemoteOutcomeUnknownError';
56
+ this.recovery = {
57
+ action: 'retry_exact_command',
58
+ command: structuredClone(command),
59
+ };
60
+ }
61
+ }
62
+ export async function initializeFamilyWealthV2(config, command, options = {}) {
63
+ const validation = validateFamilyWealthV2('WorkspaceInitializeCommandV2', command);
64
+ if (!validation.valid)
65
+ throw new TypeError(validation.errors.join('; '));
66
+ try {
67
+ return await requestFamilyWealthV2(config, {
68
+ method: 'POST',
69
+ path: ROOT,
70
+ scope: 'workspace:initialize',
71
+ successSchema: 'WorkspaceInitializeSuccessV2',
72
+ body: JSON.stringify(command),
73
+ }, options);
74
+ }
75
+ catch (error) {
76
+ if (error instanceof FamilyWealthV2RemoteUnavailableError ||
77
+ error instanceof FamilyWealthV2ResponseInvalidError) {
78
+ throw new FamilyWealthV2RemoteOutcomeUnknownError(structuredClone(command));
79
+ }
80
+ throw error;
81
+ }
82
+ }
83
+ export function getFamilyWealthV2Summary(config, options = {}) {
84
+ return requestFamilyWealthV2(config, {
85
+ method: 'GET',
86
+ path: `${ROOT}/summary`,
87
+ scope: 'workspace:read',
88
+ successSchema: 'WorkspaceSummarySuccessV2',
89
+ }, options);
90
+ }
91
+ export function getFamilyWealthV2Activity(config, query, options = {}) {
92
+ const validation = validateFamilyWealthV2('ActivityPageQueryV2', query);
93
+ if (!validation.valid)
94
+ throw new TypeError(validation.errors.join('; '));
95
+ const search = new URLSearchParams({ limit: String(query.limit) });
96
+ if (query.cursor !== undefined)
97
+ search.set('cursor', query.cursor);
98
+ return requestFamilyWealthV2(config, {
99
+ method: 'GET',
100
+ path: `${ROOT}/activity?${search}`,
101
+ scope: 'workspace:read',
102
+ successSchema: 'ActivityPageSuccessV2',
103
+ }, options);
104
+ }
105
+ export async function createFamilyWealthV2AssetAccount(config, command, options = {}) {
106
+ return requestMutation(config, command, {
107
+ method: 'POST',
108
+ path: `${ROOT}/asset-accounts`,
109
+ scope: 'workspace:write:fact',
110
+ successSchema: 'CommandSuccessV2',
111
+ body: JSON.stringify(command),
112
+ }, options);
113
+ }
114
+ export async function updateFamilyWealthV2AssetAccount(config, command, options = {}) {
115
+ return requestMutation(config, command, {
116
+ method: 'PUT',
117
+ path: `${ROOT}/asset-accounts`,
118
+ scope: 'workspace:write:fact',
119
+ successSchema: 'CommandSuccessV2',
120
+ body: JSON.stringify(command),
121
+ }, options);
122
+ }
123
+ export async function archiveFamilyWealthV2AssetAccount(config, command, options = {}) {
124
+ return requestMutation(config, command, {
125
+ method: 'POST',
126
+ path: `${ROOT}/asset-accounts/archive`,
127
+ scope: 'workspace:write:fact',
128
+ successSchema: 'CommandSuccessV2',
129
+ body: JSON.stringify(command),
130
+ }, options);
131
+ }
132
+ export async function appendFamilyWealthV2Valuation(config, command, options = {}) {
133
+ return requestMutation(config, command, {
134
+ method: 'POST',
135
+ path: `${ROOT}/valuations`,
136
+ scope: 'workspace:write:fact',
137
+ successSchema: 'CommandSuccessV2',
138
+ body: JSON.stringify(command),
139
+ }, options);
140
+ }
141
+ export async function replaceFamilyWealthV2Classification(config, command, options = {}) {
142
+ return requestMutation(config, command, {
143
+ method: 'PUT',
144
+ path: `${ROOT}/classifications`,
145
+ scope: 'workspace:write:fact',
146
+ successSchema: 'CommandSuccessV2',
147
+ body: JSON.stringify(command),
148
+ }, options);
149
+ }
150
+ export function getFamilyWealthV2Overview(config, options = {}) {
151
+ return requestFamilyWealthV2(config, {
152
+ method: 'GET',
153
+ path: `${ROOT}/overview`,
154
+ scope: 'workspace:read',
155
+ successSchema: 'WorkspaceOverviewSuccessV2',
156
+ }, options);
157
+ }
158
+ export async function issueFamilyWealthV2McpDelegation(config, input, options = {}) {
159
+ const validation = validateFamilyWealthV2('McpDelegationIssueRequestV2', input);
160
+ if (!validation.valid)
161
+ throw new TypeError(validation.errors.join('; '));
162
+ const payload = await requestMcpJson(config, {
163
+ method: 'POST',
164
+ path: `${ROOT}/mcp/delegation`,
165
+ body: JSON.stringify(input),
166
+ }, options);
167
+ const result = validateFamilyWealthV2('McpDelegatedTokenCredentialV2', payload);
168
+ if (!result.valid)
169
+ throw new FamilyWealthV2ResponseInvalidError(result.errors);
170
+ return payload;
171
+ }
172
+ export async function revokeFamilyWealthV2McpDelegation(config, accessToken, options = {}) {
173
+ const input = { accessToken };
174
+ const validation = validateFamilyWealthV2('McpDelegationRevokeRequestV2', input);
175
+ if (!validation.valid)
176
+ throw new TypeError(validation.errors.join('; '));
177
+ const payload = await requestMcpJson(config, {
178
+ method: 'POST',
179
+ path: `${ROOT}/mcp/delegation/revoke`,
180
+ body: JSON.stringify(input),
181
+ }, options);
182
+ const result = validateFamilyWealthV2('McpDelegationRevokeResponseV2', payload);
183
+ if (!result.valid)
184
+ throw new FamilyWealthV2ResponseInvalidError(result.errors);
185
+ return payload;
186
+ }
187
+ async function requestMutation(config, command, definition, options) {
188
+ const schemaName = command.kind === 'asset_account.create.v2'
189
+ ? 'AssetAccountCreateCommandV2'
190
+ : command.kind === 'asset_account.update.v2'
191
+ ? 'AssetAccountUpdateCommandV2'
192
+ : command.kind === 'asset_account.archive.v2'
193
+ ? 'AssetAccountArchiveCommandV2'
194
+ : command.kind === 'valuation_snapshot.append.v2'
195
+ ? 'ValuationSnapshotAppendCommandV2'
196
+ : 'ClassificationReplaceCommandV2';
197
+ const validation = validateFamilyWealthV2(schemaName, command);
198
+ if (!validation.valid)
199
+ throw new TypeError(validation.errors.join('; '));
200
+ try {
201
+ return await requestFamilyWealthV2(config, definition, options);
202
+ }
203
+ catch (error) {
204
+ if (error instanceof FamilyWealthV2RemoteUnavailableError || error instanceof FamilyWealthV2ResponseInvalidError) {
205
+ throw new FamilyWealthV2RemoteOutcomeUnknownError(structuredClone(command));
206
+ }
207
+ throw error;
208
+ }
209
+ }
210
+ async function requestFamilyWealthV2(config, definition, options) {
211
+ const credential = requireCredential(config, definition.scope, options.now ?? Date.now);
212
+ const controller = new AbortController();
213
+ const timeout = setTimeout(() => controller.abort(), normalizeTimeout(options.timeoutMs));
214
+ let response;
215
+ try {
216
+ response = await (options.fetch ?? fetch)(`${config.apiBaseUrl}${definition.path}`, {
217
+ method: definition.method,
218
+ redirect: 'error',
219
+ signal: controller.signal,
220
+ headers: {
221
+ accept: 'application/json',
222
+ authorization: `Bearer ${credential.accessToken}`,
223
+ ...(definition.body === undefined
224
+ ? {}
225
+ : { 'content-type': 'application/json' }),
226
+ },
227
+ body: definition.body,
228
+ });
229
+ }
230
+ catch {
231
+ throw new FamilyWealthV2RemoteUnavailableError();
232
+ }
233
+ finally {
234
+ clearTimeout(timeout);
235
+ }
236
+ if (mediaType(response.headers.get('content-type')) !== 'application/json') {
237
+ throw new FamilyWealthV2ResponseInvalidError([
238
+ 'response media type must be application/json',
239
+ ]);
240
+ }
241
+ const text = await response.text();
242
+ if (Buffer.byteLength(text, 'utf8') > MAX_RESPONSE_BYTES) {
243
+ throw new FamilyWealthV2ResponseInvalidError(['response body is too large']);
244
+ }
245
+ let payload;
246
+ try {
247
+ payload = JSON.parse(text);
248
+ }
249
+ catch {
250
+ throw new FamilyWealthV2ResponseInvalidError([
251
+ 'response body must be valid JSON',
252
+ ]);
253
+ }
254
+ if (response.status === 200) {
255
+ return parseFamilyWealthV2Success(payload, definition.successSchema);
256
+ }
257
+ if (![400, 401, 403, 404, 409, 410, 503].includes(response.status)) {
258
+ throw new FamilyWealthV2ResponseInvalidError([
259
+ `HTTP ${response.status} is not approved for family wealth v2`,
260
+ ]);
261
+ }
262
+ const error = parseFamilyWealthV2Error(payload);
263
+ throw new FamilyWealthV2HttpError(response.status, error.code, error.error.message, error.error.data, error.error.requestId);
264
+ }
265
+ async function requestMcpJson(config, definition, options) {
266
+ const credential = requireCredential(config, 'workspace:read', options.now ?? Date.now);
267
+ const controller = new AbortController();
268
+ const timeout = setTimeout(() => controller.abort(), normalizeTimeout(options.timeoutMs));
269
+ let response;
270
+ try {
271
+ response = await (options.fetch ?? fetch)(`${config.apiBaseUrl}${definition.path}`, {
272
+ method: definition.method,
273
+ redirect: 'error',
274
+ signal: controller.signal,
275
+ headers: {
276
+ accept: 'application/json',
277
+ 'content-type': 'application/json',
278
+ authorization: `Bearer ${credential.accessToken}`,
279
+ },
280
+ body: definition.body,
281
+ });
282
+ }
283
+ catch {
284
+ throw new FamilyWealthV2RemoteUnavailableError();
285
+ }
286
+ finally {
287
+ clearTimeout(timeout);
288
+ }
289
+ if (mediaType(response.headers.get('content-type')) !== 'application/json') {
290
+ throw new FamilyWealthV2ResponseInvalidError(['response media type must be application/json']);
291
+ }
292
+ const text = await response.text();
293
+ if (Buffer.byteLength(text, 'utf8') > MAX_RESPONSE_BYTES) {
294
+ throw new FamilyWealthV2ResponseInvalidError(['response body is too large']);
295
+ }
296
+ let payload;
297
+ try {
298
+ payload = JSON.parse(text);
299
+ }
300
+ catch {
301
+ throw new FamilyWealthV2ResponseInvalidError(['response body must be valid JSON']);
302
+ }
303
+ if (response.status === 200)
304
+ return payload;
305
+ if (![400, 401, 403, 404, 409, 503].includes(response.status)) {
306
+ throw new FamilyWealthV2ResponseInvalidError([
307
+ `HTTP ${response.status} is not approved for family wealth v2`,
308
+ ]);
309
+ }
310
+ const error = parseFamilyWealthV2Error(payload);
311
+ throw new FamilyWealthV2HttpError(response.status, error.code, error.error.message, error.error.data, error.error.requestId);
312
+ }
313
+ function requireCredential(config, scope, now) {
314
+ if (config.familyWealthV2Enabled !== true) {
315
+ throw new FamilyWealthV2DisabledError();
316
+ }
317
+ const credential = config.workspaceCredential;
318
+ if (!config.workspaceEnabled ||
319
+ !credential ||
320
+ credential.apiOrigin !== config.apiBaseUrl ||
321
+ credential.issuer !== config.accountsIssuer ||
322
+ credential.registeredClientId !== 'choosefire-cli' ||
323
+ Date.parse(credential.accessExpiresAt) <= now() + 60_000) {
324
+ throw new FamilyWealthV2AuthRequiredError();
325
+ }
326
+ if (!credential.scopes.includes(scope)) {
327
+ throw new FamilyWealthV2ScopeRequiredError(scope);
328
+ }
329
+ return credential;
330
+ }
331
+ function normalizeTimeout(value = 10_000) {
332
+ if (!Number.isSafeInteger(value) || value < 100 || value > 30_000) {
333
+ throw new TypeError('family wealth timeout must be 100-30000ms');
334
+ }
335
+ return value;
336
+ }
337
+ function mediaType(value) {
338
+ return value?.split(';', 1)[0].trim().toLowerCase() ?? '';
339
+ }
340
+ //# sourceMappingURL=family-wealth-v2-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"family-wealth-v2-http.js","sourceRoot":"","sources":["../src/family-wealth-v2-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ export declare const CHOOSEFIRE_FINANCIAL_WORKSPACE_CONTRACT_ID: "choosefire-financial-workspace.v1";
2
+ export declare const CHOOSEFIRE_FINANCIAL_WORKSPACE_CONTRACT_VERSION: 1;
3
+ export declare const CHOOSEFIRE_FINANCIAL_WORKSPACE_REGISTRY_SHA256: "3ecc94b8fee854c4a1012a79de1216007191c853b62fbf99641a1f9aadde2b16";
4
+ export declare const CHOOSEFIRE_FINANCIAL_WORKSPACE_AGGREGATE_SHA256: "9fed00d6103aab4ac183855bb1fb7e96767dbcb2b9ef8e6651dd5ff38798bad1";
5
+ export type AccountFinancialWorkspaceAuthority = {
6
+ mode: 'account';
7
+ storeId: string;
8
+ householdId: string;
9
+ status: 'authoritative';
10
+ };
11
+ export type AccountFinancialWorkspaceMoneyInput = {
12
+ kind: 'money.v1';
13
+ amount: string;
14
+ currency: string;
15
+ };
16
+ export type AccountFinancialWorkspaceMoney = {
17
+ kind: 'money.v1';
18
+ amount: string;
19
+ currency: string;
20
+ };
21
+ export type InitializeAccountFinancialWorkspaceCommand = {
22
+ kind: 'financial_workspace_initialize_command.v1';
23
+ idempotencyKey: string;
24
+ };
25
+ export type RecordAccountFinancialWorkspaceFactCommand = {
26
+ kind: 'financial_workspace_fact_record_command.v1';
27
+ expectedVersion: number;
28
+ idempotencyKey: string;
29
+ field: string;
30
+ value: AccountFinancialWorkspaceMoneyInput;
31
+ status?: 'confirmed' | 'estimated';
32
+ asOf?: string;
33
+ };
34
+ export type NormalizedRecordAccountFinancialWorkspaceFactCommand = Omit<RecordAccountFinancialWorkspaceFactCommand, 'value' | 'status' | 'asOf'> & {
35
+ value: AccountFinancialWorkspaceMoney;
36
+ status: 'confirmed' | 'estimated';
37
+ asOf: string | null;
38
+ };
39
+ export type AccountFinancialWorkspaceObjectRef = {
40
+ kind: 'financial_workspace_workspace_ref.v1';
41
+ storeId: string;
42
+ } | {
43
+ kind: 'financial_workspace_fact_ref.v1';
44
+ factId: string;
45
+ };
46
+ export type AccountFinancialWorkspaceOperation = {
47
+ kind: 'financial_workspace_operation.v1';
48
+ operationId: string;
49
+ operation: 'workspace.initialize' | 'fact.record';
50
+ channel: 'web' | 'cli';
51
+ baseVersion: number;
52
+ resultVersion: number;
53
+ committedAt: string;
54
+ primaryObject: AccountFinancialWorkspaceObjectRef;
55
+ affectedObjects: AccountFinancialWorkspaceObjectRef[];
56
+ };
57
+ export type AccountFinancialWorkspaceCommandReceipt = {
58
+ kind: 'financial_workspace_command_receipt.v1';
59
+ authority: AccountFinancialWorkspaceAuthority;
60
+ operation: AccountFinancialWorkspaceOperation;
61
+ baseVersion: number;
62
+ resultVersion: number;
63
+ replayed: boolean;
64
+ cursor: string;
65
+ committedAt: string;
66
+ };
67
+ export type AccountFinancialWorkspaceCoverage = {
68
+ kind: 'financial_workspace_fact_coverage.v1';
69
+ supportedFields: string[];
70
+ recordedFields: string[];
71
+ missingFields: string[];
72
+ };
73
+ export type AccountFinancialWorkspaceFact = {
74
+ kind: 'financial_fact_projection.v1';
75
+ factId: string;
76
+ field: string;
77
+ value: AccountFinancialWorkspaceMoney;
78
+ status: 'confirmed' | 'estimated';
79
+ asOf: string;
80
+ recordedAt: string;
81
+ recordedVersion: number;
82
+ };
83
+ export type AccountFinancialWorkspaceCapabilities = {
84
+ kind: 'financial_workspace_capabilities.v1';
85
+ readable: ['snapshot', 'summary', 'activity'];
86
+ writable: ['fact.record'];
87
+ protectedChange: 'unavailable';
88
+ };
89
+ export type AccountFinancialWorkspaceSnapshot = {
90
+ kind: 'financial_workspace_snapshot.v1';
91
+ authority: AccountFinancialWorkspaceAuthority;
92
+ contractVersion: 1;
93
+ projectionVersion: 1;
94
+ version: number;
95
+ updatedAt: string;
96
+ cursor: string;
97
+ capabilities: AccountFinancialWorkspaceCapabilities;
98
+ currentFacts: {
99
+ items: AccountFinancialWorkspaceFact[];
100
+ coverage: AccountFinancialWorkspaceCoverage;
101
+ };
102
+ };
103
+ export type AccountFinancialWorkspaceSummary = {
104
+ kind: 'financial_workspace_summary.v1';
105
+ authority: AccountFinancialWorkspaceAuthority;
106
+ contractVersion: 1;
107
+ projectionVersion: 1;
108
+ version: number;
109
+ updatedAt: string;
110
+ cursor: string;
111
+ capabilities: AccountFinancialWorkspaceCapabilities;
112
+ currentFacts: AccountFinancialWorkspaceCoverage;
113
+ };
114
+ export type AccountFinancialWorkspaceActivityPage = {
115
+ kind: 'financial_workspace_activity_page.v1';
116
+ authority: AccountFinancialWorkspaceAuthority;
117
+ contractVersion: 1;
118
+ projectionVersion: 1;
119
+ throughVersion: number;
120
+ items: AccountFinancialWorkspaceOperation[];
121
+ nextCursor: string;
122
+ hasMore: boolean;
123
+ };
124
+ export type AccountFinancialWorkspaceSuccessEnvelope<T> = {
125
+ code: 0;
126
+ success: true;
127
+ status: 'success';
128
+ data: T;
129
+ };
130
+ export type AccountFinancialWorkspaceErrorCode = 'INVALID_HTTP_FRAMING' | 'INVALID_JSON' | 'VALIDATION_ERROR' | 'AUTH_REQUIRED' | 'ACCOUNT_SCOPE_REQUIRED' | 'CSRF_VALIDATION_FAILED' | 'WORKSPACE_NOT_INITIALIZED' | 'WORKSPACE_ALREADY_INITIALIZED' | 'WORKSPACE_AUTHORITY_MISMATCH' | 'VERSION_CONFLICT' | 'IDEMPOTENCY_CONFLICT' | 'PROTECTED_FACT_CHANGE_REQUIRES_PREVIEW' | 'CURSOR_EXPIRED' | 'PAYLOAD_TOO_LARGE' | 'UNSUPPORTED_MEDIA_TYPE' | 'TRANSACTION_RETRYABLE' | 'REMOTE_UNAVAILABLE';
131
+ export type AccountFinancialWorkspaceErrorEnvelope = {
132
+ kind: 'financial_workspace_error.v1';
133
+ code: AccountFinancialWorkspaceErrorCode;
134
+ success: false;
135
+ status: 'error';
136
+ error: {
137
+ message: string;
138
+ requestId?: string;
139
+ data: Record<never, never> | {
140
+ currentVersion: number;
141
+ currentCursor: string;
142
+ } | {
143
+ recovery: 'read_snapshot';
144
+ } | {
145
+ retryAfterMs: number;
146
+ };
147
+ };
148
+ };
149
+ export type AccountFinancialWorkspaceSchemaMap = {
150
+ InitializeFinancialWorkspaceCommandV1: InitializeAccountFinancialWorkspaceCommand;
151
+ FinancialWorkspaceFactRecordCommandV1: RecordAccountFinancialWorkspaceFactCommand;
152
+ NormalizedFinancialWorkspaceFactRecordCommandV1: NormalizedRecordAccountFinancialWorkspaceFactCommand;
153
+ FinancialWorkspaceCommandReceiptV1: AccountFinancialWorkspaceCommandReceipt;
154
+ FinancialWorkspaceSnapshotV1: AccountFinancialWorkspaceSnapshot;
155
+ FinancialWorkspaceSummaryV1: AccountFinancialWorkspaceSummary;
156
+ FinancialWorkspaceActivityPageV1: AccountFinancialWorkspaceActivityPage;
157
+ SuccessEnvelopeFinancialWorkspaceCommandReceiptV1: AccountFinancialWorkspaceSuccessEnvelope<AccountFinancialWorkspaceCommandReceipt>;
158
+ SuccessEnvelopeFinancialWorkspaceSnapshotV1: AccountFinancialWorkspaceSuccessEnvelope<AccountFinancialWorkspaceSnapshot>;
159
+ SuccessEnvelopeFinancialWorkspaceSummaryV1: AccountFinancialWorkspaceSuccessEnvelope<AccountFinancialWorkspaceSummary>;
160
+ SuccessEnvelopeFinancialWorkspaceActivityPageV1: AccountFinancialWorkspaceSuccessEnvelope<AccountFinancialWorkspaceActivityPage>;
161
+ ErrorEnvelopeV1: AccountFinancialWorkspaceErrorEnvelope;
162
+ ErrorEnvelope400V1: AccountFinancialWorkspaceErrorEnvelope;
163
+ ErrorEnvelope401V1: AccountFinancialWorkspaceErrorEnvelope;
164
+ ErrorEnvelope403V1: AccountFinancialWorkspaceErrorEnvelope;
165
+ ErrorEnvelope404V1: AccountFinancialWorkspaceErrorEnvelope;
166
+ ErrorEnvelope409V1: AccountFinancialWorkspaceErrorEnvelope;
167
+ ErrorEnvelope410V1: AccountFinancialWorkspaceErrorEnvelope;
168
+ ErrorEnvelope413V1: AccountFinancialWorkspaceErrorEnvelope;
169
+ ErrorEnvelope415V1: AccountFinancialWorkspaceErrorEnvelope;
170
+ ErrorEnvelope503V1: AccountFinancialWorkspaceErrorEnvelope;
171
+ };
172
+ export type AccountFinancialWorkspaceSchemaName = keyof AccountFinancialWorkspaceSchemaMap;
173
+ export type AccountFinancialWorkspaceSuccessEnvelopeSchemaName = 'SuccessEnvelopeFinancialWorkspaceCommandReceiptV1' | 'SuccessEnvelopeFinancialWorkspaceSnapshotV1' | 'SuccessEnvelopeFinancialWorkspaceSummaryV1' | 'SuccessEnvelopeFinancialWorkspaceActivityPageV1';
174
+ export type AccountFinancialWorkspaceErrorHttpStatus = 400 | 401 | 403 | 404 | 409 | 410 | 413 | 415 | 503;
175
+ export type AccountFinancialWorkspaceValidationResult = {
176
+ valid: true;
177
+ } | {
178
+ valid: false;
179
+ errors: string[];
180
+ };
181
+ export declare class AccountFinancialWorkspaceRemoteResponseInvalidError extends Error {
182
+ readonly validationErrors: string[];
183
+ readonly code: "REMOTE_RESPONSE_INVALID";
184
+ readonly classification: "REMOTE_RESPONSE_INVALID";
185
+ constructor(validationErrors: string[]);
186
+ }
187
+ export declare function validateAccountFinancialWorkspaceSchema(schemaName: string, input: unknown): AccountFinancialWorkspaceValidationResult;
188
+ export declare function parseAccountFinancialWorkspaceHttpResponse<SchemaName extends AccountFinancialWorkspaceSuccessEnvelopeSchemaName>(httpStatus: 200, input: unknown, successSchemaName: SchemaName): AccountFinancialWorkspaceSchemaMap[SchemaName];
189
+ export declare function parseAccountFinancialWorkspaceHttpResponse(httpStatus: AccountFinancialWorkspaceErrorHttpStatus, input: unknown): AccountFinancialWorkspaceErrorEnvelope;
190
+ export declare function normalizeAccountFinancialWorkspaceCommand(schemaName: 'InitializeFinancialWorkspaceCommandV1', input: unknown): InitializeAccountFinancialWorkspaceCommand;
191
+ export declare function normalizeAccountFinancialWorkspaceCommand(schemaName: 'FinancialWorkspaceFactRecordCommandV1', input: unknown): NormalizedRecordAccountFinancialWorkspaceFactCommand;