function retrieve()

in exercises/node-javascript/encryption-context-complete/retrieve.js [16:42]


function retrieve(Key, { expectedContext, expectedContextKeys } = {}) {
  return (
    s3
      .getObject({ Bucket, Key })
      .createReadStream()
      .pipe(decryptStream(decryptKeyring))
      // ENCRYPTION-CONTEXT-COMPLETE: Making Assertions
      .once("MessageHeader", function(header) {
        const { encryptionContext } = header;
        const pairs = Object.entries(expectedContext || {});
        const keys = (expectedContextKeys || []).slice();
        if (
          !(
            pairs.every(([key, value]) => encryptionContext[key] === value) &&
            keys.every(key =>
              Object.hasOwnProperty.call(encryptionContext, key)
            )
          )
        ) {
          this.emit(
            "error",
            new Error("Encryption context does not match expected shape")
          );
        }
      })
  );
}