{"_id":"@carlosdp/socket-io-graphql-client","_rev":"3-b70453dda452efa18c8f8953d458b3c9","name":"@carlosdp/socket-io-graphql-client","dist-tags":{"latest":"0.9.7"},"versions":{"0.9.5":{"name":"@carlosdp/socket-io-graphql-client","version":"0.9.5","author":{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"},"license":"MIT","repository":{"type":"git","url":"https://github.com/carlosdp/graphql-live-queries.git","directory":"packages/socket-io-graphql-client"},"bugs":{"url":"https://github.com/n1ru4l/graphql-live-queries/issues"},"homepage":"https://github.com/n1ru4l/graphql-live-queries#readme","keywords":["graphql","query","live","mutation","subscription","socket-io","socket.io","client","relay","apollo","websocket"],"scripts":{"prepack":"bob prepack"},"devDependencies":{"typescript":"4.2.4"},"peerDependencies":{"socket.io-client":"^3.0.1 || ^4.0.0"},"dependencies":{"@n1ru4l/push-pull-async-iterable-iterator":"^2.1.4"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","exports":{"require":"./dist/index.cjs.js","default":"./dist/index.mjs"},"typings":"dist/index.d.ts","typescript":{"definition":"dist/index.d.ts"},"buildOptions":{"input":"./src/index.ts"},"publishConfig":{"directory":"dist","access":"public"},"description":"[![npm version](https://img.shields.io/npm/v/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.com/package/@n1ru4l/socket-io-graphql-client) [![npm downloads](https://img.shields.io/npm/dm/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.co","_id":"@carlosdp/socket-io-graphql-client@0.9.5","dist":{"shasum":"8d7acdb30c9638e28f3591d9752500c36006f3e1","integrity":"sha512-FySenZJaZYEnhYuhTyx0EoMcgFbBeiXHPI2bHk1yccafQ003JsVEMjWTJo8lfsmZ7HweTVng2H/fG2TN63ZUtQ==","tarball":"https://registry.npmjs.org/@carlosdp/socket-io-graphql-client/-/socket-io-graphql-client-0.9.5.tgz","fileCount":16,"unpackedSize":36584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiwCJCRA9TVsSAnZWagAAjh0P/RoHcsjBZAddEWndxjnf\nAJuRbiBpYkCAMB5OmUtrBIn2XSZXN96xwiQ28BBWQrG/QiqFSTEf9J8d3ly2\nMGx0uPvYO/15DugdexK+Eb9IoSpRIDSmswp22mwHVhdFL9dzOibTPvMy2xJY\niFXiFJOFP2o8QfwayY68QaDG4IqbSrdKPQ8xZZks8LL1bBR5+FHaZizfZrnn\nwDJdJWaV/GPej9T2TgZs61dkwWBKl2TT/O0p+1b6V+B/ZobdT44ZRSl5Mku/\nFYj+PxkQiMgY5BqTjTpXCbOhW3SzLGKMys/fRHy5eWUKO2UPFsXXhypT4NLU\ncDFNbtleiZcPnU+rSA0TqII3c9YLFZ6TfhiDt2kjTrcjckwaH46QGOlCPY/X\n8Qyb20oVq9x6zzhvikvjaAjQxs0sQ5GxQ2LaxfEdGuQZbUWSt+XjuARkNtQQ\ntcyZ99SqhyJs4QfCndqsy+mpBKfPtTNA9P4jKjmPOjoaObsTg5QS1CpJvIbt\nqmfIV1MCOCPFVSiSyTxjUFpOORitTGy9FVIiM+vsGeKHNF8ko3CdCsEwlHyJ\nOg1CiwXJwBYnmxdkkX1nSD28z1ecLbFbylrNzoM6q1UahJhrmhXf9cVbqQwQ\npOIIcLKdfqSeM5Wl97NBWMZmI/Ai44km4/A5sD6+PnTWoYX+bSOYydNYNbNM\nhtc5\r\n=OC8d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHz7b4m4gBJy+u86yQ67Sv805Sy+fT/MhexvWLtqvv73AiAdgExrVuvAMfxwUEJkJ89Us6Hv24SmHG2Ayhdgg+lRsw=="}]},"_npmUser":{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"},"directories":{},"maintainers":[{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/socket-io-graphql-client_0.9.5_1619722377322_0.6551058188605099"},"_hasShrinkwrap":false},"0.9.6":{"name":"@carlosdp/socket-io-graphql-client","version":"0.9.6","author":{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/carlosdp/graphql-live-queries.git","directory":"packages/socket-io-graphql-client"},"bugs":{"url":"https://github.com/n1ru4l/graphql-live-queries/issues"},"homepage":"https://github.com/n1ru4l/graphql-live-queries#readme","keywords":["graphql","query","live","mutation","subscription","socket-io","socket.io","client","relay","apollo","websocket"],"scripts":{"prepack":"bob prepack"},"devDependencies":{"typescript":"4.2.4"},"peerDependencies":{"socket.io-client":"^3.0.1 || ^4.0.0"},"dependencies":{"@n1ru4l/push-pull-async-iterable-iterator":"^2.1.4"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","exports":{"require":"./dist/index.cjs.js","default":"./dist/index.mjs"},"typings":"dist/index.d.ts","typescript":{"definition":"dist/index.d.ts"},"buildOptions":{"input":"./src/index.ts"},"publishConfig":{"directory":"dist","access":"public"},"description":"[![npm version](https://img.shields.io/npm/v/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.com/package/@n1ru4l/socket-io-graphql-client) [![npm downloads](https://img.shields.io/npm/dm/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.co","_id":"@carlosdp/socket-io-graphql-client@0.9.6","_nodeVersion":"10.24.1","_npmVersion":"7.11.1","dist":{"integrity":"sha512-svTjHNqFmYDuoVNni6nedsAjR+7f/NUfX+zqfRVEYiF//vBkhrjPUvSy6TpbN5z5M0Y/XntWNJ2sCzM7EQSI0g==","shasum":"0246061060d1a4be84502666c747a3e6fe1d568b","tarball":"https://registry.npmjs.org/@carlosdp/socket-io-graphql-client/-/socket-io-graphql-client-0.9.6.tgz","fileCount":13,"unpackedSize":37048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmsZiCRA9TVsSAnZWagAAz+UP/0RetM9yyBZJ+T8jT9AK\n2Ts+5Jv4U2Mp4jC2ol35jweckXJ+U3634rrj3yUQoFG/Mq/8yukoVWlxrnGZ\nUmZvQtcnp6xAyOfcXZPZyZEgTNHtrCgY2KodzGw+2vVQZfTx2J2zziV5tH0O\nHDOx0E2dlk5FJyI3QBZR8NC1D2pPgS+S0nrI3072u+rLPbjsRZXRukTSUaIi\n54hN0E3hkn2uvCZBGA1hnzgwVAaEZMFO3bXTL3ZhHr56dUvEtOELOPGyUayR\nM8p6J2GTCl0akon2KxDD+pLE7Lwu+q+eg47j4kZ5CbSGCGrqsriN/O5wpnIR\n5zrD4YTioiWprfX4mFYrHNMOVgtHU76mn/6hvWXEuuiRZMEtkIPu52ebv/41\nZJ1ED5UZu3P2yrwUxz/gj/x7H9cA7/k7OsezBDhi+ncFm8ccc8ait+zUMCr2\nbKmw2y1gOx/H2RRWqPGTKqADhjOq7RFnfhSGfVwnPHaA7MPCBt6SLd8R3int\nlij3xNRShVmVpaw4QqZ0NDE1a8dq0zW9GNYUsTuIT29/Agzwka/eT9lvRsRp\nP/y68F3dyFYqTpAhQ7R7xJ/IIzAJfd3BNzlwODBWf3WF4h6PQbJ2gDbyWdxb\nSNQG+54CsWi10Le8+nAdRoI7ETZML61aW6UU5/nGlrdBYl+J/MKNX8ipWWXm\nb4y4\r\n=FfbY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNzJZA+vAS5cX6ZUcCLsSwS/5pCurqjFDBvMHpPWixOAiEA8Y6wXFKAAatURWMpc0xy+hk8lgWEWc/5puNiztImyNE="}]},"_npmUser":{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"},"directories":{},"maintainers":[{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/socket-io-graphql-client_0.9.6_1620756066237_0.8759873903279367"},"_hasShrinkwrap":false},"0.9.7":{"name":"@carlosdp/socket-io-graphql-client","version":"0.9.7","author":{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/carlosdp/graphql-live-queries.git","directory":"packages/socket-io-graphql-client"},"bugs":{"url":"https://github.com/n1ru4l/graphql-live-queries/issues"},"homepage":"https://github.com/n1ru4l/graphql-live-queries#readme","keywords":["graphql","query","live","mutation","subscription","socket-io","socket.io","client","relay","apollo","websocket"],"scripts":{"prepack":"bob prepack"},"devDependencies":{"typescript":"4.2.4"},"peerDependencies":{"socket.io-client":"^3.0.1 || ^4.0.0"},"dependencies":{"@n1ru4l/push-pull-async-iterable-iterator":"^2.1.4"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","exports":{"require":"./dist/index.cjs.js","default":"./dist/index.mjs"},"typings":"dist/index.d.ts","typescript":{"definition":"dist/index.d.ts"},"buildOptions":{"input":"./src/index.ts"},"publishConfig":{"directory":"dist","access":"public"},"description":"[![npm version](https://img.shields.io/npm/v/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.com/package/@n1ru4l/socket-io-graphql-client) [![npm downloads](https://img.shields.io/npm/dm/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.co","_id":"@carlosdp/socket-io-graphql-client@0.9.7","_nodeVersion":"10.24.1","_npmVersion":"7.11.1","dist":{"integrity":"sha512-v2H0rkqTRDrMrzm9YWGWSSPALMqMz9FgPl0BMqp3Jh/+cfF1/KYN+VcB6IGeJKq6A5pI7n709wZZq42MTJWHWA==","shasum":"304b74fdaccb8a1bb602e9318facb8135967ad2b","tarball":"https://registry.npmjs.org/@carlosdp/socket-io-graphql-client/-/socket-io-graphql-client-0.9.7.tgz","fileCount":13,"unpackedSize":37048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmsarCRA9TVsSAnZWagAAHJIP/iNdTK8+YC5qI4IMPGpq\ntVYxUK/uTRfLZQRwyYIJ3cSwqbuEGBBKSf9jxLTVRVHDRGSmvhT88Ae+I2hD\n9oQACKUd/RhYm+LKQQcjwP2Q7Yw8v0aWVAjKxR/6FU4gYbK8EiVnCHfhOY/Y\ne4o4aEH12WUGPAs28FJ11nyAmXix6o2EpSuSSMFVBGQ+3aeLIqe23EdDJJlE\nCgHqC9JfxL2gOncGclkdwL61edrQHAN+lrcyx66CHvzU4jgm3v7MZDRgRupY\n5BcAP2uGrqeVu4fLLrJ/QU1amDSqruN9UhdjfGJPHIbkbkEp8oFXax4bAEO8\nLcXjDs3gWbOGAQR8dmL5eDKNBJ0COCpT9jBgZWKuLa2ioKuxrbBxHJ2dWHRc\nnaNsLvaMOuc+4n9wnwog0kHBKjESi6LWuz9ZaswEB5N8rYMZoZ6sgZX7ZuQq\n1VqlinXFgSsOd2VwNFDr39hnH1iaw6tGlw8PBaLNDzRYVCn5bVxyvNliYaT0\nCQA7Oy/GKNy9W5J5DRxOr9S7p9QAG3VZOFyKMNfNVuVTw/ON97VxECaKwEDB\nSd3q8mKWm2oXCq8LKc+krAQRcjW41pM+rjvz7ZUW52BaaS7poExc5tQrpFhI\npoJPkfxojdQMhvd1Ul+2gwE8NhoJWTlEEC1J6Txuo/g1pUBH6XgmHP9SJ1G5\nsuta\r\n=VgQt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFWrAx0tX8OwaVxg/ATt4kECaanTfJA3wd/qHGaBAeiQIgX2szP16OmvYvnjrOhnILZ6XC6uVJxdOFKcmViqyLpeo="}]},"_npmUser":{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"},"directories":{},"maintainers":[{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/socket-io-graphql-client_0.9.7_1620756139297_0.6005781967690849"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-29T18:52:57.275Z","0.9.5":"2021-04-29T18:52:57.492Z","modified":"2022-04-04T21:58:04.888Z","0.9.6":"2021-05-11T18:01:06.431Z","0.9.7":"2021-05-11T18:02:19.574Z"},"maintainers":[{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"}],"description":"[![npm version](https://img.shields.io/npm/v/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.com/package/@n1ru4l/socket-io-graphql-client) [![npm downloads](https://img.shields.io/npm/dm/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.co","homepage":"https://github.com/n1ru4l/graphql-live-queries#readme","keywords":["graphql","query","live","mutation","subscription","socket-io","socket.io","client","relay","apollo","websocket"],"repository":{"type":"git","url":"git+https://github.com/carlosdp/graphql-live-queries.git","directory":"packages/socket-io-graphql-client"},"author":{"name":"carlosdp","email":"carlosdiazpadron@gmail.com"},"bugs":{"url":"https://github.com/n1ru4l/graphql-live-queries/issues"},"license":"MIT","readme":"# @n1ru4l/socket-io-graphql-client\n\n[![npm version](https://img.shields.io/npm/v/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.com/package/@n1ru4l/socket-io-graphql-client) [![npm downloads](https://img.shields.io/npm/dm/@n1ru4l/socket-io-graphql-client.svg)](https://www.npmjs.com/package/@n1ru4l/socket-io-graphql-client)\n\nExecute GraphQL operations against a [`@n1ru4l/socket-io-graphql-server`](https://github.com/n1ru4l/graphql-live-queries/tree/main/packages/socket-io-graphql-server) instance.\n\nIf you want to see usage we recommend checking out [the example clients for relay, apollo and urql](https://github.com/n1ru4l/graphql-live-queries/tree/main/packages/todo-example)!\n\n## Install Instructions\n\n```bash\nyarn add -E @n1ru4l/socket-io-graphql-client\n```\n\n## API\n\n### `createSocketIOGraphQLClient`\n\n```ts\nimport { io } from \"socket.io-client\";\nimport { createSocketIOGraphQLClient } from \"@n1ru4l/socket-io-graphql-client\";\nconst socket = io();\nconst socketIOGraphQLClient = createSocketIOGraphQLClient(socket);\n\n{\n  // execute returns a AsyncIterable that will publish the values for the operation\n  const asyncIterator = socketIOGraphQLClient.execute({\n    operation: /* GraphQL */ `\n      query messages {\n        id\n        content\n      }\n    `,\n  });\n\n  for await (const value of asyncIterator) {\n    console.log(value);\n  }\n}\n\n{\n  const asyncIterator = socketIOGraphQLClient.execute({\n    operation: /* GraphQL */ `\n      query messages @live {\n        id\n        content\n      }\n    `,\n  });\n\n  for await (const value of asyncIterator) {\n    console.log(value);\n  }\n}\n\n{\n  const asyncIterator = socketIOGraphQLClient.execute(\n    {\n      operation: /* GraphQL */ `\n        subscription onNewMessage {\n          onNewMessage {\n            id\n            content\n          }\n        }\n      `,\n    }\n  );\n\n  // dispose subscription in 5 seconds\n  setTimeout(() => asyncIterator.return.?(), 5000);\n\n  for await (const value of asyncIterator) {\n    console.log(value);\n  }\n}\n```\n\n## Recipes\n\n### GraphiQL Fetcher\n\n```tsx\nimport { io } from \"socket.io-client\";\nimport { createSocketIOGraphQLClient } from \"@n1ru4l/socket-io-graphql-client\";\nimport { applyAsyncIterableIteratorToSink } from \"@n1ru4l/push-pull-async-iterable-iterator\";\nimport \"graphiql/graphiql.css\";\nimport GraphiQL from \"graphiql\";\n\nconst socket = io();\nconst socketIOGraphQLClient = createSocketIOGraphQLClient(socket);\n\nconst fetcher: Fetcher = ({ query: operation, ...restGraphQLParams }: any) =>\n socketIOGraphQLClient.execute({\n   operation,\n   ...restGraphQLParams,\n });\n\nexport const LiveGraphiQL = (): React.ReactElement => (\n  <GraphiQL fetcher={fetcher} />\n);\n```\n\n### Relay Environment\n\nAs used in the `relay todo example app`(https://github.com/n1ru4l/graphql-live-queries/tree/main/packages/todo-example/client-relay).\n\n```tsx\nimport { SocketIOGraphQLClient } from \"@n1ru4l/socket-io-graphql-client\";\nimport { applyAsyncIterableIteratorToSink } from \"@n1ru4l/push-pull-async-iterable-iterator\";\nimport {\n  Environment,\n  Network,\n  RecordSource,\n  Store,\n  Observable,\n  GraphQLResponse,\n  RequestParameters,\n  Variables,\n} from \"relay-runtime\";\n\nexport const createRelayEnvironment = (\n  networkInterface: SocketIOGraphQLClient<GraphQLResponse, Error>\n) => {\n  const execute = (request: RequestParameters, variables: Variables) => {\n    if (!request.text) throw new Error(\"Missing document.\");\n    const { text: operation, name } = request;\n\n    return Observable.create<GraphQLResponse>((sink) =>\n      applyAsyncIterableIteratorToSink(\n        networkInterface.execute({\n          operation,\n          variables,\n          operationName: name,\n        }),\n        sink\n      )\n    );\n  };\n\n  const network = Network.create(execute, execute);\n  const store = attachNotifyGarbageCollectionBehaviourToStore(\n    new Store(new RecordSource())\n  );\n\n  return new Environment({\n    network,\n    store,\n  });\n};\n```\n\n### Apollo Client\n\nAs used in the `apollo client todo example app`(https://github.com/n1ru4l/graphql-live-queries/tree/main/packages/todo-example/client-apollo).\n\n```tsx\nimport { SocketIOGraphQLClient } from \"@n1ru4l/socket-io-graphql-client\";\nimport { applyAsyncIterableIteratorToSink } from \"@n1ru4l/push-pull-async-iterable-iterator\";\nimport {\n  ApolloClient,\n  InMemoryCache,\n  ApolloLink,\n  Operation,\n  Observable,\n  FetchResult,\n  Observable,\n} from \"@apollo/client\";\nimport { print } from \"graphql\";\n\nclass SocketIOGraphQLApolloLink extends ApolloLink {\n  private networkLayer: SocketIOGraphQLClient;\n  constructor(networkLayer: SocketIOGraphQLClient) {\n    super();\n    this.networkLayer = networkLayer;\n  }\n\n  public request(operation: Operation): Observable<FetchResult> | null {\n    return new Observable((sink) =>\n      applyAsyncIterableIteratorToSink(\n        this.networkLayer.execute({\n          operationName: operation.operationName,\n          operation: print(operation.query),\n          variables: operation.variables,\n        }),\n        sink\n      )\n    );\n  }\n}\n\nexport const createApolloClient = (networkInterface: SocketIOGraphQLClient) => {\n  return new ApolloClient({\n    link: new SocketIOGraphQLApolloLink(networkInterface),\n    cache: new InMemoryCache(),\n  });\n};\n```\n\n### Urql\n\nAs used in the `urql todo example app`(https://github.com/n1ru4l/graphql-live-queries/tree/main/packages/todo-example/client-urql).\n\n```tsx\nimport { SocketIOGraphQLClient } from \"@n1ru4l/socket-io-graphql-client\";\nimport { applyAsyncIterableIteratorToSink } from \"@n1ru4l/push-pull-async-iterable-iterator\";\nimport {\n  Client,\n  dedupExchange,\n  cacheExchange,\n  subscriptionExchange,\n  ExecutionResult,\n} from \"urql\";\n\nexport const createUrqlClient = (\n  networkInterface: SocketIOGraphQLClient<ExecutionResult>\n) => {\n  return new Client({\n    url: \"noop\",\n    exchanges: [\n      dedupExchange,\n      cacheExchange,\n      subscriptionExchange({\n        forwardSubscription: (operation) => ({\n          subscribe: (sink) => ({\n            unsubscribe: applyAsyncIterableIteratorToSink(\n              networkInterface.execute({\n                operation: operation.query,\n                variables: operation.variables,\n              }),\n              sink\n            ),\n          }),\n        }),\n        enableAllOperations: true,\n      }),\n    ],\n  });\n};\n```\n","readmeFilename":"README.md"}