@fluxfiles/node 0.1.13 → 0.1.15

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/index.d.mts CHANGED
@@ -99,6 +99,31 @@ interface BaseTokenOptions {
99
99
  /** Allow the paid Optimization module (POST /api/fm/optimize). Default **false** — opt-in.
100
100
  * Even when true, the optimize module must be installed + licensed on the server. */
101
101
  allowOptimize?: boolean;
102
+ /** Auto-optimize images on upload (recompress to WebP in the pipeline). Default false;
103
+ * only effective when the optimize module is installed + licensed on the server. */
104
+ autoOptimize?: boolean;
105
+ /** WebP quality for optimization, 40–95. `0`/omitted = inherit the server default (82). */
106
+ optimizeQuality?: number;
107
+ /** Target format for optimization: `'webp'` (default) or `'avif'` (falls back to
108
+ * WebP when the server build lacks AVIF). */
109
+ optimizeFormat?: 'webp' | 'avif';
110
+ /** Keep the original file when optimizing (default false = replace in place). */
111
+ optimizeKeepOriginal?: boolean;
112
+ /** Skip optimizing a file larger than this many MB (0/omitted = no limit). */
113
+ optimizeMaxMb?: number;
114
+ /** Ghostscript preset for PDF optimization. Default `'ebook'`. */
115
+ pdfLevel?: 'screen' | 'ebook' | 'printer' | 'prepress' | 'default';
116
+ /** How an upload whose NAME collides with an existing different file is handled
117
+ * (content dedup is separate, by hash): `'rename'` keep both `<name>-1.<ext>`
118
+ * (default), `'overwrite'` replace in place, `'reject'` 409 for the host to prompt. */
119
+ uploadCollision?: 'rename' | 'overwrite' | 'reject';
120
+ /** Show dotfiles (.env, .gitignore, …) in listings + search. Default **false** —
121
+ * dotfiles are hidden, matching Finder / cPanel / Nextcloud. */
122
+ showHidden?: boolean;
123
+ /** Refuse byte-for-byte duplicate uploads (SHA-256). Default **false** — an
124
+ * identical re-upload is kept as a copy (like Finder / Drive / Dropbox); set true
125
+ * to save storage by blocking duplicates. */
126
+ dedupeUploads?: boolean;
102
127
  /** Allow downloading a multi-file/-folder selection as a zip (POST /api/fm/zip). Default true. */
103
128
  allowZip?: boolean;
104
129
  /** Allow extracting a zip in place (POST /api/fm/extract). Default true. */
package/dist/index.d.ts CHANGED
@@ -99,6 +99,31 @@ interface BaseTokenOptions {
99
99
  /** Allow the paid Optimization module (POST /api/fm/optimize). Default **false** — opt-in.
100
100
  * Even when true, the optimize module must be installed + licensed on the server. */
101
101
  allowOptimize?: boolean;
102
+ /** Auto-optimize images on upload (recompress to WebP in the pipeline). Default false;
103
+ * only effective when the optimize module is installed + licensed on the server. */
104
+ autoOptimize?: boolean;
105
+ /** WebP quality for optimization, 40–95. `0`/omitted = inherit the server default (82). */
106
+ optimizeQuality?: number;
107
+ /** Target format for optimization: `'webp'` (default) or `'avif'` (falls back to
108
+ * WebP when the server build lacks AVIF). */
109
+ optimizeFormat?: 'webp' | 'avif';
110
+ /** Keep the original file when optimizing (default false = replace in place). */
111
+ optimizeKeepOriginal?: boolean;
112
+ /** Skip optimizing a file larger than this many MB (0/omitted = no limit). */
113
+ optimizeMaxMb?: number;
114
+ /** Ghostscript preset for PDF optimization. Default `'ebook'`. */
115
+ pdfLevel?: 'screen' | 'ebook' | 'printer' | 'prepress' | 'default';
116
+ /** How an upload whose NAME collides with an existing different file is handled
117
+ * (content dedup is separate, by hash): `'rename'` keep both `<name>-1.<ext>`
118
+ * (default), `'overwrite'` replace in place, `'reject'` 409 for the host to prompt. */
119
+ uploadCollision?: 'rename' | 'overwrite' | 'reject';
120
+ /** Show dotfiles (.env, .gitignore, …) in listings + search. Default **false** —
121
+ * dotfiles are hidden, matching Finder / cPanel / Nextcloud. */
122
+ showHidden?: boolean;
123
+ /** Refuse byte-for-byte duplicate uploads (SHA-256). Default **false** — an
124
+ * identical re-upload is kept as a copy (like Finder / Drive / Dropbox); set true
125
+ * to save storage by blocking duplicates. */
126
+ dedupeUploads?: boolean;
102
127
  /** Allow downloading a multi-file/-folder selection as a zip (POST /api/fm/zip). Default true. */
103
128
  allowZip?: boolean;
104
129
  /** Allow extracting a zip in place (POST /api/fm/extract). Default true. */
package/dist/index.js CHANGED
@@ -163,6 +163,19 @@ function applyTenantOverrides(payload, opts) {
163
163
  if (opts.allowChmod !== void 0) payload.allow_chmod = !!opts.allowChmod;
164
164
  if (opts.allowCodeEdit !== void 0) payload.allow_code_edit = !!opts.allowCodeEdit;
165
165
  if (opts.allowOptimize !== void 0) payload.allow_optimize = !!opts.allowOptimize;
166
+ if (opts.autoOptimize !== void 0) payload.auto_optimize = !!opts.autoOptimize;
167
+ if (opts.optimizeQuality && opts.optimizeQuality > 0) payload.optimize_quality = Math.trunc(opts.optimizeQuality);
168
+ if (opts.optimizeFormat === "avif") payload.optimize_format = "avif";
169
+ if (opts.optimizeKeepOriginal !== void 0) payload.optimize_keep_original = !!opts.optimizeKeepOriginal;
170
+ if (opts.optimizeMaxMb && opts.optimizeMaxMb > 0) payload.optimize_max_mb = Math.trunc(opts.optimizeMaxMb);
171
+ if (opts.pdfLevel && ["screen", "ebook", "printer", "prepress", "default"].includes(opts.pdfLevel)) {
172
+ payload.pdf_level = opts.pdfLevel;
173
+ }
174
+ if (opts.uploadCollision && ["rename", "overwrite", "reject"].includes(opts.uploadCollision)) {
175
+ payload.upload_collision = opts.uploadCollision;
176
+ }
177
+ if (opts.showHidden !== void 0) payload.show_hidden = !!opts.showHidden;
178
+ if (opts.dedupeUploads !== void 0) payload.dedupe_uploads = !!opts.dedupeUploads;
166
179
  if (opts.allowZip !== void 0) payload.allow_zip = !!opts.allowZip;
167
180
  if (opts.allowExtract !== void 0) payload.allow_extract = !!opts.allowExtract;
168
181
  if (opts.zipMaxMb && opts.zipMaxMb > 0) payload.zip_max_mb = Math.trunc(opts.zipMaxMb);
package/dist/index.mjs CHANGED
@@ -141,6 +141,19 @@ function applyTenantOverrides(payload, opts) {
141
141
  if (opts.allowChmod !== void 0) payload.allow_chmod = !!opts.allowChmod;
142
142
  if (opts.allowCodeEdit !== void 0) payload.allow_code_edit = !!opts.allowCodeEdit;
143
143
  if (opts.allowOptimize !== void 0) payload.allow_optimize = !!opts.allowOptimize;
144
+ if (opts.autoOptimize !== void 0) payload.auto_optimize = !!opts.autoOptimize;
145
+ if (opts.optimizeQuality && opts.optimizeQuality > 0) payload.optimize_quality = Math.trunc(opts.optimizeQuality);
146
+ if (opts.optimizeFormat === "avif") payload.optimize_format = "avif";
147
+ if (opts.optimizeKeepOriginal !== void 0) payload.optimize_keep_original = !!opts.optimizeKeepOriginal;
148
+ if (opts.optimizeMaxMb && opts.optimizeMaxMb > 0) payload.optimize_max_mb = Math.trunc(opts.optimizeMaxMb);
149
+ if (opts.pdfLevel && ["screen", "ebook", "printer", "prepress", "default"].includes(opts.pdfLevel)) {
150
+ payload.pdf_level = opts.pdfLevel;
151
+ }
152
+ if (opts.uploadCollision && ["rename", "overwrite", "reject"].includes(opts.uploadCollision)) {
153
+ payload.upload_collision = opts.uploadCollision;
154
+ }
155
+ if (opts.showHidden !== void 0) payload.show_hidden = !!opts.showHidden;
156
+ if (opts.dedupeUploads !== void 0) payload.dedupe_uploads = !!opts.dedupeUploads;
144
157
  if (opts.allowZip !== void 0) payload.allow_zip = !!opts.allowZip;
145
158
  if (opts.allowExtract !== void 0) payload.allow_extract = !!opts.allowExtract;
146
159
  if (opts.zipMaxMb && opts.zipMaxMb > 0) payload.zip_max_mb = Math.trunc(opts.zipMaxMb);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluxfiles/node",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "Server-side Node/TypeScript SDK for minting FluxFiles JWTs (plain + BYOB), byte-compatible with the PHP core",
5
5
  "license": "MIT",
6
6
  "sideEffects": false,
package/src/token.ts CHANGED
@@ -133,6 +133,19 @@ function applyTenantOverrides(payload: Record<string, unknown>, opts: BaseTokenO
133
133
  if (opts.allowChmod !== undefined) payload.allow_chmod = !!opts.allowChmod;
134
134
  if (opts.allowCodeEdit !== undefined) payload.allow_code_edit = !!opts.allowCodeEdit;
135
135
  if (opts.allowOptimize !== undefined) payload.allow_optimize = !!opts.allowOptimize;
136
+ if (opts.autoOptimize !== undefined) payload.auto_optimize = !!opts.autoOptimize;
137
+ if (opts.optimizeQuality && opts.optimizeQuality > 0) payload.optimize_quality = Math.trunc(opts.optimizeQuality);
138
+ if (opts.optimizeFormat === 'avif') payload.optimize_format = 'avif';
139
+ if (opts.optimizeKeepOriginal !== undefined) payload.optimize_keep_original = !!opts.optimizeKeepOriginal;
140
+ if (opts.optimizeMaxMb && opts.optimizeMaxMb > 0) payload.optimize_max_mb = Math.trunc(opts.optimizeMaxMb);
141
+ if (opts.pdfLevel && ['screen', 'ebook', 'printer', 'prepress', 'default'].includes(opts.pdfLevel)) {
142
+ payload.pdf_level = opts.pdfLevel;
143
+ }
144
+ if (opts.uploadCollision && ['rename', 'overwrite', 'reject'].includes(opts.uploadCollision)) {
145
+ payload.upload_collision = opts.uploadCollision;
146
+ }
147
+ if (opts.showHidden !== undefined) payload.show_hidden = !!opts.showHidden;
148
+ if (opts.dedupeUploads !== undefined) payload.dedupe_uploads = !!opts.dedupeUploads;
136
149
  if (opts.allowZip !== undefined) payload.allow_zip = !!opts.allowZip;
137
150
  if (opts.allowExtract !== undefined) payload.allow_extract = !!opts.allowExtract;
138
151
  if (opts.zipMaxMb && opts.zipMaxMb > 0) payload.zip_max_mb = Math.trunc(opts.zipMaxMb);
package/src/types.ts CHANGED
@@ -103,6 +103,31 @@ export interface BaseTokenOptions {
103
103
  /** Allow the paid Optimization module (POST /api/fm/optimize). Default **false** — opt-in.
104
104
  * Even when true, the optimize module must be installed + licensed on the server. */
105
105
  allowOptimize?: boolean;
106
+ /** Auto-optimize images on upload (recompress to WebP in the pipeline). Default false;
107
+ * only effective when the optimize module is installed + licensed on the server. */
108
+ autoOptimize?: boolean;
109
+ /** WebP quality for optimization, 40–95. `0`/omitted = inherit the server default (82). */
110
+ optimizeQuality?: number;
111
+ /** Target format for optimization: `'webp'` (default) or `'avif'` (falls back to
112
+ * WebP when the server build lacks AVIF). */
113
+ optimizeFormat?: 'webp' | 'avif';
114
+ /** Keep the original file when optimizing (default false = replace in place). */
115
+ optimizeKeepOriginal?: boolean;
116
+ /** Skip optimizing a file larger than this many MB (0/omitted = no limit). */
117
+ optimizeMaxMb?: number;
118
+ /** Ghostscript preset for PDF optimization. Default `'ebook'`. */
119
+ pdfLevel?: 'screen' | 'ebook' | 'printer' | 'prepress' | 'default';
120
+ /** How an upload whose NAME collides with an existing different file is handled
121
+ * (content dedup is separate, by hash): `'rename'` keep both `<name>-1.<ext>`
122
+ * (default), `'overwrite'` replace in place, `'reject'` 409 for the host to prompt. */
123
+ uploadCollision?: 'rename' | 'overwrite' | 'reject';
124
+ /** Show dotfiles (.env, .gitignore, …) in listings + search. Default **false** —
125
+ * dotfiles are hidden, matching Finder / cPanel / Nextcloud. */
126
+ showHidden?: boolean;
127
+ /** Refuse byte-for-byte duplicate uploads (SHA-256). Default **false** — an
128
+ * identical re-upload is kept as a copy (like Finder / Drive / Dropbox); set true
129
+ * to save storage by blocking duplicates. */
130
+ dedupeUploads?: boolean;
106
131
  /** Allow downloading a multi-file/-folder selection as a zip (POST /api/fm/zip). Default true. */
107
132
  allowZip?: boolean;
108
133
  /** Allow extracting a zip in place (POST /api/fm/extract). Default true. */