Skip to content

Commit 230754d

Browse files
committed
chore: stream consumption must be inside retryAuthentication
1 parent 8ab09f3 commit 230754d

File tree

3 files changed

+59
-58
lines changed

3 files changed

+59
-58
lines changed

src/secrets/CommandCat.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ class CommandGet extends CommandPolykey {
7878
});
7979
return;
8080
}
81-
const response = await binUtils.retryAuthentication(async (auth) => {
81+
const hasErrored = await binUtils.retryAuthentication(async (auth) => {
82+
// Write secret paths to input stream
8283
const response = await pkClient.rpcClient.methods.vaultsSecretsGet();
8384
const writer = response.writable.getWriter();
8485
let first = true;
@@ -93,17 +94,18 @@ class CommandGet extends CommandPolykey {
9394
first = false;
9495
}
9596
await writer.close();
96-
return response;
97-
}, meta);
98-
let hasErrored = false;
99-
for await (const chunk of response.readable) {
100-
if (chunk.error) {
101-
hasErrored = true;
102-
process.stderr.write(chunk.error);
103-
} else {
104-
process.stdout.write(chunk.secretContent);
97+
// Print out incoming data to standard out
98+
let hasErrored = false;
99+
for await (const chunk of response.readable) {
100+
if (chunk.error) {
101+
hasErrored = true;
102+
process.stderr.write(chunk.error);
103+
} else {
104+
process.stdout.write(chunk.secretContent);
105+
}
105106
}
106-
}
107+
return hasErrored;
108+
}, meta);
107109
if (hasErrored) {
108110
throw new errors.ErrorPolykeyCLICatSecret(
109111
'Failed to concatenate one or more secrets',

src/secrets/CommandMkdir.ts

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ class CommandMkdir extends CommandPolykey {
5959
},
6060
logger: this.logger.getChild(PolykeyClient.name),
6161
});
62-
const response = await binUtils.retryAuthentication(async (auth) => {
62+
const hasErrored = await binUtils.retryAuthentication(async (auth) => {
63+
// Write directory paths to input stream
6364
const response =
6465
await pkClient.rpcClient.methods.vaultsSecretsMkdir();
6566
const writer = response.writable.getWriter();
@@ -75,35 +76,36 @@ class CommandMkdir extends CommandPolykey {
7576
first = false;
7677
}
7778
await writer.close();
78-
return response;
79-
}, meta);
80-
81-
let hasErrored = false;
82-
for await (const result of response.readable) {
83-
if (result.type === 'error') {
84-
// TS cannot properly evaluate a type this deeply nested, so we use
85-
// the as keyword to help it. Inside this block, the type of data is
86-
// ensured to be 'error'.
87-
const error = result as ErrorMessage;
88-
hasErrored = true;
89-
let message: string = '';
90-
switch (error.code) {
91-
case 'ENOENT':
92-
message = 'No such secret or directory';
93-
break;
94-
case 'EEXIST':
95-
message = 'Secret or directory exists';
96-
break;
97-
default:
98-
throw new ErrorPolykeyCLIUncaughtException(
99-
`Unexpected error code: ${error.code}`,
100-
);
79+
// Print out incoming data to standard out, or incoming errors to
80+
// standard error.
81+
let hasErrored = false;
82+
for await (const result of response.readable) {
83+
if (result.type === 'error') {
84+
// TS cannot properly evaluate a type this deeply nested, so we use
85+
// the as keyword to help it. Inside this block, the type of data
86+
// is ensured to be 'error'.
87+
const error = result as ErrorMessage;
88+
hasErrored = true;
89+
let message: string = '';
90+
switch (error.code) {
91+
case 'ENOENT':
92+
message = 'No such secret or directory';
93+
break;
94+
case 'EEXIST':
95+
message = 'Secret or directory exists';
96+
break;
97+
default:
98+
throw new ErrorPolykeyCLIUncaughtException(
99+
`Unexpected error code: ${error.code}`,
100+
);
101+
}
102+
process.stderr.write(
103+
`mkdir: cannot create directory ${error.reason}: ${message}\n`,
104+
);
101105
}
102-
process.stderr.write(
103-
`${error.code}: cannot create directory ${error.reason}: ${message}\n`,
104-
);
105106
}
106-
}
107+
return hasErrored;
108+
}, meta);
107109
if (hasErrored) {
108110
throw new ErrorPolykeyCLIMakeDirectory(
109111
'Failed to create one or more directories',

src/secrets/CommandRemove.ts

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -59,28 +59,25 @@ class CommandRemove extends CommandPolykey {
5959
options: { nodePath: options.nodePath },
6060
logger: this.logger.getChild(PolykeyClient.name),
6161
});
62-
const response = await binUtils.retryAuthentication(async (auth) => {
62+
await binUtils.retryAuthentication(async (auth) => {
6363
const response =
6464
await pkClient.rpcClient.methods.vaultsSecretsRemove();
65-
await (async () => {
66-
const writer = response.writable.getWriter();
67-
let first = true;
68-
for (const [vault, path] of secretPaths) {
69-
await writer.write({
70-
nameOrId: vault,
71-
secretName: path,
72-
metadata: first
73-
? { ...auth, options: { recursive: options.recursive } }
74-
: undefined,
75-
});
76-
first = false;
77-
}
78-
await writer.close();
79-
})();
80-
return response;
65+
const writer = response.writable.getWriter();
66+
let first = true;
67+
for (const [vault, path] of secretPaths) {
68+
await writer.write({
69+
nameOrId: vault,
70+
secretName: path,
71+
metadata: first
72+
? { ...auth, options: { recursive: options.recursive } }
73+
: undefined,
74+
});
75+
first = false;
76+
}
77+
await writer.close();
78+
// Wait for the program to generate a response (complete processing).
79+
await response.output;
8180
}, meta);
82-
// Wait for the program to generate a response (complete processing).
83-
await response.output;
8481
} finally {
8582
if (pkClient! != null) await pkClient.stop();
8683
}

0 commit comments

Comments
 (0)