@bluepic/embed 0.4.0-next.188 → 0.4.0-next.189
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/bluepic-embed.iife.js +154 -154
- package/dist/bluepic-embed.umd.js +154 -154
- package/dist/components/AssetViewer/AssetViewer.vue.d.ts +9 -0
- package/dist/components/TemplateEditor/BatchExportPopup.vue.d.ts +3 -1
- package/dist/main.cjs +84 -84
- package/dist/main.d.ts +1 -0
- package/dist/main.mjs +14319 -14263
- package/dist/style.css +1 -1
- package/dist/util/assetAuth.d.ts +35 -0
- package/dist/util/batch/export.d.ts +16 -2
- package/package.json +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credentials for the GATED brand-portal asset routes
|
|
3
|
+
* (`/api/public/campaigns/:uid/assets/:assetId/{download|preview|document}`).
|
|
4
|
+
*
|
|
5
|
+
* A protected campaign is unlocked either with its password or by signing in;
|
|
6
|
+
* the config and serial fetches already carry that proof, but the asset bytes
|
|
7
|
+
* are requested separately — by a `fetch()` (download, viewer parsing) or by a
|
|
8
|
+
* media element's `src` (audio, video, image), which cannot carry headers at
|
|
9
|
+
* all. This module is the ONE place that knows how to attach the proof to
|
|
10
|
+
* either kind of request, so the two can never drift apart:
|
|
11
|
+
*
|
|
12
|
+
* - `assetRequestHeaders` → `X-Bluepic-Password` / `Authorization: Bearer …`
|
|
13
|
+
* - `withAssetAuthQuery` → `?password=…` / `?access_token=…`
|
|
14
|
+
*
|
|
15
|
+
* Prefer the headers wherever a `fetch()` is used; the query form exists only
|
|
16
|
+
* for `src` attributes. An empty auth object leaves headers and URLs untouched,
|
|
17
|
+
* so a public campaign behaves exactly as before.
|
|
18
|
+
*/
|
|
19
|
+
export type AssetAuth = {
|
|
20
|
+
/** The campaign password the visitor unlocked with, if any. */
|
|
21
|
+
password?: string;
|
|
22
|
+
/** The signed-in visitor's Auth0 access token, if any. */
|
|
23
|
+
accessToken?: string;
|
|
24
|
+
};
|
|
25
|
+
/** Query parameter names the API accepts for media `src` URLs. */
|
|
26
|
+
export declare const ASSET_AUTH_QUERY_PASSWORD = "password";
|
|
27
|
+
export declare const ASSET_AUTH_QUERY_ACCESS_TOKEN = "access_token";
|
|
28
|
+
/** Headers for a `fetch()` of gated asset bytes. `{}` when nothing to attach. */
|
|
29
|
+
export declare function assetRequestHeaders(auth?: AssetAuth | null): Record<string, string>;
|
|
30
|
+
/**
|
|
31
|
+
* The same proof as query parameters, for `<img>`/`<video>`/`<audio>` sources
|
|
32
|
+
* that cannot carry headers. Returns `url` unchanged when there is nothing to
|
|
33
|
+
* attach. Existing query parameters (and a hash) are preserved.
|
|
34
|
+
*/
|
|
35
|
+
export declare function withAssetAuthQuery(url: string, auth?: AssetAuth | null): string;
|
|
@@ -38,6 +38,13 @@ export interface BatchExportProgress {
|
|
|
38
38
|
current: number;
|
|
39
39
|
/** 1-based index of the row being rendered. */
|
|
40
40
|
currentIndex: number;
|
|
41
|
+
/** Rows that threw (rendering or consuming) and were skipped. */
|
|
42
|
+
failed: number;
|
|
43
|
+
}
|
|
44
|
+
/** A row that did not make it into the output. `index` is 0-based (row 1 is index 0). */
|
|
45
|
+
export interface BatchFailedRow {
|
|
46
|
+
index: number;
|
|
47
|
+
message: string;
|
|
41
48
|
}
|
|
42
49
|
export interface BatchFileExportResult {
|
|
43
50
|
/** One blob per exported file (a multi-frame template yields several per row). */
|
|
@@ -51,6 +58,11 @@ export interface BatchFileExportResult {
|
|
|
51
58
|
fileName: string;
|
|
52
59
|
};
|
|
53
60
|
cancelled: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Rows missing from `output` because they threw. Successful rows were still
|
|
63
|
+
* consumed (charged) and packed; a failed row was never consumed.
|
|
64
|
+
*/
|
|
65
|
+
failedRows: BatchFailedRow[];
|
|
54
66
|
}
|
|
55
67
|
/** Image rows render four at a time, videos strictly one after the other (decision 2026-09-02). */
|
|
56
68
|
export declare const BATCH_IMAGE_CONCURRENCY = 4;
|
|
@@ -64,8 +76,10 @@ export declare function batchFileBaseNames(rows: BatchRow[], naming: BatchNaming
|
|
|
64
76
|
*
|
|
65
77
|
* Images go through the campaign render endpoint (which does not charge — the
|
|
66
78
|
* per-row `consumeOutput` does), videos through the video render service.
|
|
67
|
-
* Rows are rendered in order
|
|
68
|
-
*
|
|
79
|
+
* Rows are rendered in order and isolated from each other: a row that throws
|
|
80
|
+
* is recorded in `failedRows` (never consumed, never packed) and the rest
|
|
81
|
+
* carry on, so one bad row cannot discard the already-charged good ones. Only
|
|
82
|
+
* when every row failed is there nothing to hand out, and the export throws.
|
|
69
83
|
*/
|
|
70
84
|
export declare function exportBatchFiles(rows: BatchRow[], format: BatchFileFormat, naming: BatchNaming, ctx: BatchFileExportContext, onProgress?: (progress: BatchExportProgress) => void): Promise<BatchFileExportResult>;
|
|
71
85
|
/** One file stays a file; several become a zip named after the template. */
|