veo-sdk 0.2.0 → 0.3.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 +44 -6
- package/dist/builder-UEGKG2UR.mjs +5 -0
- package/dist/builder-UEGKG2UR.mjs.map +1 -0
- package/dist/builder.cjs +69 -15
- package/dist/builder.cjs.map +1 -1
- package/dist/builder.mjs +5 -444
- package/dist/builder.mjs.map +1 -1
- package/dist/chunk-66UQ474G.mjs +439 -0
- package/dist/chunk-66UQ474G.mjs.map +1 -0
- package/dist/{chunk-BBAA5BRS.mjs → chunk-CI7NWEH2.mjs} +66 -1042
- package/dist/chunk-CI7NWEH2.mjs.map +1 -0
- package/dist/chunk-G5CKTGEG.mjs +1042 -0
- package/dist/chunk-G5CKTGEG.mjs.map +1 -0
- package/dist/chunk-JIU5JLI3.mjs +7 -0
- package/dist/chunk-JIU5JLI3.mjs.map +1 -0
- package/dist/index.cjs +3356 -2581
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -6
- package/dist/index.d.ts +2 -6
- package/dist/index.mjs +67 -55
- package/dist/index.mjs.map +1 -1
- package/dist/next.cjs +90 -0
- package/dist/next.cjs.map +1 -0
- package/dist/next.d.cts +108 -0
- package/dist/next.d.ts +108 -0
- package/dist/next.mjs +82 -0
- package/dist/next.mjs.map +1 -0
- package/dist/veo-builder.js +6 -6
- package/dist/veo-builder.js.map +1 -1
- package/dist/veo.js +2 -1
- package/dist/veo.js.map +1 -1
- package/package.json +6 -1
- package/dist/chunk-BBAA5BRS.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -24,8 +24,9 @@ import { init } from 'veo-sdk';
|
|
|
24
24
|
// Solo en el navegador (usa localStorage/DOM). En Next: client component.
|
|
25
25
|
const veo = init({
|
|
26
26
|
apiKey: 'pk_xxx',
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
guides: true, // opt-in: renderiza guías in-app
|
|
28
|
+
// apiUrl es OPCIONAL: por defecto apunta al backend gestionado de Veo.
|
|
29
|
+
// Solo se pasa para self-hosted / otra región.
|
|
29
30
|
});
|
|
30
31
|
|
|
31
32
|
veo.identify({ visitor: { id: 'user_123', traits: { email: 'a@b.com' } } });
|
|
@@ -39,14 +40,51 @@ Cargá `veo.js` desde unpkg y llamá `init` en el `onload` del `<script>`
|
|
|
39
40
|
|
|
40
41
|
```html
|
|
41
42
|
<script
|
|
42
|
-
src="https://unpkg.com/veo-sdk@0.2.
|
|
43
|
-
onload="window.veo.init({ apiKey: 'pk_xxx',
|
|
43
|
+
src="https://unpkg.com/veo-sdk@0.2.1/dist/veo.js"
|
|
44
|
+
onload="window.veo.init({ apiKey: 'pk_xxx', guides: true });
|
|
44
45
|
window.veo.identify({ visitor: { id: 'user_123' } });">
|
|
45
46
|
</script>
|
|
46
47
|
```
|
|
47
48
|
|
|
48
|
-
Fijá la versión (`@0.2.
|
|
49
|
-
|
|
49
|
+
`apiUrl` es opcional (default = backend gestionado). Fijá la versión (`@0.2.1`)
|
|
50
|
+
para no romperte con un release futuro. También por jsDelivr:
|
|
51
|
+
`https://cdn.jsdelivr.net/npm/veo-sdk@0.2.1/dist/veo.js`.
|
|
52
|
+
|
|
53
|
+
## Editor visual de guías (modo builder)
|
|
54
|
+
|
|
55
|
+
El dashboard de Veo puede abrir tu app en un editor visual para diseñar guías
|
|
56
|
+
sobre ella (elegir el elemento ancla, previsualizar). Para eso abre tu app en un
|
|
57
|
+
`<iframe>` con `?veoBuilder=<token>` y necesita cargar el bundle del builder
|
|
58
|
+
(`veo-builder.js`) para hacer el handshake. Solo se descarga cuando la URL trae
|
|
59
|
+
ese token: **tus usuarios finales nunca lo cargan**.
|
|
60
|
+
|
|
61
|
+
### CDN (`<script>`)
|
|
62
|
+
|
|
63
|
+
Funciona sin configurar nada: el SDK deriva la URL de `veo-builder.js` a partir
|
|
64
|
+
del `<script>` que cargó `veo.js`.
|
|
65
|
+
|
|
66
|
+
### Bundler (Next / Vite / React)
|
|
67
|
+
|
|
68
|
+
Funciona sin configurar nada: con `init({ guides: true })` el SDK carga el
|
|
69
|
+
builder con un `import()` dinámico cuando la app se abre con `?veoBuilder`. Tu
|
|
70
|
+
bundler lo code-splitea, así que **no se descarga para tus usuarios finales** y
|
|
71
|
+
**no tenés que copiar `veo-builder.js` ni setear `builderUrl`**.
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
init({ apiKey: 'pk_xxx', guides: true });
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
> `builderUrl` sigue disponible como override manual (CDN propio, CSP estricto),
|
|
78
|
+
> pero ya no hace falta.
|
|
79
|
+
|
|
80
|
+
### App con login (Supabase, Clerk, …)
|
|
81
|
+
|
|
82
|
+
Si tu app tiene login, el editor no puede autenticarse dentro del iframe (Google
|
|
83
|
+
OAuth = 403, cookies de terceros). Para diseñar sobre páginas protegidas hace
|
|
84
|
+
falta un **"modo diseño"** en tu app: dejar que Veo la embeba + entrar como
|
|
85
|
+
usuario demo. El SDK trae los helpers (`veoBuilderProxy`, `ensureVeoDesignSession`
|
|
86
|
+
en `veo-sdk/next`) y la **receta completa con Supabase** (2 archivos, copiable)
|
|
87
|
+
está en **[`docs/integrations/visual-editor-embed.md`](./docs/integrations/visual-editor-embed.md)**.
|
|
50
88
|
|
|
51
89
|
## API
|
|
52
90
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createBuilderSession, initBuilderMode, startElementPicker, stopElementPicker } from './chunk-66UQ474G.mjs';
|
|
2
|
+
import './chunk-CI7NWEH2.mjs';
|
|
3
|
+
import './chunk-JIU5JLI3.mjs';
|
|
4
|
+
//# sourceMappingURL=builder-UEGKG2UR.mjs.map
|
|
5
|
+
//# sourceMappingURL=builder-UEGKG2UR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"builder-UEGKG2UR.mjs"}
|
package/dist/builder.cjs
CHANGED
|
@@ -10,6 +10,67 @@ function hasDocument() {
|
|
|
10
10
|
return typeof document !== "undefined";
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
// src/core/builder-constants.ts
|
|
14
|
+
var BUILDER_TOKEN_PARAM = "veoBuilder";
|
|
15
|
+
var BUILDER_ORIGIN_PARAM = "veoBuilderOrigin";
|
|
16
|
+
|
|
17
|
+
// src/core/builder-token.ts
|
|
18
|
+
var TOKEN_KEY = "veo:builder_token";
|
|
19
|
+
var ORIGIN_KEY = "veo:builder_origin";
|
|
20
|
+
function session() {
|
|
21
|
+
try {
|
|
22
|
+
return window.sessionStorage;
|
|
23
|
+
} catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function urlParams() {
|
|
28
|
+
try {
|
|
29
|
+
return new URLSearchParams(window.location.search);
|
|
30
|
+
} catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function resolveBuilderToken() {
|
|
35
|
+
if (!hasWindow()) return null;
|
|
36
|
+
const params = urlParams();
|
|
37
|
+
const fromUrl = params?.get(BUILDER_TOKEN_PARAM);
|
|
38
|
+
if (fromUrl) {
|
|
39
|
+
const store = session();
|
|
40
|
+
try {
|
|
41
|
+
store?.setItem(TOKEN_KEY, fromUrl);
|
|
42
|
+
const origin = params?.get(BUILDER_ORIGIN_PARAM);
|
|
43
|
+
if (origin) store?.setItem(ORIGIN_KEY, origin);
|
|
44
|
+
} catch {
|
|
45
|
+
}
|
|
46
|
+
return fromUrl;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
return session()?.getItem(TOKEN_KEY) ?? null;
|
|
50
|
+
} catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function resolveBuilderOrigin() {
|
|
55
|
+
if (!hasWindow()) return null;
|
|
56
|
+
const fromUrl = urlParams()?.get(BUILDER_ORIGIN_PARAM);
|
|
57
|
+
if (fromUrl) return fromUrl;
|
|
58
|
+
try {
|
|
59
|
+
return session()?.getItem(ORIGIN_KEY) ?? null;
|
|
60
|
+
} catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function clearBuilderToken() {
|
|
65
|
+
if (!hasWindow()) return;
|
|
66
|
+
try {
|
|
67
|
+
const store = session();
|
|
68
|
+
store?.removeItem(TOKEN_KEY);
|
|
69
|
+
store?.removeItem(ORIGIN_KEY);
|
|
70
|
+
} catch {
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
13
74
|
// src/plugins/guides/constants.ts
|
|
14
75
|
var GUIDE_Z_INDEX = 2147483640;
|
|
15
76
|
var DEFAULT_ANCHOR_WAIT_MS = 5e3;
|
|
@@ -1535,8 +1596,6 @@ function safeDestroy(renderer) {
|
|
|
1535
1596
|
|
|
1536
1597
|
// src/plugins/builder/bridge-protocol.ts
|
|
1537
1598
|
var VEO_BUILDER_SOURCE = "veo-builder";
|
|
1538
|
-
var BUILDER_TOKEN_PARAM = "veoBuilder";
|
|
1539
|
-
var BUILDER_ORIGIN_PARAM = "veoBuilderOrigin";
|
|
1540
1599
|
|
|
1541
1600
|
// src/plugins/autocapture/constants.ts
|
|
1542
1601
|
var HASHED_CLASS_PATTERNS = [
|
|
@@ -1822,15 +1881,9 @@ function stopElementPicker() {
|
|
|
1822
1881
|
// src/plugins/builder/builder-mode.ts
|
|
1823
1882
|
function initBuilderMode() {
|
|
1824
1883
|
if (!hasWindow() || !hasDocument()) return null;
|
|
1825
|
-
|
|
1826
|
-
try {
|
|
1827
|
-
params = new URLSearchParams(window.location.search);
|
|
1828
|
-
} catch {
|
|
1829
|
-
return null;
|
|
1830
|
-
}
|
|
1831
|
-
const token = params.get(BUILDER_TOKEN_PARAM);
|
|
1884
|
+
const token = resolveBuilderToken();
|
|
1832
1885
|
if (!token) return null;
|
|
1833
|
-
const dashboardOrigin = resolveDashboardOrigin(
|
|
1886
|
+
const dashboardOrigin = resolveDashboardOrigin();
|
|
1834
1887
|
if (!dashboardOrigin) return null;
|
|
1835
1888
|
const target = resolveTarget();
|
|
1836
1889
|
if (!target) return null;
|
|
@@ -1883,6 +1936,7 @@ function initBuilderMode() {
|
|
|
1883
1936
|
picker?.stop();
|
|
1884
1937
|
picker = null;
|
|
1885
1938
|
closeGuidePreview();
|
|
1939
|
+
clearBuilderToken();
|
|
1886
1940
|
post({ type: "closed" });
|
|
1887
1941
|
};
|
|
1888
1942
|
const activate = () => {
|
|
@@ -1921,16 +1975,16 @@ function resolveTarget() {
|
|
|
1921
1975
|
if (window.parent && window.parent !== window) return window.parent;
|
|
1922
1976
|
return null;
|
|
1923
1977
|
}
|
|
1924
|
-
function resolveDashboardOrigin(
|
|
1925
|
-
const
|
|
1926
|
-
if (
|
|
1978
|
+
function resolveDashboardOrigin() {
|
|
1979
|
+
const stored = resolveBuilderOrigin();
|
|
1980
|
+
if (stored) {
|
|
1927
1981
|
try {
|
|
1928
|
-
return new URL(
|
|
1982
|
+
return new URL(stored).origin;
|
|
1929
1983
|
} catch {
|
|
1930
1984
|
return null;
|
|
1931
1985
|
}
|
|
1932
1986
|
}
|
|
1933
|
-
if (document.referrer) {
|
|
1987
|
+
if (hasDocument() && document.referrer) {
|
|
1934
1988
|
try {
|
|
1935
1989
|
return new URL(document.referrer).origin;
|
|
1936
1990
|
} catch {
|