@nominalso/vibe-host 0.0.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 ADDED
@@ -0,0 +1,657 @@
1
+ // package.json
2
+ var version = "0.0.1";
3
+
4
+ // ../protocol-types/dist/index.js
5
+ var PROTOCOL_ID = "nominal-vibe-bridge";
6
+ var PROTOCOL_VERSION = 1;
7
+ var BRIDGE_KINDS = ["request", "response", "push", "command", "progress"];
8
+ var CORRELATED_KINDS = ["request", "response", "progress"];
9
+ var BRIDGE_KINDS_SET = new Set(BRIDGE_KINDS);
10
+ var CORRELATED_KINDS_SET = new Set(CORRELATED_KINDS);
11
+ function isBridgeMessage(data) {
12
+ if (typeof data !== "object" || data === null) return false;
13
+ const d = data;
14
+ if (d.__protocol !== PROTOCOL_ID) return false;
15
+ if (d.__version !== PROTOCOL_VERSION) return false;
16
+ if (typeof d.kind !== "string" || !BRIDGE_KINDS_SET.has(d.kind)) return false;
17
+ if (typeof d.type !== "string") return false;
18
+ if (CORRELATED_KINDS_SET.has(d.kind) && typeof d.requestId !== "string") return false;
19
+ return true;
20
+ }
21
+
22
+ // ../api-client/dist/index.js
23
+ import {
24
+ createClient,
25
+ createConfig
26
+ } from "@hey-api/client-fetch";
27
+ import { createClient as createClient2, createConfig as createConfig2 } from "@hey-api/client-fetch";
28
+ var client = createClient(createConfig());
29
+ var getAccountsApiAccountingAccountGet = (options) => {
30
+ return (options?.client ?? client).get({
31
+ url: "/api/accounting/account",
32
+ ...options
33
+ });
34
+ };
35
+ var getAccountApiAccountingAccountAccountIdGet = (options) => {
36
+ return (options.client ?? client).get({
37
+ url: "/api/accounting/account/{account_id}",
38
+ ...options
39
+ });
40
+ };
41
+ var getCoaTreeApiAccountingSubsidiarySubsidiaryIdCoaGet = (options) => {
42
+ return (options.client ?? client).get({
43
+ url: "/api/accounting/subsidiary/{subsidiary_id}/coa",
44
+ ...options
45
+ });
46
+ };
47
+ var getCoaFlatApiAccountingSubsidiarySubsidiaryIdCoaAccountGet = (options) => {
48
+ return (options.client ?? client).get({
49
+ url: "/api/accounting/subsidiary/{subsidiary_id}/coa/account",
50
+ ...options,
51
+ headers: {
52
+ "Content-Type": "application/json",
53
+ ...options?.headers
54
+ }
55
+ });
56
+ };
57
+ var getSubsidiaryAvailableCurrenciesApiAccountingSubsidiarySubsidiaryIdCoaAvailableCurrenciesGet = (options) => {
58
+ return (options.client ?? client).get({
59
+ url: "/api/accounting/subsidiary/{subsidiary_id}/coa/available-currencies",
60
+ ...options
61
+ });
62
+ };
63
+ var getCoaFlatSimpleApiAccountingSubsidiarySubsidiaryIdCoaAccountSimpleGet = (options) => {
64
+ return (options.client ?? client).get({
65
+ url: "/api/accounting/subsidiary/{subsidiary_id}/coa/account/simple",
66
+ ...options,
67
+ headers: {
68
+ "Content-Type": "application/json",
69
+ ...options?.headers
70
+ }
71
+ });
72
+ };
73
+ var getGroupedCoaFlatApiAccountingSubsidiarySubsidiaryIdCoaAccountGroupGet = (options) => {
74
+ return (options.client ?? client).get({
75
+ url: "/api/accounting/subsidiary/{subsidiary_id}/coa/account/group",
76
+ ...options
77
+ });
78
+ };
79
+ var getAccountByIdApiAccountingSubsidiarySubsidiaryIdCoaAccountAccountIdGet = (options) => {
80
+ return (options.client ?? client).get({
81
+ url: "/api/accounting/subsidiary/{subsidiary_id}/coa/account/{account_id}",
82
+ ...options
83
+ });
84
+ };
85
+ var getConversionRateApiAccountingCurrencyCurrencyConversionRatesGet = (options) => {
86
+ return (options.client ?? client).get({
87
+ url: "/api/accounting/currency/{currency}/conversion-rates",
88
+ ...options
89
+ });
90
+ };
91
+ var getSubsidiaryJournalLinesApiAccountingSubsidiarySubsidiaryIdJournalEntryLinesGet = (options) => {
92
+ return (options.client ?? client).get({
93
+ url: "/api/accounting/subsidiary/{subsidiary_id}/journal-entry/lines",
94
+ ...options,
95
+ headers: {
96
+ "Content-Type": "application/json",
97
+ ...options?.headers
98
+ }
99
+ });
100
+ };
101
+ var getSubsidiaryJournalApiAccountingSubsidiarySubsidiaryIdJournalEntryGet = (options) => {
102
+ return (options.client ?? client).get({
103
+ url: "/api/accounting/subsidiary/{subsidiary_id}/journal-entry",
104
+ ...options,
105
+ headers: {
106
+ "Content-Type": "application/json",
107
+ ...options?.headers
108
+ }
109
+ });
110
+ };
111
+ var getJournalEntryApiAccountingSubsidiarySubsidiaryIdJournalEntryJournalEntryIdGet = (options) => {
112
+ return (options.client ?? client).get({
113
+ url: "/api/accounting/subsidiary/{subsidiary_id}/journal-entry/{journal_entry_id}",
114
+ ...options
115
+ });
116
+ };
117
+ var getDimensionsApiAccountingDimensionGet = (options) => {
118
+ return (options?.client ?? client).get({
119
+ url: "/api/accounting/dimension",
120
+ ...options
121
+ });
122
+ };
123
+ var getAccountDimensionAssignmentsForDimensionApiAccountingDimensionDimensionIdAccountAccountIdGet = (options) => {
124
+ return (options.client ?? client).get({
125
+ url: "/api/accounting/dimension/{dimension_id}/account/{account_id}",
126
+ ...options
127
+ });
128
+ };
129
+ var getDimensionValuesApiAccountingDimensionValueGet = (options) => {
130
+ return (options?.client ?? client).get({
131
+ url: "/api/accounting/dimension-value",
132
+ ...options
133
+ });
134
+ };
135
+ var getDimensionValuesHierarchicalApiAccountingDimensionValueHierarchicalGet = (options) => {
136
+ return (options?.client ?? client).get({
137
+ url: "/api/accounting/dimension-value/hierarchical",
138
+ ...options
139
+ });
140
+ };
141
+ var getEffectiveExchangeRateApiAccountingConsolidationExchangeRateGet = (options) => {
142
+ return (options?.client ?? client).get({
143
+ url: "/api/accounting/consolidation-exchange-rate",
144
+ ...options,
145
+ headers: {
146
+ "Content-Type": "application/json",
147
+ ...options?.headers
148
+ }
149
+ });
150
+ };
151
+ var getPeriodByDateApiAccountingConsolidationExchangeRatePeriodInputDateGet = (options) => {
152
+ return (options.client ?? client).get({
153
+ url: "/api/accounting/consolidation-exchange-rate/period/{input_date}",
154
+ ...options
155
+ });
156
+ };
157
+ var getActivityDefinitionsApiActivityActivityDefinitionGet = (options) => {
158
+ return (options?.client ?? client).get({
159
+ url: "/api/activity/activity-definition",
160
+ ...options
161
+ });
162
+ };
163
+ var getActivityDefinitionByIdApiActivityActivityDefinitionActivityDefinitionIdGet = (options) => {
164
+ return (options.client ?? client).get({
165
+ url: "/api/activity/activity-definition/{activity_definition_id}",
166
+ ...options
167
+ });
168
+ };
169
+ var getPeriodInstancesApiActivityPeriodInstanceGet = (options) => {
170
+ return (options?.client ?? client).get({
171
+ url: "/api/activity/period-instance",
172
+ ...options
173
+ });
174
+ };
175
+ var getPeriodInstanceApiActivityPeriodInstancePeriodInstanceIdGet = (options) => {
176
+ return (options.client ?? client).get({
177
+ url: "/api/activity/period-instance/{period_instance_id}",
178
+ ...options
179
+ });
180
+ };
181
+ var getPeriodInstanceBySlugApiActivityPeriodInstanceBySlugPeriodDisplayIdGet = (options) => {
182
+ return (options.client ?? client).get({
183
+ url: "/api/activity/period-instance/by-slug/{period_display_id}",
184
+ ...options
185
+ });
186
+ };
187
+ var getPeriodInstanceProgressBreakdownBySlugApiActivityPeriodInstanceBySlugPeriodDisplayIdProgressBreakdownGet = (options) => {
188
+ return (options.client ?? client).get({
189
+ url: "/api/activity/period-instance/by-slug/{period_display_id}/progress-breakdown",
190
+ ...options
191
+ });
192
+ };
193
+ var getAllTasksDefinitionsApiActivityTaskDefinitionGet = (options) => {
194
+ return (options?.client ?? client).get({
195
+ url: "/api/activity/task-definition",
196
+ ...options
197
+ });
198
+ };
199
+ var createTaskDefinitionApiActivityTaskDefinitionPost = (options) => {
200
+ return (options.client ?? client).post({
201
+ url: "/api/activity/task-definition",
202
+ ...options,
203
+ headers: {
204
+ "Content-Type": "application/json",
205
+ ...options?.headers
206
+ }
207
+ });
208
+ };
209
+ var getAllTasksDefinitionsByFilterApiActivityTaskDefinitionQueryPost = (options) => {
210
+ return (options?.client ?? client).post({
211
+ url: "/api/activity/task-definition/query",
212
+ ...options
213
+ });
214
+ };
215
+ var getTaskDefinitionByIdApiActivityTaskDefinitionTaskDefinitionIdGet = (options) => {
216
+ return (options.client ?? client).get({
217
+ url: "/api/activity/task-definition/{task_definition_id}",
218
+ ...options
219
+ });
220
+ };
221
+ var updateTaskDefinitionApiActivityTaskDefinitionTaskDefinitionIdPut = (options) => {
222
+ return (options.client ?? client).put({
223
+ url: "/api/activity/task-definition/{task_definition_id}",
224
+ ...options,
225
+ headers: {
226
+ "Content-Type": "application/json",
227
+ ...options?.headers
228
+ }
229
+ });
230
+ };
231
+ var getActivityInstanceApiActivityActivityInstanceActivityInstanceIdGet = (options) => {
232
+ return (options.client ?? client).get({
233
+ url: "/api/activity/activity-instance/{activity_instance_id}",
234
+ ...options
235
+ });
236
+ };
237
+ var getTaskInstancesByActivityApiActivityActivityInstanceActivityInstanceIdTaskGet = (options) => {
238
+ return (options.client ?? client).get({
239
+ url: "/api/activity/activity-instance/{activity_instance_id}/task",
240
+ ...options,
241
+ headers: {
242
+ "Content-Type": "application/json",
243
+ ...options?.headers
244
+ }
245
+ });
246
+ };
247
+ var getActivityInstancesApiActivityActivityInstanceGet = (options) => {
248
+ return (options?.client ?? client).get({
249
+ url: "/api/activity/activity-instance",
250
+ ...options
251
+ });
252
+ };
253
+ var getActivityInstanceByPeriodApiActivityActivityInstanceByPeriodPeriodDisplayIdActivityDefinitionIdGet = (options) => {
254
+ return (options.client ?? client).get({
255
+ url: "/api/activity/activity-instance/by-period/{period_display_id}/{activity_definition_id}",
256
+ ...options
257
+ });
258
+ };
259
+ var getTaskInstancesByActivityPeriodApiActivityActivityInstanceByPeriodPeriodDisplayIdActivityDefinitionIdTaskGet = (options) => {
260
+ return (options.client ?? client).get({
261
+ url: "/api/activity/activity-instance/by-period/{period_display_id}/{activity_definition_id}/task",
262
+ ...options,
263
+ headers: {
264
+ "Content-Type": "application/json",
265
+ ...options?.headers
266
+ }
267
+ });
268
+ };
269
+ var getAllTaskInstancesApiActivityTaskInstanceGet = (options) => {
270
+ return (options?.client ?? client).get({
271
+ url: "/api/activity/task-instance",
272
+ ...options
273
+ });
274
+ };
275
+ var getAllTaskInstancesByFilterApiActivityTaskInstanceQueryPost = (options) => {
276
+ return (options?.client ?? client).post({
277
+ url: "/api/activity/task-instance/query",
278
+ ...options,
279
+ headers: {
280
+ "Content-Type": "application/json",
281
+ ...options?.headers
282
+ }
283
+ });
284
+ };
285
+ var getTaskInstanceByIdApiActivityTaskInstanceTaskInstanceIdGet = (options) => {
286
+ return (options.client ?? client).get({
287
+ url: "/api/activity/task-instance/{task_instance_id}",
288
+ ...options
289
+ });
290
+ };
291
+ var updateTaskInstanceApiActivityTaskInstanceTaskInstanceIdPut = (options) => {
292
+ return (options.client ?? client).put({
293
+ url: "/api/activity/task-instance/{task_instance_id}",
294
+ ...options,
295
+ headers: {
296
+ "Content-Type": "application/json",
297
+ ...options?.headers
298
+ }
299
+ });
300
+ };
301
+ var getEventsApiAuditTrailEventGet = (options) => {
302
+ return (options?.client ?? client).get({
303
+ url: "/api/audit-trail/event",
304
+ ...options
305
+ });
306
+ };
307
+ var getEntityEventsApiAuditTrailEventEntityTargetTypeTargetIdPost = (options) => {
308
+ return (options.client ?? client).post({
309
+ url: "/api/audit-trail/event/entity/{target_type}/{target_id}",
310
+ ...options,
311
+ headers: {
312
+ "Content-Type": "application/json",
313
+ ...options?.headers
314
+ }
315
+ });
316
+ };
317
+ var getFiscalCalendarsBySubsidiaryApiPeriodManagerFiscalCalendarBySubsidiarySubsidiaryIdGet = (options) => {
318
+ return (options.client ?? client).get({
319
+ url: "/api/period-manager/fiscal-calendar/by-subsidiary/{subsidiary_id}",
320
+ ...options
321
+ });
322
+ };
323
+ var getFiscalCalendarByIdApiPeriodManagerFiscalCalendarCalendarIdGet = (options) => {
324
+ return (options.client ?? client).get({
325
+ url: "/api/period-manager/fiscal-calendar/{calendar_id}",
326
+ ...options
327
+ });
328
+ };
329
+ var getTenantUsersApiTenancyTenantTenantIdOrNameUsersGet = (options) => {
330
+ return (options.client ?? client).get({
331
+ url: "/api/tenancy/tenant/{tenant_id_or_name}/users",
332
+ ...options
333
+ });
334
+ };
335
+ var getAllSubsidiariesApiTenancySubsidiaryGet = (options) => {
336
+ return (options?.client ?? client).get({
337
+ url: "/api/tenancy/subsidiary",
338
+ ...options
339
+ });
340
+ };
341
+ var getSubsidiaryApiTenancySubsidiarySubsidiaryIdGet = (options) => {
342
+ return (options.client ?? client).get({
343
+ url: "/api/tenancy/subsidiary/{subsidiary_id}",
344
+ ...options
345
+ });
346
+ };
347
+ var getSubsidiaryParentCurrenciesApiTenancySubsidiarySubsidiaryIdParentCurrenciesGet = (options) => {
348
+ return (options.client ?? client).get({
349
+ url: "/api/tenancy/subsidiary/{subsidiary_id}/parent-currencies",
350
+ ...options
351
+ });
352
+ };
353
+ function createVibeApiClient({ baseUrl, stripApiPrefix }) {
354
+ const client2 = createClient2(createConfig2({ baseUrl }));
355
+ client2.interceptors.request.use((request) => {
356
+ console.log("[vibe-api-client] request url:", request.url);
357
+ return request;
358
+ });
359
+ if (stripApiPrefix) {
360
+ client2.interceptors.request.use(
361
+ (request) => new Request(request.url.replace(`${baseUrl}/api/`, `${baseUrl}/`), request)
362
+ );
363
+ }
364
+ return client2;
365
+ }
366
+
367
+ // src/handlerMap.ts
368
+ async function call(fn, payload, client2) {
369
+ const { data } = await fn({ ...payload, client: client2 });
370
+ if (data == null) throw new Error("API returned no data");
371
+ return data;
372
+ }
373
+ function createHandlerMap(options) {
374
+ const client2 = createVibeApiClient(options);
375
+ return {
376
+ // Accounting — chart of accounts
377
+ GET_CHART_OF_ACCOUNTS: (p) => call(getCoaFlatApiAccountingSubsidiarySubsidiaryIdCoaAccountGet, p, client2),
378
+ GET_COA_TREE: (p) => call(getCoaTreeApiAccountingSubsidiarySubsidiaryIdCoaGet, p, client2),
379
+ GET_COA_FLAT_SIMPLE: (p) => call(
380
+ getCoaFlatSimpleApiAccountingSubsidiarySubsidiaryIdCoaAccountSimpleGet,
381
+ p,
382
+ client2
383
+ ),
384
+ GET_COA_GROUPED: (p) => call(
385
+ getGroupedCoaFlatApiAccountingSubsidiarySubsidiaryIdCoaAccountGroupGet,
386
+ p,
387
+ client2
388
+ ),
389
+ GET_COA_ACCOUNT: (p) => call(
390
+ getAccountByIdApiAccountingSubsidiarySubsidiaryIdCoaAccountAccountIdGet,
391
+ p,
392
+ client2
393
+ ),
394
+ GET_SUBSIDIARY_AVAILABLE_CURRENCIES: (p) => call(
395
+ getSubsidiaryAvailableCurrenciesApiAccountingSubsidiarySubsidiaryIdCoaAvailableCurrenciesGet,
396
+ p,
397
+ client2
398
+ ),
399
+ GET_ACCOUNTS: (p) => call(getAccountsApiAccountingAccountGet, p, client2),
400
+ GET_ACCOUNT: (p) => call(getAccountApiAccountingAccountAccountIdGet, p, client2),
401
+ // Accounting — exchange rates
402
+ GET_CONVERSION_RATES: (p) => call(getConversionRateApiAccountingCurrencyCurrencyConversionRatesGet, p, client2),
403
+ GET_EFFECTIVE_EXCHANGE_RATE: (p) => call(getEffectiveExchangeRateApiAccountingConsolidationExchangeRateGet, p, client2),
404
+ GET_EXCHANGE_RATE_BY_DATE: (p) => call(
405
+ getPeriodByDateApiAccountingConsolidationExchangeRatePeriodInputDateGet,
406
+ p,
407
+ client2
408
+ ),
409
+ // Accounting — dimensions
410
+ GET_DIMENSIONS: (p) => call(getDimensionsApiAccountingDimensionGet, p, client2),
411
+ GET_DIMENSION_VALUES: (p) => call(getDimensionValuesApiAccountingDimensionValueGet, p, client2),
412
+ GET_DIMENSION_VALUES_HIERARCHICAL: (p) => call(
413
+ getDimensionValuesHierarchicalApiAccountingDimensionValueHierarchicalGet,
414
+ p,
415
+ client2
416
+ ),
417
+ GET_DIMENSION_ACCOUNT_ASSIGNMENTS: (p) => call(
418
+ getAccountDimensionAssignmentsForDimensionApiAccountingDimensionDimensionIdAccountAccountIdGet,
419
+ p,
420
+ client2
421
+ ),
422
+ // Accounting — journal entries
423
+ GET_JOURNAL_ENTRIES: (p) => call(
424
+ getSubsidiaryJournalApiAccountingSubsidiarySubsidiaryIdJournalEntryGet,
425
+ p,
426
+ client2
427
+ ),
428
+ GET_JOURNAL_LINES: (p) => call(
429
+ getSubsidiaryJournalLinesApiAccountingSubsidiarySubsidiaryIdJournalEntryLinesGet,
430
+ p,
431
+ client2
432
+ ),
433
+ GET_JOURNAL_ENTRY: (p) => call(
434
+ getJournalEntryApiAccountingSubsidiarySubsidiaryIdJournalEntryJournalEntryIdGet,
435
+ p,
436
+ client2
437
+ ),
438
+ // Activity — period instances
439
+ GET_PERIODS: (p) => call(getPeriodInstancesApiActivityPeriodInstanceGet, p, client2),
440
+ GET_PERIOD_INSTANCE: (p) => call(getPeriodInstanceApiActivityPeriodInstancePeriodInstanceIdGet, p, client2),
441
+ GET_PERIOD_INSTANCE_BY_SLUG: (p) => call(
442
+ getPeriodInstanceBySlugApiActivityPeriodInstanceBySlugPeriodDisplayIdGet,
443
+ p,
444
+ client2
445
+ ),
446
+ GET_PERIOD_PROGRESS_BREAKDOWN: (p) => call(
447
+ getPeriodInstanceProgressBreakdownBySlugApiActivityPeriodInstanceBySlugPeriodDisplayIdProgressBreakdownGet,
448
+ p,
449
+ client2
450
+ ),
451
+ // Activity — activity definitions
452
+ GET_ACTIVITY_DEFINITIONS: (p) => call(getActivityDefinitionsApiActivityActivityDefinitionGet, p, client2),
453
+ GET_ACTIVITY_DEFINITION: (p) => call(
454
+ getActivityDefinitionByIdApiActivityActivityDefinitionActivityDefinitionIdGet,
455
+ p,
456
+ client2
457
+ ),
458
+ // Activity — activity instances
459
+ GET_ACTIVITY_INSTANCES: (p) => call(getActivityInstancesApiActivityActivityInstanceGet, p, client2),
460
+ GET_ACTIVITY_INSTANCE: (p) => call(getActivityInstanceApiActivityActivityInstanceActivityInstanceIdGet, p, client2),
461
+ GET_ACTIVITY_INSTANCE_BY_PERIOD: (p) => call(
462
+ getActivityInstanceByPeriodApiActivityActivityInstanceByPeriodPeriodDisplayIdActivityDefinitionIdGet,
463
+ p,
464
+ client2
465
+ ),
466
+ GET_ACTIVITY_INSTANCE_TASKS: (p) => call(
467
+ getTaskInstancesByActivityApiActivityActivityInstanceActivityInstanceIdTaskGet,
468
+ p,
469
+ client2
470
+ ),
471
+ GET_ACTIVITY_PERIOD_TASKS: (p) => call(
472
+ getTaskInstancesByActivityPeriodApiActivityActivityInstanceByPeriodPeriodDisplayIdActivityDefinitionIdTaskGet,
473
+ p,
474
+ client2
475
+ ),
476
+ // Activity — task definitions
477
+ GET_TASK_DEFINITIONS: (p) => call(getAllTasksDefinitionsApiActivityTaskDefinitionGet, p, client2),
478
+ GET_TASK_DEFINITION: (p) => call(getTaskDefinitionByIdApiActivityTaskDefinitionTaskDefinitionIdGet, p, client2),
479
+ CREATE_TASK_DEFINITION: (p) => call(createTaskDefinitionApiActivityTaskDefinitionPost, p, client2),
480
+ UPDATE_TASK_DEFINITION: (p) => call(updateTaskDefinitionApiActivityTaskDefinitionTaskDefinitionIdPut, p, client2),
481
+ GET_TASK_DEFINITIONS_BY_FILTER: (p) => call(getAllTasksDefinitionsByFilterApiActivityTaskDefinitionQueryPost, p, client2),
482
+ // Activity — task instances
483
+ GET_TASK_INSTANCES: (p) => call(getAllTaskInstancesApiActivityTaskInstanceGet, p, client2),
484
+ GET_TASK_INSTANCE: (p) => call(getTaskInstanceByIdApiActivityTaskInstanceTaskInstanceIdGet, p, client2),
485
+ POST_TASK_OUTPUT: (p) => call(updateTaskInstanceApiActivityTaskInstanceTaskInstanceIdPut, p, client2),
486
+ GET_TASK_INSTANCES_BY_FILTER: (p) => call(getAllTaskInstancesByFilterApiActivityTaskInstanceQueryPost, p, client2),
487
+ // Audit trail
488
+ GET_AUDIT_EVENTS: (p) => call(getEventsApiAuditTrailEventGet, p, client2),
489
+ GET_ENTITY_AUDIT_EVENTS: (p) => call(getEntityEventsApiAuditTrailEventEntityTargetTypeTargetIdPost, p, client2),
490
+ // Period manager
491
+ GET_FISCAL_CALENDARS: (p) => call(
492
+ getFiscalCalendarsBySubsidiaryApiPeriodManagerFiscalCalendarBySubsidiarySubsidiaryIdGet,
493
+ p,
494
+ client2
495
+ ),
496
+ GET_FISCAL_CALENDAR: (p) => call(getFiscalCalendarByIdApiPeriodManagerFiscalCalendarCalendarIdGet, p, client2),
497
+ // Tenancy
498
+ GET_SUBSIDIARIES: (p) => call(getAllSubsidiariesApiTenancySubsidiaryGet, p, client2),
499
+ GET_SUBSIDIARY: (p) => call(getSubsidiaryApiTenancySubsidiarySubsidiaryIdGet, p, client2),
500
+ GET_SUBSIDIARY_PARENT_CURRENCIES: (p) => call(
501
+ getSubsidiaryParentCurrenciesApiTenancySubsidiarySubsidiaryIdParentCurrenciesGet,
502
+ p,
503
+ client2
504
+ ),
505
+ GET_TENANT_USERS: (p) => call(getTenantUsersApiTenancyTenantTenantIdOrNameUsersGet, p, client2)
506
+ };
507
+ }
508
+
509
+ // src/uploadHandler.ts
510
+ async function uploadHandler(payload, sendProgress) {
511
+ const attachmentId = crypto.randomUUID();
512
+ for (const progress of [25, 50, 75, 100]) {
513
+ await new Promise((r) => setTimeout(r, 400));
514
+ sendProgress({ attachmentId, progress });
515
+ }
516
+ return { attachmentId, name: payload.fileName };
517
+ }
518
+
519
+ // src/VibeAppHost.ts
520
+ var VibeAppHost = class {
521
+ constructor({ trustedOrigins, getContext, appBasePath, clientConfig }) {
522
+ this.iframeWindow = null;
523
+ this.kindHandlers = {
524
+ request: (msg, source, origin) => this.handleRequest(msg, source, origin),
525
+ command: (msg) => this.dispatchCommand(msg)
526
+ };
527
+ this.commandHandlers = {
528
+ REPORT_SUBROUTE: (payload) => {
529
+ const newPath = payload.subroute === "/" ? this.appBasePath : `${this.appBasePath}${payload.subroute}`;
530
+ const method = payload.replace ? "replaceState" : "pushState";
531
+ window.history[method](null, "", newPath);
532
+ }
533
+ };
534
+ this.trustedOrigins = new Set(trustedOrigins);
535
+ this.getContext = getContext;
536
+ this.appBasePath = appBasePath;
537
+ this.boundHandleMessage = this.handleMessage.bind(this);
538
+ this.boundHandlePopState = this.handlePopState.bind(this);
539
+ this.handlers = this.initializeHandlers(clientConfig || { baseUrl: "", stripApiPrefix: false });
540
+ }
541
+ dispatchCommand(msg) {
542
+ const handler = this.commandHandlers[msg.type];
543
+ handler(msg.payload);
544
+ }
545
+ initializeHandlers(clientConfig) {
546
+ return {
547
+ ...createHandlerMap(clientConfig),
548
+ UPLOAD_FILE: uploadHandler
549
+ };
550
+ }
551
+ /**
552
+ * Starts listening for bridge messages and sets up browser back/forward sync.
553
+ * Returns a cleanup function to call on unmount.
554
+ *
555
+ * Pass `iframeWindow` to immediately push context to the iframe. If omitted,
556
+ * the host will respond to GET_CONTEXT polls from the bridge but won't
557
+ * proactively push — call `pushContextTo(iframeWindow)` once the iframe has
558
+ * loaded to trigger the proactive push.
559
+ */
560
+ mount(iframeWindow) {
561
+ if (iframeWindow) this.iframeWindow = iframeWindow;
562
+ window.addEventListener("message", this.boundHandleMessage);
563
+ window.addEventListener("popstate", this.boundHandlePopState);
564
+ if (iframeWindow) this.pushContext(iframeWindow);
565
+ return () => {
566
+ window.removeEventListener("message", this.boundHandleMessage);
567
+ window.removeEventListener("popstate", this.boundHandlePopState);
568
+ this.iframeWindow = null;
569
+ };
570
+ }
571
+ /**
572
+ * Pushes the current context to the iframe and updates the stored iframe
573
+ * window reference. Call this once the iframe has loaded if `mount()` was
574
+ * called without an `iframeWindow`.
575
+ */
576
+ pushContextTo(iframeWindow) {
577
+ this.iframeWindow = iframeWindow;
578
+ this.pushContext(iframeWindow);
579
+ }
580
+ pushContext(target) {
581
+ const message = {
582
+ __protocol: PROTOCOL_ID,
583
+ __version: PROTOCOL_VERSION,
584
+ kind: "push",
585
+ type: "CONTEXT_PUSH",
586
+ payload: { ...this.getContext(), hostVersion: version }
587
+ };
588
+ for (const origin of this.trustedOrigins) {
589
+ target.postMessage(message, origin);
590
+ }
591
+ }
592
+ handlePopState() {
593
+ if (!this.iframeWindow) return;
594
+ const currentPath = window.location.pathname;
595
+ if (!currentPath.startsWith(this.appBasePath)) return;
596
+ const subroute = currentPath.slice(this.appBasePath.length) || "/";
597
+ this.pushToIframe("SUBROUTE_PUSH", { subroute });
598
+ }
599
+ pushToIframe(type, payload) {
600
+ if (!this.iframeWindow) return;
601
+ const message = {
602
+ __protocol: PROTOCOL_ID,
603
+ __version: PROTOCOL_VERSION,
604
+ kind: "push",
605
+ type,
606
+ payload
607
+ };
608
+ for (const origin of this.trustedOrigins) {
609
+ this.iframeWindow.postMessage(message, origin);
610
+ }
611
+ }
612
+ async handleMessage(event) {
613
+ if (!this.trustedOrigins.has(event.origin)) return;
614
+ if (!isBridgeMessage(event.data)) return;
615
+ await this.kindHandlers[event.data.kind]?.(event.data, event.source, event.origin);
616
+ }
617
+ async handleRequest(msg, source, origin) {
618
+ const { requestId, type } = msg;
619
+ if (type === "GET_CONTEXT") {
620
+ const ctx = { ...this.getContext(), hostVersion: version };
621
+ const bridgeVersion = msg.payload?.bridgeVersion ?? "unknown";
622
+ console.log(
623
+ `[vibe-host] Vibe App connected \u2014 bridge: ${bridgeVersion}, host: ${version}, tenant: ${ctx.tenant}, user: ${ctx.user.displayName}`
624
+ );
625
+ this.respond(source, origin, { kind: "response", type, requestId, ok: true, data: ctx });
626
+ return;
627
+ }
628
+ const sendProgress = (payload) => {
629
+ const message = {
630
+ __protocol: PROTOCOL_ID,
631
+ __version: PROTOCOL_VERSION,
632
+ kind: "progress",
633
+ type,
634
+ requestId,
635
+ payload
636
+ };
637
+ source.postMessage(message, origin);
638
+ };
639
+ try {
640
+ const handler = this.handlers[type];
641
+ const data = await handler(msg.payload, sendProgress);
642
+ this.respond(source, origin, { kind: "response", type, requestId, ok: true, data });
643
+ } catch (err) {
644
+ const error = err instanceof Error ? err.message : String(err);
645
+ this.respond(source, origin, { kind: "response", type, requestId, ok: false, error });
646
+ }
647
+ }
648
+ respond(target, origin, response) {
649
+ target.postMessage(
650
+ { __protocol: PROTOCOL_ID, __version: PROTOCOL_VERSION, ...response },
651
+ origin
652
+ );
653
+ }
654
+ };
655
+ export {
656
+ VibeAppHost
657
+ };