@newskit-render/api 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +60 -0
  3. package/dist/createApolloClient/createApolloClient.d.ts +2 -0
  4. package/dist/createApolloClient/createApolloClient.js +76 -0
  5. package/dist/createApolloClient/createApolloClient.js.map +1 -0
  6. package/dist/createApolloClient/createClient.d.ts +2 -0
  7. package/dist/createApolloClient/createClient.js +83 -0
  8. package/dist/createApolloClient/createClient.js.map +1 -0
  9. package/dist/createApolloClient/index.d.ts +2 -0
  10. package/dist/createApolloClient/index.js +15 -0
  11. package/dist/createApolloClient/index.js.map +1 -0
  12. package/dist/createApolloClient/types.d.ts +15 -0
  13. package/dist/createApolloClient/types.js +9 -0
  14. package/dist/createApolloClient/types.js.map +1 -0
  15. package/dist/helpers/externalLinks/index.d.ts +4 -0
  16. package/dist/helpers/externalLinks/index.js +54 -0
  17. package/dist/helpers/externalLinks/index.js.map +1 -0
  18. package/dist/helpers/getAccessToken/index.d.ts +1 -0
  19. package/dist/helpers/getAccessToken/index.js +77 -0
  20. package/dist/helpers/getAccessToken/index.js.map +1 -0
  21. package/dist/helpers/getHeaders/index.d.ts +1 -0
  22. package/dist/helpers/getHeaders/index.js +68 -0
  23. package/dist/helpers/getHeaders/index.js.map +1 -0
  24. package/dist/helpers/index.d.ts +4 -0
  25. package/dist/helpers/index.js +17 -0
  26. package/dist/helpers/index.js.map +1 -0
  27. package/dist/helpers/session/index.d.ts +2 -0
  28. package/dist/helpers/session/index.js +34 -0
  29. package/dist/helpers/session/index.js.map +1 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.js +15 -0
  32. package/dist/index.js.map +1 -0
  33. package/package.json +59 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ # 0.2.0 (2021-11-05)
