@fluxfiles/node 0.1.15 → 0.1.17
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 +15 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +16 -0
- package/dist/index.mjs +16 -0
- package/package.json +1 -1
- package/src/token.ts +19 -0
- package/src/types.ts +15 -0
package/dist/index.d.mts
CHANGED
|
@@ -96,6 +96,10 @@ interface BaseTokenOptions {
|
|
|
96
96
|
/** Allow editing a file's text content (GET/PUT /api/fm/content). Default **false** — editing
|
|
97
97
|
* config/executable files (wp-config.php, .env, nginx.conf, deploy.sh) is powerful, so it's opt-in. */
|
|
98
98
|
allowCodeEdit?: boolean;
|
|
99
|
+
/** Allow the SSH terminal (POST /api/fm/terminal) on an SFTP disk. Default **false** — grants shell
|
|
100
|
+
* access as the SSH user, so it's opt-in. Core-standalone: the token must target a real core
|
|
101
|
+
* (this SDK does), not a proxy adapter that doesn't serve /api/fm/terminal. */
|
|
102
|
+
allowTerminal?: boolean;
|
|
99
103
|
/** Allow the paid Optimization module (POST /api/fm/optimize). Default **false** — opt-in.
|
|
100
104
|
* Even when true, the optimize module must be installed + licensed on the server. */
|
|
101
105
|
allowOptimize?: boolean;
|
|
@@ -124,6 +128,17 @@ interface BaseTokenOptions {
|
|
|
124
128
|
* identical re-upload is kept as a copy (like Finder / Drive / Dropbox); set true
|
|
125
129
|
* to save storage by blocking duplicates. */
|
|
126
130
|
dedupeUploads?: boolean;
|
|
131
|
+
/** Edition preset that defaults a tier's claims (`pro`/`agency`/`enterprise`).
|
|
132
|
+
* DX sugar — explicit claim options still win, and the license gates the code. */
|
|
133
|
+
edition?: 'free' | 'pro' | 'agency' | 'enterprise';
|
|
134
|
+
/** Paid-module claims (3-layer gate: code installed + licensed + this claim).
|
|
135
|
+
* All default off; inert unless the module is installed & licensed on the server. */
|
|
136
|
+
allowShare?: boolean;
|
|
137
|
+
allowAiVision?: boolean;
|
|
138
|
+
allowOcr?: boolean;
|
|
139
|
+
allowVirusScan?: boolean;
|
|
140
|
+
allowBackup?: boolean;
|
|
141
|
+
allowC2pa?: boolean;
|
|
127
142
|
/** Allow downloading a multi-file/-folder selection as a zip (POST /api/fm/zip). Default true. */
|
|
128
143
|
allowZip?: boolean;
|
|
129
144
|
/** Allow extracting a zip in place (POST /api/fm/extract). Default true. */
|
package/dist/index.d.ts
CHANGED
|
@@ -96,6 +96,10 @@ interface BaseTokenOptions {
|
|
|
96
96
|
/** Allow editing a file's text content (GET/PUT /api/fm/content). Default **false** — editing
|
|
97
97
|
* config/executable files (wp-config.php, .env, nginx.conf, deploy.sh) is powerful, so it's opt-in. */
|
|
98
98
|
allowCodeEdit?: boolean;
|
|
99
|
+
/** Allow the SSH terminal (POST /api/fm/terminal) on an SFTP disk. Default **false** — grants shell
|
|
100
|
+
* access as the SSH user, so it's opt-in. Core-standalone: the token must target a real core
|
|
101
|
+
* (this SDK does), not a proxy adapter that doesn't serve /api/fm/terminal. */
|
|
102
|
+
allowTerminal?: boolean;
|
|
99
103
|
/** Allow the paid Optimization module (POST /api/fm/optimize). Default **false** — opt-in.
|
|
100
104
|
* Even when true, the optimize module must be installed + licensed on the server. */
|
|
101
105
|
allowOptimize?: boolean;
|
|
@@ -124,6 +128,17 @@ interface BaseTokenOptions {
|
|
|
124
128
|
* identical re-upload is kept as a copy (like Finder / Drive / Dropbox); set true
|
|
125
129
|
* to save storage by blocking duplicates. */
|
|
126
130
|
dedupeUploads?: boolean;
|
|
131
|
+
/** Edition preset that defaults a tier's claims (`pro`/`agency`/`enterprise`).
|
|
132
|
+
* DX sugar — explicit claim options still win, and the license gates the code. */
|
|
133
|
+
edition?: 'free' | 'pro' | 'agency' | 'enterprise';
|
|
134
|
+
/** Paid-module claims (3-layer gate: code installed + licensed + this claim).
|
|
135
|
+
* All default off; inert unless the module is installed & licensed on the server. */
|
|
136
|
+
allowShare?: boolean;
|
|
137
|
+
allowAiVision?: boolean;
|
|
138
|
+
allowOcr?: boolean;
|
|
139
|
+
allowVirusScan?: boolean;
|
|
140
|
+
allowBackup?: boolean;
|
|
141
|
+
allowC2pa?: boolean;
|
|
127
142
|
/** Allow downloading a multi-file/-folder selection as a zip (POST /api/fm/zip). Default true. */
|
|
128
143
|
allowZip?: boolean;
|
|
129
144
|
/** Allow extracting a zip in place (POST /api/fm/extract). Default true. */
|
package/dist/index.js
CHANGED
|
@@ -136,7 +136,16 @@ function sanitizeVariants(v) {
|
|
|
136
136
|
}
|
|
137
137
|
return Object.keys(out).length ? out : null;
|
|
138
138
|
}
|
|
139
|
+
var EDITION_PRESETS = {
|
|
140
|
+
pro: { allow_optimize: true, allow_share: true },
|
|
141
|
+
agency: { allow_optimize: true, allow_share: true },
|
|
142
|
+
enterprise: { allow_optimize: true, allow_share: true, allow_virus_scan: true }
|
|
143
|
+
};
|
|
139
144
|
function applyTenantOverrides(payload, opts) {
|
|
145
|
+
const preset = opts.edition ? EDITION_PRESETS[String(opts.edition).toLowerCase()] : void 0;
|
|
146
|
+
if (preset) {
|
|
147
|
+
for (const [k, v] of Object.entries(preset)) if (!(k in payload)) payload[k] = v;
|
|
148
|
+
}
|
|
140
149
|
if (opts.aiAutoTag !== void 0) payload.ai_auto_tag = !!opts.aiAutoTag;
|
|
141
150
|
if (opts.rateRead && opts.rateRead > 0) payload.rate_read = Math.trunc(opts.rateRead);
|
|
142
151
|
if (opts.rateWrite && opts.rateWrite > 0) payload.rate_write = Math.trunc(opts.rateWrite);
|
|
@@ -162,7 +171,14 @@ function applyTenantOverrides(payload, opts) {
|
|
|
162
171
|
if (opts.allowDownload !== void 0) payload.allow_download = !!opts.allowDownload;
|
|
163
172
|
if (opts.allowChmod !== void 0) payload.allow_chmod = !!opts.allowChmod;
|
|
164
173
|
if (opts.allowCodeEdit !== void 0) payload.allow_code_edit = !!opts.allowCodeEdit;
|
|
174
|
+
if (opts.allowTerminal !== void 0) payload.allow_terminal = !!opts.allowTerminal;
|
|
165
175
|
if (opts.allowOptimize !== void 0) payload.allow_optimize = !!opts.allowOptimize;
|
|
176
|
+
if (opts.allowShare !== void 0) payload.allow_share = !!opts.allowShare;
|
|
177
|
+
if (opts.allowAiVision !== void 0) payload.allow_ai_vision = !!opts.allowAiVision;
|
|
178
|
+
if (opts.allowOcr !== void 0) payload.allow_ocr = !!opts.allowOcr;
|
|
179
|
+
if (opts.allowVirusScan !== void 0) payload.allow_virus_scan = !!opts.allowVirusScan;
|
|
180
|
+
if (opts.allowBackup !== void 0) payload.allow_backup = !!opts.allowBackup;
|
|
181
|
+
if (opts.allowC2pa !== void 0) payload.allow_c2pa = !!opts.allowC2pa;
|
|
166
182
|
if (opts.autoOptimize !== void 0) payload.auto_optimize = !!opts.autoOptimize;
|
|
167
183
|
if (opts.optimizeQuality && opts.optimizeQuality > 0) payload.optimize_quality = Math.trunc(opts.optimizeQuality);
|
|
168
184
|
if (opts.optimizeFormat === "avif") payload.optimize_format = "avif";
|
package/dist/index.mjs
CHANGED
|
@@ -114,7 +114,16 @@ function sanitizeVariants(v) {
|
|
|
114
114
|
}
|
|
115
115
|
return Object.keys(out).length ? out : null;
|
|
116
116
|
}
|
|
117
|
+
var EDITION_PRESETS = {
|
|
118
|
+
pro: { allow_optimize: true, allow_share: true },
|
|
119
|
+
agency: { allow_optimize: true, allow_share: true },
|
|
120
|
+
enterprise: { allow_optimize: true, allow_share: true, allow_virus_scan: true }
|
|
121
|
+
};
|
|
117
122
|
function applyTenantOverrides(payload, opts) {
|
|
123
|
+
const preset = opts.edition ? EDITION_PRESETS[String(opts.edition).toLowerCase()] : void 0;
|
|
124
|
+
if (preset) {
|
|
125
|
+
for (const [k, v] of Object.entries(preset)) if (!(k in payload)) payload[k] = v;
|
|
126
|
+
}
|
|
118
127
|
if (opts.aiAutoTag !== void 0) payload.ai_auto_tag = !!opts.aiAutoTag;
|
|
119
128
|
if (opts.rateRead && opts.rateRead > 0) payload.rate_read = Math.trunc(opts.rateRead);
|
|
120
129
|
if (opts.rateWrite && opts.rateWrite > 0) payload.rate_write = Math.trunc(opts.rateWrite);
|
|
@@ -140,7 +149,14 @@ function applyTenantOverrides(payload, opts) {
|
|
|
140
149
|
if (opts.allowDownload !== void 0) payload.allow_download = !!opts.allowDownload;
|
|
141
150
|
if (opts.allowChmod !== void 0) payload.allow_chmod = !!opts.allowChmod;
|
|
142
151
|
if (opts.allowCodeEdit !== void 0) payload.allow_code_edit = !!opts.allowCodeEdit;
|
|
152
|
+
if (opts.allowTerminal !== void 0) payload.allow_terminal = !!opts.allowTerminal;
|
|
143
153
|
if (opts.allowOptimize !== void 0) payload.allow_optimize = !!opts.allowOptimize;
|
|
154
|
+
if (opts.allowShare !== void 0) payload.allow_share = !!opts.allowShare;
|
|
155
|
+
if (opts.allowAiVision !== void 0) payload.allow_ai_vision = !!opts.allowAiVision;
|
|
156
|
+
if (opts.allowOcr !== void 0) payload.allow_ocr = !!opts.allowOcr;
|
|
157
|
+
if (opts.allowVirusScan !== void 0) payload.allow_virus_scan = !!opts.allowVirusScan;
|
|
158
|
+
if (opts.allowBackup !== void 0) payload.allow_backup = !!opts.allowBackup;
|
|
159
|
+
if (opts.allowC2pa !== void 0) payload.allow_c2pa = !!opts.allowC2pa;
|
|
144
160
|
if (opts.autoOptimize !== void 0) payload.auto_optimize = !!opts.autoOptimize;
|
|
145
161
|
if (opts.optimizeQuality && opts.optimizeQuality > 0) payload.optimize_quality = Math.trunc(opts.optimizeQuality);
|
|
146
162
|
if (opts.optimizeFormat === "avif") payload.optimize_format = "avif";
|
package/package.json
CHANGED
package/src/token.ts
CHANGED
|
@@ -97,8 +97,17 @@ function sanitizeVariants(v: BaseTokenOptions['variants']): Record<string, numbe
|
|
|
97
97
|
return Object.keys(out).length ? out : null;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
+
/** Edition preset (DX sugar): default a tier's claims; explicit opts below win. */
|
|
101
|
+
const EDITION_PRESETS: Record<string, Record<string, boolean>> = {
|
|
102
|
+
pro: { allow_optimize: true, allow_share: true },
|
|
103
|
+
agency: { allow_optimize: true, allow_share: true },
|
|
104
|
+
enterprise: { allow_optimize: true, allow_share: true, allow_virus_scan: true },
|
|
105
|
+
};
|
|
106
|
+
|
|
100
107
|
/** Copy the optional per-tenant override claims into a payload when set. */
|
|
101
108
|
function applyTenantOverrides(payload: Record<string, unknown>, opts: BaseTokenOptions): void {
|
|
109
|
+
const preset = opts.edition ? EDITION_PRESETS[String(opts.edition).toLowerCase()] : undefined;
|
|
110
|
+
if (preset) for (const [k, v] of Object.entries(preset)) if (!(k in payload)) payload[k] = v;
|
|
102
111
|
if (opts.aiAutoTag !== undefined) payload.ai_auto_tag = !!opts.aiAutoTag;
|
|
103
112
|
if (opts.rateRead && opts.rateRead > 0) payload.rate_read = Math.trunc(opts.rateRead);
|
|
104
113
|
if (opts.rateWrite && opts.rateWrite > 0) payload.rate_write = Math.trunc(opts.rateWrite);
|
|
@@ -132,7 +141,17 @@ function applyTenantOverrides(payload: Record<string, unknown>, opts: BaseTokenO
|
|
|
132
141
|
if (opts.allowDownload !== undefined) payload.allow_download = !!opts.allowDownload;
|
|
133
142
|
if (opts.allowChmod !== undefined) payload.allow_chmod = !!opts.allowChmod;
|
|
134
143
|
if (opts.allowCodeEdit !== undefined) payload.allow_code_edit = !!opts.allowCodeEdit;
|
|
144
|
+
// SSH terminal (SFTP disks). Core-standalone — the token must target a real core
|
|
145
|
+
// (Node mints for one), not a proxy adapter that doesn't serve /api/fm/terminal.
|
|
146
|
+
if (opts.allowTerminal !== undefined) payload.allow_terminal = !!opts.allowTerminal;
|
|
135
147
|
if (opts.allowOptimize !== undefined) payload.allow_optimize = !!opts.allowOptimize;
|
|
148
|
+
// Other paid-module claims (inert unless the module is installed + licensed).
|
|
149
|
+
if (opts.allowShare !== undefined) payload.allow_share = !!opts.allowShare;
|
|
150
|
+
if (opts.allowAiVision !== undefined) payload.allow_ai_vision = !!opts.allowAiVision;
|
|
151
|
+
if (opts.allowOcr !== undefined) payload.allow_ocr = !!opts.allowOcr;
|
|
152
|
+
if (opts.allowVirusScan !== undefined) payload.allow_virus_scan = !!opts.allowVirusScan;
|
|
153
|
+
if (opts.allowBackup !== undefined) payload.allow_backup = !!opts.allowBackup;
|
|
154
|
+
if (opts.allowC2pa !== undefined) payload.allow_c2pa = !!opts.allowC2pa;
|
|
136
155
|
if (opts.autoOptimize !== undefined) payload.auto_optimize = !!opts.autoOptimize;
|
|
137
156
|
if (opts.optimizeQuality && opts.optimizeQuality > 0) payload.optimize_quality = Math.trunc(opts.optimizeQuality);
|
|
138
157
|
if (opts.optimizeFormat === 'avif') payload.optimize_format = 'avif';
|
package/src/types.ts
CHANGED
|
@@ -100,6 +100,10 @@ export interface BaseTokenOptions {
|
|
|
100
100
|
/** Allow editing a file's text content (GET/PUT /api/fm/content). Default **false** — editing
|
|
101
101
|
* config/executable files (wp-config.php, .env, nginx.conf, deploy.sh) is powerful, so it's opt-in. */
|
|
102
102
|
allowCodeEdit?: boolean;
|
|
103
|
+
/** Allow the SSH terminal (POST /api/fm/terminal) on an SFTP disk. Default **false** — grants shell
|
|
104
|
+
* access as the SSH user, so it's opt-in. Core-standalone: the token must target a real core
|
|
105
|
+
* (this SDK does), not a proxy adapter that doesn't serve /api/fm/terminal. */
|
|
106
|
+
allowTerminal?: boolean;
|
|
103
107
|
/** Allow the paid Optimization module (POST /api/fm/optimize). Default **false** — opt-in.
|
|
104
108
|
* Even when true, the optimize module must be installed + licensed on the server. */
|
|
105
109
|
allowOptimize?: boolean;
|
|
@@ -128,6 +132,17 @@ export interface BaseTokenOptions {
|
|
|
128
132
|
* identical re-upload is kept as a copy (like Finder / Drive / Dropbox); set true
|
|
129
133
|
* to save storage by blocking duplicates. */
|
|
130
134
|
dedupeUploads?: boolean;
|
|
135
|
+
/** Edition preset that defaults a tier's claims (`pro`/`agency`/`enterprise`).
|
|
136
|
+
* DX sugar — explicit claim options still win, and the license gates the code. */
|
|
137
|
+
edition?: 'free' | 'pro' | 'agency' | 'enterprise';
|
|
138
|
+
/** Paid-module claims (3-layer gate: code installed + licensed + this claim).
|
|
139
|
+
* All default off; inert unless the module is installed & licensed on the server. */
|
|
140
|
+
allowShare?: boolean;
|
|
141
|
+
allowAiVision?: boolean;
|
|
142
|
+
allowOcr?: boolean;
|
|
143
|
+
allowVirusScan?: boolean;
|
|
144
|
+
allowBackup?: boolean;
|
|
145
|
+
allowC2pa?: boolean;
|
|
131
146
|
/** Allow downloading a multi-file/-folder selection as a zip (POST /api/fm/zip). Default true. */
|
|
132
147
|
allowZip?: boolean;
|
|
133
148
|
/** Allow extracting a zip in place (POST /api/fm/extract). Default true. */
|