Skip to content

Commit 16a4406

Browse files
jkebingerclaude
andauthored
fix: include type field in encrypted set-default values (#82)
* fix: include type field in encrypted set-default values When using `set-default --secret`, encrypted values were missing the required `type` field in the API payload, causing the value and type to not be sent to the server. Changes: - Fix encryption.ts to use `value` field instead of `string` - Add `type: 'string'` to encrypted values in set-default.ts - Add test validation for encrypted value structure - Bump version to 0.0.12 Before (incorrect payload): ```json { "value": { "string": "encrypted-data", "confidential": true, "decryptWith": "reforge.secrets.encryption.key" } } ``` After (correct payload): ```json { "value": { "type": "string", "value": "encrypted-data", "confidential": true, "decryptWith": "reforge.secrets.encryption.key" } } ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Regenerate readme --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent a965093 commit 16a4406

File tree

5 files changed

+36
-22
lines changed

5 files changed

+36
-22
lines changed

README.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ $ npm install -g @reforge-com/cli
1414
$ reforge COMMAND
1515
running command...
1616
$ reforge (--version)
17-
@reforge-com/cli/0.0.11 darwin-arm64 node-v24.4.1
17+
@reforge-com/cli/0.0.12 darwin-arm64 node-v22.12.0
1818
$ reforge --help [COMMAND]
1919
USAGE
2020
$ reforge COMMAND
@@ -91,7 +91,7 @@ EXAMPLES
9191
$ reforge create my.new.string --type json --value="{\"key\": \"value\"}"
9292
```
9393

94-
_See code: [src/commands/create.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/create.ts)_
94+
_See code: [src/commands/create.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/create.ts)_
9595

9696
## `reforge download`
9797

@@ -124,7 +124,7 @@ EXAMPLES
124124
$ reforge download --environment=test --sdk-key=YOUR_SDK_KEY
125125
```
126126

127-
_See code: [src/commands/download.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/download.ts)_
127+
_See code: [src/commands/download.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/download.ts)_
128128

129129
## `reforge generate`
130130

@@ -194,7 +194,7 @@ EXAMPLES
194194
$ reforge generate --targets node-ts -o ./dist # combine with targets
195195
```
196196
197-
_See code: [src/commands/generate.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/generate.ts)_
197+
_See code: [src/commands/generate.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/generate.ts)_
198198
199199
## `reforge generate-new-hex-key`
200200
@@ -217,7 +217,7 @@ EXAMPLES
217217
$ reforge generate-new-hex-key
218218
```
219219
220-
_See code: [src/commands/generate-new-hex-key.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/generate-new-hex-key.ts)_
220+
_See code: [src/commands/generate-new-hex-key.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/generate-new-hex-key.ts)_
221221
222222
## `reforge get [NAME]`
223223
@@ -250,7 +250,7 @@ EXAMPLES
250250
$ reforge get my.config.name --environment=production
251251
```
252252
253-
_See code: [src/commands/get.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/get.ts)_
253+
_See code: [src/commands/get.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/get.ts)_
254254
255255
## `reforge info [NAME]`
256256
@@ -281,7 +281,7 @@ EXAMPLES
281281
$ reforge info my.config.name
282282
```
283283
284-
_See code: [src/commands/info.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/info.ts)_
284+
_See code: [src/commands/info.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/info.ts)_
285285
286286
## `reforge interactive`
287287
@@ -299,7 +299,7 @@ EXAMPLES
299299
$ reforge
300300
```
301301
302-
_See code: [src/commands/interactive.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/interactive.ts)_
302+
_See code: [src/commands/interactive.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/interactive.ts)_
303303
304304
## `reforge list`
305305
@@ -336,7 +336,7 @@ EXAMPLES
336336
$ reforge list --feature-flags
337337
```
338338
339-
_See code: [src/commands/list.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/list.ts)_
339+
_See code: [src/commands/list.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/list.ts)_
340340
341341
## `reforge login`
342342
@@ -364,7 +364,7 @@ EXAMPLES
364364
$ reforge login --profile myprofile
365365
```
366366
367-
_See code: [src/commands/login.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/login.ts)_
367+
_See code: [src/commands/login.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/login.ts)_
368368
369369
## `reforge logout`
370370
@@ -387,7 +387,7 @@ EXAMPLES
387387
$ reforge logout
388388
```
389389
390-
_See code: [src/commands/logout.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/logout.ts)_
390+
_See code: [src/commands/logout.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/logout.ts)_
391391
392392
## `reforge mcp`
393393
@@ -420,7 +420,7 @@ EXAMPLES
420420
$ reforge mcp --url http://local-launch.goatsofreforge.com:3003/api/v1/mcp
421421
```
422422
423-
_See code: [src/commands/mcp.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/mcp.ts)_
423+
_See code: [src/commands/mcp.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/mcp.ts)_
424424
425425
## `reforge override [NAME]`
426426
@@ -459,7 +459,7 @@ EXAMPLES
459459
$ reforge override my.double.config --value=3.14159
460460
```
461461
462-
_See code: [src/commands/override.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/override.ts)_
462+
_See code: [src/commands/override.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/override.ts)_
463463
464464
## `reforge profile`
465465
@@ -482,7 +482,7 @@ EXAMPLES
482482
$ reforge profile
483483
```
484484
485-
_See code: [src/commands/profile.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/profile.ts)_
485+
_See code: [src/commands/profile.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/profile.ts)_
486486
487487
## `reforge schema NAME`
488488
@@ -516,7 +516,7 @@ EXAMPLES
516516
$ reforge schema my-schema --get
517517
```
518518
519-
_See code: [src/commands/schema.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/schema.ts)_
519+
_See code: [src/commands/schema.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/schema.ts)_
520520
521521
## `reforge serve DATA-FILE`
522522
@@ -552,7 +552,7 @@ EXAMPLES
552552
$ reforge serve ./reforge.test.588.config.json --port=3099
553553
```
554554
555-
_See code: [src/commands/serve.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/serve.ts)_
555+
_See code: [src/commands/serve.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/serve.ts)_
556556
557557
## `reforge set-default [NAME]`
558558
@@ -596,7 +596,7 @@ EXAMPLES
596596
$ reforge set-default my.config.name --env-var=MY_ENV_VAR_NAME --environment=production
597597
```
598598
599-
_See code: [src/commands/set-default.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/set-default.ts)_
599+
_See code: [src/commands/set-default.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/set-default.ts)_
600600
601601
## `reforge whoami`
602602
@@ -619,7 +619,7 @@ EXAMPLES
619619
$ reforge whoami
620620
```
621621
622-
_See code: [src/commands/whoami.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/whoami.ts)_
622+
_See code: [src/commands/whoami.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/whoami.ts)_
623623
624624
## `reforge workspace`
625625
@@ -642,7 +642,7 @@ EXAMPLES
642642
$ reforge workspace
643643
```
644644
645-
_See code: [src/commands/workspace.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.11/src/commands/workspace.ts)_
645+
_See code: [src/commands/workspace.ts](https://github.com/ReforgeHQ/cli/blob/v0.0.12/src/commands/workspace.ts)_
646646
<!-- commandsstop -->
647647
648648
## Local Development

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"packageManager": "yarn@4.11.0",
33
"name": "@reforge-com/cli",
4-
"version": "0.0.11",
4+
"version": "0.0.12",
55
"author": "Jeffrey Chupp @semanticart",
66
"bugs": {
77
"url": "https://github.com/ReforgeHQ/cli/issues"

src/commands/set-default.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,10 @@ export default class SetDefault extends APICommand {
252252
return this.err(encryptedValueResult.message || 'Failed to encrypt value')
253253
}
254254

255-
configValue = encryptedValueResult.value
255+
configValue = {
256+
type: 'string',
257+
...encryptedValueResult.value,
258+
}
256259
successMessage += ' (encrypted)'
257260
} else {
258261
// Parse the value based on type and build value object

src/util/encryption.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,6 @@ export async function makeConfidentialValue(
206206
return success({
207207
confidential: true,
208208
decryptWith: secret.keyName,
209-
string: encryption.encrypt(value, secretKey),
209+
value: encryption.encrypt(value, secretKey),
210210
})
211211
}

test/responses/set-default.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,17 @@ const setDefaultHandler = http.post('https://api.*/internal/ops/v1/set-default',
254254
return HttpResponse.json({error: `Invalid default value for int: ${body.value.value}`}, {status: 400})
255255
}
256256

257+
// Validate encrypted values have correct structure
258+
if (body.value?.confidential && body.value?.decryptWith) {
259+
// Encrypted values must have type and value fields
260+
if (!body.value.type) {
261+
return HttpResponse.json({error: 'Encrypted values must have a type field'}, {status: 400})
262+
}
263+
if (body.value.value === undefined) {
264+
return HttpResponse.json({error: 'Encrypted values must have a value field'}, {status: 400})
265+
}
266+
}
267+
257268
// Success response
258269
return HttpResponse.json({
259270
success: true,

0 commit comments

Comments
 (0)