7
+
8
+
9
+ ### Features
10
+
11
+ * **PPDSR-403:** Create package for MAIN/NK API ([#483](https://github.com/newscorp-ghfb/ncu-newskit-render/issues/483)) ([8e8d6f7](https://github.com/newscorp-ghfb/ncu-newskit-render/commit/8e8d6f7540d193d37f1dec3b63877ea2f47c2444))
12
+
13
+
14
+ ### BREAKING CHANGES
15
+
16
+ * **PPDSR-403:** core now uses @newskit-render/api for setting up apollo client
17
+
18
+ * feat(PPDSR-403): enable name to be changed
19
+
20
+ * feat(PPDSR-403): changes based on PR review
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # @newskit-render/api
2
+
3
+ Helper package to make setting up and using Apollo Client with Main or NewsKit API easier
4
+
5
+ ## Usage
6
+
7
+ # createApolloClient
8
+
9
+ ```
10
+ import { createApolloClient, ClientTypes } from '@newskit-render/api'
11
+
12
+ // MAIN with cookies
13
+ const mainApolloClient = await createApolloClient(
14
+ ClientTypes.main,
15
+ context.req.headers.cookie
16
+ )
17
+
18
+ // NKAPI with cookies
19
+ const nkApiApolloClient = await createApolloClient(
20
+ ClientTypes.nkapi,
21
+ context.req.headers.cookie
22
+ )
23
+
24
+ // NKAPI without cookies
25
+ const apolloClient = await createApolloClient(ClientTypes.nkapi)
26
+
27
+ // pass custom set up
28
+ const apolloClient = await createApolloClient({
29
+ initialState: {},
30
+ uri: process.env.NEWSKIT_API_ENV_URL,
31
+ headers: {
32
+ 'x-api-key': process.env.NEWSKIT_API_X_API_KEY,
33
+ },
34
+ addTypename: false,
35
+ })
36
+ ```
37
+
38
+ # getApolloClient
39
+
40
+ ```
41
+ import { getApolloClient } from '@newskit-render/api'
42
+
43
+ const shouldUseNewskitApi = true
44
+
45
+ const apolloClient = await getApolloClient(
46
+ shouldUseNewskitApi,
47
+ req.headers.cookie
48
+ )
49
+ ```
50
+
51
+ # helpers
52
+
53
+ 1. getHeaders - creates header for MAIN
54
+ 2. getAccessToken - access header used by MAIN
55
+ 3. getMainSession - get MAIN session from cookie
56
+ 4. sessionParser - decodes session id
57
+
58
+ # Authentication environment variables
59
+
60
+ For MAIN and NewsKit API authentication see [MAIN](https://github.com/newscorp-ghfb/ncu-newskit-render/tree/master/packages/my-account#authentication) and [NewsKit API](https://github.com/newscorp-ghfb/ncu-newskit-render/tree/master/packages/core#running)
@@ -0,0 +1,2 @@
1
+ import { ApolloHttpClient, Client } from './types';
2
+ export declare const createApolloClient: (client: Client, cookie?: string | undefined) => Promise<ApolloHttpClient>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createApolloClient = void 0;
40
+ var createClient_1 = require("./createClient");
41
+ var helpers_1 = require("../helpers");
42
+ var createApolloClient = function (client, cookie) { return __awaiter(void 0, void 0, void 0, function () {
43
+ var _a;
44
+ var _b;
45
+ return __generator(this, function (_c) {
46
+ switch (_c.label) {
47
+ case 0:
48
+ if (!(client === 'main')) return [3 /*break*/, 2];
49
+ _a = createClient_1.createClient;
50
+ _b = {
51
+ uri: process.env.MAIN_GRAPHQL_URL
52
+ };
53
+ return [4 /*yield*/, (0, helpers_1.getHeaders)((0, helpers_1.sessionParser)((0, helpers_1.getMainSession)(cookie)))];
54
+ case 1: return [2 /*return*/, _a.apply(void 0, [(_b.headers = _c.sent(),
55
+ _b.links = [helpers_1.retryLink, helpers_1.errorLink],
56
+ _b)])];
57
+ case 2:
58
+ if (client === 'nkapi') {
59
+ return [2 /*return*/, (0, createClient_1.createClient)({
60
+ uri: process.env.NEWSKIT_API_ENV_URL,
61
+ headers: cookie
62
+ ? {
63
+ 'X-API-KEY': process.env.NEWSKIT_API_X_API_KEY,
64
+ 'X-Main-Session': (0, helpers_1.getMainSession)(cookie),
65
+ }
66
+ : {
67
+ 'X-API-KEY': process.env.NEWSKIT_API_X_API_KEY,
68
+ },
69
+ })];
70
+ }
71
+ return [2 /*return*/, (0, createClient_1.createClient)(client)];
72
+ }
73
+ });
74
+ }); };
75
+ exports.createApolloClient = createApolloClient;
76
+ //# sourceMappingURL=createApolloClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createApolloClient.js","sourceRoot":"","sources":["../../src/createApolloClient/createApolloClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA6C;AAC7C,sCAMmB;AAIZ,IAAM,kBAAkB,GAAG,UAChC,MAAc,EACd,MAAe;;;;;;qBAEX,CAAA,MAAM,KAAK,MAAM,CAAA,EAAjB,wBAAiB;gBACZ,KAAA,2BAAY,CAAA;;oBACjB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,gBAA0B;;gBAClC,qBAAM,IAAA,oBAAU,EAAC,IAAA,uBAAa,EAAC,IAAA,wBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,EAAA;oBAFlE,sBAAO,mBAEL,UAAO,GAAE,SAAuD;wBAChE,QAAK,GAAE,CAAC,mBAAS,EAAE,mBAAS,CAAC;6BAC7B,EAAA;;gBAEJ,IAAI,MAAM,KAAK,OAAO,EAAE;oBACtB,sBAAO,IAAA,2BAAY,EAAC;4BAClB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,mBAA6B;4BAC9C,OAAO,EAAE,MAAM;gCACb,CAAC,CAAC;oCACE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;oCAC9C,gBAAgB,EAAE,IAAA,wBAAc,EAAC,MAAM,CAAC;iCACzC;gCACH,CAAC,CAAC;oCACE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;iCAC/C;yBACN,CAAC,EAAA;iBACH;gBACD,sBAAO,IAAA,2BAAY,EAAC,MAAM,CAAC,EAAA;;;KAC5B,CAAA;AAzBY,QAAA,kBAAkB,sBAyB9B"}
@@ -0,0 +1,2 @@
1
+ import { ApolloHttpClient, ClientObject } from './types';
2
+ export declare const createClient: ({ initialState, headers, uri, addTypename, links, name, }: ClientObject) => Promise<ApolloHttpClient>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
47
+ var __importDefault = (this && this.__importDefault) || function (mod) {
48
+ return (mod && mod.__esModule) ? mod : { "default": mod };
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.createClient = void 0;
52
+ var client_1 = require("@apollo/client");
53
+ var cross_fetch_1 = __importDefault(require("cross-fetch"));
54
+ var createClient = function (_a) {
55
+ var _b = _a.initialState, initialState = _b === void 0 ? {} : _b, headers = _a.headers, uri = _a.uri, _c = _a.addTypename, addTypename = _c === void 0 ? true : _c, links = _a.links, name = _a.name;
56
+ return __awaiter(void 0, void 0, void 0, function () {
57
+ var linkObject;
58
+ return __generator(this, function (_d) {
59
+ linkObject = links
60
+ ? (0, client_1.from)(__spreadArray(__spreadArray([], links, true), [
61
+ (0, client_1.createHttpLink)({
62
+ uri: uri,
63
+ headers: headers,
64
+ fetch: cross_fetch_1.default,
65
+ }),
66
+ ], false))
67
+ : (0, client_1.createHttpLink)({
68
+ uri: uri,
69
+ headers: headers,
70
+ fetch: cross_fetch_1.default,
71
+ });
72
+ return [2 /*return*/, new client_1.ApolloClient({
73
+ ssrMode: true,
74
+ link: linkObject,
75
+ name: name || process.env.PUBLISHER || 'ncu-newskit-render',
76
+ version: '0.1.0',
77
+ cache: new client_1.InMemoryCache({ addTypename: addTypename }).restore(initialState),
78
+ })];
79
+ });
80
+ });
81
+ };
82
+ exports.createClient = createClient;
83
+ //# sourceMappingURL=createClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createClient.js","sourceRoot":"","sources":["../../src/createApolloClient/createClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAKuB;AACvB,4DAA+B;AAIxB,IAAM,YAAY,GAAG,UAAO,EAOpB;QANb,oBAAiB,EAAjB,YAAY,mBAAG,EAAE,KAAA,EACjB,OAAO,aAAA,EACP,GAAG,SAAA,EACH,mBAAkB,EAAlB,WAAW,mBAAG,IAAI,KAAA,EAClB,KAAK,WAAA,EACL,IAAI,UAAA;;;;YAEE,UAAU,GAAG,KAAK;gBACtB,CAAC,CAAC,IAAA,aAAI,kCACC,KAAK;oBACR,IAAA,uBAAc,EAAC;wBACb,GAAG,KAAA;wBACH,OAAO,SAAA;wBACP,KAAK,uBAAA;qBACN,CAAC;0BACF;gBACJ,CAAC,CAAC,IAAA,uBAAc,EAAC;oBACb,GAAG,KAAA;oBACH,OAAO,SAAA;oBACP,KAAK,uBAAA;iBACN,CAAC,CAAA;YACN,sBAAO,IAAI,qBAAY,CAAC;oBACtB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,oBAAoB;oBAC3D,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,IAAI,sBAAa,CAAC,EAAE,WAAW,aAAA,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;iBAChE,CAAC,EAAA;;;CACH,CAAA;AA7BY,QAAA,YAAY,gBA6BxB"}
@@ -0,0 +1,2 @@
1
+ export * from './createApolloClient';
2
+ export * from './types';
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./createApolloClient"), exports);
14
+ __exportStar(require("./types"), exports);
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/createApolloClient/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAoC;AACpC,0CAAuB"}
@@ -0,0 +1,15 @@
1
+ import { ApolloClient, NormalizedCacheObject, ApolloLink, RequestHandler } from '@apollo/client';
2
+ export declare type ApolloHttpClient = ApolloClient<NormalizedCacheObject>;
3
+ export declare enum ClientTypes {
4
+ 'main' = "main",
5
+ 'nkapi' = "nkapi"
6
+ }
7
+ export interface ClientObject {
8
+ initialState?: NormalizedCacheObject;
9
+ headers?: any;
10
+ uri?: string;
11
+ addTypename?: boolean;
12
+ links?: (ApolloLink | RequestHandler)[];
13
+ name?: string;
14
+ }
15
+ export declare type Client = ClientTypes | ClientObject;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClientTypes = void 0;
4
+ var ClientTypes;
5
+ (function (ClientTypes) {
6
+ ClientTypes["main"] = "main";
7
+ ClientTypes["nkapi"] = "nkapi";
8
+ })(ClientTypes = exports.ClientTypes || (exports.ClientTypes = {}));
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/createApolloClient/types.ts"],"names":[],"mappings":";;;AASA,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,4BAAe,CAAA;IACf,8BAAiB,CAAA;AACnB,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB"}
@@ -0,0 +1,4 @@
1
+ import { RetryLink } from '@apollo/client/link/retry';
2
+ import { ApolloLink } from '@apollo/client';
3
+ export declare const retryLink: RetryLink;
4
+ export declare const errorLink: ApolloLink;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.errorLink = exports.retryLink = void 0;
4
+ var retry_1 = require("@apollo/client/link/retry");
5
+ var error_1 = require("@apollo/client/link/error");
6
+ var client_1 = require("@apollo/client");
7
+ var __1 = require("../");
8
+ //Error handling for getting a new access token for GraphQL
9
+ exports.retryLink = new retry_1.RetryLink({
10
+ delay: {
11
+ initial: 100,
12
+ max: 2000,
13
+ jitter: true,
14
+ },
15
+ attempts: {
16
+ max: 1,
17
+ },
18
+ });
19
+ exports.errorLink = (0, error_1.onError)(function (_a) {
20
+ var networkError = _a.networkError, operation = _a.operation, forward = _a.forward, graphQLErrors = _a.graphQLErrors;
21
+ if (graphQLErrors) {
22
+ console.error(graphQLErrors);
23
+ }
24
+ //Only retry if it is an external authorization
25
+ if (networkError &&
26
+ networkError.response &&
27
+ networkError.response.statusText === 'Unauthorized' &&
28
+ process.env.MAIN_USER_ID) {
29
+ return new client_1.Observable(function (observer) {
30
+ (0, __1.getAccessToken)()
31
+ .then(function (token) {
32
+ operation.setContext(function () { return ({
33
+ headers: {
34
+ Authorization: "Bearer " + token || null,
35
+ },
36
+ }); });
37
+ })
38
+ .then(function () {
39
+ var subscriber = {
40
+ next: observer.next.bind(observer),
41
+ error: observer.error.bind(observer),
42
+ complete: observer.complete.bind(observer),
43
+ };
44
+ forward(operation).subscribe(subscriber);
45
+ })
46
+ .catch(function (error) {
47
+ // No refresh or client token available, we force user to login
48
+ observer.error(error);
49
+ });
50
+ });
51
+ }
52
+ return;
53
+ });
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/externalLinks/index.ts"],"names":[],"mappings":";;;AAAA,mDAAqD;AACrD,mDAAmD;AACnD,yCAAoE;AACpE,yBAAoC;AAEpC,2DAA2D;AAC9C,QAAA,SAAS,GAAG,IAAI,iBAAS,CAAC;IACrC,KAAK,EAAE;QACL,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,IAAI;KACb;IACD,QAAQ,EAAE;QACR,GAAG,EAAE,CAAC;KACP;CACF,CAAC,CAAA;AAEW,QAAA,SAAS,GAAe,IAAA,eAAO,EAC1C,UAAC,EAAmD;QAAjD,YAAY,kBAAA,EAAE,SAAS,eAAA,EAAE,OAAO,aAAA,EAAE,aAAa,mBAAA;IAChD,IAAI,aAAa,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;KAC7B;IACD,+CAA+C;IAC/C,IACE,YAAY;QACX,YAA4B,CAAC,QAAQ;QACrC,YAA4B,CAAC,QAAQ,CAAC,UAAU,KAAK,cAAc;QACpE,OAAO,CAAC,GAAG,CAAC,YAAY,EACxB;QACA,OAAO,IAAI,mBAAU,CAAC,UAAC,QAAQ;YAC7B,IAAA,kBAAc,GAAE;iBACb,IAAI,CAAC,UAAC,KAAK;gBACV,SAAS,CAAC,UAAU,CAAC,cAAM,OAAA,CAAC;oBAC1B,OAAO,EAAE;wBACP,aAAa,EAAE,YAAU,KAAO,IAAI,IAAI;qBACzC;iBACF,CAAC,EAJyB,CAIzB,CAAC,CAAA;YACL,CAAC,CAAC;iBACD,IAAI,CAAC;gBACJ,IAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAClC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC3C,CAAA;gBAED,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAC1C,CAAC,CAAC;iBACD,KAAK,CAAC,UAAC,KAAK;gBACX,+DAA+D;gBAC/D,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;KACH;IACD,OAAM;AACR,CAAC,CACF,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const getAccessToken: () => Promise<void>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.getAccessToken = void 0;
43
+ var cross_fetch_1 = __importDefault(require("cross-fetch"));
44
+ var getAccessToken = function () { return __awaiter(void 0, void 0, void 0, function () {
45
+ var data, parsedData, error_1;
46
+ return __generator(this, function (_a) {
47
+ switch (_a.label) {
48
+ case 0:
49
+ _a.trys.push([0, 3, , 4]);
50
+ return [4 /*yield*/, (0, cross_fetch_1.default)(process.env.MAIN_OAUTH_TOKEN, {
51
+ method: 'POST',
52
+ headers: {
53
+ 'Content-Type': 'application/x-www-form-urlencoded',
54
+ },
55
+ body: new URLSearchParams({
56
+ grant_type: 'client_credentials',
57
+ client_id: process.env.MAIN_CLIENT_ID,
58
+ client_secret: process.env.MAIN_CLIENT_SECRET,
59
+ audience: process.env.MAIN_AUDIENCE,
60
+ }),
61
+ })];
62
+ case 1:
63
+ data = _a.sent();
64
+ return [4 /*yield*/, data.json()];
65
+ case 2:
66
+ parsedData = _a.sent();
67
+ return [2 /*return*/, parsedData['access_token']];
68
+ case 3:
69
+ error_1 = _a.sent();
70
+ console.error(error_1);
71
+ return [3 /*break*/, 4];
72
+ case 4: return [2 /*return*/];
73
+ }
74
+ });
75
+ }); };
76
+ exports.getAccessToken = getAccessToken;
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/getAccessToken/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAA+B;AAExB,IAAM,cAAc,GAAG;;;;;;gBAEb,qBAAM,IAAA,qBAAK,EAAC,OAAO,CAAC,GAAG,CAAC,gBAA0B,EAAE;wBAC/D,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE;4BACP,cAAc,EAAE,mCAAmC;yBACpD;wBACD,IAAI,EAAE,IAAI,eAAe,CAAC;4BACxB,UAAU,EAAE,oBAAoB;4BAChC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAwB;4BAC/C,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,kBAA4B;4BACvD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAuB;yBAC9C,CAAC;qBACH,CAAC,EAAA;;gBAXI,IAAI,GAAG,SAWX;gBACiB,qBAAM,IAAI,CAAC,IAAI,EAAE,EAAA;;gBAA9B,UAAU,GAAG,SAAiB;gBACpC,sBAAO,UAAU,CAAC,cAAc,CAAC,EAAA;;;gBAEjC,OAAO,CAAC,KAAK,CAAC,OAAK,CAAC,CAAA;;;;;KAEvB,CAAA;AAnBY,QAAA,cAAc,kBAmB1B"}
@@ -0,0 +1 @@
1
+ export declare const getHeaders: (session?: string | undefined) => Promise<Record<string, string | undefined>>;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getHeaders = void 0;
40
+ var getAccessToken_1 = require("../getAccessToken");
41
+ var CACHED_ACCESS_TOKEN;
42
+ var getHeaders = function (session) { return __awaiter(void 0, void 0, void 0, function () {
43
+ return __generator(this, function (_a) {
44
+ switch (_a.label) {
45
+ case 0:
46
+ if ((session && process.env.MAIN_API_KEY) ||
47
+ (process.env.MAIN_API_KEY && process.env.MAIN_SESSION)) {
48
+ return [2 /*return*/, {
49
+ 'X-Main-Service-Origin': 'internal',
50
+ 'X-Main-Session': session || process.env.MAIN_SESSION,
51
+ 'X-Api-Key': process.env.MAIN_API_KEY,
52
+ }];
53
+ }
54
+ if (!process.env.MAIN_USER_ID) return [3 /*break*/, 3];
55
+ if (!!CACHED_ACCESS_TOKEN) return [3 /*break*/, 2];
56
+ return [4 /*yield*/, (0, getAccessToken_1.getAccessToken)()];
57
+ case 1:
58
+ CACHED_ACCESS_TOKEN = _a.sent();
59
+ _a.label = 2;
60
+ case 2: return [2 /*return*/, {
61
+ Authorization: "Bearer " + CACHED_ACCESS_TOKEN,
62
+ }];
63
+ case 3: return [2 /*return*/, {}];
64
+ }
65
+ });
66
+ }); };
67
+ exports.getHeaders = getHeaders;
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/getHeaders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAkD;AAElD,IAAI,mBAAmB,CAAA;AAEhB,IAAM,UAAU,GAAG,UACxB,OAAgB;;;;gBAEhB,IACE,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;oBACrC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EACtD;oBACA,sBAAO;4BACL,uBAAuB,EAAE,UAAU;4BACnC,gBAAgB,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;4BACrD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;yBACtC,EAAA;iBACF;qBAEG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAxB,wBAAwB;qBACtB,CAAC,mBAAmB,EAApB,wBAAoB;gBACA,qBAAM,IAAA,+BAAc,GAAE,EAAA;;gBAA5C,mBAAmB,GAAG,SAAsB,CAAA;;oBAG9C,sBAAO;oBACL,aAAa,EAAE,YAAU,mBAAqB;iBAC/C,EAAA;oBAGH,sBAAO,EAAE,EAAA;;;KACV,CAAA;AAzBY,QAAA,UAAU,cAyBtB"}
@@ -0,0 +1,4 @@
1
+ export * from './getAccessToken';
2
+ export * from './externalLinks';
3
+ export * from './getHeaders';
4
+ export * from './session';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./getAccessToken"), exports);
14
+ __exportStar(require("./externalLinks"), exports);
15
+ __exportStar(require("./getHeaders"), exports);
16
+ __exportStar(require("./session"), exports);
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAgC;AAChC,kDAA+B;AAC/B,+CAA4B;AAC5B,4CAAyB"}
@@ -0,0 +1,2 @@
1
+ export declare const getMainSession: (cookieSession?: string | undefined) => string;
2
+ export declare const sessionParser: (cookieSession?: string | undefined) => string;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.sessionParser = exports.getMainSession = void 0;
7
+ var cookie_1 = __importDefault(require("cookie"));
8
+ var getMainSession = function (cookieSession) {
9
+ if (cookieSession) {
10
+ var cookies = cookie_1.default.parse(cookieSession);
11
+ var mainSessionCookie = cookies['main_session'];
12
+ return mainSessionCookie;
13
+ }
14
+ return '';
15
+ };
16
+ exports.getMainSession = getMainSession;
17
+ //Parse session from browser in the form of a session_id
18
+ var sessionParser = function (cookieSession) {
19
+ if (cookieSession) {
20
+ var buff = Buffer.from(cookieSession, 'base64');
21
+ var decodedSession = buff.toString('ascii');
22
+ if (decodedSession) {
23
+ try {
24
+ return JSON.parse(decodedSession)['session_id'];
25
+ }
26
+ catch (e) {
27
+ console.error('Session cannot be parsed', e);
28
+ }
29
+ }
30
+ }
31
+ return '';
32
+ };
33
+ exports.sessionParser = sessionParser;
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/session/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA2B;AAEpB,IAAM,cAAc,GAAG,UAAC,aAAsB;IACnD,IAAI,aAAa,EAAE;QACjB,IAAM,OAAO,GAAG,gBAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC3C,IAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;QACjD,OAAO,iBAAiB,CAAA;KACzB;IACD,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAPY,QAAA,cAAc,kBAO1B;AACD,wDAAwD;AACjD,IAAM,aAAa,GAAG,UAAC,aAAsB;IAClD,IAAI,aAAa,EAAE;QACjB,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QACjD,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,cAAc,EAAE;YAClB,IAAI;gBACF,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAA;aAChD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAA;aAC7C;SACF;KACF;IAED,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAdY,QAAA,aAAa,iBAczB"}
@@ -0,0 +1,2 @@
1
+ export * from './createApolloClient';
2
+ export * from './helpers';
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./createApolloClient"), exports);
14
+ __exportStar(require("./helpers"), exports);
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAoC;AACpC,4CAAyB"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@newskit-render/api",
3
+ "version": "0.2.0",
4
+ "description": "helper package for accessing MAIN and NK API data",
5
+ "author": "",
6
+ "license": "UNLICENSED",
7
+ "main": "dist/index.js",
8
+ "directories": {},
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "rm -rf dist && tsc -b tsconfig.build.json",
14
+ "build:watch": "tsc -b tsconfig.build.json -w",
15
+ "test:unit:watch": "jest --watch",
16
+ "test:unit": "jest --coverage",
17
+ "lint": "eslint --ext .js,.jsx,.ts,.tsx . --color",
18
+ "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --color --fix && prettier --write './**/*.{js,jsx,ts,tsx,json}'",
19
+ "clean": "rm -rf node_modules & rm -f package-lock.json & rm -f yarn.lock",
20
+ "test:unit:ci": "JEST_JUNIT_OUTPUT_NAME=checkout.xml jest --ci --coverage --reporters=default --reporters=jest-junit"
21
+ },
22
+ "peerDependencies": {
23
+ "@apollo/client": "^3.4.16",
24
+ "cookie": "^0.4.1",
25
+ "cross-fetch": "^3.1.4",
26
+ "graphql": "^15.6.0",
27
+ "react": "17.0.2"
28
+ },
29
+ "devDependencies": {
30
+ "@apollo/client": "^3.4.16",
31
+ "@babel/core": "^7.14.0",
32
+ "@babel/polyfill": "^7.10.1",
33
+ "@babel/register": "^7.10.1",
34
+ "@testing-library/jest-dom": "^5.12.0",
35
+ "@testing-library/react": "^11.2.6",
36
+ "@types/jest": "^27.0.2",
37
+ "@types/react": "^17.0.0",
38
+ "@typescript-eslint/eslint-plugin": "^4.9.0",
39
+ "@typescript-eslint/parser": "^4.9.0",
40
+ "babel-loader": "^8.2.2",
41
+ "cookie": "^0.4.1",
42
+ "cross-fetch": "^3.1.4",
43
+ "eslint": "^7.14.0",
44
+ "eslint-config-prettier": "^6.15.0",
45
+ "eslint-plugin-prettier": "^3.2.0",
46
+ "eslint-plugin-react": "^7.22.0",
47
+ "graphql": "^15.6.0",
48
+ "jest": "^26.6.3",
49
+ "jest-junit": "^12.0.0",
50
+ "jest-watch-typeahead": "^0.6.3",
51
+ "prettier": "^2.2.1",
52
+ "react": "17.0.2",
53
+ "ts-jest": "^26.4.4",
54
+ "typescript": "4.4.3"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public"
58
+ }
59
+ }