@fias/arche-sdk 1.9.0 → 1.12.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/README.md +1 -1
- package/dist/cli/create-plugin.js +0 -0
- package/dist/coverage-fills.test.d.ts +8 -0
- package/dist/coverage-fills.test.d.ts.map +1 -0
- package/dist/coverage-fills.test.js +302 -0
- package/dist/coverage-fills.test.js.map +1 -0
- package/dist/generated/permissions.d.ts +15 -0
- package/dist/generated/permissions.d.ts.map +1 -0
- package/dist/generated/permissions.js +32 -0
- package/dist/generated/permissions.js.map +1 -0
- package/dist/generated/surfaces.d.ts +267 -0
- package/dist/generated/surfaces.d.ts.map +1 -0
- package/dist/generated/surfaces.js +87 -0
- package/dist/generated/surfaces.js.map +1 -0
- package/dist/hooks.d.ts +81 -18
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +288 -50
- package/dist/hooks.js.map +1 -1
- package/dist/hooks.test.js +827 -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 +27 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +295 -32
- package/dist/types.d.ts +339 -56
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/package.json +16 -16
- package/templates/default/AGENTS.md +104 -3
- package/templates/default/CLAUDE.md +104 -3
package/dist/index.mjs
CHANGED
|
@@ -497,6 +497,60 @@ function useImageGeneration() {
|
|
|
497
497
|
);
|
|
498
498
|
return { generate, isLoading, result, error };
|
|
499
499
|
}
|
|
500
|
+
function useAudioGeneration() {
|
|
501
|
+
const bridge = useBridge();
|
|
502
|
+
const [isLoading, setIsLoading] = useState2(false);
|
|
503
|
+
const [result, setResult] = useState2(null);
|
|
504
|
+
const [error, setError] = useState2(null);
|
|
505
|
+
const generate = useCallback(
|
|
506
|
+
async (params) => {
|
|
507
|
+
setIsLoading(true);
|
|
508
|
+
setError(null);
|
|
509
|
+
try {
|
|
510
|
+
const res = await bridge.request("audio_generate", params, 18e4);
|
|
511
|
+
setResult(res);
|
|
512
|
+
return res;
|
|
513
|
+
} catch (err) {
|
|
514
|
+
const e = err instanceof Error ? err : new Error(String(err));
|
|
515
|
+
setError(e);
|
|
516
|
+
throw e;
|
|
517
|
+
} finally {
|
|
518
|
+
setIsLoading(false);
|
|
519
|
+
}
|
|
520
|
+
},
|
|
521
|
+
[bridge]
|
|
522
|
+
);
|
|
523
|
+
return { generate, isLoading, result, error };
|
|
524
|
+
}
|
|
525
|
+
function useSurface(surfaceKey, timeoutMs = 18e4) {
|
|
526
|
+
const bridge = useBridge();
|
|
527
|
+
const [isLoading, setIsLoading] = useState2(false);
|
|
528
|
+
const [result, setResult] = useState2(null);
|
|
529
|
+
const [error, setError] = useState2(null);
|
|
530
|
+
const invoke = useCallback(
|
|
531
|
+
async (params) => {
|
|
532
|
+
setIsLoading(true);
|
|
533
|
+
setError(null);
|
|
534
|
+
try {
|
|
535
|
+
const res = await bridge.request(
|
|
536
|
+
"surface_invoke",
|
|
537
|
+
{ surfaceKey, params },
|
|
538
|
+
timeoutMs
|
|
539
|
+
);
|
|
540
|
+
setResult(res);
|
|
541
|
+
return res;
|
|
542
|
+
} catch (err) {
|
|
543
|
+
const e = err instanceof Error ? err : new Error(String(err));
|
|
544
|
+
setError(e);
|
|
545
|
+
throw e;
|
|
546
|
+
} finally {
|
|
547
|
+
setIsLoading(false);
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
[bridge, surfaceKey, timeoutMs]
|
|
551
|
+
);
|
|
552
|
+
return { invoke, isLoading, result, error };
|
|
553
|
+
}
|
|
500
554
|
function useFiasNavigation() {
|
|
501
555
|
const bridge = useBridge();
|
|
502
556
|
const [currentPath, setCurrentPath] = useState2(bridge.getCurrentPath());
|
|
@@ -760,32 +814,44 @@ function useFiasStore() {
|
|
|
760
814
|
]
|
|
761
815
|
);
|
|
762
816
|
}
|
|
763
|
-
var
|
|
817
|
+
var DOWNLOAD_URL_REFRESH_BUFFER_MS = 6e4;
|
|
764
818
|
var downloadUrlCache = /* @__PURE__ */ new Map();
|
|
765
819
|
var downloadUrlInflight = /* @__PURE__ */ new Map();
|
|
766
|
-
async function
|
|
820
|
+
async function fetchVaultDocumentDownloadUrl(documentId) {
|
|
767
821
|
const now = Date.now();
|
|
768
|
-
const cached = downloadUrlCache.get(
|
|
769
|
-
if (cached && now < cached.expiresAt -
|
|
770
|
-
return { url: cached.url, expiresAt: cached.expiresAt };
|
|
822
|
+
const cached = downloadUrlCache.get(documentId);
|
|
823
|
+
if (cached && now < cached.expiresAt - DOWNLOAD_URL_REFRESH_BUFFER_MS) {
|
|
824
|
+
return { url: cached.url, expiresAt: cached.expiresAt, contentType: cached.contentType };
|
|
771
825
|
}
|
|
772
|
-
const inflight = downloadUrlInflight.get(
|
|
826
|
+
const inflight = downloadUrlInflight.get(documentId);
|
|
773
827
|
if (inflight) return inflight;
|
|
774
828
|
const bridge = getBridge();
|
|
775
|
-
const promise = bridge.request(
|
|
776
|
-
|
|
777
|
-
|
|
829
|
+
const promise = bridge.request(
|
|
830
|
+
"vault_documents_download_url",
|
|
831
|
+
{ documentId }
|
|
832
|
+
).then((result) => {
|
|
833
|
+
const normalized = {
|
|
834
|
+
url: result.url,
|
|
835
|
+
expiresAt: new Date(result.expiresAt).getTime(),
|
|
836
|
+
contentType: result.contentType
|
|
837
|
+
};
|
|
838
|
+
downloadUrlCache.set(documentId, {
|
|
839
|
+
url: normalized.url,
|
|
840
|
+
expiresAt: normalized.expiresAt,
|
|
841
|
+
contentType: normalized.contentType
|
|
842
|
+
});
|
|
843
|
+
return normalized;
|
|
778
844
|
}).finally(() => {
|
|
779
|
-
downloadUrlInflight.delete(
|
|
845
|
+
downloadUrlInflight.delete(documentId);
|
|
780
846
|
});
|
|
781
|
-
downloadUrlInflight.set(
|
|
847
|
+
downloadUrlInflight.set(documentId, promise);
|
|
782
848
|
return promise;
|
|
783
849
|
}
|
|
784
|
-
function
|
|
850
|
+
function useVaultDocuments() {
|
|
785
851
|
const bridge = useBridge();
|
|
786
852
|
const list = useCallback(
|
|
787
853
|
async (options) => {
|
|
788
|
-
return bridge.request("
|
|
854
|
+
return bridge.request("vault_documents_list", {
|
|
789
855
|
search: options?.search,
|
|
790
856
|
limit: options?.limit,
|
|
791
857
|
cursor: options?.cursor
|
|
@@ -794,13 +860,15 @@ function useFiasFiles() {
|
|
|
794
860
|
[bridge]
|
|
795
861
|
);
|
|
796
862
|
const read = useCallback(
|
|
797
|
-
async (
|
|
798
|
-
return bridge.request("
|
|
863
|
+
async (documentId) => {
|
|
864
|
+
return bridge.request("vault_documents_read", {
|
|
865
|
+
documentId
|
|
866
|
+
});
|
|
799
867
|
},
|
|
800
868
|
[bridge]
|
|
801
869
|
);
|
|
802
870
|
const getDownloadUrl = useCallback(
|
|
803
|
-
(
|
|
871
|
+
(documentId) => fetchVaultDocumentDownloadUrl(documentId),
|
|
804
872
|
// The hook closes over the React context's bridge, but the resolver
|
|
805
873
|
// uses the singleton — they are the same instance in practice. Keeping
|
|
806
874
|
// `bridge` in the deps for symmetry with other hooks that do go through
|
|
@@ -809,34 +877,115 @@ function useFiasFiles() {
|
|
|
809
877
|
);
|
|
810
878
|
const write = useCallback(
|
|
811
879
|
async (params) => {
|
|
812
|
-
return bridge.request("
|
|
880
|
+
return bridge.request("vault_documents_write", {
|
|
813
881
|
name: params.name,
|
|
814
882
|
content: params.content,
|
|
815
883
|
contentType: params.contentType,
|
|
816
|
-
tags: params.tags
|
|
884
|
+
tags: params.tags,
|
|
885
|
+
sensitivity: params.sensitivity,
|
|
886
|
+
folderPath: params.folderPath,
|
|
887
|
+
replacesDocumentId: params.replacesDocumentId
|
|
817
888
|
});
|
|
818
889
|
},
|
|
819
890
|
[bridge]
|
|
820
891
|
);
|
|
821
892
|
const update = useCallback(
|
|
822
|
-
async (
|
|
823
|
-
await bridge.request("
|
|
824
|
-
|
|
893
|
+
async (documentId, params) => {
|
|
894
|
+
await bridge.request("vault_documents_update", {
|
|
895
|
+
documentId,
|
|
825
896
|
name: params.name,
|
|
826
897
|
tags: params.tags
|
|
827
898
|
});
|
|
828
|
-
downloadUrlCache.delete(
|
|
899
|
+
downloadUrlCache.delete(documentId);
|
|
829
900
|
},
|
|
830
901
|
[bridge]
|
|
831
902
|
);
|
|
832
|
-
const
|
|
833
|
-
async (
|
|
834
|
-
await bridge.request("
|
|
835
|
-
downloadUrlCache.delete(
|
|
836
|
-
downloadUrlInflight.delete(
|
|
903
|
+
const deleteDocument = useCallback(
|
|
904
|
+
async (documentId) => {
|
|
905
|
+
await bridge.request("vault_documents_delete", { documentId });
|
|
906
|
+
downloadUrlCache.delete(documentId);
|
|
907
|
+
downloadUrlInflight.delete(documentId);
|
|
908
|
+
},
|
|
909
|
+
[bridge]
|
|
910
|
+
);
|
|
911
|
+
const search = useCallback(
|
|
912
|
+
async (query, options) => {
|
|
913
|
+
return bridge.request("vault_documents_search", {
|
|
914
|
+
query,
|
|
915
|
+
topK: options?.topK,
|
|
916
|
+
minSimilarity: options?.minSimilarity,
|
|
917
|
+
includeContent: options?.includeContent
|
|
918
|
+
});
|
|
919
|
+
},
|
|
920
|
+
[bridge]
|
|
921
|
+
);
|
|
922
|
+
const attach = useCallback(
|
|
923
|
+
async (documentId, target) => {
|
|
924
|
+
return bridge.request("vault_documents_attach", {
|
|
925
|
+
documentId,
|
|
926
|
+
regardingType: target.regardingType,
|
|
927
|
+
regardingId: target.regardingId
|
|
928
|
+
});
|
|
837
929
|
},
|
|
838
930
|
[bridge]
|
|
839
931
|
);
|
|
932
|
+
const detach = useCallback(
|
|
933
|
+
async (documentId, referenceId) => {
|
|
934
|
+
await bridge.request("vault_documents_detach", { documentId, referenceId });
|
|
935
|
+
},
|
|
936
|
+
[bridge]
|
|
937
|
+
);
|
|
938
|
+
const uploadInit = useCallback(
|
|
939
|
+
async (params) => {
|
|
940
|
+
return bridge.request("vault_documents_upload_init", {
|
|
941
|
+
name: params.name,
|
|
942
|
+
mimeType: params.mimeType,
|
|
943
|
+
sizeBytes: params.sizeBytes,
|
|
944
|
+
checksumSha256: params.checksumSha256,
|
|
945
|
+
tags: params.tags,
|
|
946
|
+
sensitivity: params.sensitivity,
|
|
947
|
+
folderPath: params.folderPath,
|
|
948
|
+
replacesDocumentId: params.replacesDocumentId
|
|
949
|
+
});
|
|
950
|
+
},
|
|
951
|
+
[bridge]
|
|
952
|
+
);
|
|
953
|
+
const uploadFinalize = useCallback(
|
|
954
|
+
async (params) => {
|
|
955
|
+
return bridge.request("vault_documents_upload_finalize", {
|
|
956
|
+
documentId: params.documentId,
|
|
957
|
+
checksumSha256: params.checksumSha256
|
|
958
|
+
});
|
|
959
|
+
},
|
|
960
|
+
[bridge]
|
|
961
|
+
);
|
|
962
|
+
const upload = useCallback(
|
|
963
|
+
async (bytes, params) => {
|
|
964
|
+
const src = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
|
|
965
|
+
const u8 = new Uint8Array(src.byteLength);
|
|
966
|
+
u8.set(src);
|
|
967
|
+
const sizeBytes = u8.byteLength;
|
|
968
|
+
const digest = await crypto.subtle.digest("SHA-256", u8);
|
|
969
|
+
const checksumHex = bytesToHex(new Uint8Array(digest));
|
|
970
|
+
const init = await uploadInit({ ...params, sizeBytes, checksumSha256: checksumHex });
|
|
971
|
+
const browserHeaders = Object.fromEntries(
|
|
972
|
+
Object.entries(init.requiredHeaders).filter(([k]) => k.toLowerCase() !== "content-length")
|
|
973
|
+
);
|
|
974
|
+
const putResp = await fetch(init.uploadUrl, {
|
|
975
|
+
method: "PUT",
|
|
976
|
+
body: u8,
|
|
977
|
+
headers: browserHeaders
|
|
978
|
+
});
|
|
979
|
+
if (!putResp.ok) {
|
|
980
|
+
const text = await putResp.text().catch(() => "");
|
|
981
|
+
throw new Error(
|
|
982
|
+
`Vault upload PUT failed (${putResp.status}): ${text || putResp.statusText}`
|
|
983
|
+
);
|
|
984
|
+
}
|
|
985
|
+
return uploadFinalize({ documentId: init.documentId, checksumSha256: checksumHex });
|
|
986
|
+
},
|
|
987
|
+
[uploadInit, uploadFinalize]
|
|
988
|
+
);
|
|
840
989
|
return useMemo2(
|
|
841
990
|
() => ({
|
|
842
991
|
list,
|
|
@@ -844,11 +993,102 @@ function useFiasFiles() {
|
|
|
844
993
|
getDownloadUrl,
|
|
845
994
|
write,
|
|
846
995
|
update,
|
|
847
|
-
delete:
|
|
996
|
+
delete: deleteDocument,
|
|
997
|
+
search,
|
|
998
|
+
attach,
|
|
999
|
+
detach,
|
|
1000
|
+
upload,
|
|
1001
|
+
uploadInit,
|
|
1002
|
+
uploadFinalize
|
|
848
1003
|
}),
|
|
849
|
-
[
|
|
1004
|
+
[
|
|
1005
|
+
list,
|
|
1006
|
+
read,
|
|
1007
|
+
getDownloadUrl,
|
|
1008
|
+
write,
|
|
1009
|
+
update,
|
|
1010
|
+
deleteDocument,
|
|
1011
|
+
search,
|
|
1012
|
+
attach,
|
|
1013
|
+
detach,
|
|
1014
|
+
upload,
|
|
1015
|
+
uploadInit,
|
|
1016
|
+
uploadFinalize
|
|
1017
|
+
]
|
|
850
1018
|
);
|
|
851
1019
|
}
|
|
1020
|
+
function bytesToHex(bytes) {
|
|
1021
|
+
let out = "";
|
|
1022
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
1023
|
+
out += bytes[i].toString(16).padStart(2, "0");
|
|
1024
|
+
}
|
|
1025
|
+
return out;
|
|
1026
|
+
}
|
|
1027
|
+
function useArcheAssets() {
|
|
1028
|
+
const bridge = useBridge();
|
|
1029
|
+
const list = useCallback(
|
|
1030
|
+
async (options) => {
|
|
1031
|
+
return bridge.request("arche_assets_list", {
|
|
1032
|
+
cursor: options?.cursor,
|
|
1033
|
+
limit: options?.limit
|
|
1034
|
+
});
|
|
1035
|
+
},
|
|
1036
|
+
[bridge]
|
|
1037
|
+
);
|
|
1038
|
+
const getUrl = useCallback(
|
|
1039
|
+
async (assetId) => {
|
|
1040
|
+
return bridge.request("arche_assets_get_url", { assetId });
|
|
1041
|
+
},
|
|
1042
|
+
[bridge]
|
|
1043
|
+
);
|
|
1044
|
+
return useMemo2(() => ({ list, getUrl }), [list, getUrl]);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
// src/generated/surfaces.ts
|
|
1048
|
+
var AUDIO_AUDIO_ISOLATION_SURFACE_KEY = "audio.audio-isolation";
|
|
1049
|
+
var useElevenLabsAudioIsolation = () => useSurface(
|
|
1050
|
+
AUDIO_AUDIO_ISOLATION_SURFACE_KEY
|
|
1051
|
+
);
|
|
1052
|
+
var AUDIO_FORCED_ALIGNMENT_SURFACE_KEY = "audio.forced-alignment";
|
|
1053
|
+
var useElevenLabsForcedAlignment = () => useSurface(
|
|
1054
|
+
AUDIO_FORCED_ALIGNMENT_SURFACE_KEY
|
|
1055
|
+
);
|
|
1056
|
+
var AUDIO_LYRIA_MUSIC_SURFACE_KEY = "audio.lyria-music";
|
|
1057
|
+
var useLyriaMusic = () => useSurface(AUDIO_LYRIA_MUSIC_SURFACE_KEY);
|
|
1058
|
+
var AUDIO_MUSIC_SURFACE_KEY = "audio.music";
|
|
1059
|
+
var useElevenLabsMusic = () => useSurface(AUDIO_MUSIC_SURFACE_KEY);
|
|
1060
|
+
var AUDIO_SOUND_EFFECTS_SURFACE_KEY = "audio.sound-effects";
|
|
1061
|
+
var useElevenLabsSfx = () => useSurface(AUDIO_SOUND_EFFECTS_SURFACE_KEY);
|
|
1062
|
+
var AUDIO_SPEECH_TO_TEXT_SURFACE_KEY = "audio.speech-to-text";
|
|
1063
|
+
var useElevenLabsStt = () => useSurface(AUDIO_SPEECH_TO_TEXT_SURFACE_KEY);
|
|
1064
|
+
var AUDIO_TTS_SURFACE_KEY = "audio.tts";
|
|
1065
|
+
var useElevenLabsTts = () => useSurface(AUDIO_TTS_SURFACE_KEY);
|
|
1066
|
+
var AUDIO_VOICE_CHANGER_SURFACE_KEY = "audio.voice-changer";
|
|
1067
|
+
var useElevenLabsVoiceChanger = () => useSurface(
|
|
1068
|
+
AUDIO_VOICE_CHANGER_SURFACE_KEY
|
|
1069
|
+
);
|
|
1070
|
+
var AUDIO_VOICE_DESIGN_SURFACE_KEY = "audio.voice-design";
|
|
1071
|
+
var useElevenLabsVoiceDesign = () => useSurface(
|
|
1072
|
+
AUDIO_VOICE_DESIGN_SURFACE_KEY
|
|
1073
|
+
);
|
|
1074
|
+
|
|
1075
|
+
// src/generated/permissions.ts
|
|
1076
|
+
var VALID_PLUGIN_PERMISSIONS = [
|
|
1077
|
+
"assets:read",
|
|
1078
|
+
"data:store",
|
|
1079
|
+
"entities:audio_generate",
|
|
1080
|
+
"entities:image_generate",
|
|
1081
|
+
"entities:invoke",
|
|
1082
|
+
"storage:sandbox",
|
|
1083
|
+
"store:purchase",
|
|
1084
|
+
"theme:read",
|
|
1085
|
+
"user:profile:read",
|
|
1086
|
+
"vault:documents:read",
|
|
1087
|
+
"vault:documents:write"
|
|
1088
|
+
];
|
|
1089
|
+
function isValidPluginPermission(perm) {
|
|
1090
|
+
return VALID_PLUGIN_PERMISSIONS.includes(perm);
|
|
1091
|
+
}
|
|
852
1092
|
|
|
853
1093
|
// src/fias.ts
|
|
854
1094
|
var fias = {
|
|
@@ -2703,28 +2943,51 @@ function getFontPairingById(id) {
|
|
|
2703
2943
|
return FONT_PAIRINGS.find((f) => f.id === id) ?? FONT_PAIRINGS[0];
|
|
2704
2944
|
}
|
|
2705
2945
|
export {
|
|
2946
|
+
AUDIO_AUDIO_ISOLATION_SURFACE_KEY,
|
|
2947
|
+
AUDIO_FORCED_ALIGNMENT_SURFACE_KEY,
|
|
2948
|
+
AUDIO_LYRIA_MUSIC_SURFACE_KEY,
|
|
2949
|
+
AUDIO_MUSIC_SURFACE_KEY,
|
|
2950
|
+
AUDIO_SOUND_EFFECTS_SURFACE_KEY,
|
|
2951
|
+
AUDIO_SPEECH_TO_TEXT_SURFACE_KEY,
|
|
2952
|
+
AUDIO_TTS_SURFACE_KEY,
|
|
2953
|
+
AUDIO_VOICE_CHANGER_SURFACE_KEY,
|
|
2954
|
+
AUDIO_VOICE_DESIGN_SURFACE_KEY,
|
|
2706
2955
|
DARK_THEME,
|
|
2707
2956
|
FONT_PAIRINGS,
|
|
2708
2957
|
FiasBridge,
|
|
2709
2958
|
FiasProvider,
|
|
2710
2959
|
LIGHT_THEME,
|
|
2711
2960
|
THEME_CATALOG,
|
|
2712
|
-
|
|
2961
|
+
VALID_PLUGIN_PERMISSIONS,
|
|
2962
|
+
fetchVaultDocumentDownloadUrl,
|
|
2713
2963
|
fias,
|
|
2714
2964
|
getBridge,
|
|
2715
2965
|
getDefaultTheme,
|
|
2716
2966
|
getFontPairingById,
|
|
2717
2967
|
getThemeById,
|
|
2968
|
+
isValidPluginPermission,
|
|
2718
2969
|
resetBridge,
|
|
2970
|
+
useArcheAssets,
|
|
2971
|
+
useAudioGeneration,
|
|
2972
|
+
useElevenLabsAudioIsolation,
|
|
2973
|
+
useElevenLabsForcedAlignment,
|
|
2974
|
+
useElevenLabsMusic,
|
|
2975
|
+
useElevenLabsSfx,
|
|
2976
|
+
useElevenLabsStt,
|
|
2977
|
+
useElevenLabsTts,
|
|
2978
|
+
useElevenLabsVoiceChanger,
|
|
2979
|
+
useElevenLabsVoiceDesign,
|
|
2719
2980
|
useEntityInvocation,
|
|
2720
2981
|
useFiasDataStore,
|
|
2721
|
-
useFiasFiles,
|
|
2722
2982
|
useFiasNavigation,
|
|
2723
2983
|
useFiasStorage,
|
|
2724
2984
|
useFiasStore,
|
|
2725
2985
|
useFiasTheme,
|
|
2726
2986
|
useFiasUser,
|
|
2727
2987
|
useImageGeneration,
|
|
2988
|
+
useLyriaMusic,
|
|
2728
2989
|
usePersistentState,
|
|
2729
|
-
useStepNavigation
|
|
2990
|
+
useStepNavigation,
|
|
2991
|
+
useSurface,
|
|
2992
|
+
useVaultDocuments
|
|
2730
2993
|
};
|