transloadit 4.7.2 → 4.7.3
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 +10 -0
- package/dist/cli/commands/BaseCommand.d.ts.map +1 -1
- package/dist/cli/commands/BaseCommand.js +8 -5
- package/dist/cli/commands/BaseCommand.js.map +1 -1
- package/dist/cli/commands/auth.d.ts +15 -0
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +203 -42
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/helpers.d.ts +10 -2
- package/dist/cli/helpers.d.ts.map +1 -1
- package/dist/cli/helpers.js +8 -1
- package/dist/cli/helpers.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/BaseCommand.ts +8 -7
- package/src/cli/commands/auth.ts +248 -56
- package/src/cli/commands/index.ts +2 -1
- package/src/cli/helpers.ts +16 -1
package/README.md
CHANGED
|
@@ -57,6 +57,16 @@ export TRANSLOADIT_SECRET="YOUR_TRANSLOADIT_SECRET"
|
|
|
57
57
|
npx transloadit --help
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
### Minting Bearer Tokens (Hosted MCP)
|
|
61
|
+
|
|
62
|
+
If you want to connect an agent to the Transloadit-hosted MCP endpoint, mint a short-lived bearer
|
|
63
|
+
token via `POST /token`:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Prints JSON to stdout (stderr may include npx/npm noise)
|
|
67
|
+
npx -y transloadit auth token --aud mcp
|
|
68
|
+
```
|
|
69
|
+
|
|
60
70
|
### Processing Media
|
|
61
71
|
|
|
62
72
|
Create Assemblies to process files using Assembly Instructions (steps) or Templates:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/BaseCommand.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAEtB,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,uBAAe,WAAY,SAAQ,OAAO;IACxC,cAAc,qBAEZ;IAEF,IAAI,UAEF;IAEF,QAAQ,qBAGN;IAEF,SAAS,CAAC,MAAM,EAAG,UAAU,CAAA;IAC7B,SAAS,CAAC,MAAM,EAAG,iBAAiB,CAAA;IAEpC,SAAS,CAAC,WAAW,IAAI,IAAI;IAQ7B,SAAS,CAAC,WAAW,IAAI,OAAO;
|
|
1
|
+
{"version":3,"file":"BaseCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/BaseCommand.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAEtB,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,uBAAe,WAAY,SAAQ,OAAO;IACxC,cAAc,qBAEZ;IAEF,IAAI,UAEF;IAEF,QAAQ,qBAGN;IAEF,SAAS,CAAC,MAAM,EAAG,UAAU,CAAA;IAC7B,SAAS,CAAC,MAAM,EAAG,iBAAiB,CAAA;IAEpC,SAAS,CAAC,WAAW,IAAI,IAAI;IAQ7B,SAAS,CAAC,WAAW,IAAI,OAAO;aAgBd,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CACzD;AAED,8BAAsB,oBAAqB,SAAQ,WAAW;IAC7C,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQrD,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CACtD;AAED,8BAAsB,sBAAuB,SAAQ,WAAW;IAC/C,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKrD,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CACtD"}
|
|
@@ -2,7 +2,7 @@ import 'dotenv/config';
|
|
|
2
2
|
import process from 'node:process';
|
|
3
3
|
import { Command, Option } from 'clipanion';
|
|
4
4
|
import { Transloadit as TransloaditClient } from "../../Transloadit.js";
|
|
5
|
-
import {
|
|
5
|
+
import { requireEnvCredentials } from "../helpers.js";
|
|
6
6
|
import OutputCtl, { LOG_LEVEL_DEFAULT, LOG_LEVEL_NAMES, parseLogLevel } from "../OutputCtl.js";
|
|
7
7
|
class BaseCommand extends Command {
|
|
8
8
|
logLevelOption = Option.String('-l,--log-level', {
|
|
@@ -24,13 +24,16 @@ class BaseCommand extends Command {
|
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
setupClient() {
|
|
27
|
-
const
|
|
28
|
-
if (!
|
|
29
|
-
this.output.error(
|
|
27
|
+
const credsResult = requireEnvCredentials();
|
|
28
|
+
if (!credsResult.ok) {
|
|
29
|
+
this.output.error(credsResult.error);
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
32
|
const endpoint = this.endpoint || process.env.TRANSLOADIT_ENDPOINT;
|
|
33
|
-
this.client = new TransloaditClient({
|
|
33
|
+
this.client = new TransloaditClient({
|
|
34
|
+
...credsResult.credentials,
|
|
35
|
+
...(endpoint && { endpoint }),
|
|
36
|
+
});
|
|
34
37
|
return true;
|
|
35
38
|
}
|
|
36
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/BaseCommand.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AACtB,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BaseCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/BaseCommand.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AACtB,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,OAAO,SAAS,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE9F,MAAe,WAAY,SAAQ,OAAO;IACxC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE;QAC/C,WAAW,EAAE,cAAc,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B;KACjF,CAAC,CAAA;IAEF,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE;QACxC,WAAW,EAAE,uBAAuB;KACrC,CAAC,CAAA;IAEF,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACrC,WAAW,EACT,2FAA2F;KAC9F,CAAC,CAAA;IAEQ,MAAM,CAAa;IACnB,MAAM,CAAoB;IAE1B,WAAW;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;QAC7F,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,QAAQ;YACR,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC,CAAA;IACJ,CAAC;IAES,WAAW;QACnB,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAA;QAC3C,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACpC,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;QAElE,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC;YAClC,GAAG,WAAW,CAAC,WAAW;YAC1B,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC9B,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CAGF;AAED,MAAM,OAAgB,oBAAqB,SAAQ,WAAW;IACnD,KAAK,CAAC,OAAO;QACpB,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,CAAA;QACV,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;IACzB,CAAC;CAGF;AAED,MAAM,OAAgB,sBAAuB,SAAQ,WAAW;IACrD,KAAK,CAAC,OAAO;QACpB,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;IACzB,CAAC;CAGF"}
|
|
@@ -6,6 +6,10 @@ export interface RunSigOptions {
|
|
|
6
6
|
export interface RunSmartSigOptions {
|
|
7
7
|
providedInput?: string;
|
|
8
8
|
}
|
|
9
|
+
export interface RequestTokenOptions {
|
|
10
|
+
endpoint?: string;
|
|
11
|
+
aud?: string;
|
|
12
|
+
}
|
|
9
13
|
export declare function runSig(options?: RunSigOptions): Promise<void>;
|
|
10
14
|
export declare function runSmartSig(options?: RunSmartSigOptions): Promise<void>;
|
|
11
15
|
/**
|
|
@@ -25,4 +29,15 @@ export declare class SmartCdnSignatureCommand extends UnauthenticatedCommand {
|
|
|
25
29
|
static usage: import("clipanion").Usage;
|
|
26
30
|
protected run(): Promise<number | undefined>;
|
|
27
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Mint a short-lived bearer token via POST /token (HTTP Basic Auth).
|
|
34
|
+
*
|
|
35
|
+
* This is intentionally stdout-clean JSON so it can be used by agents and scripts.
|
|
36
|
+
*/
|
|
37
|
+
export declare class TokenCommand extends UnauthenticatedCommand {
|
|
38
|
+
static paths: string[][];
|
|
39
|
+
static usage: import("clipanion").Usage;
|
|
40
|
+
aud: string | undefined;
|
|
41
|
+
protected run(): Promise<number | undefined>;
|
|
42
|
+
}
|
|
28
43
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAgLzD,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAgLzD,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAkJD,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBvE;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBjF;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,sBAAsB;IAC1D,OAAgB,KAAK,aAKpB;IAED,OAAgB,KAAK,4BAYnB;IAEF,SAAS,qBAEP;cAEc,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAoBnD;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,sBAAsB;IAClE,OAAgB,KAAK,aAKpB;IAED,OAAgB,KAAK,4BAkBnB;cAEc,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAoBnD;AAED;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,sBAAsB;IACtD,OAAgB,KAAK,aAAsB;IAE3C,OAAgB,KAAK,4BAWnB;IAEF,GAAG,qBAED;cAEuB,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAoB5D"}
|
|
@@ -3,7 +3,7 @@ import { Command, Option } from 'clipanion';
|
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { assemblyAuthInstructionsSchema, assemblyInstructionsSchema, } from "../../alphalib/types/template.js";
|
|
5
5
|
import { Transloadit } from "../../Transloadit.js";
|
|
6
|
-
import {
|
|
6
|
+
import { readCliInput, requireEnvCredentials } from "../helpers.js";
|
|
7
7
|
import { UnauthenticatedCommand } from "./BaseCommand.js";
|
|
8
8
|
const smartCdnParamsSchema = z
|
|
9
9
|
.object({
|
|
@@ -52,7 +52,23 @@ function normalizeUrlParams(params) {
|
|
|
52
52
|
}
|
|
53
53
|
return normalized;
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
function parseJsonObject(input, schema) {
|
|
56
|
+
let parsed;
|
|
57
|
+
try {
|
|
58
|
+
parsed = JSON.parse(input);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return { ok: false, error: `Failed to parse JSON from stdin: ${error.message}` };
|
|
62
|
+
}
|
|
63
|
+
if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
64
|
+
return { ok: false, error: 'Invalid params provided via stdin. Expected a JSON object.' };
|
|
65
|
+
}
|
|
66
|
+
const parsedResult = schema.safeParse(parsed);
|
|
67
|
+
if (!parsedResult.success) {
|
|
68
|
+
return { ok: false, error: `Invalid params: ${formatIssues(parsedResult.error.issues)}` };
|
|
69
|
+
}
|
|
70
|
+
return { ok: true, value: parsedResult.data };
|
|
71
|
+
}
|
|
56
72
|
// Core logic for signature generation
|
|
57
73
|
function generateSignature(input, credentials, algorithm) {
|
|
58
74
|
const { authKey, authSecret } = credentials;
|
|
@@ -61,21 +77,11 @@ function generateSignature(input, credentials, algorithm) {
|
|
|
61
77
|
params = { auth: { key: authKey } };
|
|
62
78
|
}
|
|
63
79
|
else {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
return { ok: false, error: `Failed to parse JSON from stdin: ${error.message}` };
|
|
80
|
+
const parsedResult = parseJsonObject(input, cliSignatureParamsSchema);
|
|
81
|
+
if (!parsedResult.ok) {
|
|
82
|
+
return { ok: false, error: parsedResult.error };
|
|
70
83
|
}
|
|
71
|
-
|
|
72
|
-
return { ok: false, error: 'Invalid params provided via stdin. Expected a JSON object.' };
|
|
73
|
-
}
|
|
74
|
-
const parsedResult = cliSignatureParamsSchema.safeParse(parsed);
|
|
75
|
-
if (!parsedResult.success) {
|
|
76
|
-
return { ok: false, error: `Invalid params: ${formatIssues(parsedResult.error.issues)}` };
|
|
77
|
-
}
|
|
78
|
-
const parsedParams = parsedResult.data;
|
|
84
|
+
const parsedParams = parsedResult.value;
|
|
79
85
|
const existingAuth = parsedParams.auth ?? {};
|
|
80
86
|
params = {
|
|
81
87
|
...parsedParams,
|
|
@@ -103,21 +109,11 @@ function generateSmartCdnUrl(input, credentials) {
|
|
|
103
109
|
error: 'Missing params provided via stdin. Expected a JSON object with workspace, template, input, and optional Smart CDN parameters.',
|
|
104
110
|
};
|
|
105
111
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
return { ok: false, error: `Failed to parse JSON from stdin: ${error.message}` };
|
|
112
|
+
const parsedResult = parseJsonObject(input, smartCdnParamsSchema);
|
|
113
|
+
if (!parsedResult.ok) {
|
|
114
|
+
return { ok: false, error: parsedResult.error };
|
|
112
115
|
}
|
|
113
|
-
|
|
114
|
-
return { ok: false, error: 'Invalid params provided via stdin. Expected a JSON object.' };
|
|
115
|
-
}
|
|
116
|
-
const parsedResult = smartCdnParamsSchema.safeParse(parsed);
|
|
117
|
-
if (!parsedResult.success) {
|
|
118
|
-
return { ok: false, error: `Invalid params: ${formatIssues(parsedResult.error.issues)}` };
|
|
119
|
-
}
|
|
120
|
-
const { workspace, template, input: inputFieldRaw, url_params, expire_at_ms } = parsedResult.data;
|
|
116
|
+
const { workspace, template, input: inputFieldRaw, url_params, expire_at_ms } = parsedResult.value;
|
|
121
117
|
const urlParams = normalizeUrlParams(url_params);
|
|
122
118
|
let expiresAt;
|
|
123
119
|
if (typeof expire_at_ms === 'string') {
|
|
@@ -146,13 +142,135 @@ function generateSmartCdnUrl(input, credentials) {
|
|
|
146
142
|
return { ok: false, error: `Failed to generate Smart CDN URL: ${error.message}` };
|
|
147
143
|
}
|
|
148
144
|
}
|
|
145
|
+
const tokenErrorSchema = z
|
|
146
|
+
.object({
|
|
147
|
+
error: z.string(),
|
|
148
|
+
message: z.string().optional(),
|
|
149
|
+
})
|
|
150
|
+
.passthrough();
|
|
151
|
+
const tokenSuccessSchema = z
|
|
152
|
+
.object({
|
|
153
|
+
access_token: z.string().min(1),
|
|
154
|
+
})
|
|
155
|
+
.passthrough();
|
|
156
|
+
const buildBasicAuthHeaderValue = (credentials) => `Basic ${Buffer.from(`${credentials.authKey}:${credentials.authSecret}`, 'utf8').toString('base64')}`;
|
|
157
|
+
const isLoopbackHost = (hostname) => hostname === 'localhost' || hostname === '::1' || hostname.startsWith('127.');
|
|
158
|
+
const normalizeTokenBaseEndpoint = (raw) => {
|
|
159
|
+
const baseRaw = (raw || process.env.TRANSLOADIT_ENDPOINT || 'https://api2.transloadit.com').trim();
|
|
160
|
+
let url;
|
|
161
|
+
try {
|
|
162
|
+
url = new URL(baseRaw);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return {
|
|
166
|
+
ok: false,
|
|
167
|
+
error: 'Invalid endpoint URL. Use --endpoint https://api2.transloadit.com (or set TRANSLOADIT_ENDPOINT).',
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
if (url.username || url.password) {
|
|
171
|
+
return { ok: false, error: 'Endpoint must not include username/password.' };
|
|
172
|
+
}
|
|
173
|
+
if (url.search || url.hash) {
|
|
174
|
+
return { ok: false, error: 'Endpoint must not include query string or hash.' };
|
|
175
|
+
}
|
|
176
|
+
if (url.protocol !== 'https:') {
|
|
177
|
+
if (url.protocol === 'http:' && isLoopbackHost(url.hostname)) {
|
|
178
|
+
// Allowed for local development only.
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
return {
|
|
182
|
+
ok: false,
|
|
183
|
+
error: 'Refusing to send credentials to a non-HTTPS endpoint. Use https://... (or http://localhost for local development).',
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// If someone pasted the token URL, normalize it back to the API base to avoid /token/token.
|
|
188
|
+
const pathLower = url.pathname.toLowerCase();
|
|
189
|
+
if (pathLower === '/token' || pathLower === '/token/') {
|
|
190
|
+
url.pathname = '/';
|
|
191
|
+
}
|
|
192
|
+
if (!url.pathname.endsWith('/')) {
|
|
193
|
+
url.pathname = `${url.pathname}/`;
|
|
194
|
+
}
|
|
195
|
+
return { ok: true, baseUrl: url };
|
|
196
|
+
};
|
|
197
|
+
async function requestTokenWithCredentials(credentials, options = {}) {
|
|
198
|
+
const endpointResult = normalizeTokenBaseEndpoint(options.endpoint);
|
|
199
|
+
if (!endpointResult.ok) {
|
|
200
|
+
return { ok: false, error: endpointResult.error };
|
|
201
|
+
}
|
|
202
|
+
const url = new URL('token', endpointResult.baseUrl).toString();
|
|
203
|
+
const aud = (options.aud ?? 'mcp').trim() || 'mcp';
|
|
204
|
+
const body = new URLSearchParams({ grant_type: 'client_credentials', aud }).toString();
|
|
205
|
+
let res;
|
|
206
|
+
const controller = new AbortController();
|
|
207
|
+
const timeout = setTimeout(() => controller.abort(), 15_000);
|
|
208
|
+
try {
|
|
209
|
+
res = await fetch(url, {
|
|
210
|
+
method: 'POST',
|
|
211
|
+
// Never follow redirects with Basic Auth credentials.
|
|
212
|
+
redirect: 'error',
|
|
213
|
+
signal: controller.signal,
|
|
214
|
+
headers: {
|
|
215
|
+
Authorization: buildBasicAuthHeaderValue(credentials),
|
|
216
|
+
Accept: 'application/json',
|
|
217
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
218
|
+
},
|
|
219
|
+
body,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
clearTimeout(timeout);
|
|
224
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
225
|
+
return { ok: false, error: 'Failed to mint bearer token: request timed out after 15s.' };
|
|
226
|
+
}
|
|
227
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
228
|
+
return { ok: false, error: `Failed to mint bearer token: ${message}` };
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
clearTimeout(timeout);
|
|
232
|
+
}
|
|
233
|
+
const text = await res.text();
|
|
234
|
+
const trimmed = text.trim();
|
|
235
|
+
let parsedJson = null;
|
|
236
|
+
try {
|
|
237
|
+
parsedJson = trimmed ? JSON.parse(trimmed) : null;
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
parsedJson = null;
|
|
241
|
+
}
|
|
242
|
+
if (res.ok) {
|
|
243
|
+
if (parsedJson == null) {
|
|
244
|
+
return { ok: false, error: 'Token response was not valid JSON.' };
|
|
245
|
+
}
|
|
246
|
+
const parsed = tokenSuccessSchema.safeParse(parsedJson);
|
|
247
|
+
if (!parsed.success) {
|
|
248
|
+
return { ok: false, error: 'Token response did not include an access_token.' };
|
|
249
|
+
}
|
|
250
|
+
return { ok: true, output: trimmed };
|
|
251
|
+
}
|
|
252
|
+
const parsedError = tokenErrorSchema.safeParse(parsedJson);
|
|
253
|
+
if (parsedError.success) {
|
|
254
|
+
return {
|
|
255
|
+
ok: false,
|
|
256
|
+
error: parsedError.data.message
|
|
257
|
+
? `${parsedError.data.error}: ${parsedError.data.message}`
|
|
258
|
+
: parsedError.data.error,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
ok: false,
|
|
263
|
+
error: `Token request failed (${res.status}): ${trimmed || res.statusText}`,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
149
266
|
export async function runSig(options = {}) {
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
152
|
-
console.error(
|
|
267
|
+
const credentialsResult = requireEnvCredentials();
|
|
268
|
+
if (!credentialsResult.ok) {
|
|
269
|
+
console.error(credentialsResult.error);
|
|
153
270
|
process.exitCode = 1;
|
|
154
271
|
return;
|
|
155
272
|
}
|
|
273
|
+
const credentials = credentialsResult.credentials;
|
|
156
274
|
const { content } = await readCliInput({
|
|
157
275
|
providedInput: options.providedInput,
|
|
158
276
|
allowStdinWhenNoPath: true,
|
|
@@ -168,12 +286,13 @@ export async function runSig(options = {}) {
|
|
|
168
286
|
}
|
|
169
287
|
}
|
|
170
288
|
export async function runSmartSig(options = {}) {
|
|
171
|
-
const
|
|
172
|
-
if (
|
|
173
|
-
console.error(
|
|
289
|
+
const credentialsResult = requireEnvCredentials();
|
|
290
|
+
if (!credentialsResult.ok) {
|
|
291
|
+
console.error(credentialsResult.error);
|
|
174
292
|
process.exitCode = 1;
|
|
175
293
|
return;
|
|
176
294
|
}
|
|
295
|
+
const credentials = credentialsResult.credentials;
|
|
177
296
|
const { content } = await readCliInput({
|
|
178
297
|
providedInput: options.providedInput,
|
|
179
298
|
allowStdinWhenNoPath: true,
|
|
@@ -215,11 +334,12 @@ export class SignatureCommand extends UnauthenticatedCommand {
|
|
|
215
334
|
description: 'Signature algorithm to use (sha1, sha256, sha384, sha512)',
|
|
216
335
|
});
|
|
217
336
|
async run() {
|
|
218
|
-
const
|
|
219
|
-
if (
|
|
220
|
-
this.output.error(
|
|
337
|
+
const credentialsResult = requireEnvCredentials();
|
|
338
|
+
if (!credentialsResult.ok) {
|
|
339
|
+
this.output.error(credentialsResult.error);
|
|
221
340
|
return 1;
|
|
222
341
|
}
|
|
342
|
+
const credentials = credentialsResult.credentials;
|
|
223
343
|
const { content } = await readCliInput({ allowStdinWhenNoPath: true });
|
|
224
344
|
const rawInput = (content ?? '').trim();
|
|
225
345
|
const result = generateSignature(rawInput, credentials, this.algorithm);
|
|
@@ -261,11 +381,12 @@ export class SmartCdnSignatureCommand extends UnauthenticatedCommand {
|
|
|
261
381
|
],
|
|
262
382
|
});
|
|
263
383
|
async run() {
|
|
264
|
-
const
|
|
265
|
-
if (
|
|
266
|
-
this.output.error(
|
|
384
|
+
const credentialsResult = requireEnvCredentials();
|
|
385
|
+
if (!credentialsResult.ok) {
|
|
386
|
+
this.output.error(credentialsResult.error);
|
|
267
387
|
return 1;
|
|
268
388
|
}
|
|
389
|
+
const credentials = credentialsResult.credentials;
|
|
269
390
|
const { content } = await readCliInput({ allowStdinWhenNoPath: true });
|
|
270
391
|
const rawInput = (content ?? '').trim();
|
|
271
392
|
const result = generateSmartCdnUrl(rawInput, credentials);
|
|
@@ -277,4 +398,44 @@ export class SmartCdnSignatureCommand extends UnauthenticatedCommand {
|
|
|
277
398
|
return 1;
|
|
278
399
|
}
|
|
279
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Mint a short-lived bearer token via POST /token (HTTP Basic Auth).
|
|
403
|
+
*
|
|
404
|
+
* This is intentionally stdout-clean JSON so it can be used by agents and scripts.
|
|
405
|
+
*/
|
|
406
|
+
export class TokenCommand extends UnauthenticatedCommand {
|
|
407
|
+
static paths = [['auth', 'token']];
|
|
408
|
+
static usage = Command.Usage({
|
|
409
|
+
category: 'Auth',
|
|
410
|
+
description: 'Mint a short-lived bearer token',
|
|
411
|
+
details: `
|
|
412
|
+
Calls POST /token using HTTP Basic Auth (TRANSLOADIT_KEY + TRANSLOADIT_SECRET) and prints the
|
|
413
|
+
JSON response to stdout.
|
|
414
|
+
`,
|
|
415
|
+
examples: [
|
|
416
|
+
['Mint an MCP token (default aud)', 'transloadit auth token'],
|
|
417
|
+
['Override audience', 'transloadit auth token --aud api2'],
|
|
418
|
+
],
|
|
419
|
+
});
|
|
420
|
+
aud = Option.String('--aud', {
|
|
421
|
+
description: 'Token audience (default: mcp).',
|
|
422
|
+
});
|
|
423
|
+
async run() {
|
|
424
|
+
const credentialsResult = requireEnvCredentials();
|
|
425
|
+
if (!credentialsResult.ok) {
|
|
426
|
+
this.output.error(credentialsResult.error);
|
|
427
|
+
return 1;
|
|
428
|
+
}
|
|
429
|
+
const result = await requestTokenWithCredentials(credentialsResult.credentials, {
|
|
430
|
+
endpoint: this.endpoint,
|
|
431
|
+
aud: this.aud,
|
|
432
|
+
});
|
|
433
|
+
if (result.ok) {
|
|
434
|
+
process.stdout.write(`${result.output}\n`);
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
this.output.error(result.error);
|
|
438
|
+
return 1;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
280
441
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAE,MAAM,WAAW,CAAA;AA4BzC,wBAAgB,SAAS,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAE,MAAM,WAAW,CAAA;AA4BzC,wBAAgB,SAAS,IAAI,GAAG,CA8C/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Builtins, Cli } from 'clipanion';
|
|
2
2
|
import packageJson from '../../../package.json' with { type: 'json' };
|
|
3
3
|
import { AssembliesCreateCommand, AssembliesDeleteCommand, AssembliesGetCommand, AssembliesLintCommand, AssembliesListCommand, AssembliesReplayCommand, } from "./assemblies.js";
|
|
4
|
-
import { SignatureCommand, SmartCdnSignatureCommand } from "./auth.js";
|
|
4
|
+
import { SignatureCommand, SmartCdnSignatureCommand, TokenCommand } from "./auth.js";
|
|
5
5
|
import { BillsGetCommand } from "./bills.js";
|
|
6
6
|
import { DocsRobotsGetCommand, DocsRobotsListCommand } from "./docs.js";
|
|
7
7
|
import { NotificationsReplayCommand } from "./notifications.js";
|
|
@@ -19,6 +19,7 @@ export function createCli() {
|
|
|
19
19
|
// Auth commands (signature generation)
|
|
20
20
|
cli.register(SignatureCommand);
|
|
21
21
|
cli.register(SmartCdnSignatureCommand);
|
|
22
|
+
cli.register(TokenCommand);
|
|
22
23
|
// Assemblies commands
|
|
23
24
|
cli.register(AssembliesCreateCommand);
|
|
24
25
|
cli.register(AssembliesListCommand);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,WAAW,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAErE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,WAAW,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAErE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAEpF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QAClB,WAAW,EAAE,iBAAiB;QAC9B,UAAU,EAAE,aAAa;QACzB,aAAa,EAAE,WAAW,CAAC,OAAO;KACnC,CAAC,CAAA;IAEF,oBAAoB;IACpB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAClC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IAErC,uCAAuC;IACvC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IAC9B,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAA;IACtC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IAE1B,sBAAsB;IACtB,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAA;IACrC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAA;IACnC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IAClC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAA;IACrC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAA;IACrC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAA;IAEnC,qBAAqB;IACrB,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAA;IACpC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IACjC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAA;IACpC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAA;IACpC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IAClC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IAElC,iBAAiB;IACjB,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;IAE7B,yBAAyB;IACzB,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAA;IAExC,mBAAmB;IACnB,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IAE3B,4CAA4C;IAC5C,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAA;IACnC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IAElC,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/dist/cli/helpers.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { Readable } from 'node:stream';
|
|
2
|
-
|
|
2
|
+
type EnvCredentials = {
|
|
3
3
|
authKey: string;
|
|
4
4
|
authSecret: string;
|
|
5
|
-
}
|
|
5
|
+
};
|
|
6
|
+
type RequireEnvCredentialsResult = {
|
|
7
|
+
ok: true;
|
|
8
|
+
credentials: EnvCredentials;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
error: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function requireEnvCredentials(): RequireEnvCredentialsResult;
|
|
6
14
|
export declare function createReadStream(file: string): Readable;
|
|
7
15
|
export declare function streamToBuffer(stream: Readable): Promise<Buffer>;
|
|
8
16
|
export interface CliInputResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAM3C,KAAK,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAW7D,KAAK,2BAA2B,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,cAAc,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhC,wBAAgB,qBAAqB,IAAI,2BAA2B,CAInE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAGvD;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAMtE;AAeD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAsBxF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQnD;AAGD,cAAc;AACd,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AAC3D,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAA"}
|
package/dist/cli/helpers.js
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import fsp from 'node:fs/promises';
|
|
3
3
|
import { isAPIError } from "./types.js";
|
|
4
|
-
|
|
4
|
+
const MISSING_CREDENTIALS_MESSAGE = 'Missing credentials. Please set TRANSLOADIT_KEY and TRANSLOADIT_SECRET environment variables.';
|
|
5
|
+
function getEnvCredentials() {
|
|
5
6
|
const authKey = process.env.TRANSLOADIT_KEY ?? process.env.TRANSLOADIT_AUTH_KEY;
|
|
6
7
|
const authSecret = process.env.TRANSLOADIT_SECRET ?? process.env.TRANSLOADIT_AUTH_SECRET;
|
|
7
8
|
if (!authKey || !authSecret)
|
|
8
9
|
return null;
|
|
9
10
|
return { authKey, authSecret };
|
|
10
11
|
}
|
|
12
|
+
export function requireEnvCredentials() {
|
|
13
|
+
const credentials = getEnvCredentials();
|
|
14
|
+
if (credentials == null)
|
|
15
|
+
return { ok: false, error: MISSING_CREDENTIALS_MESSAGE };
|
|
16
|
+
return { ok: true, credentials };
|
|
17
|
+
}
|
|
11
18
|
export function createReadStream(file) {
|
|
12
19
|
if (file === '-')
|
|
13
20
|
return process.stdin;
|
package/dist/cli/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,GAAG,MAAM,kBAAkB,CAAA;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@ import 'dotenv/config'
|
|
|
2
2
|
import process from 'node:process'
|
|
3
3
|
import { Command, Option } from 'clipanion'
|
|
4
4
|
import { Transloadit as TransloaditClient } from '../../Transloadit.ts'
|
|
5
|
-
import {
|
|
5
|
+
import { requireEnvCredentials } from '../helpers.ts'
|
|
6
6
|
import type { IOutputCtl } from '../OutputCtl.ts'
|
|
7
7
|
import OutputCtl, { LOG_LEVEL_DEFAULT, LOG_LEVEL_NAMES, parseLogLevel } from '../OutputCtl.ts'
|
|
8
8
|
|
|
@@ -32,17 +32,18 @@ abstract class BaseCommand extends Command {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
protected setupClient(): boolean {
|
|
35
|
-
const
|
|
36
|
-
if (!
|
|
37
|
-
this.output.error(
|
|
38
|
-
'Please provide API authentication in the environment variables TRANSLOADIT_KEY and TRANSLOADIT_SECRET',
|
|
39
|
-
)
|
|
35
|
+
const credsResult = requireEnvCredentials()
|
|
36
|
+
if (!credsResult.ok) {
|
|
37
|
+
this.output.error(credsResult.error)
|
|
40
38
|
return false
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
const endpoint = this.endpoint || process.env.TRANSLOADIT_ENDPOINT
|
|
44
42
|
|
|
45
|
-
this.client = new TransloaditClient({
|
|
43
|
+
this.client = new TransloaditClient({
|
|
44
|
+
...credsResult.credentials,
|
|
45
|
+
...(endpoint && { endpoint }),
|
|
46
|
+
})
|
|
46
47
|
return true
|
|
47
48
|
}
|
|
48
49
|
|
package/src/cli/commands/auth.ts
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from '../../alphalib/types/template.ts'
|
|
9
9
|
import type { OptionalAuthParams } from '../../apiTypes.ts'
|
|
10
10
|
import { Transloadit } from '../../Transloadit.ts'
|
|
11
|
-
import {
|
|
11
|
+
import { readCliInput, requireEnvCredentials } from '../helpers.ts'
|
|
12
12
|
import { UnauthenticatedCommand } from './BaseCommand.ts'
|
|
13
13
|
|
|
14
14
|
type UrlParamPrimitive = string | number | boolean
|
|
@@ -68,40 +68,51 @@ function normalizeUrlParams(params?: Record<string, unknown>): NormalizedUrlPara
|
|
|
68
68
|
return normalized
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
type OutputResult = { ok: true; output: string } | { ok: false; error: string }
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
type Result<T> = { ok: true; value: T } | { ok: false; error: string }
|
|
74
|
+
|
|
75
|
+
function parseJsonObject<TSchema extends z.ZodTypeAny>(
|
|
76
|
+
input: string,
|
|
77
|
+
schema: TSchema,
|
|
78
|
+
): Result<z.infer<TSchema>> {
|
|
79
|
+
let parsed: unknown
|
|
80
|
+
try {
|
|
81
|
+
parsed = JSON.parse(input)
|
|
82
|
+
} catch (error) {
|
|
83
|
+
return { ok: false, error: `Failed to parse JSON from stdin: ${(error as Error).message}` }
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
87
|
+
return { ok: false, error: 'Invalid params provided via stdin. Expected a JSON object.' }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const parsedResult = schema.safeParse(parsed)
|
|
91
|
+
if (!parsedResult.success) {
|
|
92
|
+
return { ok: false, error: `Invalid params: ${formatIssues(parsedResult.error.issues)}` }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return { ok: true, value: parsedResult.data }
|
|
96
|
+
}
|
|
75
97
|
|
|
76
98
|
// Core logic for signature generation
|
|
77
99
|
function generateSignature(
|
|
78
100
|
input: string,
|
|
79
101
|
credentials: { authKey: string; authSecret: string },
|
|
80
102
|
algorithm?: string,
|
|
81
|
-
):
|
|
103
|
+
): OutputResult {
|
|
82
104
|
const { authKey, authSecret } = credentials
|
|
83
105
|
let params: CliSignatureParams
|
|
84
106
|
|
|
85
107
|
if (input === '') {
|
|
86
108
|
params = { auth: { key: authKey } }
|
|
87
109
|
} else {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
} catch (error) {
|
|
92
|
-
return { ok: false, error: `Failed to parse JSON from stdin: ${(error as Error).message}` }
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
96
|
-
return { ok: false, error: 'Invalid params provided via stdin. Expected a JSON object.' }
|
|
110
|
+
const parsedResult = parseJsonObject(input, cliSignatureParamsSchema)
|
|
111
|
+
if (!parsedResult.ok) {
|
|
112
|
+
return { ok: false, error: parsedResult.error }
|
|
97
113
|
}
|
|
98
114
|
|
|
99
|
-
const
|
|
100
|
-
if (!parsedResult.success) {
|
|
101
|
-
return { ok: false, error: `Invalid params: ${formatIssues(parsedResult.error.issues)}` }
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const parsedParams = parsedResult.data
|
|
115
|
+
const parsedParams = parsedResult.value
|
|
105
116
|
const existingAuth = parsedParams.auth ?? {}
|
|
106
117
|
|
|
107
118
|
params = {
|
|
@@ -126,7 +137,7 @@ function generateSignature(
|
|
|
126
137
|
function generateSmartCdnUrl(
|
|
127
138
|
input: string,
|
|
128
139
|
credentials: { authKey: string; authSecret: string },
|
|
129
|
-
):
|
|
140
|
+
): OutputResult {
|
|
130
141
|
const { authKey, authSecret } = credentials
|
|
131
142
|
|
|
132
143
|
if (input === '') {
|
|
@@ -137,23 +148,12 @@ function generateSmartCdnUrl(
|
|
|
137
148
|
}
|
|
138
149
|
}
|
|
139
150
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
} catch (error) {
|
|
144
|
-
return { ok: false, error: `Failed to parse JSON from stdin: ${(error as Error).message}` }
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
148
|
-
return { ok: false, error: 'Invalid params provided via stdin. Expected a JSON object.' }
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const parsedResult = smartCdnParamsSchema.safeParse(parsed)
|
|
152
|
-
if (!parsedResult.success) {
|
|
153
|
-
return { ok: false, error: `Invalid params: ${formatIssues(parsedResult.error.issues)}` }
|
|
151
|
+
const parsedResult = parseJsonObject(input, smartCdnParamsSchema)
|
|
152
|
+
if (!parsedResult.ok) {
|
|
153
|
+
return { ok: false, error: parsedResult.error }
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
const { workspace, template, input: inputFieldRaw, url_params, expire_at_ms } = parsedResult.
|
|
156
|
+
const { workspace, template, input: inputFieldRaw, url_params, expire_at_ms } = parsedResult.value
|
|
157
157
|
const urlParams = normalizeUrlParams(url_params)
|
|
158
158
|
|
|
159
159
|
let expiresAt: number | undefined
|
|
@@ -194,15 +194,163 @@ export interface RunSmartSigOptions {
|
|
|
194
194
|
providedInput?: string
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
+
export interface RequestTokenOptions {
|
|
198
|
+
endpoint?: string
|
|
199
|
+
aud?: string
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const tokenErrorSchema = z
|
|
203
|
+
.object({
|
|
204
|
+
error: z.string(),
|
|
205
|
+
message: z.string().optional(),
|
|
206
|
+
})
|
|
207
|
+
.passthrough()
|
|
208
|
+
|
|
209
|
+
const tokenSuccessSchema = z
|
|
210
|
+
.object({
|
|
211
|
+
access_token: z.string().min(1),
|
|
212
|
+
})
|
|
213
|
+
.passthrough()
|
|
214
|
+
|
|
215
|
+
const buildBasicAuthHeaderValue = (credentials: { authKey: string; authSecret: string }): string =>
|
|
216
|
+
`Basic ${Buffer.from(`${credentials.authKey}:${credentials.authSecret}`, 'utf8').toString('base64')}`
|
|
217
|
+
|
|
218
|
+
const isLoopbackHost = (hostname: string): boolean =>
|
|
219
|
+
hostname === 'localhost' || hostname === '::1' || hostname.startsWith('127.')
|
|
220
|
+
|
|
221
|
+
type TokenBaseResult = { ok: true; baseUrl: URL } | { ok: false; error: string }
|
|
222
|
+
|
|
223
|
+
const normalizeTokenBaseEndpoint = (raw?: string): TokenBaseResult => {
|
|
224
|
+
const baseRaw = (raw || process.env.TRANSLOADIT_ENDPOINT || 'https://api2.transloadit.com').trim()
|
|
225
|
+
|
|
226
|
+
let url: URL
|
|
227
|
+
try {
|
|
228
|
+
url = new URL(baseRaw)
|
|
229
|
+
} catch {
|
|
230
|
+
return {
|
|
231
|
+
ok: false,
|
|
232
|
+
error:
|
|
233
|
+
'Invalid endpoint URL. Use --endpoint https://api2.transloadit.com (or set TRANSLOADIT_ENDPOINT).',
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (url.username || url.password) {
|
|
238
|
+
return { ok: false, error: 'Endpoint must not include username/password.' }
|
|
239
|
+
}
|
|
240
|
+
if (url.search || url.hash) {
|
|
241
|
+
return { ok: false, error: 'Endpoint must not include query string or hash.' }
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (url.protocol !== 'https:') {
|
|
245
|
+
if (url.protocol === 'http:' && isLoopbackHost(url.hostname)) {
|
|
246
|
+
// Allowed for local development only.
|
|
247
|
+
} else {
|
|
248
|
+
return {
|
|
249
|
+
ok: false,
|
|
250
|
+
error:
|
|
251
|
+
'Refusing to send credentials to a non-HTTPS endpoint. Use https://... (or http://localhost for local development).',
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// If someone pasted the token URL, normalize it back to the API base to avoid /token/token.
|
|
257
|
+
const pathLower = url.pathname.toLowerCase()
|
|
258
|
+
if (pathLower === '/token' || pathLower === '/token/') {
|
|
259
|
+
url.pathname = '/'
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (!url.pathname.endsWith('/')) {
|
|
263
|
+
url.pathname = `${url.pathname}/`
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return { ok: true, baseUrl: url }
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
async function requestTokenWithCredentials(
|
|
270
|
+
credentials: { authKey: string; authSecret: string },
|
|
271
|
+
options: RequestTokenOptions = {},
|
|
272
|
+
): Promise<OutputResult> {
|
|
273
|
+
const endpointResult = normalizeTokenBaseEndpoint(options.endpoint)
|
|
274
|
+
if (!endpointResult.ok) {
|
|
275
|
+
return { ok: false, error: endpointResult.error }
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const url = new URL('token', endpointResult.baseUrl).toString()
|
|
279
|
+
const aud = (options.aud ?? 'mcp').trim() || 'mcp'
|
|
280
|
+
|
|
281
|
+
const body = new URLSearchParams({ grant_type: 'client_credentials', aud }).toString()
|
|
282
|
+
|
|
283
|
+
let res: Response
|
|
284
|
+
const controller = new AbortController()
|
|
285
|
+
const timeout = setTimeout(() => controller.abort(), 15_000)
|
|
286
|
+
try {
|
|
287
|
+
res = await fetch(url, {
|
|
288
|
+
method: 'POST',
|
|
289
|
+
// Never follow redirects with Basic Auth credentials.
|
|
290
|
+
redirect: 'error',
|
|
291
|
+
signal: controller.signal,
|
|
292
|
+
headers: {
|
|
293
|
+
Authorization: buildBasicAuthHeaderValue(credentials),
|
|
294
|
+
Accept: 'application/json',
|
|
295
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
296
|
+
},
|
|
297
|
+
body,
|
|
298
|
+
})
|
|
299
|
+
} catch (err) {
|
|
300
|
+
clearTimeout(timeout)
|
|
301
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
302
|
+
return { ok: false, error: 'Failed to mint bearer token: request timed out after 15s.' }
|
|
303
|
+
}
|
|
304
|
+
const message = err instanceof Error ? err.message : String(err)
|
|
305
|
+
return { ok: false, error: `Failed to mint bearer token: ${message}` }
|
|
306
|
+
} finally {
|
|
307
|
+
clearTimeout(timeout)
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
const text = await res.text()
|
|
311
|
+
const trimmed = text.trim()
|
|
312
|
+
let parsedJson: unknown = null
|
|
313
|
+
try {
|
|
314
|
+
parsedJson = trimmed ? JSON.parse(trimmed) : null
|
|
315
|
+
} catch {
|
|
316
|
+
parsedJson = null
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (res.ok) {
|
|
320
|
+
if (parsedJson == null) {
|
|
321
|
+
return { ok: false, error: 'Token response was not valid JSON.' }
|
|
322
|
+
}
|
|
323
|
+
const parsed = tokenSuccessSchema.safeParse(parsedJson)
|
|
324
|
+
if (!parsed.success) {
|
|
325
|
+
return { ok: false, error: 'Token response did not include an access_token.' }
|
|
326
|
+
}
|
|
327
|
+
return { ok: true, output: trimmed }
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const parsedError = tokenErrorSchema.safeParse(parsedJson)
|
|
331
|
+
if (parsedError.success) {
|
|
332
|
+
return {
|
|
333
|
+
ok: false,
|
|
334
|
+
error: parsedError.data.message
|
|
335
|
+
? `${parsedError.data.error}: ${parsedError.data.message}`
|
|
336
|
+
: parsedError.data.error,
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return {
|
|
341
|
+
ok: false,
|
|
342
|
+
error: `Token request failed (${res.status}): ${trimmed || res.statusText}`,
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
197
346
|
export async function runSig(options: RunSigOptions = {}): Promise<void> {
|
|
198
|
-
const
|
|
199
|
-
if (
|
|
200
|
-
console.error(
|
|
201
|
-
'Missing credentials. Please set TRANSLOADIT_KEY and TRANSLOADIT_SECRET environment variables.',
|
|
202
|
-
)
|
|
347
|
+
const credentialsResult = requireEnvCredentials()
|
|
348
|
+
if (!credentialsResult.ok) {
|
|
349
|
+
console.error(credentialsResult.error)
|
|
203
350
|
process.exitCode = 1
|
|
204
351
|
return
|
|
205
352
|
}
|
|
353
|
+
const credentials = credentialsResult.credentials
|
|
206
354
|
|
|
207
355
|
const { content } = await readCliInput({
|
|
208
356
|
providedInput: options.providedInput,
|
|
@@ -220,14 +368,13 @@ export async function runSig(options: RunSigOptions = {}): Promise<void> {
|
|
|
220
368
|
}
|
|
221
369
|
|
|
222
370
|
export async function runSmartSig(options: RunSmartSigOptions = {}): Promise<void> {
|
|
223
|
-
const
|
|
224
|
-
if (
|
|
225
|
-
console.error(
|
|
226
|
-
'Missing credentials. Please set TRANSLOADIT_KEY and TRANSLOADIT_SECRET environment variables.',
|
|
227
|
-
)
|
|
371
|
+
const credentialsResult = requireEnvCredentials()
|
|
372
|
+
if (!credentialsResult.ok) {
|
|
373
|
+
console.error(credentialsResult.error)
|
|
228
374
|
process.exitCode = 1
|
|
229
375
|
return
|
|
230
376
|
}
|
|
377
|
+
const credentials = credentialsResult.credentials
|
|
231
378
|
|
|
232
379
|
const { content } = await readCliInput({
|
|
233
380
|
providedInput: options.providedInput,
|
|
@@ -274,13 +421,12 @@ export class SignatureCommand extends UnauthenticatedCommand {
|
|
|
274
421
|
})
|
|
275
422
|
|
|
276
423
|
protected async run(): Promise<number | undefined> {
|
|
277
|
-
const
|
|
278
|
-
if (
|
|
279
|
-
this.output.error(
|
|
280
|
-
'Missing credentials. Please set TRANSLOADIT_KEY and TRANSLOADIT_SECRET environment variables.',
|
|
281
|
-
)
|
|
424
|
+
const credentialsResult = requireEnvCredentials()
|
|
425
|
+
if (!credentialsResult.ok) {
|
|
426
|
+
this.output.error(credentialsResult.error)
|
|
282
427
|
return 1
|
|
283
428
|
}
|
|
429
|
+
const credentials = credentialsResult.credentials
|
|
284
430
|
|
|
285
431
|
const { content } = await readCliInput({ allowStdinWhenNoPath: true })
|
|
286
432
|
const rawInput = (content ?? '').trim()
|
|
@@ -328,13 +474,12 @@ export class SmartCdnSignatureCommand extends UnauthenticatedCommand {
|
|
|
328
474
|
})
|
|
329
475
|
|
|
330
476
|
protected async run(): Promise<number | undefined> {
|
|
331
|
-
const
|
|
332
|
-
if (
|
|
333
|
-
this.output.error(
|
|
334
|
-
'Missing credentials. Please set TRANSLOADIT_KEY and TRANSLOADIT_SECRET environment variables.',
|
|
335
|
-
)
|
|
477
|
+
const credentialsResult = requireEnvCredentials()
|
|
478
|
+
if (!credentialsResult.ok) {
|
|
479
|
+
this.output.error(credentialsResult.error)
|
|
336
480
|
return 1
|
|
337
481
|
}
|
|
482
|
+
const credentials = credentialsResult.credentials
|
|
338
483
|
|
|
339
484
|
const { content } = await readCliInput({ allowStdinWhenNoPath: true })
|
|
340
485
|
const rawInput = (content ?? '').trim()
|
|
@@ -349,3 +494,50 @@ export class SmartCdnSignatureCommand extends UnauthenticatedCommand {
|
|
|
349
494
|
return 1
|
|
350
495
|
}
|
|
351
496
|
}
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* Mint a short-lived bearer token via POST /token (HTTP Basic Auth).
|
|
500
|
+
*
|
|
501
|
+
* This is intentionally stdout-clean JSON so it can be used by agents and scripts.
|
|
502
|
+
*/
|
|
503
|
+
export class TokenCommand extends UnauthenticatedCommand {
|
|
504
|
+
static override paths = [['auth', 'token']]
|
|
505
|
+
|
|
506
|
+
static override usage = Command.Usage({
|
|
507
|
+
category: 'Auth',
|
|
508
|
+
description: 'Mint a short-lived bearer token',
|
|
509
|
+
details: `
|
|
510
|
+
Calls POST /token using HTTP Basic Auth (TRANSLOADIT_KEY + TRANSLOADIT_SECRET) and prints the
|
|
511
|
+
JSON response to stdout.
|
|
512
|
+
`,
|
|
513
|
+
examples: [
|
|
514
|
+
['Mint an MCP token (default aud)', 'transloadit auth token'],
|
|
515
|
+
['Override audience', 'transloadit auth token --aud api2'],
|
|
516
|
+
],
|
|
517
|
+
})
|
|
518
|
+
|
|
519
|
+
aud = Option.String('--aud', {
|
|
520
|
+
description: 'Token audience (default: mcp).',
|
|
521
|
+
})
|
|
522
|
+
|
|
523
|
+
protected override async run(): Promise<number | undefined> {
|
|
524
|
+
const credentialsResult = requireEnvCredentials()
|
|
525
|
+
if (!credentialsResult.ok) {
|
|
526
|
+
this.output.error(credentialsResult.error)
|
|
527
|
+
return 1
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
const result = await requestTokenWithCredentials(credentialsResult.credentials, {
|
|
531
|
+
endpoint: this.endpoint,
|
|
532
|
+
aud: this.aud,
|
|
533
|
+
})
|
|
534
|
+
|
|
535
|
+
if (result.ok) {
|
|
536
|
+
process.stdout.write(`${result.output}\n`)
|
|
537
|
+
return undefined
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
this.output.error(result.error)
|
|
541
|
+
return 1
|
|
542
|
+
}
|
|
543
|
+
}
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
AssembliesReplayCommand,
|
|
12
12
|
} from './assemblies.ts'
|
|
13
13
|
|
|
14
|
-
import { SignatureCommand, SmartCdnSignatureCommand } from './auth.ts'
|
|
14
|
+
import { SignatureCommand, SmartCdnSignatureCommand, TokenCommand } from './auth.ts'
|
|
15
15
|
|
|
16
16
|
import { BillsGetCommand } from './bills.ts'
|
|
17
17
|
import { DocsRobotsGetCommand, DocsRobotsListCommand } from './docs.ts'
|
|
@@ -40,6 +40,7 @@ export function createCli(): Cli {
|
|
|
40
40
|
// Auth commands (signature generation)
|
|
41
41
|
cli.register(SignatureCommand)
|
|
42
42
|
cli.register(SmartCdnSignatureCommand)
|
|
43
|
+
cli.register(TokenCommand)
|
|
43
44
|
|
|
44
45
|
// Assemblies commands
|
|
45
46
|
cli.register(AssembliesCreateCommand)
|
package/src/cli/helpers.ts
CHANGED
|
@@ -3,7 +3,12 @@ import fsp from 'node:fs/promises'
|
|
|
3
3
|
import type { Readable } from 'node:stream'
|
|
4
4
|
import { isAPIError } from './types.ts'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
const MISSING_CREDENTIALS_MESSAGE =
|
|
7
|
+
'Missing credentials. Please set TRANSLOADIT_KEY and TRANSLOADIT_SECRET environment variables.'
|
|
8
|
+
|
|
9
|
+
type EnvCredentials = { authKey: string; authSecret: string }
|
|
10
|
+
|
|
11
|
+
function getEnvCredentials(): { authKey: string; authSecret: string } | null {
|
|
7
12
|
const authKey = process.env.TRANSLOADIT_KEY ?? process.env.TRANSLOADIT_AUTH_KEY
|
|
8
13
|
const authSecret = process.env.TRANSLOADIT_SECRET ?? process.env.TRANSLOADIT_AUTH_SECRET
|
|
9
14
|
|
|
@@ -12,6 +17,16 @@ export function getEnvCredentials(): { authKey: string; authSecret: string } | n
|
|
|
12
17
|
return { authKey, authSecret }
|
|
13
18
|
}
|
|
14
19
|
|
|
20
|
+
type RequireEnvCredentialsResult =
|
|
21
|
+
| { ok: true; credentials: EnvCredentials }
|
|
22
|
+
| { ok: false; error: string }
|
|
23
|
+
|
|
24
|
+
export function requireEnvCredentials(): RequireEnvCredentialsResult {
|
|
25
|
+
const credentials = getEnvCredentials()
|
|
26
|
+
if (credentials == null) return { ok: false, error: MISSING_CREDENTIALS_MESSAGE }
|
|
27
|
+
return { ok: true, credentials }
|
|
28
|
+
}
|
|
29
|
+
|
|
15
30
|
export function createReadStream(file: string): Readable {
|
|
16
31
|
if (file === '-') return process.stdin
|
|
17
32
|
return fs.createReadStream(file)
|