@palettelab/sdk 0.1.21 → 0.1.23
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/README.md +56 -3
- package/dist/index.d.mts +13 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.js +46 -8
- package/dist/index.mjs +44 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -366,6 +366,18 @@ events through the SDK. The app manifest must list the targets under
|
|
|
366
366
|
`consumes.services` or `consumes.events`; Palette checks the manifest and the
|
|
367
367
|
org install grant before dispatching.
|
|
368
368
|
|
|
369
|
+
The model is intentionally contract-first:
|
|
370
|
+
|
|
371
|
+
- Provider apps declare `provides.namespace`, `provides.services[].methods`,
|
|
372
|
+
optional JSON schemas, and `provides.events`.
|
|
373
|
+
- Consumer apps declare exact qualified targets such as
|
|
374
|
+
`hr/v1#approvalChain.get` under `consumes.services` or `consumes.events`.
|
|
375
|
+
- Installs use a dependency plan so required provider apps can be installed
|
|
376
|
+
first.
|
|
377
|
+
- Org owners/admins can grant or revoke each consumed service/event target after
|
|
378
|
+
install.
|
|
379
|
+
- Every service call and event subscription is checked again at runtime.
|
|
380
|
+
|
|
369
381
|
```tsx
|
|
370
382
|
import { createPaletteClient, usePlatform } from "@palettelab/sdk"
|
|
371
383
|
|
|
@@ -378,15 +390,56 @@ const unsubscribe = palette.events.on("hr/v1#hierarchy.updated", (payload) => {
|
|
|
378
390
|
})
|
|
379
391
|
|
|
380
392
|
await palette.events.emit("leave/v1#leave.requested", { user_id, chain })
|
|
393
|
+
await palette.events.publishDurable("leave/v1#leave.requested", { user_id, chain })
|
|
381
394
|
unsubscribe()
|
|
382
395
|
```
|
|
383
396
|
|
|
384
397
|
Use `palette.broker.call("hr/v1#approvalChain.get", payload)` for a low-level
|
|
385
398
|
call when a generated helper is not available.
|
|
386
399
|
|
|
387
|
-
`pltt services pull` generates TypeScript clients
|
|
388
|
-
|
|
389
|
-
|
|
400
|
+
`pltt services pull` generates nested TypeScript clients under
|
|
401
|
+
`.palette/types/services.ts`, so app code can import helpers instead of
|
|
402
|
+
managing target strings by hand. Broker failures are surfaced as
|
|
403
|
+
`MissingDependencyError`, `CrossAppGrantError`, or `BrokerCallError`.
|
|
404
|
+
|
|
405
|
+
In Palette native runtime, the SDK calls `/api/v1/os-broker/dispatch` and
|
|
406
|
+
`/api/v1/os-broker/events/stream` directly with the current app identity. In
|
|
407
|
+
iframe sandbox runtime, the SDK sends `palette.broker.call`,
|
|
408
|
+
`palette.broker.emit`, and `palette.broker.subscribe` messages to the Palette
|
|
409
|
+
host. The host forwards the request through the same broker endpoints, so
|
|
410
|
+
sandboxed apps still get the same manifest, install, grant, and schema checks.
|
|
411
|
+
|
|
412
|
+
Declare the frontend dependency in `palette-plugin.json`:
|
|
413
|
+
|
|
414
|
+
```json
|
|
415
|
+
{
|
|
416
|
+
"consumes": {
|
|
417
|
+
"services": [
|
|
418
|
+
{
|
|
419
|
+
"target": "hr/v1#approvalChain.get",
|
|
420
|
+
"required": true,
|
|
421
|
+
"reason": "Route leave approvals through HR"
|
|
422
|
+
}
|
|
423
|
+
],
|
|
424
|
+
"events": [
|
|
425
|
+
{
|
|
426
|
+
"target": "hr/v1#hierarchy.updated",
|
|
427
|
+
"required": false,
|
|
428
|
+
"reason": "Refresh approval-chain cache"
|
|
429
|
+
}
|
|
430
|
+
]
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
Generated service clients use the default exported `palette` client from the
|
|
436
|
+
SDK. That lets generated files work in both app components and shared modules:
|
|
437
|
+
|
|
438
|
+
```ts
|
|
439
|
+
import { hr } from "./.palette/types/services"
|
|
440
|
+
|
|
441
|
+
const chain = await hr.approvalChain.get({ user_id })
|
|
442
|
+
```
|
|
390
443
|
|
|
391
444
|
### Data Room Folders By Name
|
|
392
445
|
|
package/dist/index.d.mts
CHANGED
|
@@ -137,6 +137,8 @@ type EventMeta = {
|
|
|
137
137
|
declare const events: {
|
|
138
138
|
on(target: string, handler: Handler): () => void;
|
|
139
139
|
emit(target: string, payload?: unknown): Promise<void>;
|
|
140
|
+
publishDurable(target: string, payload?: unknown): Promise<void>;
|
|
141
|
+
emitDurable(target: string, payload?: unknown): Promise<void>;
|
|
140
142
|
/** Diagnostic: list active subscriptions in this page. */
|
|
141
143
|
active(): string[];
|
|
142
144
|
};
|
|
@@ -165,6 +167,12 @@ declare class BrokerCallError extends Error {
|
|
|
165
167
|
readonly status?: number | undefined;
|
|
166
168
|
constructor(message: string, target: string, status?: number | undefined);
|
|
167
169
|
}
|
|
170
|
+
declare class MissingDependencyError extends BrokerCallError {
|
|
171
|
+
constructor(message: string, target: string, status?: number);
|
|
172
|
+
}
|
|
173
|
+
declare class CrossAppGrantError extends BrokerCallError {
|
|
174
|
+
constructor(message: string, target: string, status?: number);
|
|
175
|
+
}
|
|
168
176
|
type BrokerCallOptions = {
|
|
169
177
|
/** Override the caller app id sent to the broker. Inferred from the URL when omitted. */
|
|
170
178
|
callerAppId?: string;
|
|
@@ -354,6 +362,8 @@ declare function createPaletteClient(ctx?: PlatformContext): {
|
|
|
354
362
|
events: {
|
|
355
363
|
on(target: string, handler: (payload: unknown, meta: EventMeta) => void): () => void;
|
|
356
364
|
emit(target: string, payload?: unknown): Promise<void>;
|
|
365
|
+
publishDurable(target: string, payload?: unknown): Promise<void>;
|
|
366
|
+
emitDurable(target: string, payload?: unknown): Promise<void>;
|
|
357
367
|
active(): string[];
|
|
358
368
|
};
|
|
359
369
|
};
|
|
@@ -399,6 +409,8 @@ declare const palette: {
|
|
|
399
409
|
events: {
|
|
400
410
|
on(target: string, handler: (payload: unknown, meta: EventMeta) => void): () => void;
|
|
401
411
|
emit(target: string, payload?: unknown): Promise<void>;
|
|
412
|
+
publishDurable(target: string, payload?: unknown): Promise<void>;
|
|
413
|
+
emitDurable(target: string, payload?: unknown): Promise<void>;
|
|
402
414
|
active(): string[];
|
|
403
415
|
};
|
|
404
416
|
};
|
|
@@ -407,4 +419,4 @@ declare function hasPermission(ctx: PlatformContext, permission: string): boolea
|
|
|
407
419
|
declare function hasAnyPermission(ctx: PlatformContext, permissions: string[]): boolean;
|
|
408
420
|
declare function hasAllPermissions(ctx: PlatformContext, permissions: string[]): boolean;
|
|
409
421
|
|
|
410
|
-
export { BrokerCallError, type BrokerCallOptions, type ConnectionAuthStart, type ConnectionStatus, type ConnectionStatusValue, DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type EventMeta, type InstallConfig, type OrgInviteMemberInput, type OrgInviteMemberResponse, type OrgMember, type OrgMemberRole, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, type SandboxBrokerMessage, StorageClient, type StorageUploadOptions, type StorageUploadProgress, type StorageUploadResult, type StorageUploadState, User, UserClient, apiFetch, apiUpload, broker, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, disconnectConnection, errorFromResponse, events, getBaseUrl, getConnections, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, palette, requireConnection, servicesProxy, setBaseUrl, startConnection, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
|
422
|
+
export { BrokerCallError, type BrokerCallOptions, type ConnectionAuthStart, type ConnectionStatus, type ConnectionStatusValue, CrossAppGrantError, DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type EventMeta, type InstallConfig, MissingDependencyError, type OrgInviteMemberInput, type OrgInviteMemberResponse, type OrgMember, type OrgMemberRole, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, type SandboxBrokerMessage, StorageClient, type StorageUploadOptions, type StorageUploadProgress, type StorageUploadResult, type StorageUploadState, User, UserClient, apiFetch, apiUpload, broker, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, disconnectConnection, errorFromResponse, events, getBaseUrl, getConnections, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, palette, requireConnection, servicesProxy, setBaseUrl, startConnection, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
package/dist/index.d.ts
CHANGED
|
@@ -137,6 +137,8 @@ type EventMeta = {
|
|
|
137
137
|
declare const events: {
|
|
138
138
|
on(target: string, handler: Handler): () => void;
|
|
139
139
|
emit(target: string, payload?: unknown): Promise<void>;
|
|
140
|
+
publishDurable(target: string, payload?: unknown): Promise<void>;
|
|
141
|
+
emitDurable(target: string, payload?: unknown): Promise<void>;
|
|
140
142
|
/** Diagnostic: list active subscriptions in this page. */
|
|
141
143
|
active(): string[];
|
|
142
144
|
};
|
|
@@ -165,6 +167,12 @@ declare class BrokerCallError extends Error {
|
|
|
165
167
|
readonly status?: number | undefined;
|
|
166
168
|
constructor(message: string, target: string, status?: number | undefined);
|
|
167
169
|
}
|
|
170
|
+
declare class MissingDependencyError extends BrokerCallError {
|
|
171
|
+
constructor(message: string, target: string, status?: number);
|
|
172
|
+
}
|
|
173
|
+
declare class CrossAppGrantError extends BrokerCallError {
|
|
174
|
+
constructor(message: string, target: string, status?: number);
|
|
175
|
+
}
|
|
168
176
|
type BrokerCallOptions = {
|
|
169
177
|
/** Override the caller app id sent to the broker. Inferred from the URL when omitted. */
|
|
170
178
|
callerAppId?: string;
|
|
@@ -354,6 +362,8 @@ declare function createPaletteClient(ctx?: PlatformContext): {
|
|
|
354
362
|
events: {
|
|
355
363
|
on(target: string, handler: (payload: unknown, meta: EventMeta) => void): () => void;
|
|
356
364
|
emit(target: string, payload?: unknown): Promise<void>;
|
|
365
|
+
publishDurable(target: string, payload?: unknown): Promise<void>;
|
|
366
|
+
emitDurable(target: string, payload?: unknown): Promise<void>;
|
|
357
367
|
active(): string[];
|
|
358
368
|
};
|
|
359
369
|
};
|
|
@@ -399,6 +409,8 @@ declare const palette: {
|
|
|
399
409
|
events: {
|
|
400
410
|
on(target: string, handler: (payload: unknown, meta: EventMeta) => void): () => void;
|
|
401
411
|
emit(target: string, payload?: unknown): Promise<void>;
|
|
412
|
+
publishDurable(target: string, payload?: unknown): Promise<void>;
|
|
413
|
+
emitDurable(target: string, payload?: unknown): Promise<void>;
|
|
402
414
|
active(): string[];
|
|
403
415
|
};
|
|
404
416
|
};
|
|
@@ -407,4 +419,4 @@ declare function hasPermission(ctx: PlatformContext, permission: string): boolea
|
|
|
407
419
|
declare function hasAnyPermission(ctx: PlatformContext, permissions: string[]): boolean;
|
|
408
420
|
declare function hasAllPermissions(ctx: PlatformContext, permissions: string[]): boolean;
|
|
409
421
|
|
|
410
|
-
export { BrokerCallError, type BrokerCallOptions, type ConnectionAuthStart, type ConnectionStatus, type ConnectionStatusValue, DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type EventMeta, type InstallConfig, type OrgInviteMemberInput, type OrgInviteMemberResponse, type OrgMember, type OrgMemberRole, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, type SandboxBrokerMessage, StorageClient, type StorageUploadOptions, type StorageUploadProgress, type StorageUploadResult, type StorageUploadState, User, UserClient, apiFetch, apiUpload, broker, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, disconnectConnection, errorFromResponse, events, getBaseUrl, getConnections, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, palette, requireConnection, servicesProxy, setBaseUrl, startConnection, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
|
422
|
+
export { BrokerCallError, type BrokerCallOptions, type ConnectionAuthStart, type ConnectionStatus, type ConnectionStatusValue, CrossAppGrantError, DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type EventMeta, type InstallConfig, MissingDependencyError, type OrgInviteMemberInput, type OrgInviteMemberResponse, type OrgMember, type OrgMemberRole, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, type SandboxBrokerMessage, StorageClient, type StorageUploadOptions, type StorageUploadProgress, type StorageUploadResult, type StorageUploadState, User, UserClient, apiFetch, apiUpload, broker, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, disconnectConnection, errorFromResponse, events, getBaseUrl, getConnections, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, palette, requireConnection, servicesProxy, setBaseUrl, startConnection, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
package/dist/index.js
CHANGED
|
@@ -21,8 +21,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
BrokerCallError: () => BrokerCallError,
|
|
24
|
+
CrossAppGrantError: () => CrossAppGrantError,
|
|
24
25
|
DataRoomClient: () => DataRoomClient,
|
|
25
26
|
Link: () => Link,
|
|
27
|
+
MissingDependencyError: () => MissingDependencyError,
|
|
26
28
|
OrganizationClient: () => OrganizationClient,
|
|
27
29
|
PaletteApiError: () => PaletteApiError,
|
|
28
30
|
PaletteAppRouter: () => PaletteAppRouter,
|
|
@@ -399,6 +401,28 @@ var BrokerCallError = class extends Error {
|
|
|
399
401
|
this.name = "BrokerCallError";
|
|
400
402
|
}
|
|
401
403
|
};
|
|
404
|
+
var MissingDependencyError = class extends BrokerCallError {
|
|
405
|
+
constructor(message, target, status) {
|
|
406
|
+
super(message, target, status);
|
|
407
|
+
this.name = "MissingDependencyError";
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
var CrossAppGrantError = class extends BrokerCallError {
|
|
411
|
+
constructor(message, target, status) {
|
|
412
|
+
super(message, target, status);
|
|
413
|
+
this.name = "CrossAppGrantError";
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
function brokerError(message, target, status) {
|
|
417
|
+
const lower = message.toLowerCase();
|
|
418
|
+
if (status === 424 || lower.includes("not installed") || lower.includes("provider app")) {
|
|
419
|
+
return new MissingDependencyError(message, target, status);
|
|
420
|
+
}
|
|
421
|
+
if (status === 403 && (lower.includes("grant") || lower.includes("declared"))) {
|
|
422
|
+
return new CrossAppGrantError(message, target, status);
|
|
423
|
+
}
|
|
424
|
+
return new BrokerCallError(message, target, status);
|
|
425
|
+
}
|
|
402
426
|
var CALLER_HEADER = "X-Palette-Caller-App";
|
|
403
427
|
function currentPluginId() {
|
|
404
428
|
if (typeof window === "undefined") return void 0;
|
|
@@ -409,12 +433,18 @@ async function brokerCallDirect(target, payload, options = {}) {
|
|
|
409
433
|
const callerAppId = options.callerAppId ?? currentPluginId();
|
|
410
434
|
const headers = {};
|
|
411
435
|
if (callerAppId) headers[CALLER_HEADER] = callerAppId;
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
436
|
+
let res;
|
|
437
|
+
try {
|
|
438
|
+
res = await apiFetch("/api/v1/os-broker/dispatch", {
|
|
439
|
+
method: "POST",
|
|
440
|
+
headers,
|
|
441
|
+
body: JSON.stringify({ target, payload: payload ?? {}, caller_app_id: callerAppId }),
|
|
442
|
+
signal: options.signal
|
|
443
|
+
});
|
|
444
|
+
} catch (error) {
|
|
445
|
+
const e = error;
|
|
446
|
+
throw brokerError(typeof e.detail === "string" ? e.detail : e.message, target, e.status);
|
|
447
|
+
}
|
|
418
448
|
if (!res.ok) {
|
|
419
449
|
let detail;
|
|
420
450
|
try {
|
|
@@ -422,7 +452,7 @@ async function brokerCallDirect(target, payload, options = {}) {
|
|
|
422
452
|
} catch {
|
|
423
453
|
detail = res.statusText;
|
|
424
454
|
}
|
|
425
|
-
throw
|
|
455
|
+
throw brokerError(detail ?? `broker dispatch failed: ${res.status}`, target, res.status);
|
|
426
456
|
}
|
|
427
457
|
const body = await res.json();
|
|
428
458
|
return body.result;
|
|
@@ -535,7 +565,7 @@ function streamUrl() {
|
|
|
535
565
|
const callerAppId = currentPluginId2();
|
|
536
566
|
if (callerAppId) params.set("caller_app_id", callerAppId);
|
|
537
567
|
const query = params.toString();
|
|
538
|
-
return
|
|
568
|
+
return `${getBaseUrl()}/api/v1/os-broker/events/stream${query ? `?${query}` : ""}`;
|
|
539
569
|
}
|
|
540
570
|
function ensureStream() {
|
|
541
571
|
if (activeStream || typeof window === "undefined") return;
|
|
@@ -616,6 +646,12 @@ var events = {
|
|
|
616
646
|
async emit(target, payload) {
|
|
617
647
|
await broker.emit(target, payload);
|
|
618
648
|
},
|
|
649
|
+
async publishDurable(target, payload) {
|
|
650
|
+
await broker.emit(target, payload);
|
|
651
|
+
},
|
|
652
|
+
async emitDurable(target, payload) {
|
|
653
|
+
await broker.emit(target, payload);
|
|
654
|
+
},
|
|
619
655
|
/** Diagnostic: list active subscriptions in this page. */
|
|
620
656
|
active() {
|
|
621
657
|
return Array.from(SUBSCRIBERS.keys());
|
|
@@ -1429,8 +1465,10 @@ function usePluginChat(agentId) {
|
|
|
1429
1465
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1430
1466
|
0 && (module.exports = {
|
|
1431
1467
|
BrokerCallError,
|
|
1468
|
+
CrossAppGrantError,
|
|
1432
1469
|
DataRoomClient,
|
|
1433
1470
|
Link,
|
|
1471
|
+
MissingDependencyError,
|
|
1434
1472
|
OrganizationClient,
|
|
1435
1473
|
PaletteApiError,
|
|
1436
1474
|
PaletteAppRouter,
|
package/dist/index.mjs
CHANGED
|
@@ -326,6 +326,28 @@ var BrokerCallError = class extends Error {
|
|
|
326
326
|
this.name = "BrokerCallError";
|
|
327
327
|
}
|
|
328
328
|
};
|
|
329
|
+
var MissingDependencyError = class extends BrokerCallError {
|
|
330
|
+
constructor(message, target, status) {
|
|
331
|
+
super(message, target, status);
|
|
332
|
+
this.name = "MissingDependencyError";
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
var CrossAppGrantError = class extends BrokerCallError {
|
|
336
|
+
constructor(message, target, status) {
|
|
337
|
+
super(message, target, status);
|
|
338
|
+
this.name = "CrossAppGrantError";
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
function brokerError(message, target, status) {
|
|
342
|
+
const lower = message.toLowerCase();
|
|
343
|
+
if (status === 424 || lower.includes("not installed") || lower.includes("provider app")) {
|
|
344
|
+
return new MissingDependencyError(message, target, status);
|
|
345
|
+
}
|
|
346
|
+
if (status === 403 && (lower.includes("grant") || lower.includes("declared"))) {
|
|
347
|
+
return new CrossAppGrantError(message, target, status);
|
|
348
|
+
}
|
|
349
|
+
return new BrokerCallError(message, target, status);
|
|
350
|
+
}
|
|
329
351
|
var CALLER_HEADER = "X-Palette-Caller-App";
|
|
330
352
|
function currentPluginId() {
|
|
331
353
|
if (typeof window === "undefined") return void 0;
|
|
@@ -336,12 +358,18 @@ async function brokerCallDirect(target, payload, options = {}) {
|
|
|
336
358
|
const callerAppId = options.callerAppId ?? currentPluginId();
|
|
337
359
|
const headers = {};
|
|
338
360
|
if (callerAppId) headers[CALLER_HEADER] = callerAppId;
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
361
|
+
let res;
|
|
362
|
+
try {
|
|
363
|
+
res = await apiFetch("/api/v1/os-broker/dispatch", {
|
|
364
|
+
method: "POST",
|
|
365
|
+
headers,
|
|
366
|
+
body: JSON.stringify({ target, payload: payload ?? {}, caller_app_id: callerAppId }),
|
|
367
|
+
signal: options.signal
|
|
368
|
+
});
|
|
369
|
+
} catch (error) {
|
|
370
|
+
const e = error;
|
|
371
|
+
throw brokerError(typeof e.detail === "string" ? e.detail : e.message, target, e.status);
|
|
372
|
+
}
|
|
345
373
|
if (!res.ok) {
|
|
346
374
|
let detail;
|
|
347
375
|
try {
|
|
@@ -349,7 +377,7 @@ async function brokerCallDirect(target, payload, options = {}) {
|
|
|
349
377
|
} catch {
|
|
350
378
|
detail = res.statusText;
|
|
351
379
|
}
|
|
352
|
-
throw
|
|
380
|
+
throw brokerError(detail ?? `broker dispatch failed: ${res.status}`, target, res.status);
|
|
353
381
|
}
|
|
354
382
|
const body = await res.json();
|
|
355
383
|
return body.result;
|
|
@@ -462,7 +490,7 @@ function streamUrl() {
|
|
|
462
490
|
const callerAppId = currentPluginId2();
|
|
463
491
|
if (callerAppId) params.set("caller_app_id", callerAppId);
|
|
464
492
|
const query = params.toString();
|
|
465
|
-
return
|
|
493
|
+
return `${getBaseUrl()}/api/v1/os-broker/events/stream${query ? `?${query}` : ""}`;
|
|
466
494
|
}
|
|
467
495
|
function ensureStream() {
|
|
468
496
|
if (activeStream || typeof window === "undefined") return;
|
|
@@ -543,6 +571,12 @@ var events = {
|
|
|
543
571
|
async emit(target, payload) {
|
|
544
572
|
await broker.emit(target, payload);
|
|
545
573
|
},
|
|
574
|
+
async publishDurable(target, payload) {
|
|
575
|
+
await broker.emit(target, payload);
|
|
576
|
+
},
|
|
577
|
+
async emitDurable(target, payload) {
|
|
578
|
+
await broker.emit(target, payload);
|
|
579
|
+
},
|
|
546
580
|
/** Diagnostic: list active subscriptions in this page. */
|
|
547
581
|
active() {
|
|
548
582
|
return Array.from(SUBSCRIBERS.keys());
|
|
@@ -1364,8 +1398,10 @@ function usePluginChat(agentId) {
|
|
|
1364
1398
|
}
|
|
1365
1399
|
export {
|
|
1366
1400
|
BrokerCallError,
|
|
1401
|
+
CrossAppGrantError,
|
|
1367
1402
|
DataRoomClient,
|
|
1368
1403
|
Link,
|
|
1404
|
+
MissingDependencyError,
|
|
1369
1405
|
OrganizationClient,
|
|
1370
1406
|
PaletteApiError,
|
|
1371
1407
|
PaletteAppRouter,
|