@fias/arche-sdk 2.27.0 → 2.29.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.
- package/dist/bridge.d.ts +11 -1
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +20 -0
- package/dist/bridge.js.map +1 -1
- package/dist/bridge.test.js +18 -0
- package/dist/bridge.test.js.map +1 -1
- package/dist/entity-ops.d.ts +17 -1
- package/dist/entity-ops.d.ts.map +1 -1
- package/dist/entity-ops.js +74 -6
- package/dist/entity-ops.js.map +1 -1
- package/dist/generated/permissions.d.ts +1 -1
- package/dist/generated/permissions.d.ts.map +1 -1
- package/dist/generated/permissions.js +7 -1
- package/dist/generated/permissions.js.map +1 -1
- package/dist/hooks.d.ts +193 -4
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +601 -5
- package/dist/hooks.js.map +1 -1
- package/dist/hooks.test.js +492 -0
- package/dist/hooks.test.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +609 -10
- package/dist/limits.d.ts +72 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/limits.js +75 -0
- package/dist/limits.js.map +1 -0
- package/dist/types.d.ts +540 -12
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/templates/default/AGENTS.md +252 -42
- package/templates/default/CLAUDE.md +252 -42
package/dist/index.mjs
CHANGED
|
@@ -273,6 +273,8 @@ var FiasBridge = class {
|
|
|
273
273
|
this.vendoredAssets = null;
|
|
274
274
|
this.textModels = null;
|
|
275
275
|
this.textModelListeners = /* @__PURE__ */ new Set();
|
|
276
|
+
this.holder = null;
|
|
277
|
+
this.holderListeners = /* @__PURE__ */ new Set();
|
|
276
278
|
this.currentPath = "";
|
|
277
279
|
this.hostOrigin = "";
|
|
278
280
|
this.themeListeners = /* @__PURE__ */ new Set();
|
|
@@ -327,12 +329,16 @@ var FiasBridge = class {
|
|
|
327
329
|
this.theme = mergeThemeWithDefaults(initMsg.payload.theme);
|
|
328
330
|
this.vendoredAssets = initMsg.payload.vendoredAssets ?? null;
|
|
329
331
|
this.textModels = initMsg.payload.textModels ?? null;
|
|
332
|
+
this.holder = initMsg.payload.holder ?? null;
|
|
330
333
|
this.currentPath = initMsg.payload.currentPath;
|
|
331
334
|
this.initialized = true;
|
|
332
335
|
this.initResolve?.();
|
|
333
336
|
for (const listener of this.navigationListeners) {
|
|
334
337
|
listener(this.currentPath);
|
|
335
338
|
}
|
|
339
|
+
for (const listener of this.holderListeners) {
|
|
340
|
+
listener(this.holder);
|
|
341
|
+
}
|
|
336
342
|
return;
|
|
337
343
|
}
|
|
338
344
|
if (this.hostOrigin && event.origin !== this.hostOrigin) return;
|
|
@@ -593,6 +599,19 @@ var FiasBridge = class {
|
|
|
593
599
|
getTextModels() {
|
|
594
600
|
return this.textModels;
|
|
595
601
|
}
|
|
602
|
+
/**
|
|
603
|
+
* The workspace the plugin was opened in, or null before init, without
|
|
604
|
+
* `user:profile:read` / `data:workspace`, or from an older host. Fixed for
|
|
605
|
+
* the life of the plugin. See `useFiasHolder`.
|
|
606
|
+
*/
|
|
607
|
+
getHolder() {
|
|
608
|
+
return this.holder;
|
|
609
|
+
}
|
|
610
|
+
/** Called once, when init delivers the holder. */
|
|
611
|
+
onHolderReady(listener) {
|
|
612
|
+
this.holderListeners.add(listener);
|
|
613
|
+
return () => this.holderListeners.delete(listener);
|
|
614
|
+
}
|
|
596
615
|
onTextModelsUpdate(listener) {
|
|
597
616
|
this.textModelListeners.add(listener);
|
|
598
617
|
return () => this.textModelListeners.delete(listener);
|
|
@@ -725,6 +744,7 @@ var FiasBridge = class {
|
|
|
725
744
|
this.pendingRequests.clear();
|
|
726
745
|
this.themeListeners.clear();
|
|
727
746
|
this.textModelListeners.clear();
|
|
747
|
+
this.holderListeners.clear();
|
|
728
748
|
this.navigationListeners.clear();
|
|
729
749
|
this.stepNavigationListeners.clear();
|
|
730
750
|
this.previewStateProviders.clear();
|
|
@@ -1071,14 +1091,40 @@ var VAULT_ARCHE_DOCUMENTS_ENTITY_ID = "ent_intg_vault_arche_docs_000000";
|
|
|
1071
1091
|
var COMMUNITY_ASSETS_ENTITY_ID = "ent_intg_community_assets_000000";
|
|
1072
1092
|
var DOCUMENT_SIGN_ENTITY_ID = "ent_intg_document_sign_000000000";
|
|
1073
1093
|
var COMPANY_EMAIL_SEND_ENTITY_ID = "ent_intg_company_email_send_0000";
|
|
1094
|
+
var CONNECTIONS_ENTITY_ID = "ent_intg_connections_00000000000";
|
|
1095
|
+
var CONNECTIONS_CONNECT_ENTITY_ID = "ent_intg_connections_connect_000";
|
|
1096
|
+
var X_ENTITY_ID = "ent_intg_twitter_000000000000000";
|
|
1097
|
+
var LINKEDIN_ENTITY_ID = "ent_intg_linkedin_00000000000000";
|
|
1098
|
+
var ACTION_CONFIRMATION_ENTITY_ID = "ent_intg_action_confirmation_000";
|
|
1099
|
+
var SCHEDULED_INVOCATIONS_ENTITY_ID = "ent_intg_scheduled_invocations00";
|
|
1100
|
+
var CONFIRM_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
1101
|
+
var APPROVED_CALL_TIMEOUT_MS = 2 * 60 * 1e3;
|
|
1074
1102
|
var COMMUNITY_ASSET_MAX_URL_BATCH = 50;
|
|
1075
1103
|
var COMMUNITY_ASSET_MAX_PUBLISH_BATCH = 20;
|
|
1076
1104
|
async function invokeEntityOp(bridge, entityId, op, args = {}) {
|
|
1077
|
-
const
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1105
|
+
const payload = { op, ...args };
|
|
1106
|
+
const res = await bridge.request("entity_invoke", { entityId, payload });
|
|
1107
|
+
if (!res.confirmationRequired) return res.output;
|
|
1108
|
+
return confirmAndResend(bridge, entityId, payload, res.confirmationRequired.pendingActionId);
|
|
1109
|
+
}
|
|
1110
|
+
async function confirmAndResend(bridge, entityId, payload, pendingActionId) {
|
|
1111
|
+
const answer = await bridge.request(
|
|
1112
|
+
"client_entity_invoke",
|
|
1113
|
+
{ entityId: ACTION_CONFIRMATION_ENTITY_ID, input: { pendingActionId } },
|
|
1114
|
+
CONFIRM_TIMEOUT_MS
|
|
1115
|
+
);
|
|
1116
|
+
if (answer && "error" in answer) {
|
|
1117
|
+
throw new FiasBridgeError(answer.error.message, answer.error.code);
|
|
1118
|
+
}
|
|
1119
|
+
if (!answer?.approved) {
|
|
1120
|
+
throw new FiasBridgeError("The person declined this action", "USER_DECLINED");
|
|
1121
|
+
}
|
|
1122
|
+
const done = await bridge.request(
|
|
1123
|
+
"entity_invoke",
|
|
1124
|
+
{ entityId, payload, pendingActionId },
|
|
1125
|
+
APPROVED_CALL_TIMEOUT_MS
|
|
1126
|
+
);
|
|
1127
|
+
return done.output;
|
|
1082
1128
|
}
|
|
1083
1129
|
async function invokeStoreOp(bridge, op, args = {}) {
|
|
1084
1130
|
return bridge.request("entity_invoke", {
|
|
@@ -1259,6 +1305,15 @@ function useTextModels() {
|
|
|
1259
1305
|
}, [bridge]);
|
|
1260
1306
|
return models;
|
|
1261
1307
|
}
|
|
1308
|
+
function useFiasHolder() {
|
|
1309
|
+
const bridge = useBridge();
|
|
1310
|
+
const [holder, setHolder] = useState2(bridge.getHolder());
|
|
1311
|
+
useEffect2(() => {
|
|
1312
|
+
setHolder(bridge.getHolder());
|
|
1313
|
+
return bridge.onHolderReady(setHolder);
|
|
1314
|
+
}, [bridge]);
|
|
1315
|
+
return holder;
|
|
1316
|
+
}
|
|
1262
1317
|
var IMAGE_GENERATE_TIMEOUT_MS = 32e4;
|
|
1263
1318
|
function useImageGeneration() {
|
|
1264
1319
|
const bridge = useBridge();
|
|
@@ -1763,6 +1818,15 @@ function useFiasWorkspaces() {
|
|
|
1763
1818
|
},
|
|
1764
1819
|
[bridge]
|
|
1765
1820
|
);
|
|
1821
|
+
const openForWorkspace = useCallback(async () => {
|
|
1822
|
+
const res = await invokeEntityOp(
|
|
1823
|
+
bridge,
|
|
1824
|
+
PLUGIN_WORKSPACES_ENTITY_ID,
|
|
1825
|
+
"create",
|
|
1826
|
+
{ forActingHolder: true }
|
|
1827
|
+
);
|
|
1828
|
+
return res.workspace;
|
|
1829
|
+
}, [bridge]);
|
|
1766
1830
|
const list = useCallback(async () => {
|
|
1767
1831
|
const res = await invokeEntityOp(
|
|
1768
1832
|
bridge,
|
|
@@ -1840,8 +1904,28 @@ function useFiasWorkspaces() {
|
|
|
1840
1904
|
[bridge]
|
|
1841
1905
|
);
|
|
1842
1906
|
return useMemo2(
|
|
1843
|
-
() => ({
|
|
1844
|
-
|
|
1907
|
+
() => ({
|
|
1908
|
+
create,
|
|
1909
|
+
openForWorkspace,
|
|
1910
|
+
list,
|
|
1911
|
+
get,
|
|
1912
|
+
archive,
|
|
1913
|
+
listMembers,
|
|
1914
|
+
addMember,
|
|
1915
|
+
updateMember,
|
|
1916
|
+
removeMember
|
|
1917
|
+
}),
|
|
1918
|
+
[
|
|
1919
|
+
create,
|
|
1920
|
+
openForWorkspace,
|
|
1921
|
+
list,
|
|
1922
|
+
get,
|
|
1923
|
+
archive,
|
|
1924
|
+
listMembers,
|
|
1925
|
+
addMember,
|
|
1926
|
+
updateMember,
|
|
1927
|
+
removeMember
|
|
1928
|
+
]
|
|
1845
1929
|
);
|
|
1846
1930
|
}
|
|
1847
1931
|
function useFiasStore() {
|
|
@@ -2240,7 +2324,8 @@ function useArcheAssets() {
|
|
|
2240
2324
|
return bridge.request("arche_assets_list", {
|
|
2241
2325
|
cursor: options?.cursor,
|
|
2242
2326
|
limit: options?.limit,
|
|
2243
|
-
tags: options?.tags
|
|
2327
|
+
tags: options?.tags,
|
|
2328
|
+
kinds: options?.kinds
|
|
2244
2329
|
});
|
|
2245
2330
|
},
|
|
2246
2331
|
[bridge]
|
|
@@ -2249,7 +2334,8 @@ function useArcheAssets() {
|
|
|
2249
2334
|
async (options) => {
|
|
2250
2335
|
return bridge.request("arche_assets_index", {
|
|
2251
2336
|
tags: options?.tags,
|
|
2252
|
-
groupBy: options?.groupBy
|
|
2337
|
+
groupBy: options?.groupBy,
|
|
2338
|
+
kinds: options?.kinds
|
|
2253
2339
|
});
|
|
2254
2340
|
},
|
|
2255
2341
|
[bridge]
|
|
@@ -2262,7 +2348,327 @@ function useArcheAssets() {
|
|
|
2262
2348
|
);
|
|
2263
2349
|
return useMemo2(() => ({ list, index, getUrl }), [list, index, getUrl]);
|
|
2264
2350
|
}
|
|
2351
|
+
function useArcheAssetBytes() {
|
|
2352
|
+
const bridge = useBridge();
|
|
2353
|
+
const getBytes = useCallback(
|
|
2354
|
+
async (asset) => {
|
|
2355
|
+
let ref;
|
|
2356
|
+
if (typeof asset === "string") {
|
|
2357
|
+
try {
|
|
2358
|
+
ref = await bridge.request("arche_assets_get_url", { assetId: asset });
|
|
2359
|
+
} catch (err) {
|
|
2360
|
+
throw toArcheAssetError(err);
|
|
2361
|
+
}
|
|
2362
|
+
} else {
|
|
2363
|
+
ref = asset;
|
|
2364
|
+
}
|
|
2365
|
+
return enqueueAssetByteRead(bridge, ref);
|
|
2366
|
+
},
|
|
2367
|
+
[bridge]
|
|
2368
|
+
);
|
|
2369
|
+
const getMany = useCallback(
|
|
2370
|
+
async (assets) => {
|
|
2371
|
+
const read = await readAssetBytesBatch(bridge, assets);
|
|
2372
|
+
const out = {};
|
|
2373
|
+
for (const [assetId, result] of read) out[assetId] = result;
|
|
2374
|
+
return out;
|
|
2375
|
+
},
|
|
2376
|
+
[bridge]
|
|
2377
|
+
);
|
|
2378
|
+
return useMemo2(() => ({ getBytes, getMany }), [getBytes, getMany]);
|
|
2379
|
+
}
|
|
2380
|
+
var ARCHE_ASSET_BYTES_ENTITY_ID = "ent_intg_arche_asset_bytes_00000";
|
|
2381
|
+
var ArcheAssetError = class extends Error {
|
|
2382
|
+
constructor(message, code) {
|
|
2383
|
+
super(message);
|
|
2384
|
+
this.code = code;
|
|
2385
|
+
this.name = "ArcheAssetError";
|
|
2386
|
+
}
|
|
2387
|
+
};
|
|
2388
|
+
var ASSET_URL_MIN_REMAINING_SECONDS = 30;
|
|
2389
|
+
var ASSET_BYTES_MAX_URLS_PER_CALL = 100;
|
|
2390
|
+
var ASSET_URL_MAX_REFRESHES_PER_BATCH = 10;
|
|
2391
|
+
async function readSignedUrls(bridge, signedUrls) {
|
|
2392
|
+
let response;
|
|
2393
|
+
try {
|
|
2394
|
+
response = await bridge.request(
|
|
2395
|
+
"client_entity_invoke",
|
|
2396
|
+
{ entityId: ARCHE_ASSET_BYTES_ENTITY_ID, input: { verb: "read", signedUrls } },
|
|
2397
|
+
CLIENT_ENTITY_INVOKE_TIMEOUT_MS
|
|
2398
|
+
);
|
|
2399
|
+
} catch (err) {
|
|
2400
|
+
throw toArcheAssetError(err);
|
|
2401
|
+
}
|
|
2402
|
+
if ("error" in response) {
|
|
2403
|
+
throw new ArcheAssetError(response.error.message, response.error.code);
|
|
2404
|
+
}
|
|
2405
|
+
return response.results;
|
|
2406
|
+
}
|
|
2407
|
+
function fileError(result) {
|
|
2408
|
+
return result && "error" in result ? new ArcheAssetError(result.error.message, result.error.code) : new ArcheAssetError("the asset could not be read", "ASSET_UNAVAILABLE");
|
|
2409
|
+
}
|
|
2410
|
+
async function readInBatches(bridge, items, out) {
|
|
2411
|
+
const lapsed = [];
|
|
2412
|
+
let queue = items;
|
|
2413
|
+
while (queue.length > 0) {
|
|
2414
|
+
const overBudget = [];
|
|
2415
|
+
let readCount = 0;
|
|
2416
|
+
for (let at = 0; at < queue.length; at += ASSET_BYTES_MAX_URLS_PER_CALL) {
|
|
2417
|
+
const chunk = queue.slice(at, at + ASSET_BYTES_MAX_URLS_PER_CALL);
|
|
2418
|
+
const results = await readSignedUrls(
|
|
2419
|
+
bridge,
|
|
2420
|
+
chunk.map((item) => item.signedUrl)
|
|
2421
|
+
);
|
|
2422
|
+
chunk.forEach((item, i) => {
|
|
2423
|
+
const result = results[i];
|
|
2424
|
+
if (result && !("error" in result)) {
|
|
2425
|
+
out.set(item.assetId, result);
|
|
2426
|
+
readCount += 1;
|
|
2427
|
+
} else if (result?.error.code === "ASSET_URL_EXPIRED" && !item.refreshed) {
|
|
2428
|
+
lapsed.push(item);
|
|
2429
|
+
} else if (result?.error.code === "ASSET_TOO_LARGE" && chunk.length > 1) {
|
|
2430
|
+
overBudget.push(item);
|
|
2431
|
+
} else {
|
|
2432
|
+
out.set(item.assetId, fileError(result));
|
|
2433
|
+
}
|
|
2434
|
+
});
|
|
2435
|
+
}
|
|
2436
|
+
if (readCount === 0) {
|
|
2437
|
+
for (const item of overBudget) {
|
|
2438
|
+
out.set(
|
|
2439
|
+
item.assetId,
|
|
2440
|
+
new ArcheAssetError("the asset is too large to read", "ASSET_TOO_LARGE")
|
|
2441
|
+
);
|
|
2442
|
+
}
|
|
2443
|
+
break;
|
|
2444
|
+
}
|
|
2445
|
+
queue = overBudget;
|
|
2446
|
+
}
|
|
2447
|
+
return lapsed;
|
|
2448
|
+
}
|
|
2449
|
+
async function readAssetBytesBatch(bridge, refs) {
|
|
2450
|
+
const out = /* @__PURE__ */ new Map();
|
|
2451
|
+
let refreshesLeft = ASSET_URL_MAX_REFRESHES_PER_BATCH;
|
|
2452
|
+
const refresh = async (assetIds) => {
|
|
2453
|
+
const fresh = [];
|
|
2454
|
+
for (const assetId of assetIds) {
|
|
2455
|
+
if (refreshesLeft <= 0) {
|
|
2456
|
+
out.set(
|
|
2457
|
+
assetId,
|
|
2458
|
+
new ArcheAssetError(
|
|
2459
|
+
"the asset URL has expired; list the assets again for fresh URLs",
|
|
2460
|
+
"ASSET_URL_EXPIRED"
|
|
2461
|
+
)
|
|
2462
|
+
);
|
|
2463
|
+
continue;
|
|
2464
|
+
}
|
|
2465
|
+
refreshesLeft -= 1;
|
|
2466
|
+
try {
|
|
2467
|
+
const asset = await bridge.request("arche_assets_get_url", { assetId });
|
|
2468
|
+
fresh.push({ assetId, signedUrl: asset.signedUrl, refreshed: true });
|
|
2469
|
+
} catch (err) {
|
|
2470
|
+
out.set(assetId, toArcheAssetError(err));
|
|
2471
|
+
}
|
|
2472
|
+
}
|
|
2473
|
+
return fresh;
|
|
2474
|
+
};
|
|
2475
|
+
const unique = /* @__PURE__ */ new Map();
|
|
2476
|
+
for (const ref of refs) if (!unique.has(ref.assetId)) unique.set(ref.assetId, ref);
|
|
2477
|
+
const nowSeconds = Date.now() / 1e3;
|
|
2478
|
+
const reusable = [];
|
|
2479
|
+
const stale = [];
|
|
2480
|
+
for (const ref of unique.values()) {
|
|
2481
|
+
if (ref.expiresAt - nowSeconds > ASSET_URL_MIN_REMAINING_SECONDS) {
|
|
2482
|
+
reusable.push({ assetId: ref.assetId, signedUrl: ref.signedUrl, refreshed: false });
|
|
2483
|
+
} else {
|
|
2484
|
+
stale.push(ref.assetId);
|
|
2485
|
+
}
|
|
2486
|
+
}
|
|
2487
|
+
const pending = [...reusable, ...await refresh(stale)];
|
|
2488
|
+
const lapsed = await readInBatches(bridge, pending, out);
|
|
2489
|
+
if (lapsed.length > 0) {
|
|
2490
|
+
await readInBatches(bridge, await refresh(lapsed.map((item) => item.assetId)), out);
|
|
2491
|
+
}
|
|
2492
|
+
return out;
|
|
2493
|
+
}
|
|
2494
|
+
var pendingAssetByteReads = /* @__PURE__ */ new WeakMap();
|
|
2495
|
+
function enqueueAssetByteRead(bridge, ref) {
|
|
2496
|
+
let batch = pendingAssetByteReads.get(bridge);
|
|
2497
|
+
if (!batch) {
|
|
2498
|
+
const created = { refs: [], waiters: [] };
|
|
2499
|
+
pendingAssetByteReads.set(bridge, created);
|
|
2500
|
+
batch = created;
|
|
2501
|
+
void Promise.resolve().then(() => flushAssetByteReads(bridge, created));
|
|
2502
|
+
}
|
|
2503
|
+
batch.refs.push(ref);
|
|
2504
|
+
const queued = batch;
|
|
2505
|
+
return new Promise((resolve, reject) => {
|
|
2506
|
+
queued.waiters.push({ assetId: ref.assetId, resolve, reject });
|
|
2507
|
+
});
|
|
2508
|
+
}
|
|
2509
|
+
async function flushAssetByteReads(bridge, batch) {
|
|
2510
|
+
pendingAssetByteReads.delete(bridge);
|
|
2511
|
+
let results;
|
|
2512
|
+
try {
|
|
2513
|
+
results = await readAssetBytesBatch(bridge, batch.refs);
|
|
2514
|
+
} catch (err) {
|
|
2515
|
+
const failure = toArcheAssetError(err);
|
|
2516
|
+
for (const waiter of batch.waiters) waiter.reject(failure);
|
|
2517
|
+
return;
|
|
2518
|
+
}
|
|
2519
|
+
const handedOut = /* @__PURE__ */ new Set();
|
|
2520
|
+
for (const waiter of batch.waiters) {
|
|
2521
|
+
const result = results.get(waiter.assetId) ?? new ArcheAssetError("the asset could not be read", "ASSET_UNAVAILABLE");
|
|
2522
|
+
if (result instanceof ArcheAssetError) {
|
|
2523
|
+
waiter.reject(result);
|
|
2524
|
+
} else if (handedOut.has(waiter.assetId)) {
|
|
2525
|
+
waiter.resolve({ ...result, bytes: result.bytes.slice(0) });
|
|
2526
|
+
} else {
|
|
2527
|
+
handedOut.add(waiter.assetId);
|
|
2528
|
+
waiter.resolve(result);
|
|
2529
|
+
}
|
|
2530
|
+
}
|
|
2531
|
+
}
|
|
2532
|
+
function toArcheAssetError(err) {
|
|
2533
|
+
if (err instanceof ArcheAssetError) return err;
|
|
2534
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
2535
|
+
const code = err?.code;
|
|
2536
|
+
if (/permission denied/i.test(message)) {
|
|
2537
|
+
return new ArcheAssetError(
|
|
2538
|
+
`${message} \u2014 useArcheAssetBytes needs both "assets:read" and "entities:client_invoke" in fias-plugin.json`,
|
|
2539
|
+
"PERMISSION_DENIED"
|
|
2540
|
+
);
|
|
2541
|
+
}
|
|
2542
|
+
if (code === "RATE_LIMITED" || code === "RATE_LIMIT" || /rate limit/i.test(message)) {
|
|
2543
|
+
return new ArcheAssetError(message, "RATE_LIMIT");
|
|
2544
|
+
}
|
|
2545
|
+
if (/rapid-fire loop|runaway loop/i.test(message)) {
|
|
2546
|
+
return new ArcheAssetError(
|
|
2547
|
+
`${message} Load many assets with useArcheAssetBytes().getMany(entries) \u2014 one call per 100.`,
|
|
2548
|
+
"RATE_LIMIT"
|
|
2549
|
+
);
|
|
2550
|
+
}
|
|
2551
|
+
return new ArcheAssetError(message, "ASSET_UNAVAILABLE");
|
|
2552
|
+
}
|
|
2265
2553
|
var PLUGIN_CONTENT_ENTITY_ID = "ent_intg_plugin_content_00000000";
|
|
2554
|
+
var PLUGIN_LOCAL_STORE_ENTITY_ID = "ent_intg_plugin_local_store_0000";
|
|
2555
|
+
var FiasLocalStoreError = class extends Error {
|
|
2556
|
+
constructor(message, code) {
|
|
2557
|
+
super(message);
|
|
2558
|
+
this.code = code;
|
|
2559
|
+
this.name = "FiasLocalStoreError";
|
|
2560
|
+
}
|
|
2561
|
+
};
|
|
2562
|
+
function toLocalStoreError(err) {
|
|
2563
|
+
if (err instanceof FiasLocalStoreError) return err;
|
|
2564
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
2565
|
+
const raw = err?.code;
|
|
2566
|
+
const code = raw === "PERMISSION_DENIED" || /permission denied/i.test(message) ? "PERMISSION_DENIED" : raw === "RATE_LIMIT" || raw === "RATE_LIMITED" || /rate limit/i.test(message) ? "RATE_LIMIT" : "LOCAL_STORE_UNAVAILABLE";
|
|
2567
|
+
return new FiasLocalStoreError(message, code);
|
|
2568
|
+
}
|
|
2569
|
+
function useLocalStore() {
|
|
2570
|
+
const bridge = useBridge();
|
|
2571
|
+
const call = useCallback(
|
|
2572
|
+
async (input) => {
|
|
2573
|
+
let response;
|
|
2574
|
+
try {
|
|
2575
|
+
response = await bridge.request(
|
|
2576
|
+
"client_entity_invoke",
|
|
2577
|
+
{ entityId: PLUGIN_LOCAL_STORE_ENTITY_ID, input },
|
|
2578
|
+
CLIENT_ENTITY_INVOKE_TIMEOUT_MS
|
|
2579
|
+
);
|
|
2580
|
+
} catch (err) {
|
|
2581
|
+
throw toLocalStoreError(err);
|
|
2582
|
+
}
|
|
2583
|
+
if (response?.error) {
|
|
2584
|
+
throw new FiasLocalStoreError(response.error.message, response.error.code);
|
|
2585
|
+
}
|
|
2586
|
+
return response ?? {};
|
|
2587
|
+
},
|
|
2588
|
+
[bridge]
|
|
2589
|
+
);
|
|
2590
|
+
const get = useCallback(
|
|
2591
|
+
async (key) => (await call({ verb: "get", key })).entry ?? null,
|
|
2592
|
+
[call]
|
|
2593
|
+
);
|
|
2594
|
+
const getText = useCallback(
|
|
2595
|
+
async (key) => {
|
|
2596
|
+
const entry = await get(key);
|
|
2597
|
+
if (!entry) return null;
|
|
2598
|
+
if (typeof entry.value !== "string") {
|
|
2599
|
+
throw new FiasLocalStoreError(`"${key}" does not hold text`, "LOCAL_STORE_WRONG_KIND");
|
|
2600
|
+
}
|
|
2601
|
+
return entry.value;
|
|
2602
|
+
},
|
|
2603
|
+
[get]
|
|
2604
|
+
);
|
|
2605
|
+
const getBytes = useCallback(
|
|
2606
|
+
async (key) => {
|
|
2607
|
+
const entry = await get(key);
|
|
2608
|
+
if (!entry) return null;
|
|
2609
|
+
if (!(entry.value instanceof ArrayBuffer)) {
|
|
2610
|
+
throw new FiasLocalStoreError(`"${key}" does not hold bytes`, "LOCAL_STORE_WRONG_KIND");
|
|
2611
|
+
}
|
|
2612
|
+
return entry.value;
|
|
2613
|
+
},
|
|
2614
|
+
[get]
|
|
2615
|
+
);
|
|
2616
|
+
const getJson = useCallback(
|
|
2617
|
+
async (key) => {
|
|
2618
|
+
const entry = await get(key);
|
|
2619
|
+
if (!entry) return null;
|
|
2620
|
+
if (entry.value instanceof ArrayBuffer) {
|
|
2621
|
+
throw new FiasLocalStoreError(`"${key}" holds bytes, not JSON`, "LOCAL_STORE_WRONG_KIND");
|
|
2622
|
+
}
|
|
2623
|
+
if (typeof entry.value === "string") {
|
|
2624
|
+
try {
|
|
2625
|
+
return JSON.parse(entry.value);
|
|
2626
|
+
} catch {
|
|
2627
|
+
throw new FiasLocalStoreError(
|
|
2628
|
+
`"${key}" holds text that is not JSON`,
|
|
2629
|
+
"LOCAL_STORE_WRONG_KIND"
|
|
2630
|
+
);
|
|
2631
|
+
}
|
|
2632
|
+
}
|
|
2633
|
+
return entry.value;
|
|
2634
|
+
},
|
|
2635
|
+
[get]
|
|
2636
|
+
);
|
|
2637
|
+
const getMany = useCallback(
|
|
2638
|
+
async (keys) => (await call({ verb: "get_many", keys })).entries ?? [],
|
|
2639
|
+
[call]
|
|
2640
|
+
);
|
|
2641
|
+
const put = useCallback(
|
|
2642
|
+
async (key, value) => ({
|
|
2643
|
+
sizeBytes: (await call({ verb: "put", key, value })).sizeBytes ?? 0
|
|
2644
|
+
}),
|
|
2645
|
+
[call]
|
|
2646
|
+
);
|
|
2647
|
+
const del = useCallback(
|
|
2648
|
+
async (key) => {
|
|
2649
|
+
await call({ verb: "delete", key });
|
|
2650
|
+
},
|
|
2651
|
+
[call]
|
|
2652
|
+
);
|
|
2653
|
+
const list = useCallback(
|
|
2654
|
+
async (prefix) => (await call({ verb: "list", ...prefix !== void 0 ? { prefix } : {} })).entries ?? [],
|
|
2655
|
+
[call]
|
|
2656
|
+
);
|
|
2657
|
+
const clear = useCallback(
|
|
2658
|
+
async () => ({
|
|
2659
|
+
deleted: (await call({ verb: "clear" })).deleted ?? 0
|
|
2660
|
+
}),
|
|
2661
|
+
[call]
|
|
2662
|
+
);
|
|
2663
|
+
const estimate = useCallback(async () => {
|
|
2664
|
+
const res = await call({ verb: "estimate" });
|
|
2665
|
+
return { usedBytes: res.usedBytes ?? 0, budgetBytes: res.budgetBytes ?? 0 };
|
|
2666
|
+
}, [call]);
|
|
2667
|
+
return useMemo2(
|
|
2668
|
+
() => ({ get, getMany, getText, getBytes, getJson, put, delete: del, list, clear, estimate }),
|
|
2669
|
+
[get, getMany, getText, getBytes, getJson, put, del, list, clear, estimate]
|
|
2670
|
+
);
|
|
2671
|
+
}
|
|
2266
2672
|
var FiasContentError = class extends Error {
|
|
2267
2673
|
constructor(message, code, path) {
|
|
2268
2674
|
super(message);
|
|
@@ -2662,6 +3068,117 @@ async function fetchCommunityAssetUrls(bridge, assetIds) {
|
|
|
2662
3068
|
}
|
|
2663
3069
|
return hits;
|
|
2664
3070
|
}
|
|
3071
|
+
var CONNECT_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
3072
|
+
function useFiasConnections() {
|
|
3073
|
+
const bridge = useBridge();
|
|
3074
|
+
const list = useCallback(async () => {
|
|
3075
|
+
const res = await invokeEntityOp(
|
|
3076
|
+
bridge,
|
|
3077
|
+
CONNECTIONS_ENTITY_ID,
|
|
3078
|
+
"list"
|
|
3079
|
+
);
|
|
3080
|
+
return res.connections;
|
|
3081
|
+
}, [bridge]);
|
|
3082
|
+
const connect = useCallback(
|
|
3083
|
+
async (provider) => {
|
|
3084
|
+
const result = await bridge.request(
|
|
3085
|
+
"client_entity_invoke",
|
|
3086
|
+
{ entityId: CONNECTIONS_CONNECT_ENTITY_ID, input: { provider } },
|
|
3087
|
+
CONNECT_TIMEOUT_MS
|
|
3088
|
+
);
|
|
3089
|
+
if (result && "error" in result) {
|
|
3090
|
+
throw new FiasBridgeError(result.error.message, result.error.code);
|
|
3091
|
+
}
|
|
3092
|
+
return result;
|
|
3093
|
+
},
|
|
3094
|
+
[bridge]
|
|
3095
|
+
);
|
|
3096
|
+
const release = useCallback(
|
|
3097
|
+
async (connectionId) => {
|
|
3098
|
+
await invokeEntityOp(bridge, CONNECTIONS_ENTITY_ID, "release", { connectionId });
|
|
3099
|
+
},
|
|
3100
|
+
[bridge]
|
|
3101
|
+
);
|
|
3102
|
+
return useMemo2(() => ({ list, connect, release }), [list, connect, release]);
|
|
3103
|
+
}
|
|
3104
|
+
function useFiasX() {
|
|
3105
|
+
const bridge = useBridge();
|
|
3106
|
+
return useMemo2(
|
|
3107
|
+
() => ({
|
|
3108
|
+
publishPost: (params) => invokeEntityOp(bridge, X_ENTITY_ID, "publish_post", { ...params }),
|
|
3109
|
+
searchUsers: async (connectionId, query, options) => (await invokeEntityOp(bridge, X_ENTITY_ID, "search_users", {
|
|
3110
|
+
connectionId,
|
|
3111
|
+
query,
|
|
3112
|
+
...options
|
|
3113
|
+
})).users,
|
|
3114
|
+
getUserPosts: async (connectionId, options) => (await invokeEntityOp(bridge, X_ENTITY_ID, "get_user_posts", {
|
|
3115
|
+
connectionId,
|
|
3116
|
+
...options
|
|
3117
|
+
})).posts,
|
|
3118
|
+
getPostMetrics: async (connectionId, postIds) => (await invokeEntityOp(
|
|
3119
|
+
bridge,
|
|
3120
|
+
X_ENTITY_ID,
|
|
3121
|
+
"get_post_metrics",
|
|
3122
|
+
{ connectionId, postIds }
|
|
3123
|
+
)).metrics,
|
|
3124
|
+
getAccountStats: (connectionId) => invokeEntityOp(bridge, X_ENTITY_ID, "get_account_stats", {
|
|
3125
|
+
connectionId
|
|
3126
|
+
})
|
|
3127
|
+
}),
|
|
3128
|
+
[bridge]
|
|
3129
|
+
);
|
|
3130
|
+
}
|
|
3131
|
+
function useFiasSchedules() {
|
|
3132
|
+
const bridge = useBridge();
|
|
3133
|
+
return useMemo2(
|
|
3134
|
+
() => ({
|
|
3135
|
+
schedule: (params) => invokeEntityOp(
|
|
3136
|
+
bridge,
|
|
3137
|
+
SCHEDULED_INVOCATIONS_ENTITY_ID,
|
|
3138
|
+
"schedule",
|
|
3139
|
+
{
|
|
3140
|
+
entityId: params.entityId,
|
|
3141
|
+
verb: params.verb,
|
|
3142
|
+
payload: params.payload,
|
|
3143
|
+
fireAt: params.fireAt instanceof Date ? params.fireAt.toISOString() : params.fireAt
|
|
3144
|
+
}
|
|
3145
|
+
),
|
|
3146
|
+
list: async (options) => (await invokeEntityOp(
|
|
3147
|
+
bridge,
|
|
3148
|
+
SCHEDULED_INVOCATIONS_ENTITY_ID,
|
|
3149
|
+
"list",
|
|
3150
|
+
{
|
|
3151
|
+
...options?.limit !== void 0 ? { limit: options.limit } : {},
|
|
3152
|
+
...options?.scheduleIds ? { scheduleIds: options.scheduleIds } : {}
|
|
3153
|
+
}
|
|
3154
|
+
)).schedules,
|
|
3155
|
+
cancel: async (scheduleId) => {
|
|
3156
|
+
await invokeEntityOp(bridge, SCHEDULED_INVOCATIONS_ENTITY_ID, "cancel", { scheduleId });
|
|
3157
|
+
}
|
|
3158
|
+
}),
|
|
3159
|
+
[bridge]
|
|
3160
|
+
);
|
|
3161
|
+
}
|
|
3162
|
+
function useFiasLinkedIn() {
|
|
3163
|
+
const bridge = useBridge();
|
|
3164
|
+
return useMemo2(
|
|
3165
|
+
() => ({
|
|
3166
|
+
publishPost: (params) => invokeEntityOp(
|
|
3167
|
+
bridge,
|
|
3168
|
+
LINKEDIN_ENTITY_ID,
|
|
3169
|
+
"publish_post",
|
|
3170
|
+
{ ...params }
|
|
3171
|
+
),
|
|
3172
|
+
searchOrganizations: async (connectionId, vanityName) => (await invokeEntityOp(
|
|
3173
|
+
bridge,
|
|
3174
|
+
LINKEDIN_ENTITY_ID,
|
|
3175
|
+
"search_organizations",
|
|
3176
|
+
{ connectionId, query: vanityName }
|
|
3177
|
+
)).organizations
|
|
3178
|
+
}),
|
|
3179
|
+
[bridge]
|
|
3180
|
+
);
|
|
3181
|
+
}
|
|
2665
3182
|
function useCompanyEmail() {
|
|
2666
3183
|
const bridge = useBridge();
|
|
2667
3184
|
const send = useCallback(
|
|
@@ -2948,6 +3465,7 @@ var VALID_PLUGIN_PERMISSIONS = [
|
|
|
2948
3465
|
"assets:community:publish",
|
|
2949
3466
|
"assets:community:read",
|
|
2950
3467
|
"assets:read",
|
|
3468
|
+
"connections:use",
|
|
2951
3469
|
"data:agents",
|
|
2952
3470
|
"data:search",
|
|
2953
3471
|
"data:store",
|
|
@@ -2962,6 +3480,8 @@ var VALID_PLUGIN_PERMISSIONS = [
|
|
|
2962
3480
|
"entities:web_search",
|
|
2963
3481
|
"navigation:open_arche",
|
|
2964
3482
|
"sandbox:vendored-libraries",
|
|
3483
|
+
"schedule:invoke",
|
|
3484
|
+
"storage:local",
|
|
2965
3485
|
"storage:sandbox",
|
|
2966
3486
|
"store:purchase",
|
|
2967
3487
|
"theme:read",
|
|
@@ -2981,7 +3501,8 @@ var PLUGIN_PERMISSION_DESCRIPTIONS = {
|
|
|
2981
3501
|
"ai:actions": "Let Fias AI operate this arche for you \u2014 only actions you could do yourself in its interface, and risky ones ask you first.",
|
|
2982
3502
|
"assets:community:publish": "Share images you made here so other people using this arche can see them, and manage what you have shared.",
|
|
2983
3503
|
"assets:community:read": "Show you images that other people using this arche have shared. Everything shared is checked before anyone can see it.",
|
|
2984
|
-
"assets:read": "Show images from this arche's published asset library.",
|
|
3504
|
+
"assets:read": "Show images and play sounds from this arche's published asset library.",
|
|
3505
|
+
"connections:use": "Use outside accounts (like X or LinkedIn) that you connect and let it use \u2014 you choose each account and each workspace, approve what it posts, and can take access away any time in Workspace Controls.",
|
|
2985
3506
|
"data:agents": "Let Fias AI, and assistants you connect with an API key and allow here, read this arche's data \u2014 and change it where it says so \u2014 even while it is closed.",
|
|
2986
3507
|
"data:search": "Search this arche's own data semantically \u2014 costs credits per search.",
|
|
2987
3508
|
"data:store": "Save structured data in this arche's own private database.",
|
|
@@ -2996,6 +3517,8 @@ var PLUGIN_PERMISSION_DESCRIPTIONS = {
|
|
|
2996
3517
|
"entities:web_search": "Search the live web on your behalf \u2014 costs credits.",
|
|
2997
3518
|
"navigation:open_arche": "Open other arches for you (navigation only).",
|
|
2998
3519
|
"sandbox:vendored-libraries": "Load platform-hosted libraries (like the PDF renderer) from the trusted CDN.",
|
|
3520
|
+
"schedule:invoke": "Schedule an action for later \u2014 like a post at 9 AM tomorrow. You approve exactly what will be sent and when, and can see or cancel what it scheduled.",
|
|
3521
|
+
"storage:local": "Keep its working files on this device, so a refresh or crash does not lose your work. Nothing leaves your device; cleared when you sign out or when someone else signs in here.",
|
|
2999
3522
|
"storage:sandbox": "Save files in this arche's own private storage.",
|
|
3000
3523
|
"store:purchase": "Offer purchases inside the arche (you approve each purchase).",
|
|
3001
3524
|
"theme:read": "Match your platform theme.",
|
|
@@ -5092,6 +5615,63 @@ function useFiasFonts() {
|
|
|
5092
5615
|
return useMemo3(() => ({ fonts: FONT_CATALOG, ensureFontLoaded }), []);
|
|
5093
5616
|
}
|
|
5094
5617
|
|
|
5618
|
+
// src/limits.ts
|
|
5619
|
+
var X_PUBLISH_LIMITS = {
|
|
5620
|
+
MAX_TEXT_CHARACTERS: 25e3,
|
|
5621
|
+
MAX_IMAGES_PER_POST: 4,
|
|
5622
|
+
MAX_IMAGES_PER_PUBLISH: 4,
|
|
5623
|
+
MAX_THREAD_POSTS: 10,
|
|
5624
|
+
MIN_POLL_OPTIONS: 2,
|
|
5625
|
+
MAX_POLL_OPTIONS: 4,
|
|
5626
|
+
MAX_POLL_OPTION_CHARACTERS: 25,
|
|
5627
|
+
MIN_POLL_MINUTES: 5,
|
|
5628
|
+
MAX_POLL_MINUTES: 10080,
|
|
5629
|
+
IMAGE_MIME_TYPES: ["image/png", "image/jpeg", "image/webp", "image/gif"],
|
|
5630
|
+
MAX_IMAGE_BYTES: 5 * 1024 * 1024
|
|
5631
|
+
};
|
|
5632
|
+
var LINKEDIN_PUBLISH_LIMITS = {
|
|
5633
|
+
MAX_TEXT_CHARACTERS: 3e3,
|
|
5634
|
+
MAX_IMAGES: 9,
|
|
5635
|
+
IMAGE_MIME_TYPES: ["image/png", "image/jpeg", "image/gif"],
|
|
5636
|
+
MAX_IMAGE_BYTES: 8 * 1024 * 1024
|
|
5637
|
+
};
|
|
5638
|
+
var SCHEDULE_LIMITS = {
|
|
5639
|
+
/** Waiting at once, per person, per app. */
|
|
5640
|
+
MAX_ACTIVE_PER_USER_ARCHE: 25,
|
|
5641
|
+
/** The earliest a call may be scheduled, from now. */
|
|
5642
|
+
MIN_LEAD_SECONDS: 5 * 60,
|
|
5643
|
+
/** The latest, from now. */
|
|
5644
|
+
MAX_LEAD_DAYS: 60
|
|
5645
|
+
};
|
|
5646
|
+
var DATA_STORE_LIMITS = {
|
|
5647
|
+
/** One document's `data`, serialized. */
|
|
5648
|
+
MAX_DOCUMENT_SIZE_BYTES: 100 * 1024,
|
|
5649
|
+
/** Per owner — one user, one workspace, or the app's shared data — per collection. */
|
|
5650
|
+
MAX_DOCUMENTS_PER_OWNER_PER_COLLECTION: 1e4,
|
|
5651
|
+
/** Writes in one atomic `batch`. */
|
|
5652
|
+
MAX_BATCH_OPERATIONS: 100
|
|
5653
|
+
};
|
|
5654
|
+
var DATA_STORE_RATE_LIMITS_PER_MINUTE = {
|
|
5655
|
+
put: 120,
|
|
5656
|
+
get: 300,
|
|
5657
|
+
query: 60,
|
|
5658
|
+
delete: 60,
|
|
5659
|
+
/** Counted in units of 25 operations: a full 100-op batch is 4. */
|
|
5660
|
+
batch: 30
|
|
5661
|
+
};
|
|
5662
|
+
var FIAS_AI_MANIFEST_LIMITS = {
|
|
5663
|
+
MAX_ACTIONS: 30,
|
|
5664
|
+
MAX_ID_LENGTH: 100,
|
|
5665
|
+
MAX_DESCRIPTION_LENGTH: 1e3,
|
|
5666
|
+
MAX_CATEGORY_LENGTH: 100,
|
|
5667
|
+
MAX_BLOCK_DESCRIPTION_LENGTH: 2e3,
|
|
5668
|
+
MAX_PARAMETER_SCHEMA_BYTES: 4096,
|
|
5669
|
+
MAX_AVAILABLE_WHEN_KEYS: 8,
|
|
5670
|
+
MAX_AVAILABLE_WHEN_KEY_LENGTH: 64,
|
|
5671
|
+
MAX_AVAILABLE_WHEN_STRING_LENGTH: 100,
|
|
5672
|
+
MAX_BLOCK_SERIALIZED_BYTES: 32 * 1024
|
|
5673
|
+
};
|
|
5674
|
+
|
|
5095
5675
|
// src/panels.ts
|
|
5096
5676
|
var PANEL_MIN_ELEMENTS = 1;
|
|
5097
5677
|
var PANEL_MAX_ELEMENTS = 24;
|
|
@@ -5485,6 +6065,7 @@ function validatePanelCatalog(value) {
|
|
|
5485
6065
|
return issues.length === 0 ? { ok: true, issues: [] } : { ok: false, issues };
|
|
5486
6066
|
}
|
|
5487
6067
|
export {
|
|
6068
|
+
ARCHE_ASSET_BYTES_ENTITY_ID,
|
|
5488
6069
|
AUDIO_AUDIO_ISOLATION_SURFACE_KEY,
|
|
5489
6070
|
AUDIO_FORCED_ALIGNMENT_SURFACE_KEY,
|
|
5490
6071
|
AUDIO_GEMINI_TRANSCRIBE_SURFACE_KEY,
|
|
@@ -5496,14 +6077,19 @@ export {
|
|
|
5496
6077
|
AUDIO_TTS_SURFACE_KEY,
|
|
5497
6078
|
AUDIO_VOICE_CHANGER_SURFACE_KEY,
|
|
5498
6079
|
AUDIO_VOICE_DESIGN_SURFACE_KEY,
|
|
6080
|
+
ArcheAssetError,
|
|
5499
6081
|
DARK_THEME,
|
|
6082
|
+
DATA_STORE_LIMITS,
|
|
6083
|
+
DATA_STORE_RATE_LIMITS_PER_MINUTE,
|
|
5500
6084
|
ENTITY_INVOCATION_HISTORY_LIMITS,
|
|
5501
6085
|
ENTITY_INVOCATION_REQUEST_LIMITS,
|
|
6086
|
+
FIAS_AI_MANIFEST_LIMITS,
|
|
5502
6087
|
FONT_CATALOG,
|
|
5503
6088
|
FONT_PAIRINGS,
|
|
5504
6089
|
FiasBridge,
|
|
5505
6090
|
FiasBridgeError,
|
|
5506
6091
|
FiasContentError,
|
|
6092
|
+
FiasLocalStoreError,
|
|
5507
6093
|
FiasProvider,
|
|
5508
6094
|
GRAMMAR_CHECK_ENTITY_ID,
|
|
5509
6095
|
IMAGE_SMART_CONTROL_SURFACE_KEY,
|
|
@@ -5519,6 +6105,8 @@ export {
|
|
|
5519
6105
|
IMAGE_SMART_VECTORIZE_SURFACE_KEY,
|
|
5520
6106
|
INTEGRATION_WEB_SEARCH_SURFACE_KEY,
|
|
5521
6107
|
LIGHT_THEME,
|
|
6108
|
+
LINKEDIN_ENTITY_ID,
|
|
6109
|
+
LINKEDIN_PUBLISH_LIMITS,
|
|
5522
6110
|
NLLB_LANGUAGES,
|
|
5523
6111
|
NLLB_TRANSLATION_ENTITY_ID,
|
|
5524
6112
|
PANEL_BUTTON_LABEL_MAX_LENGTH,
|
|
@@ -5537,12 +6125,16 @@ export {
|
|
|
5537
6125
|
PANEL_THEME_Z_MAX,
|
|
5538
6126
|
PANEL_TITLE_MAX_LENGTH,
|
|
5539
6127
|
PLUGIN_CONTENT_ENTITY_ID,
|
|
6128
|
+
PLUGIN_LOCAL_STORE_ENTITY_ID,
|
|
5540
6129
|
PLUGIN_PERMISSION_DESCRIPTIONS,
|
|
5541
6130
|
REASONING_EFFORTS,
|
|
6131
|
+
SCHEDULE_LIMITS,
|
|
5542
6132
|
SDK_BRIDGE_PROTOCOL_VERSION,
|
|
5543
6133
|
SDK_REQUIRES_HOST_PROTOCOL_VERSION,
|
|
5544
6134
|
THEME_CATALOG,
|
|
5545
6135
|
VALID_PLUGIN_PERMISSIONS,
|
|
6136
|
+
X_ENTITY_ID,
|
|
6137
|
+
X_PUBLISH_LIMITS,
|
|
5546
6138
|
checkInvocationHistory,
|
|
5547
6139
|
checkInvocationRequestSize,
|
|
5548
6140
|
checkReasoningParameter,
|
|
@@ -5557,6 +6149,7 @@ export {
|
|
|
5557
6149
|
invocationPayloadByteLimit,
|
|
5558
6150
|
isValidPluginPermission,
|
|
5559
6151
|
resetBridge,
|
|
6152
|
+
useArcheAssetBytes,
|
|
5560
6153
|
useArcheAssets,
|
|
5561
6154
|
useArcheHandoff,
|
|
5562
6155
|
useAudioGeneration,
|
|
@@ -5575,22 +6168,28 @@ export {
|
|
|
5575
6168
|
useElevenLabsVoiceDesign,
|
|
5576
6169
|
useEntityInvocation,
|
|
5577
6170
|
useFiasAIActions,
|
|
6171
|
+
useFiasConnections,
|
|
5578
6172
|
useFiasContent,
|
|
5579
6173
|
useFiasDataStore,
|
|
5580
6174
|
useFiasFonts,
|
|
6175
|
+
useFiasHolder,
|
|
6176
|
+
useFiasLinkedIn,
|
|
5581
6177
|
useFiasNavigation,
|
|
5582
6178
|
useFiasPreviewState,
|
|
6179
|
+
useFiasSchedules,
|
|
5583
6180
|
useFiasStorage,
|
|
5584
6181
|
useFiasStore,
|
|
5585
6182
|
useFiasTheme,
|
|
5586
6183
|
useFiasUser,
|
|
5587
6184
|
useFiasVendoredAssets,
|
|
5588
6185
|
useFiasWorkspaces,
|
|
6186
|
+
useFiasX,
|
|
5589
6187
|
useGeminiTranscribe,
|
|
5590
6188
|
useGeminiTts,
|
|
5591
6189
|
useImageEntities,
|
|
5592
6190
|
useImageGeneration,
|
|
5593
6191
|
useIntegrationWebSearch,
|
|
6192
|
+
useLocalStore,
|
|
5594
6193
|
useLyriaMusic,
|
|
5595
6194
|
usePersistentState,
|
|
5596
6195
|
useSmartControl,
|