Skip to content

Commit

Permalink
Merge pull request rmosolgo#4328 from rmosolgo/js-fix-typo
Browse files Browse the repository at this point in the history
JS: fix typo for changeset-version, more logging
  • Loading branch information
rmosolgo authored Feb 14, 2023
2 parents d7e0cb0 + 6d90ab2 commit d52b064
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 25 deletions.
42 changes: 42 additions & 0 deletions javascript_client/src/__tests__/__snapshots__/syncTest.ts.snap

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions javascript_client/src/__tests__/cliTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ describe("CLI", () => {
})

it("runs with some options", () => {
var buffer = childProcess.execSync("node ./cli.js sync --client=something --header=Abcd:efgh --header=\"Abc: 123 45\" --changeset-version=2023-01-01 --mode=file --path=\"**/doc1.graphql\"", {stdio: "pipe"})
var buffer = childProcess.execSync("node ./cli.js sync --client=something --header=Abcd:efgh --header=\"Abc: 123 45\" --changeset-version=2023-01-01 --mode=file --path=\"**/doc1.graphql\" --verbose", {stdio: "pipe"})
var response = buffer.toString().replace(/\033\[[0-9;]*m/g, "")
expect(response).toEqual("No URL; Generating artifacts without syncing them\nGenerating client module in src/OperationStoreClient.js...\n✓ Done!\n")
expect(response).toEqual("No URL; Generating artifacts without syncing them\n[Sync] glob: **/doc1.graphql\n[Sync] 1 files:\n[Sync] - src/__tests__/documents/doc1.graphql\nGenerating client module in src/OperationStoreClient.js...\n✓ Done!\n")
})

it("runs with just one header", () => {
Expand Down
7 changes: 3 additions & 4 deletions javascript_client/src/__tests__/syncTest.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import sync from "../sync"
import Logger from "../sync/logger"
var fs = require("fs")
var nock = require("nock")

Expand Down Expand Up @@ -77,10 +78,8 @@ describe("sync operations", () => {
path: "./src/__tests__/documents",
url: "bogus",
verbose: true,
send: (_sendPayload: string, opts: { verbose: boolean }) => {
if (opts.verbose) {
console.log("Verbose!")
}
send: (_sendPayload: string, opts: { logger: Logger }) => {
opts.logger.log("Verbose!")
},
}
return sync(options).then(function() {
Expand Down
2 changes: 1 addition & 1 deletion javascript_client/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ optional arguments:
addTypename: argv["add-typename"],
quiet: argv.hasOwnProperty("quiet"),
verbose: argv.hasOwnProperty("verbose"),
changesetVersion: argv["changset-version"],
changesetVersion: argv["changeset-version"],
})

result.then(function() {
Expand Down
23 changes: 17 additions & 6 deletions javascript_client/src/sync/__tests__/sendPayloadTest.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
jest.dontMock('nock');
import nock from "nock"
import Logger from "../logger";
import sendPayload from "../sendPayload"

var fakeLogger = {
log: function() {},
bright: function(str: string) { return str },
colorize: function(str: string) { return str },
red: function(str: string) { return str },
green: function(str: string) { return str },
error: function() {},
isQuiet: true,
} as Logger

describe("Posting GraphQL to OperationStore Endpoint", () => {
it("Posts to the specified URL", () => {
var mock = nock("http://example.com")
.post("/stored_operations/sync")
.reply(200, { "ok" : "ok" })

return sendPayload("payload", { url: "http://example.com/stored_operations/sync" }).then(function() {
return sendPayload("payload", { url: "http://example.com/stored_operations/sync", logger: fakeLogger }).then(function() {
expect(mock.isDone()).toEqual(true)
})
})
Expand All @@ -18,7 +29,7 @@ describe("Posting GraphQL to OperationStore Endpoint", () => {
.post("/stored_operations/sync")
.reply(200, { "ok" : "ok" })

return sendPayload("payload", { url: "https://example2.com/stored_operations/sync" }).then(function() {
return sendPayload("payload", { url: "https://example2.com/stored_operations/sync", logger: fakeLogger }).then(function() {
expect(mock.isDone()).toEqual(true)
})
})
Expand All @@ -29,7 +40,7 @@ describe("Posting GraphQL to OperationStore Endpoint", () => {
.basicAuth({ user: "username", pass: "pass" })
.reply(200, { "ok" : "ok" })

return sendPayload("payload", { url: "https://username:[email protected]:229/stored_operations/sync?q=1" }).then(function() {
return sendPayload("payload", { url: "https://username:[email protected]:229/stored_operations/sync?q=1", logger: fakeLogger }).then(function() {
expect(mock.isDone()).toEqual(true)
})
})
Expand All @@ -39,7 +50,7 @@ describe("Posting GraphQL to OperationStore Endpoint", () => {
.post("/stored_operations/sync")
.reply(200, { result: "ok" })

return sendPayload("payload", { url: "http://example.com/stored_operations/sync" }).then(function(response) {
return sendPayload("payload", { url: "http://example.com/stored_operations/sync", logger: fakeLogger }).then(function(response) {
expect(response).toEqual('{"result":"ok"}')
})
})
Expand All @@ -54,7 +65,7 @@ describe("Posting GraphQL to OperationStore Endpoint", () => {
.post("/stored_operations/sync")
.reply(200, { result: "ok" })

return sendPayload("payload", { url: "http://example.com/stored_operations/sync", headers: { thing: "Stuff" }, changesetVersion: "2023-01-01" }).then(function(_response) {
return sendPayload("payload", { url: "http://example.com/stored_operations/sync", logger: fakeLogger, headers: { thing: "Stuff" }, changesetVersion: "2023-01-01" }).then(function(_response) {
expect(mock.isDone()).toEqual(true)
})
})
Expand All @@ -72,7 +83,7 @@ describe("Posting GraphQL to OperationStore Endpoint", () => {
.post("/stored_operations/sync")
.reply(200, { result: "ok" })

var opts = {secret: key, client: "Abc", url: "http://example.com/stored_operations/sync"}
var opts = {secret: key, client: "Abc", url: "http://example.com/stored_operations/sync", logger: fakeLogger }
return sendPayload(payload, opts).then(function(response) {
expect(response).toEqual('{"result":"ok"}')
expect(mock.isDone()).toEqual(true)
Expand Down
2 changes: 1 addition & 1 deletion javascript_client/src/sync/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,9 @@ function sync(options: SyncOptions) {
url: url,
client: clientName,
secret: encryptionKey,
verbose: verbose,
headers: options.headers,
changesetVersion: options.changesetVersion,
logger: logger,
}
var sendPromise = Promise.resolve(sendFunc(payload, sendOpts))
return sendPromise.then(function(response) {
Expand Down
25 changes: 14 additions & 11 deletions javascript_client/src/sync/sendPayload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ import http from "http"
import https from "https"
import url from "url"
import crypto from 'crypto'
import Logger from './logger'

interface SendPayloadOptions {
url: string,
logger: Logger,
secret?: string,
client?: string,
verbose?: boolean,
headers?: { [key: string]: string },
changesetVersion?: string,
}
Expand All @@ -21,15 +22,15 @@ interface SendPayloadOptions {
* @param {String} options.url - Target URL
* @param {String} options.secret - (optional) used for HMAC header if provided
* @param {String} options.client - (optional) used for HMAC header if provided
* @param {Boolean} options.verbose - (optional) if true, print extra info for debugging
* @param {Logger} options.logger - A logger for when `verbose` is true
* @param {Object<String, String>} options.headers - (optional) extra headers for the request
* @return {Promise}
*/
function sendPayload(payload: any, options: SendPayloadOptions) {
var syncUrl = options.url
var key = options.secret
var clientName = options.client
var verbose = options.verbose
var logger = options.logger
// Prepare JS object as form data
var postData = JSON.stringify(payload)

Expand All @@ -43,6 +44,7 @@ function sendPayload(payload: any, options: SendPayloadOptions) {
}

if (options.changesetVersion) {
logger.log("Changeset Version: ", logger.bright(options.changesetVersion))
defaultHeaders["Changeset-Version"] = options.changesetVersion
}
var allHeaders = Object.assign({}, options.headers, defaultHeaders)
Expand All @@ -64,13 +66,16 @@ function sendPayload(payload: any, options: SendPayloadOptions) {
.update(postData)
.digest('hex')
var header = "GraphQL::Pro " + clientName + " " + authDigest
if (verbose) {
console.log("[Sync] Header: ", header)
console.log("[Sync] Data:", postData)
}
httpOptions.headers["Authorization"] = header
}

var headerNames = Object.keys(httpOptions.headers)
logger.log("[Sync] " + headerNames.length + " Headers:")
headerNames.forEach((headerName) => {
logger.log("[Sync] " + headerName + ": " + httpOptions.headers[headerName])
})
logger.log("[Sync] Data:", postData)

var httpClient = parsedURL.protocol === "https:" ? https : http
var promise = new Promise(function(resolve, reject) {
// Make the request,
Expand All @@ -84,10 +89,8 @@ function sendPayload(payload: any, options: SendPayloadOptions) {
});

res.on("end", () => {
if (verbose) {
console.log("[Sync] Response Headers: ", res.headers)
console.log("[Sync] Response Body: ", body)
}
logger.log("[Sync] Response Headers: ", JSON.stringify(res.headers))
logger.log("[Sync] Response Body: ", body)

var status = res.statusCode
// 422 gets special treatment because
Expand Down

0 comments on commit d52b064

Please sign in to comment.