faros-js-client 0.1.0 → 0.1.2

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.
package/README.md CHANGED
@@ -1,3 +1,35 @@
1
+ [![CI](https://github.com/faros-ai/faros-js-client/actions/workflows/ci.yml/badge.svg)](https://github.com/faros-ai/faros-js-client/actions/workflows/ci.yml)
2
+
1
3
  # Faros API client for JavaScript/TypeScript
2
4
 
3
- [![CI](https://github.com/faros-ai/faros-js-client/actions/workflows/ci.yml/badge.svg)](https://github.com/faros-ai/faros-js-client/actions/workflows/ci.yml)
5
+ ## Installation
6
+ ```bash
7
+ $ npm i --save faros-js-client
8
+ ```
9
+ ## Documentation
10
+
11
+ Usage example:
12
+ ```typescript
13
+ import {FarosClient} from 'faros-js-client';
14
+
15
+ const faros = new FarosClient({
16
+ url: 'https://prod.api.faros.ai',
17
+ apiKey: '<your_faros_api_key>',
18
+ });
19
+
20
+ const query = `{
21
+ tms {
22
+ tasks(first: 10) {
23
+ nodes {
24
+ uid
25
+ }
26
+ }
27
+ }
28
+ }`;
29
+
30
+ const data = await client.gql('default', query);
31
+ ```
32
+
33
+ Please read the [Faros documentation][farosdocs] to learn more.
34
+
35
+ [farosdocs]: https://docs.faros.ai
package/lib/axios.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
+ import { IAxiosRetryConfig } from 'axios-retry';
3
+ import { Logger } from 'pino';
4
+ export declare const DEFAULT_RETRIES = 3;
5
+ export declare const DEFAULT_RETRY_DELAY = 1000;
6
+ /**
7
+ * A handy function to create an Axios instance
8
+ */
9
+ export declare function makeAxiosInstance(config?: AxiosRequestConfig, retryConfig?: IAxiosRetryConfig): AxiosInstance;
10
+ /**
11
+ * A handy function to create an Axios instance with a retry
12
+ */
13
+ export declare function makeAxiosInstanceWithRetry(config?: AxiosRequestConfig, logger?: Logger, retries?: number, delay?: number): AxiosInstance;
package/lib/axios.js ADDED
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.makeAxiosInstanceWithRetry = exports.makeAxiosInstance = exports.DEFAULT_RETRY_DELAY = exports.DEFAULT_RETRIES = void 0;
30
+ const axios_1 = __importDefault(require("axios"));
31
+ const axios_retry_1 = __importStar(require("axios-retry"));
32
+ const errors_1 = require("./errors");
33
+ exports.DEFAULT_RETRIES = 3;
34
+ exports.DEFAULT_RETRY_DELAY = 1000;
35
+ /**
36
+ * A handy function to create an Axios instance
37
+ */
38
+ function makeAxiosInstance(config, retryConfig) {
39
+ const client = axios_1.default.create(config);
40
+ if (!retryConfig || !(client === null || client === void 0 ? void 0 : client.interceptors)) {
41
+ return client;
42
+ }
43
+ (0, axios_retry_1.default)(client, retryConfig);
44
+ return client;
45
+ }
46
+ exports.makeAxiosInstance = makeAxiosInstance;
47
+ /**
48
+ * A handy function to create an Axios instance with a retry
49
+ */
50
+ function makeAxiosInstanceWithRetry(config, logger, retries = exports.DEFAULT_RETRIES, delay = exports.DEFAULT_RETRY_DELAY) {
51
+ return makeAxiosInstance(config, {
52
+ retries,
53
+ retryCondition: axios_retry_1.isRetryableError,
54
+ retryDelay: (retryNumber, error) => {
55
+ if (logger) {
56
+ logger.warn((0, errors_1.wrapApiError)(error, `Retry attempt ${retryNumber} of ${retries}`));
57
+ }
58
+ return retryNumber * delay;
59
+ },
60
+ });
61
+ }
62
+ exports.makeAxiosInstanceWithRetry = makeAxiosInstanceWithRetry;
@@ -0,0 +1,24 @@
1
+ import { AxiosRequestConfig } from 'axios';
2
+ import * as gql from 'graphql';
3
+ import { Logger } from 'pino';
4
+ import { Schema } from './graphql/types';
5
+ import { Account, FarosClientConfig, NamedQuery, SecretName, UpdateAccount } from './types';
6
+ export declare const DEFAULT_AXIOS_CONFIG: AxiosRequestConfig;
7
+ export declare const GRAPH_VERSION_HEADER = "x-faros-graph-version";
8
+ /** Faros API client **/
9
+ export declare class FarosClient {
10
+ private readonly api;
11
+ constructor(cfg: FarosClientConfig, logger?: Logger, axiosConfig?: AxiosRequestConfig);
12
+ tenant(): Promise<string>;
13
+ secret(name: string, group?: string): Promise<string | undefined>;
14
+ secrets(group?: string): Promise<ReadonlyArray<SecretName>>;
15
+ graphExists(graph: string): Promise<boolean>;
16
+ namedQuery(name: string): Promise<NamedQuery | undefined>;
17
+ gql(graph: string, query: string, variables?: any): Promise<any>;
18
+ rawGql(graph: string, query: string, variables?: any): Promise<any>;
19
+ gqlSchema(graph?: string): Promise<Schema>;
20
+ introspect(graph: string): Promise<gql.GraphQLSchema>;
21
+ geocode(...locations: string[]): Promise<ReadonlyArray<Location>>;
22
+ accounts(graph?: string): Promise<ReadonlyArray<Account>>;
23
+ updateAccount(update: UpdateAccount): Promise<void>;
24
+ }
package/lib/client.js ADDED
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.FarosClient = exports.GRAPH_VERSION_HEADER = exports.DEFAULT_AXIOS_CONFIG = void 0;
30
+ const gql = __importStar(require("graphql"));
31
+ const pino_1 = __importDefault(require("pino"));
32
+ const axios_1 = require("./axios");
33
+ const errors_1 = require("./errors");
34
+ const utils_1 = require("./utils");
35
+ exports.DEFAULT_AXIOS_CONFIG = { timeout: 60000 };
36
+ exports.GRAPH_VERSION_HEADER = 'x-faros-graph-version';
37
+ /** Faros API client **/
38
+ class FarosClient {
39
+ constructor(cfg, logger = (0, pino_1.default)({ name: 'faros-client' }), axiosConfig = exports.DEFAULT_AXIOS_CONFIG) {
40
+ const url = utils_1.Utils.urlWithoutTrailingSlashes(cfg.url);
41
+ this.api = (0, axios_1.makeAxiosInstanceWithRetry)({
42
+ ...axiosConfig,
43
+ baseURL: url,
44
+ headers: {
45
+ ...axiosConfig === null || axiosConfig === void 0 ? void 0 : axiosConfig.headers,
46
+ authorization: cfg.apiKey,
47
+ ...(cfg.useGraphQLV2 && { [exports.GRAPH_VERSION_HEADER]: 'v2' }),
48
+ },
49
+ }, logger);
50
+ }
51
+ async tenant() {
52
+ try {
53
+ const { data } = await this.api.get('/users/me');
54
+ return data.tenantId;
55
+ }
56
+ catch (err) {
57
+ throw (0, errors_1.wrapApiError)(err, 'unable to get tenant');
58
+ }
59
+ }
60
+ async secret(name, group) {
61
+ var _a;
62
+ try {
63
+ const params = group ? { group } : undefined;
64
+ const { data } = await this.api.get(`/secrets/${name}`, { params });
65
+ return data.value;
66
+ }
67
+ catch (err) {
68
+ if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
69
+ return undefined;
70
+ }
71
+ throw (0, errors_1.wrapApiError)(err, `unable to get secret: ${name}`);
72
+ }
73
+ }
74
+ async secrets(group) {
75
+ try {
76
+ const params = group ? { group } : undefined;
77
+ const { data } = await this.api.get('/secrets', { params });
78
+ return data.secrets;
79
+ }
80
+ catch (err) {
81
+ throw (0, errors_1.wrapApiError)(err, 'unable to list secrets');
82
+ }
83
+ }
84
+ async graphExists(graph) {
85
+ var _a;
86
+ try {
87
+ await this.api.get(`/graphs/${graph}/statistics`);
88
+ return true;
89
+ }
90
+ catch (err) {
91
+ if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
92
+ return false;
93
+ }
94
+ throw (0, errors_1.wrapApiError)(err, `unable to check graph exists: ${graph}`);
95
+ }
96
+ }
97
+ async namedQuery(name) {
98
+ var _a;
99
+ try {
100
+ const { data } = await this.api.get(`/queries/${name}`);
101
+ return data.query;
102
+ }
103
+ catch (err) {
104
+ if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
105
+ return undefined;
106
+ }
107
+ throw (0, errors_1.wrapApiError)(err, `unable to get query: ${name}`);
108
+ }
109
+ }
110
+ /* returns only the data object of a standard qgl response */
111
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
112
+ async gql(graph, query, variables) {
113
+ try {
114
+ const req = variables ? { query, variables } : { query };
115
+ const { data } = await this.api.post(`/graphs/${graph}/graphql`, req);
116
+ return data.data;
117
+ }
118
+ catch (err) {
119
+ throw (0, errors_1.wrapApiError)(err, `unable to query graph: ${graph}`);
120
+ }
121
+ }
122
+ /* returns both data (as res.data) and errors (as res.errors) */
123
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
124
+ async rawGql(graph, query, variables) {
125
+ try {
126
+ const req = variables ? { query, variables } : { query };
127
+ const { data } = await this.api.post(`/graphs/${graph}/graphql`, req);
128
+ return data;
129
+ }
130
+ catch (err) {
131
+ throw (0, errors_1.wrapApiError)(err, `unable to query graph: ${graph}`);
132
+ }
133
+ }
134
+ async gqlSchema(graph = 'default') {
135
+ try {
136
+ const { data } = await this.api.get(`/graphs/${graph}/graphql/schema`);
137
+ return data;
138
+ }
139
+ catch (err) {
140
+ throw (0, errors_1.wrapApiError)(err, 'unable to load schema');
141
+ }
142
+ }
143
+ async introspect(graph) {
144
+ try {
145
+ const data = await this.gql(graph, gql.getIntrospectionQuery());
146
+ return gql.buildClientSchema(data);
147
+ }
148
+ catch (err) {
149
+ throw (0, errors_1.wrapApiError)(err, `unable to introspect graph: ${graph}`);
150
+ }
151
+ }
152
+ async geocode(...locations) {
153
+ try {
154
+ const req = { locations };
155
+ const { data } = await this.api.post('/geocoding/lookup', req);
156
+ return data.locations;
157
+ }
158
+ catch (err) {
159
+ throw (0, errors_1.wrapApiError)(err, 'unable to geocode locations');
160
+ }
161
+ }
162
+ async accounts(graph) {
163
+ try {
164
+ const { data: { accounts }, } = await this.api.get('/accounts');
165
+ if (Array.isArray(accounts)) {
166
+ return accounts
167
+ .filter((a) => { var _a; return (graph ? ((_a = a.params) === null || _a === void 0 ? void 0 : _a.graphName) === graph : true); })
168
+ .map((a) => {
169
+ let secretName;
170
+ if (a.secretsName.includes('/')) {
171
+ const [group, name] = a.secretsName.split('/');
172
+ secretName = { group, name };
173
+ }
174
+ else {
175
+ secretName = { name: a.secretsName };
176
+ }
177
+ delete a.secretsName;
178
+ return {
179
+ ...a,
180
+ secretName,
181
+ lastModified: new Date(a.lastModified),
182
+ };
183
+ });
184
+ }
185
+ return [];
186
+ }
187
+ catch (err) {
188
+ throw (0, errors_1.wrapApiError)(err, 'unable to list accounts');
189
+ }
190
+ }
191
+ async updateAccount(update) {
192
+ try {
193
+ await this.api.put(`/accounts/${update.accountId}`, {
194
+ tenantId: update.tenantId,
195
+ farosApiKeyId: update.farosApiKeyId,
196
+ type: update.type,
197
+ mode: update.mode,
198
+ params: update.params,
199
+ secretName: update.secretName,
200
+ scheduleExpression: update.scheduleExpression,
201
+ executionTimeoutInSecs: update.executionTimeoutInSecs,
202
+ runtimeVersion: update.runtimeVersion,
203
+ memorySizeInMbs: update.memorySizeInMbs,
204
+ version: update.version,
205
+ });
206
+ }
207
+ catch (err) {
208
+ throw (0, errors_1.wrapApiError)(err, `unable to update account: ${update.accountId}`);
209
+ }
210
+ }
211
+ }
212
+ exports.FarosClient = FarosClient;
@@ -0,0 +1,2 @@
1
+ /** Strips verbose properties that libraries like Axios attach to errors */
2
+ export declare function wrapApiError(error: Error, message?: string): Error;
package/lib/errors.js ADDED
@@ -0,0 +1,60 @@
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.wrapApiError = void 0;
7
+ const stream_1 = __importDefault(require("stream"));
8
+ const verror_1 = require("verror");
9
+ function formatMessageData(data) {
10
+ return data instanceof stream_1.default.Readable ? '[Stream]' : data;
11
+ }
12
+ function formatRequest(req) {
13
+ return {
14
+ baseUrl: req === null || req === void 0 ? void 0 : req.baseURL,
15
+ url: req === null || req === void 0 ? void 0 : req.url,
16
+ method: req === null || req === void 0 ? void 0 : req.method,
17
+ params: req === null || req === void 0 ? void 0 : req.params,
18
+ };
19
+ }
20
+ function formatResponse(res) {
21
+ return {
22
+ status: res.status,
23
+ headers: res.headers,
24
+ data: formatMessageData(res.data),
25
+ };
26
+ }
27
+ function isAxiosError(error) {
28
+ return error.isAxiosError;
29
+ }
30
+ /** Strips verbose properties that libraries like Axios attach to errors */
31
+ function wrapApiError(error, message) {
32
+ var _a;
33
+ if (!isAxiosError(error)) {
34
+ const cause = verror_1.VError.cause(error);
35
+ if (cause) {
36
+ // Wrap the cause recursively since it could contain an Axios error
37
+ error = new verror_1.WError(wrapApiError(cause), error.message);
38
+ }
39
+ return message ? new verror_1.WError(error, message) : error;
40
+ }
41
+ const prefix = message ? `${message}: ` : '';
42
+ const res = error.response;
43
+ const info = {
44
+ req: error.request
45
+ ? formatRequest({ ...error.config, ...error.request })
46
+ : formatRequest(error.config),
47
+ res: res ? formatResponse(res) : undefined,
48
+ };
49
+ if (!res) {
50
+ return new verror_1.VError({ info }, '%sAPI request failed: %s', prefix, error.message);
51
+ }
52
+ const { data, status } = res;
53
+ let msg = `${prefix}API responded with status ${status}`;
54
+ const causeMsg = typeof data == 'string' ? data : (_a = data === null || data === void 0 ? void 0 : data.error) === null || _a === void 0 ? void 0 : _a.message;
55
+ if (causeMsg) {
56
+ msg += `: ${causeMsg}`;
57
+ }
58
+ return new verror_1.VError({ info }, msg);
59
+ }
60
+ exports.wrapApiError = wrapApiError;
@@ -0,0 +1,35 @@
1
+ import { Dictionary } from 'ts-essentials';
2
+ import { SchemaLoader } from './schema';
3
+ import { ArrayRelationship, ObjectRelationship, Schema, Table } from './types';
4
+ export declare class HasuraSchemaLoader implements SchemaLoader {
5
+ private readonly api;
6
+ private readonly camelCaseFieldNames;
7
+ constructor(url: string, adminSecret?: string, camelCaseFieldNames?: boolean);
8
+ private fetchDbSource;
9
+ private fetchPrimaryKeys;
10
+ /**
11
+ * Builds map from sourceTable to map of targetTable by fk column.
12
+ *
13
+ * That is, given:
14
+ * sourceTable (e.g. cicd_Build)
15
+ * fk column (e.g. pipeline_id in cicd_Build)
16
+ * targetTable (e.g. cicd_Pipeline): table.table.name
17
+ *
18
+ * The output, res, can be used as:
19
+ * res['cicd_Build']['pipeline_id'] => 'cicd_Pipeline
20
+ */
21
+ static indexFkTargetModels(source: Source): Dictionary<Dictionary<string>>;
22
+ loadSchema(): Promise<Schema>;
23
+ }
24
+ interface TableWithRelationships {
25
+ table: Table;
26
+ object_relationships: ReadonlyArray<ObjectRelationship>;
27
+ array_relationships: ReadonlyArray<ArrayRelationship>;
28
+ }
29
+ interface Source {
30
+ name: string;
31
+ kind: string;
32
+ tables: ReadonlyArray<TableWithRelationships>;
33
+ configuration: any;
34
+ }
35
+ export {};
@@ -0,0 +1,180 @@
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.HasuraSchemaLoader = void 0;
7
+ const assert_1 = require("assert");
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const lodash_1 = require("lodash");
11
+ const path_1 = __importDefault(require("path"));
12
+ const toposort_1 = __importDefault(require("toposort"));
13
+ const verror_1 = require("verror");
14
+ const schema_1 = require("./schema");
15
+ // Loads schema from a Hasura api
16
+ class HasuraSchemaLoader {
17
+ constructor(url, adminSecret, camelCaseFieldNames = false) {
18
+ this.api = axios_1.default.create({
19
+ baseURL: url,
20
+ headers: {
21
+ 'X-Hasura-Role': 'admin',
22
+ ...(adminSecret && { 'X-Hasura-Admin-Secret': adminSecret }),
23
+ },
24
+ });
25
+ this.camelCaseFieldNames = camelCaseFieldNames;
26
+ }
27
+ async fetchDbSource() {
28
+ const response = await this.api.post('/v1/metadata', {
29
+ type: 'export_metadata',
30
+ version: 2,
31
+ args: {},
32
+ });
33
+ const sources = response.data.metadata.sources;
34
+ const defaultSource = (0, lodash_1.find)(sources, (source) => source.name === 'default');
35
+ if (!defaultSource) {
36
+ throw new verror_1.VError('Faros database not connected to Hasura');
37
+ }
38
+ return defaultSource;
39
+ }
40
+ async fetchPrimaryKeys() {
41
+ const response = await this.api.post('/v2/query', {
42
+ type: 'run_sql',
43
+ args: {
44
+ source: 'default',
45
+ sql: await fs_extra_1.default.readFile(path_1.default.join(__dirname, '../../resources/fetch-primary-keys.sql'), 'utf8'),
46
+ cascade: false,
47
+ read_only: true,
48
+ },
49
+ });
50
+ const result = response.data.result;
51
+ if (!result) {
52
+ throw new verror_1.VError('Failed to load primary keys');
53
+ }
54
+ const primaryKeys = {};
55
+ result
56
+ .filter((row) => row[0] !== 'table_name')
57
+ .forEach(([table, exp]) => {
58
+ // TODO: better way to do this?
59
+ primaryKeys[table] = exp
60
+ .replace('pkey(VARIADIC ARRAY[', '')
61
+ .replace('])', '')
62
+ .split(', ')
63
+ .map((col) => col.replace(/"/g, ''))
64
+ .map((col) => (this.camelCaseFieldNames ? (0, lodash_1.camelCase)(col) : col));
65
+ });
66
+ return primaryKeys;
67
+ }
68
+ /**
69
+ * Builds map from sourceTable to map of targetTable by fk column.
70
+ *
71
+ * That is, given:
72
+ * sourceTable (e.g. cicd_Build)
73
+ * fk column (e.g. pipeline_id in cicd_Build)
74
+ * targetTable (e.g. cicd_Pipeline): table.table.name
75
+ *
76
+ * The output, res, can be used as:
77
+ * res['cicd_Build']['pipeline_id'] => 'cicd_Pipeline
78
+ */
79
+ static indexFkTargetModels(source) {
80
+ const res = {};
81
+ for (const table of source.tables) {
82
+ const targetTable = table.table.name;
83
+ if (table.array_relationships) {
84
+ for (const arrRel of table.array_relationships) {
85
+ const fkCol = (0, schema_1.foreignKeyForArray)(arrRel);
86
+ const sourceTable = remoteTableForArray(arrRel);
87
+ (0, assert_1.ok)(sourceTable, `missing source table on ${JSON.stringify(arrRel)}`);
88
+ if (!res[sourceTable]) {
89
+ res[sourceTable] = {};
90
+ }
91
+ res[sourceTable][fkCol] = targetTable;
92
+ }
93
+ }
94
+ }
95
+ return res;
96
+ }
97
+ async loadSchema() {
98
+ var _a, _b, _c, _d;
99
+ const primaryKeys = await this.fetchPrimaryKeys();
100
+ const source = await this.fetchDbSource();
101
+ const targetTableByFk = HasuraSchemaLoader.indexFkTargetModels(source);
102
+ const query = await fs_extra_1.default.readFile(path_1.default.join(__dirname, '../../resources/introspection-query.gql'), 'utf8');
103
+ const response = await this.api.post('/v1/graphql', { query });
104
+ const schema = response.data.data.__schema;
105
+ const tableNames = [];
106
+ const scalars = {};
107
+ const references = {};
108
+ const backReferences = {};
109
+ for (const table of source.tables) {
110
+ const tableName = table.table.name;
111
+ tableNames.push(tableName);
112
+ const type = (0, lodash_1.find)(schema.types, (t) => t.name === tableName && t.kind === 'OBJECT');
113
+ if (!type || !type.fields) {
114
+ continue;
115
+ }
116
+ const scalarTypes = type.fields.filter((t) => (t.type.kind === 'SCALAR' ||
117
+ (t.type.kind === 'NON_NULL' && t.type.ofType.kind === 'SCALAR')) &&
118
+ t.description !== 'generated');
119
+ const tableScalars = {};
120
+ for (const scalar of scalarTypes) {
121
+ tableScalars[scalar.name] =
122
+ (_b = (_a = scalar.type.ofType) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : scalar.type.name;
123
+ }
124
+ scalars[tableName] = tableScalars;
125
+ const tableReferences = {};
126
+ for (const rel of (_c = table.object_relationships) !== null && _c !== void 0 ? _c : []) {
127
+ const fk = (0, schema_1.foreignKeyForObj)(rel);
128
+ const relFldName = this.camelCaseFieldNames ? (0, lodash_1.camelCase)(fk) : fk;
129
+ const relMetadata = {
130
+ field: rel.name,
131
+ model: targetTableByFk[table.table.name][fk],
132
+ };
133
+ // index relation metadata using both FK column and rel.name
134
+ // this is needed for cross-compatibility with CE and SaaS
135
+ // GraphQLClient iterates over fields of records checking this
136
+ // data structure for matches on nested objects.
137
+ // the record contains SDL relationship names like owner or repository
138
+ // in CE, the FK column matches this relationship name
139
+ // in SaaS, the column is irrelevant we need to index by Hasura rel.name
140
+ tableReferences[relFldName] = relMetadata;
141
+ tableReferences[rel.name] = relMetadata;
142
+ }
143
+ references[tableName] = tableReferences;
144
+ backReferences[tableName] = ((_d = table.array_relationships) !== null && _d !== void 0 ? _d : []).map((rel) => {
145
+ return {
146
+ field: rel.name,
147
+ model: remoteTableForArray(rel),
148
+ };
149
+ });
150
+ }
151
+ const modelDeps = [];
152
+ for (const model of Object.keys(references)) {
153
+ for (const ref of Object.values(references[model])) {
154
+ if (model !== ref.model) {
155
+ modelDeps.push([model, ref.model]);
156
+ }
157
+ }
158
+ }
159
+ const sortedModelDependencies = (0, toposort_1.default)(modelDeps);
160
+ return {
161
+ primaryKeys,
162
+ scalars,
163
+ references,
164
+ backReferences,
165
+ sortedModelDependencies,
166
+ tableNames,
167
+ };
168
+ }
169
+ }
170
+ exports.HasuraSchemaLoader = HasuraSchemaLoader;
171
+ function remoteTableForArray(rel) {
172
+ var _a, _b;
173
+ if ((0, schema_1.isManualConfiguration)(rel.using)) {
174
+ return rel.using.manual_configuration.remote_table.name;
175
+ }
176
+ const arrFK = rel.using;
177
+ const table = (_b = (_a = arrFK.foreign_key_constraint_on) === null || _a === void 0 ? void 0 : _a.table) === null || _b === void 0 ? void 0 : _b.name;
178
+ (0, assert_1.ok)(table, `expected remote table on ${JSON.stringify(arrFK)}`);
179
+ return table;
180
+ }
@@ -0,0 +1,7 @@
1
+ import { ArrayRelationship, ManualConfiguration, ObjectRelationship, Schema } from './types';
2
+ export declare function foreignKeyForObj(rel: ObjectRelationship): string;
3
+ export declare function foreignKeyForArray(rel: ArrayRelationship): string;
4
+ export declare function isManualConfiguration(using: ManualConfiguration | any): using is ManualConfiguration;
5
+ export interface SchemaLoader {
6
+ loadSchema(): Promise<Schema>;
7
+ }
@@ -0,0 +1,43 @@
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.isManualConfiguration = exports.foreignKeyForArray = exports.foreignKeyForObj = void 0;
7
+ const assert_1 = require("assert");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ function foreignKeyForObj(rel) {
10
+ if (isManualConfiguration(rel.using)) {
11
+ // for object rel, column_mapping contains one entry
12
+ // mapping FK on host table to PK of target table
13
+ const fkToPkMap = rel.using.manual_configuration.column_mapping;
14
+ const fks = Object.keys(fkToPkMap);
15
+ (0, assert_1.ok)(fks.length === 1, `expected one foreign key in ${JSON.stringify(fkToPkMap)}`);
16
+ return fks[0];
17
+ }
18
+ const arrFK = rel.using;
19
+ const fk = arrFK.foreign_key_constraint_on;
20
+ (0, assert_1.ok)(typeof fk === 'string', `expected object fk on ${JSON.stringify(arrFK)}`);
21
+ return fk;
22
+ }
23
+ exports.foreignKeyForObj = foreignKeyForObj;
24
+ function foreignKeyForArray(rel) {
25
+ var _a;
26
+ if (isManualConfiguration(rel.using)) {
27
+ // for array rel, column_mapping contains one entry
28
+ // mapping PK of target table to FK on host table
29
+ const pkToFkMap = rel.using.manual_configuration.column_mapping;
30
+ const pks = Object.keys(pkToFkMap);
31
+ (0, assert_1.ok)(pks.length === 1, `expected one foreign key in ${JSON.stringify(pkToFkMap)}`);
32
+ return lodash_1.default.get(pkToFkMap, pks[0]);
33
+ }
34
+ const arrFK = rel.using;
35
+ const fk = (_a = arrFK.foreign_key_constraint_on) === null || _a === void 0 ? void 0 : _a.column;
36
+ (0, assert_1.ok)(fk, `expected array fk on ${JSON.stringify(arrFK)}`);
37
+ return fk;
38
+ }
39
+ exports.foreignKeyForArray = foreignKeyForArray;
40
+ function isManualConfiguration(using) {
41
+ return using.manual_configuration !== undefined;
42
+ }
43
+ exports.isManualConfiguration = isManualConfiguration;
@@ -0,0 +1,43 @@
1
+ import { Dictionary } from 'ts-essentials';
2
+ export interface Table {
3
+ schema: string;
4
+ name: string;
5
+ }
6
+ export interface ManualConfiguration {
7
+ manual_configuration: {
8
+ column_mapping: Dictionary<string>;
9
+ remote_table: {
10
+ name: string;
11
+ schema?: string;
12
+ };
13
+ };
14
+ }
15
+ export interface ObjectForeignKey {
16
+ foreign_key_constraint_on: string;
17
+ }
18
+ export interface ArrayForeignKey {
19
+ foreign_key_constraint_on: {
20
+ column: string;
21
+ table: Table;
22
+ };
23
+ }
24
+ export interface ObjectRelationship {
25
+ name: string;
26
+ using: ObjectForeignKey | ManualConfiguration;
27
+ }
28
+ export interface ArrayRelationship {
29
+ name: string;
30
+ using: ArrayForeignKey | ManualConfiguration;
31
+ }
32
+ export interface Reference {
33
+ field: string;
34
+ model: string;
35
+ }
36
+ export interface Schema {
37
+ primaryKeys: Dictionary<string[]>;
38
+ scalars: Dictionary<Dictionary<string>>;
39
+ references: Dictionary<Dictionary<Reference>>;
40
+ backReferences: Dictionary<Reference[]>;
41
+ sortedModelDependencies: ReadonlyArray<string>;
42
+ tableNames: ReadonlyArray<string>;
43
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/lib/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export { DEFAULT_RETRY_DELAY, DEFAULT_RETRIES, makeAxiosInstance, makeAxiosInstanceWithRetry, } from './axios';
2
+ export { wrapApiError } from './errors';
3
+ export { FarosClient } from './client';
4
+ export { Account, Address, Coordinates, FarosClientConfig, Location, NamedQuery, SecretName, UpdateAccount, } from './types';
5
+ export { foreignKeyForArray, foreignKeyForObj, SchemaLoader, } from './graphql/schema';
6
+ export { ArrayForeignKey, ArrayRelationship, ManualConfiguration, ObjectForeignKey, ObjectRelationship, Reference, Schema, } from './graphql/types';
7
+ export { HasuraSchemaLoader } from './graphql/hasura-schema-loader';
8
+ export { Utils } from './utils';
package/lib/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Utils = exports.HasuraSchemaLoader = exports.foreignKeyForObj = exports.foreignKeyForArray = exports.FarosClient = exports.wrapApiError = exports.makeAxiosInstanceWithRetry = exports.makeAxiosInstance = exports.DEFAULT_RETRIES = exports.DEFAULT_RETRY_DELAY = void 0;
4
+ var axios_1 = require("./axios");
5
+ Object.defineProperty(exports, "DEFAULT_RETRY_DELAY", { enumerable: true, get: function () { return axios_1.DEFAULT_RETRY_DELAY; } });
6
+ Object.defineProperty(exports, "DEFAULT_RETRIES", { enumerable: true, get: function () { return axios_1.DEFAULT_RETRIES; } });
7
+ Object.defineProperty(exports, "makeAxiosInstance", { enumerable: true, get: function () { return axios_1.makeAxiosInstance; } });
8
+ Object.defineProperty(exports, "makeAxiosInstanceWithRetry", { enumerable: true, get: function () { return axios_1.makeAxiosInstanceWithRetry; } });
9
+ var errors_1 = require("./errors");
10
+ Object.defineProperty(exports, "wrapApiError", { enumerable: true, get: function () { return errors_1.wrapApiError; } });
11
+ var client_1 = require("./client");
12
+ Object.defineProperty(exports, "FarosClient", { enumerable: true, get: function () { return client_1.FarosClient; } });
13
+ var schema_1 = require("./graphql/schema");
14
+ Object.defineProperty(exports, "foreignKeyForArray", { enumerable: true, get: function () { return schema_1.foreignKeyForArray; } });
15
+ Object.defineProperty(exports, "foreignKeyForObj", { enumerable: true, get: function () { return schema_1.foreignKeyForObj; } });
16
+ var hasura_schema_loader_1 = require("./graphql/hasura-schema-loader");
17
+ Object.defineProperty(exports, "HasuraSchemaLoader", { enumerable: true, get: function () { return hasura_schema_loader_1.HasuraSchemaLoader; } });
18
+ var utils_1 = require("./utils");
19
+ Object.defineProperty(exports, "Utils", { enumerable: true, get: function () { return utils_1.Utils; } });
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.es2019.full.d.ts","../node_modules/axios/index.d.ts","../node_modules/axios-retry/index.d.ts","../node_modules/@types/node/ts4.8/assert.d.ts","../node_modules/@types/node/ts4.8/assert/strict.d.ts","../node_modules/@types/node/ts4.8/globals.d.ts","../node_modules/@types/node/ts4.8/async_hooks.d.ts","../node_modules/@types/node/ts4.8/buffer.d.ts","../node_modules/@types/node/ts4.8/child_process.d.ts","../node_modules/@types/node/ts4.8/cluster.d.ts","../node_modules/@types/node/ts4.8/console.d.ts","../node_modules/@types/node/ts4.8/constants.d.ts","../node_modules/@types/node/ts4.8/crypto.d.ts","../node_modules/@types/node/ts4.8/dgram.d.ts","../node_modules/@types/node/ts4.8/diagnostics_channel.d.ts","../node_modules/@types/node/ts4.8/dns.d.ts","../node_modules/@types/node/ts4.8/dns/promises.d.ts","../node_modules/@types/node/ts4.8/domain.d.ts","../node_modules/@types/node/ts4.8/events.d.ts","../node_modules/@types/node/ts4.8/fs.d.ts","../node_modules/@types/node/ts4.8/fs/promises.d.ts","../node_modules/@types/node/ts4.8/http.d.ts","../node_modules/@types/node/ts4.8/http2.d.ts","../node_modules/@types/node/ts4.8/https.d.ts","../node_modules/@types/node/ts4.8/inspector.d.ts","../node_modules/@types/node/ts4.8/module.d.ts","../node_modules/@types/node/ts4.8/net.d.ts","../node_modules/@types/node/ts4.8/os.d.ts","../node_modules/@types/node/ts4.8/path.d.ts","../node_modules/@types/node/ts4.8/perf_hooks.d.ts","../node_modules/@types/node/ts4.8/process.d.ts","../node_modules/@types/node/ts4.8/punycode.d.ts","../node_modules/@types/node/ts4.8/querystring.d.ts","../node_modules/@types/node/ts4.8/readline.d.ts","../node_modules/@types/node/ts4.8/repl.d.ts","../node_modules/@types/node/ts4.8/stream.d.ts","../node_modules/@types/node/ts4.8/stream/promises.d.ts","../node_modules/@types/node/ts4.8/stream/consumers.d.ts","../node_modules/@types/node/ts4.8/stream/web.d.ts","../node_modules/@types/node/ts4.8/string_decoder.d.ts","../node_modules/@types/node/ts4.8/test.d.ts","../node_modules/@types/node/ts4.8/timers.d.ts","../node_modules/@types/node/ts4.8/timers/promises.d.ts","../node_modules/@types/node/ts4.8/tls.d.ts","../node_modules/@types/node/ts4.8/trace_events.d.ts","../node_modules/@types/node/ts4.8/tty.d.ts","../node_modules/@types/node/ts4.8/url.d.ts","../node_modules/@types/node/ts4.8/util.d.ts","../node_modules/@types/node/ts4.8/v8.d.ts","../node_modules/@types/node/ts4.8/vm.d.ts","../node_modules/@types/node/ts4.8/wasi.d.ts","../node_modules/@types/node/ts4.8/worker_threads.d.ts","../node_modules/@types/node/ts4.8/zlib.d.ts","../node_modules/@types/node/ts4.8/globals.global.d.ts","../node_modules/@types/node/ts4.8/index.d.ts","../node_modules/pino-std-serializers/index.d.ts","../node_modules/pino/node_modules/sonic-boom/types/index.d.ts","../node_modules/pino/pino.d.ts","../node_modules/@types/verror/index.d.ts","../src/errors.ts","../src/axios.ts","../node_modules/graphql/version.d.ts","../node_modules/graphql/jsutils/Maybe.d.ts","../node_modules/graphql/language/source.d.ts","../node_modules/graphql/jsutils/ObjMap.d.ts","../node_modules/graphql/jsutils/Path.d.ts","../node_modules/graphql/jsutils/PromiseOrValue.d.ts","../node_modules/graphql/language/kinds.d.ts","../node_modules/graphql/language/tokenKind.d.ts","../node_modules/graphql/language/ast.d.ts","../node_modules/graphql/language/location.d.ts","../node_modules/graphql/error/GraphQLError.d.ts","../node_modules/graphql/language/directiveLocation.d.ts","../node_modules/graphql/type/directives.d.ts","../node_modules/graphql/type/schema.d.ts","../node_modules/graphql/type/definition.d.ts","../node_modules/graphql/execution/execute.d.ts","../node_modules/graphql/graphql.d.ts","../node_modules/graphql/type/scalars.d.ts","../node_modules/graphql/type/introspection.d.ts","../node_modules/graphql/type/validate.d.ts","../node_modules/graphql/type/assertName.d.ts","../node_modules/graphql/type/index.d.ts","../node_modules/graphql/language/printLocation.d.ts","../node_modules/graphql/language/lexer.d.ts","../node_modules/graphql/language/parser.d.ts","../node_modules/graphql/language/printer.d.ts","../node_modules/graphql/language/visitor.d.ts","../node_modules/graphql/language/predicates.d.ts","../node_modules/graphql/language/index.d.ts","../node_modules/graphql/execution/subscribe.d.ts","../node_modules/graphql/execution/values.d.ts","../node_modules/graphql/execution/index.d.ts","../node_modules/graphql/subscription/index.d.ts","../node_modules/graphql/utilities/TypeInfo.d.ts","../node_modules/graphql/validation/ValidationContext.d.ts","../node_modules/graphql/validation/validate.d.ts","../node_modules/graphql/validation/specifiedRules.d.ts","../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.d.ts","../node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.d.ts","../node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.d.ts","../node_modules/graphql/validation/rules/KnownArgumentNamesRule.d.ts","../node_modules/graphql/validation/rules/KnownDirectivesRule.d.ts","../node_modules/graphql/validation/rules/KnownFragmentNamesRule.d.ts","../node_modules/graphql/validation/rules/KnownTypeNamesRule.d.ts","../node_modules/graphql/validation/rules/LoneAnonymousOperationRule.d.ts","../node_modules/graphql/validation/rules/NoFragmentCyclesRule.d.ts","../node_modules/graphql/validation/rules/NoUndefinedVariablesRule.d.ts","../node_modules/graphql/validation/rules/NoUnusedFragmentsRule.d.ts","../node_modules/graphql/validation/rules/NoUnusedVariablesRule.d.ts","../node_modules/graphql/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts","../node_modules/graphql/validation/rules/PossibleFragmentSpreadsRule.d.ts","../node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.d.ts","../node_modules/graphql/validation/rules/ScalarLeafsRule.d.ts","../node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.d.ts","../node_modules/graphql/validation/rules/UniqueArgumentNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.d.ts","../node_modules/graphql/validation/rules/UniqueFragmentNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueInputFieldNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueOperationNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueVariableNamesRule.d.ts","../node_modules/graphql/validation/rules/ValuesOfCorrectTypeRule.d.ts","../node_modules/graphql/validation/rules/VariablesAreInputTypesRule.d.ts","../node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.d.ts","../node_modules/graphql/validation/rules/LoneSchemaDefinitionRule.d.ts","../node_modules/graphql/validation/rules/UniqueOperationTypesRule.d.ts","../node_modules/graphql/validation/rules/UniqueTypeNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueFieldDefinitionNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts","../node_modules/graphql/validation/rules/UniqueDirectiveNamesRule.d.ts","../node_modules/graphql/validation/rules/PossibleTypeExtensionsRule.d.ts","../node_modules/graphql/validation/rules/custom/NoDeprecatedCustomRule.d.ts","../node_modules/graphql/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts","../node_modules/graphql/validation/index.d.ts","../node_modules/graphql/error/syntaxError.d.ts","../node_modules/graphql/error/locatedError.d.ts","../node_modules/graphql/error/index.d.ts","../node_modules/graphql/utilities/getIntrospectionQuery.d.ts","../node_modules/graphql/utilities/getOperationAST.d.ts","../node_modules/graphql/utilities/getOperationRootType.d.ts","../node_modules/graphql/utilities/introspectionFromSchema.d.ts","../node_modules/graphql/utilities/buildClientSchema.d.ts","../node_modules/graphql/utilities/buildASTSchema.d.ts","../node_modules/graphql/utilities/extendSchema.d.ts","../node_modules/graphql/utilities/lexicographicSortSchema.d.ts","../node_modules/graphql/utilities/printSchema.d.ts","../node_modules/graphql/utilities/typeFromAST.d.ts","../node_modules/graphql/utilities/valueFromAST.d.ts","../node_modules/graphql/utilities/valueFromASTUntyped.d.ts","../node_modules/graphql/utilities/astFromValue.d.ts","../node_modules/graphql/utilities/coerceInputValue.d.ts","../node_modules/graphql/utilities/concatAST.d.ts","../node_modules/graphql/utilities/separateOperations.d.ts","../node_modules/graphql/utilities/stripIgnoredCharacters.d.ts","../node_modules/graphql/utilities/typeComparators.d.ts","../node_modules/graphql/utilities/assertValidName.d.ts","../node_modules/graphql/utilities/findBreakingChanges.d.ts","../node_modules/graphql/utilities/typedQueryDocumentNode.d.ts","../node_modules/graphql/utilities/index.d.ts","../node_modules/graphql/index.d.ts","../node_modules/ts-essentials/dist/types.d.ts","../node_modules/ts-essentials/dist/functions.d.ts","../node_modules/ts-essentials/dist/index.d.ts","../src/graphql/types.ts","../src/types.ts","../src/utils.ts","../src/client.ts","../node_modules/@types/lodash/common/common.d.ts","../node_modules/@types/lodash/common/array.d.ts","../node_modules/@types/lodash/common/collection.d.ts","../node_modules/@types/lodash/common/date.d.ts","../node_modules/@types/lodash/common/function.d.ts","../node_modules/@types/lodash/common/lang.d.ts","../node_modules/@types/lodash/common/math.d.ts","../node_modules/@types/lodash/common/number.d.ts","../node_modules/@types/lodash/common/object.d.ts","../node_modules/@types/lodash/common/seq.d.ts","../node_modules/@types/lodash/common/string.d.ts","../node_modules/@types/lodash/common/util.d.ts","../node_modules/@types/lodash/index.d.ts","../src/graphql/schema.ts","../node_modules/@types/fs-extra/index.d.ts","../node_modules/@types/toposort/index.d.ts","../src/graphql/hasura-schema-loader.ts","../src/index.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/jest-diff/build/cleanupSemantic.d.ts","../node_modules/pretty-format/build/types.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/types.d.ts","../node_modules/jest-diff/build/diffLines.d.ts","../node_modules/jest-diff/build/printDiffs.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/sonic-boom/types/index.d.ts","../node_modules/pino-abstract-transport/index.d.ts","../node_modules/pino-pretty/index.d.ts","../node_modules/@types/pino/index.d.ts","../node_modules/@types/pino-pretty/index.d.ts","../node_modules/@types/prettier/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/tmp/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"f20c05dbfe50a208301d2a1da37b9931bce0466eb5a1f4fe240971b4ecc82b67","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"9b087de7268e4efc5f215347a62656663933d63c0b1d7b624913240367b999ea","affectsGlobalScope":true},{"version":"3260e3386d9535b804205bdddb5618a9a27735bd22927f48ad54363abcd23d45","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"55f400eec64d17e888e278f4def2f254b41b89515d3b88ad75d5e05f019daddd","affectsGlobalScope":true},{"version":"181f1784c6c10b751631b24ce60c7f78b20665db4550b335be179217bacc0d5f","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"775d9c9fd150d5de79e0450f35bc8b8f94ae64e3eb5da12725ff2a649dccc777","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"1f03b495671c3a1bd24510f38b8947f0991dfd6bf0278c68eca14af15b306e1f","3154a026075044aa102298fe9e6a7a14aaa26a06270680c7478a1765af8ffb09","e112c923b00f99b5c274bef936b2ff3e684113406202570e824a5d6f7d1f3744","4911d4c3a7f7c11bad0e2cec329a19a385d10ea83b0b69c76e032359e388f624","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"2f6c9750131d5d2fdaba85c164a930dc07d2d7e7e8970b89d32864aa6c72620c","affectsGlobalScope":true},"56d13f223ab40f71840795f5bef2552a397a70666ee60878222407f3893fb8d0",{"version":"4ffef5c4698e94e49dcf150e3270bad2b24a2aeab48b24acbe7c1366edff377d","affectsGlobalScope":true},"95843d5cfafced8f3f8a5ce57d2335f0bcd361b9483587d12a25e4bd403b8216","afc6e96061af46bcff47246158caee7e056f5288783f2d83d6858cd25be1c565",{"version":"34f5bcac12b36d70304b73de5f5aab3bb91bd9919f984be80579ebcad03a624e","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","67a12e6c992d3f770078bacc562f767cf6142ae4453759a482f8f5ed30a99027","f50c975ab7b50e25a69e3d8a3773894125b44e9698924105f23b812bf7488baf","c993aac3b6d4a4620ef9651497069eb84806a131420e4f158ea9396fb8eb9b8c","76650408392bf49a8fbf3e2b6b302712a92d76af77b06e2da1cc8077359c4409","0af3121e68297b2247dd331c0d24dba599e50736a7517a5622d5591aae4a3122","06ccebc2c2db57d6bdbca63b71c4ae5e6ddc42d972fd8f122d4c1a28aa111b25",{"version":"81e8508d1e82278f5d3fee936f267e00c308af36219bfcee2631f9513c9c4017","affectsGlobalScope":true},"413a4be7f94f631235bbc83dad36c4d15e5a2ff02bca1efdbd03636d6454631b","20c468256fd68d3ef1fa53526e76d51d6aa91711e84d72c0343589b99238287e","4198acced75d48a039c078734c4efca7788ff8c78609c270a2b63ec20e3e1676","8d4c16a26d59e3ce49741a7d4a6e8206b884e226cf308667c7778a0b2c0fee7f","ee3bad055a79f188626b1a7046f04ab151fdd3581e55c51d32face175bd9d06f","d61c7c41eb1960b1285e242fd102c162b65c0522985b839fadda59874308a170",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"1805e0e4d1ed00f6361db25dff6887c7fa9b5b39f32599a34e8551da7daaa9c2","d10f4929cd610c26926d6784fc3f9f4120b789c03081b5d65fb2d2670a00fa04","fb0989383c6109f20281b3d31265293daefdd76d0d30551782c1654e93704f48","a4210a84a82b3e7a8cec5b2f3616e46d523f4f10cc1576d8f2fb89d0987b341e",{"version":"8207e7e6db9aa5fc7e61c8f17ba74cf9c115d26f51f91ee93f790815a7ea9dfb","affectsGlobalScope":true},"9f1069b9e2c051737b1f9b4f1baf50e4a63385a6a89c32235549ae87fc3d5492","22d48bfb37261136423ac687f1fa7bd4dda3083f767416d409a8260cf92bc8fc","29c2706fa0cc49a2bd90c83234da33d08bb9554ecec675e91c1f85087f5a5324","0acbf26bf958f9e80c1ffa587b74749d2697b75b484062d36e103c137c562bc3","f142151303f0792b81eff90b554081d2b78b146a83a4bc573228338e70afa420","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","698ab660b477b9c2cd5ccbd99e7e7df8b4a6134c1f5711fa615ed7aab51cb7f7","33eee034727baf564056b4ea719075c23d3b4767d0b5f9c6933b81f3d77774d2","c33a6ea7147af60d8e98f1ac127047f4b0d4e2ce28b8f08ff3de07ca7cc00637","a4471d2bdba495b2a6a30b8765d5e0282fa7009d88345a9528f73c37869d3b93",{"version":"aee7013623e7632fba449d4df1da92925b27d9b816cb05546044dbfe54c88ef4","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","c9d70d3d7191a66a81cb554557f8ed1cf736ea8397c44a864fe52689de18865a","998a3de5237518c0b3ac00a11b3b4417affb008aa20aedee52f3fdae3cb86151","ad41008ffe077206e1811fc873f4d9005b5fd7f6ab52bb6118fef600815a5cb4",{"version":"1aad825534c73852a1f3275e527d729a2c0640f539198fdfdfeb83b839851910","affectsGlobalScope":true},"badae0df9a8016ac36994b0a0e7b82ba6aaa3528e175a8c3cb161e4683eec03e","c3db860bcaaaeb3bbc23f353bbda1f8ab82756c8d5e973bebb3953cb09ea68f2","235a53595bd20b0b0eeb1a29cb2887c67c48375e92f03749b2488fbd46d0b1a0","bc09393cd4cd13f69cf1366d4236fbae5359bb550f0de4e15767e9a91d63dfb1","9c266243b01545e11d2733a55ad02b4c00ecdbda99c561cd1674f96e89cdc958","c71155c05fc76ff948a4759abc1cb9feec036509f500174bc18dad4c7827a60c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"e3685a8957b4e2af64c3f04a58289ee0858a649dbcd963a2b897fe85858ae18a","043e933c8127f2215f940035bfac94354b82a49f419bb77af0045f0c57e6a05e","9d9f4da63084ac107eddda8b4ea92d7ee443e0c86601e8c844943b82fd3ef6f8","bf6a6c97153fdaaa33105ad573d1d0069ebcdf075f9d66459a6c1ed4073feb3d","4b5e3faff10d6bbeac24f4ceec4b5fc6212159aef9cbd650e480b09513430cbd",{"version":"f930d2f54bd389841b5aa4da0717868dbbca53205ecc43541fa0025797d774c0","signature":"0005fbc0ce949c770dbf96ab77129e41cf20a13fc187c0558da2ae0c9ab11f40"},{"version":"dd47f621169979b98bafd3c0718b3f06f51099db6ebd3db2b35909b9f12f9bda","signature":"c654ce27bf476fdedbb93c5a1da876f4e3f9d1c4adab6b3599d34604fdce9107"},"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","cddd50d7bd9d7fddda91a576db9f61655d1a55e2d870f154485812f6e39d4c15","0539583b089247b73a21eb4a5f7e43208a129df6300d6b829dc1039b79b6c8c4","7aba43bc7764fcd02232382c780c3e99ef8dbfdac3c58605a0b3781fab3d8044","522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","1e1ed5600d80406a10428e349af8b6f09949cd5054043ea8588903e8f9e8d705","de21641eb8edcbc08dd0db4ee70eea907cd07fe72267340b5571c92647f10a77","a53039ba614075aeb702271701981babbd0d4f4dcbf319ddee4c08fb8196cc7a","6758f7b72fa4d38f4f4b865516d3d031795c947a45cc24f2cfba43c91446d678","da679a5bb46df3c6d84f637f09e6689d6c2d07e907ea16adc161e4529a4954d6","dc1a664c33f6ddd2791569999db2b3a476e52c5eeb5474768ffa542b136d78c0","bdf7abbd7df4f29b3e0728684c790e80590b69d92ed8d3bf8e66d4bd713941fe","8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","4beaf337ee755b8c6115ff8a17e22ceab986b588722a52c776b8834af64e0f38","c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","f0ff1c010d5046af3874d3b4df746c6f3921e4b3fbdec61dee0792fc0cb36ccd","778b684ebc6b006fcffeab77d25b34bf6e400100e0ec0c76056e165c6399ab05","463851fa993af55fb0296e0d6afa27407ef91bf6917098dd665aba1200d250c7","67c6de7a9c490bda48eb401bea93904b6bbfc60e47427e887e6a3da6195540be","be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","a5aae636d9afdacb22d98e4242487436d8296e5a345348325ccc68481fe1b690","d007c769e33e72e51286b816d82cd7c3a280cba714e7f958691155068bd7150a","764150c107451d2fd5b6de305cff0a9dcecf799e08e6f14b5a6748724db46d8a","b04cf223c338c09285010f5308b980ee6d8bfa203824ed2537516f15e92e8c43","4b387f208d1e468193a45a51005b1ed5b666010fc22a15dc1baf4234078b636e","70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","d1addb12403afea87a1603121396261a45190886c486c88e1a5d456be17c2049","15d43873064dc8787ca1e4c39149be59183c404d48a8cd5a0ea019bb5fdf8d58","ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","3d06897c536b4aad2b2b015d529270439f2cadd89ca2ff7bd8898ee84898dd88","ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","8e801abfeda45b1b93e599750a0a8d25074d30d4cc01e3563e56c0ff70edeb68","902997f91b09620835afd88e292eb217fbd55d01706b82b9a014ff408f357559","a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","83f36c0792d352f641a213ee547d21ea02084a148355aa26b6ef82c4f61c1280","dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","6e14fc6c27cb2cb203fe1727bb3a923588f0be8c2604673ad9f879182548daca","12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","ebe8f07bb402102c5a764b0f8e34bd92d6f50bd7ac61a2452e76b80e02f9bb4b","826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","5baadaca408128671536b3cb77fea44330e169ada70ce50b902c8d992fe64cf1","a4cc469f3561ea3edc57e091f4c9dcaf7485a70d3836be23a6945db46f0acd0b","91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","2978e33a00b4b5fb98337c5e473ab7337030b2f69d1480eccef0290814af0d51","ba71e9777cb5460e3278f0934fd6354041cb25853feca542312807ce1f18e611","608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","61937cefd7f4d6fa76013d33d5a3c5f9b0fc382e90da34790764a0d17d6277fb","af7db74826f455bfef6a55a188eb6659fd85fdc16f720a89a515c48724ee4c42","d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","2a47dc4a362214f31689870f809c7d62024afb4297a37b22cb86f679c4d04088","42d907ac511459d7c4828ee4f3f81cc331a08dc98d7b3cb98e3ff5797c095d2e","63d010bff70619e0cdf7900e954a7e188d3175461182f887b869c312a77ecfbd","1452816d619e636de512ca98546aafb9a48382d570af1473f0432a9178c4b1ff","9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","72263ae386d6a49392a03bde2f88660625da1eca5df8d95120d8ccf507483d20","b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","c37aa3657fa4d1e7d22565ae609b1370c6b92bafb8c92b914403d45f0e610ddc","34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","a1079b54643537f75fa4f4bb963d787a302bddbe3a6001c4b0a524b746e6a9de","7fc9b18b6aafa8a1fc1441670c6c9da63e3d7942c7f451300c48bafd988545e9","1ab6ca7264748a8974210e75d43b181ff9fc5a8a1d600f44f2ec70537871e544","d939831bbcbbcb25d93d49c4a2106e743f268f4fdf358b784542fc5473c3dc17","117d53e8b22b4b1bd0d8d0a83f0444baa285f1187b7430de0a3861b6e3a41515",{"version":"8b1f9c1347241c29ebcc5c6317cc47444c735d7ecdc0fde36ed28466dae8d8ff","signature":"855a005f233848dad15d896cc2f32503a286e3167ecc38a46dd6a010aa930bc7"},{"version":"6052eeaa5654b59fea5913bce516d2eb84a608ec284c7321248978ca475276f0","signature":"a717d4109d289d04d81d8596c1fa818c85a1c157703a2545f1a39ba4978e388e"},{"version":"d23f6bdb5bb9c0a06686d804a3ff3bf6aa61891c2524429a30cfc9125783aa2f","signature":"a094aae163af6bda2ec7fd4ef7c37bcdcca42e2b0158dc8cebccaee7d690d950"},{"version":"fc6bdd6083dbae39beeb55b342df66d5abf60dd60bf4d5ad89781534d1f235ec","signature":"bf71d3e57bbca42f2170fcce6b654e9f8b2552db7d550309d0743e05448eaa73"},"675e702f2032766a91eeadee64f51014c64688525da99dccd8178f0c599f13a8","fe4a2042d087990ebfc7dc0142d5aaf5a152e4baea86b45f283f103ec1e871ea","d70c026dd2eeaa974f430ea229230a1897fdb897dc74659deebe2afd4feeb08f","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","98f9d826db9cd99d27a01a59ee5f22863df00ccf1aaf43e1d7db80ebf716f7c3","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","9c41e412e6d07b29d8772641d4016dec5984225f7ecc2008bd8173ff14465047","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","3cf0d343c2276842a5b617f22ba82af6322c7cfe8bb52238ffc0c491a3c21019","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9",{"version":"f2eff8704452659641164876c1ef0df4174659ce7311b0665798ea3f556fa9ad","affectsGlobalScope":true},{"version":"0169d0ed56cfbe74b7eedb69037fd50e61f347ee9e19064d19b353c908d8df25","signature":"84629288d96819379ce2984392a2808ee435acb8c0ddec2428c3da2481f1e8b4"},"ed19da84b7dbf00952ad0b98ce5c194f1903bcf7c94d8103e8e0d63b271543ae","1d84555c17c5f9130c232f700e0776f2c5ade64f84baf35fc67b2968b49f5a1a",{"version":"048ecf71adb0e6ccebf986faf207b07e481d9fc64a4788d98977930e8623e48a","signature":"449b8990dba0a0d75011f1ed69208c60bd0b02b3526b896fc166085cb1b1af13"},{"version":"6323a1384f4c094dd7f1a6b22bb9008fb9450a89b7b27a78477d58356387f6f2","signature":"d18d3ee9efec4f131c7228392d5876aaa08ac9455ab18a9e51cd1b7ae195e8c5"},"497d9c40ac3fbb712314a26d91994a3c0770b0e742918f4f58c722c5514263be","cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","7ec238b220ea991b6643e24191b1f552a65956d5f6de4c6144e700b9985265d8","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","dae3d1adc67ac3dbd1cd471889301339ec439837b5df565982345be20c8fca9a","5426e62886b7be7806312d31a00e8f7dccd6fe63ba9bbefe99ee2eab29cc48a3","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","7adecb2c3238794c378d336a8182d4c3dd2c4fa6fa1785e2797a3db550edea62","dc12dc0e5aa06f4e1a7692149b78f89116af823b9e1f1e4eae140cd3e0e674e6","1bfc6565b90c8771615cd8cfcf9b36efc0275e5e83ac7d9181307e96eb495161","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","7f82ef88bdb67d9a850dd1c7cd2d690f33e0f0acd208e3c9eba086f3670d4f73",{"version":"ccfd8774cd9b929f63ff7dcf657977eb0652e3547f1fcac1b3a1dc5db22d4d58","affectsGlobalScope":true},"f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","172f31b538f6e3f70c2d001d665d5a46c4b043f707ba822b4d906d59bd9c229d","0d47fc0aed3e69968b3e168c4f2afba7f02fe81b7d40f34c5fbe4c8ed14222ac","955081e7442259cc2cbf0f7f122bc2fa10387c3c5298a8bd4cd402dbcefce4cf","685fbeeffdff5e703820a6328ef0c7b693d398bf8d061e1050e20344f8ddf47a","9fb516ebe85470350609bb6bd3c38181bef2e64970aa2233391d5cb2bb096270","93c4fc5b5237c09bc9ed65cb8f0dc1d89034406ab40500b89701341994897142","b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","6061aa83817c30d3a590f037b3cba22cdd809fbe697926d6511b45147928a342","70e9a18da08294f75bf23e46c7d69e67634c0765d355887b9b41f0d959e1426e","6ba73232c9d3267ca36ddb83e335d474d2c0e167481e3dec416c782894e11438"],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./","rootDir":"../src","strict":true,"target":6},"fileIdsList":[[92,231],[92],[92,231,232,233,234,235],[92,231,233],[64,92,99],[92,238],[92,239],[92,244,249],[92,213,215,216,217,218,219,220,221,222,223,224,225],[92,213,214,216,217,218,219,220,221,222,223,224,225],[92,214,215,216,217,218,219,220,221,222,223,224,225],[92,213,214,215,217,218,219,220,221,222,223,224,225],[92,213,214,215,216,218,219,220,221,222,223,224,225],[92,213,214,215,216,217,219,220,221,222,223,224,225],[92,213,214,215,216,217,218,220,221,222,223,224,225],[92,213,214,215,216,217,218,219,221,222,223,224,225],[92,213,214,215,216,217,218,219,220,222,223,224,225],[92,213,214,215,216,217,218,219,220,221,223,224,225],[92,213,214,215,216,217,218,219,220,221,222,224,225],[92,213,214,215,216,217,218,219,220,221,222,223,225],[92,213,214,215,216,217,218,219,220,221,222,223,224],[48,92],[51,92],[52,57,83,92],[53,63,64,71,80,91,92],[53,54,63,71,92],[55,92],[56,57,64,72,92],[57,80,88,92],[58,60,63,71,92],[59,92],[60,61,92],[62,63,92],[63,92],[63,64,65,80,91,92],[63,64,65,80,92],[66,71,80,91,92],[63,64,66,67,71,80,88,91,92],[66,68,80,88,91,92],[48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],[63,69,92],[70,91,92],[60,63,71,80,92],[72,92],[73,92],[51,74,92],[75,90,92,96],[76,92],[77,92],[63,78,92],[78,79,92,94],[52,63,80,81,82,92],[52,80,82,92],[80,81,92],[83,92],[84,92],[63,86,87,92],[86,87,92],[57,71,88,92],[89,92],[71,90,92],[52,66,77,91,92],[57,92],[80,92,93],[92,94],[92,95],[52,57,63,65,74,80,91,92,94,96],[80,92,97],[92,99,102],[63,66,80,92,99,100,252,254],[92,260],[46,47,92],[92,107,108,114,115],[92,116,180,181],[92,107,114,116],[92,108,116],[92,107,109,110,111,114,116,119,120],[92,110,121,135,136],[92,107,114,119,120,121],[92,107,109,114,116,118,119,120],[92,107,108,119,120,121],[92,106,122,127,134,137,138,179,182,204],[92,107],[92,108,112,113],[92,108,112,113,114,115,117,128,129,130,131,132,133],[92,108,113,114],[92,108],[92,107,108,113,114,116,129],[92,114],[92,108,114,115],[92,112,114],[92,121,135],[92,107,109,110,111,114,119],[92,107,114,117,120],[92,110,118,119,120,123,124,125,126],[92,120],[92,107,109,114,116,118,120],[92,116,119],[92,107,114,118,119,120,132],[92,116],[92,107,114,120],[92,108,114,119,130],[92,119,183],[92,116,120],[92,114,119],[92,119],[92,107,117],[92,107,114],[92,114,119,120],[92,139,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203],[92,119,120],[92,109,114],[92,107,109,114,120],[92,107,109,114],[92,107,114,116,118,119,120,132,139],[92,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178],[92,132,140],[92,140],[92,107,114,116,119,139,140],[92,242,245],[92,242,245,246,247],[92,244],[92,241,248],[80,92,99],[80,92,99,102,253],[66,92,99],[63,92,99],[63,92,96,100,101],[92,243],[92,206,207],[46,47,92,102,104],[46,47,92,102,104,105,205,209,210,211],[46,47,80,92,103],[46,47,48,73,92,103,208,209,225,226,227,228],[48,92,209,225],[92,208],[92,104,105,209,210,211,212,226,229],[46,47,102],[46,47,102,205,209,210],[208,209,226],[209],[208],[104,105,209,210,211,212,226,229]],"referencedMap":[[233,1],[231,2],[236,3],[232,1],[234,4],[235,1],[227,5],[237,5],[238,2],[239,6],[240,7],[250,8],[251,2],[214,9],[215,10],[213,11],[216,12],[217,13],[218,14],[219,15],[220,16],[221,17],[222,18],[223,19],[224,20],[225,21],[48,22],[49,22],[51,23],[52,24],[53,25],[54,26],[55,27],[56,28],[57,29],[58,30],[59,31],[60,32],[61,32],[62,33],[63,34],[64,35],[65,36],[50,2],[98,2],[66,37],[67,38],[68,39],[99,40],[69,41],[70,42],[71,43],[72,44],[73,45],[74,46],[75,47],[76,48],[77,49],[78,50],[79,51],[80,52],[82,53],[81,54],[83,55],[84,56],[85,2],[86,57],[87,58],[88,59],[89,60],[90,61],[91,62],[92,63],[93,64],[94,65],[95,66],[96,67],[97,68],[256,69],[255,70],[257,2],[258,2],[259,2],[228,2],[103,2],[260,2],[261,71],[47,72],[46,2],[241,2],[116,73],[182,74],[181,75],[180,76],[121,77],[137,78],[135,79],[136,80],[122,81],[205,82],[107,2],[109,2],[110,83],[111,2],[114,84],[117,2],[134,85],[112,2],[129,86],[115,87],[130,88],[133,89],[128,90],[131,89],[108,2],[113,2],[132,91],[138,92],[126,2],[120,93],[118,94],[127,95],[124,96],[123,96],[119,97],[125,98],[139,99],[201,100],[195,101],[188,102],[187,103],[196,104],[197,89],[189,105],[202,106],[183,107],[184,108],[185,109],[204,110],[186,103],[190,106],[191,111],[198,112],[199,87],[200,111],[192,109],[203,89],[193,113],[194,114],[140,115],[179,116],[143,117],[144,117],[145,117],[146,117],[147,117],[148,117],[149,117],[150,117],[169,117],[151,117],[152,117],[153,117],[154,117],[155,117],[156,117],[176,117],[157,117],[158,117],[159,117],[174,117],[160,117],[175,117],[161,117],[172,117],[173,117],[162,117],[163,117],[164,117],[170,117],[171,117],[165,117],[166,117],[167,117],[168,117],[177,117],[178,117],[142,118],[141,119],[106,2],[242,2],[246,120],[248,121],[247,120],[245,122],[249,123],[253,124],[254,125],[100,126],[101,127],[102,128],[244,129],[243,2],[252,127],[207,2],[208,130],[206,2],[8,2],[9,2],[13,2],[12,2],[2,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[3,2],[4,2],[25,2],[22,2],[23,2],[24,2],[26,2],[27,2],[28,2],[5,2],[29,2],[30,2],[31,2],[32,2],[6,2],[45,2],[33,2],[34,2],[35,2],[36,2],[7,2],[37,2],[42,2],[43,2],[38,2],[39,2],[40,2],[41,2],[1,2],[44,2],[11,2],[10,2],[105,131],[212,132],[104,133],[229,134],[226,135],[209,136],[230,137],[210,2],[211,2]],"exportedModulesMap":[[233,1],[231,2],[236,3],[232,1],[234,4],[235,1],[227,5],[237,5],[238,2],[239,6],[240,7],[250,8],[251,2],[214,9],[215,10],[213,11],[216,12],[217,13],[218,14],[219,15],[220,16],[221,17],[222,18],[223,19],[224,20],[225,21],[48,22],[49,22],[51,23],[52,24],[53,25],[54,26],[55,27],[56,28],[57,29],[58,30],[59,31],[60,32],[61,32],[62,33],[63,34],[64,35],[65,36],[50,2],[98,2],[66,37],[67,38],[68,39],[99,40],[69,41],[70,42],[71,43],[72,44],[73,45],[74,46],[75,47],[76,48],[77,49],[78,50],[79,51],[80,52],[82,53],[81,54],[83,55],[84,56],[85,2],[86,57],[87,58],[88,59],[89,60],[90,61],[91,62],[92,63],[93,64],[94,65],[95,66],[96,67],[97,68],[256,69],[255,70],[257,2],[258,2],[259,2],[228,2],[103,2],[260,2],[261,71],[47,72],[46,2],[241,2],[116,73],[182,74],[181,75],[180,76],[121,77],[137,78],[135,79],[136,80],[122,81],[205,82],[107,2],[109,2],[110,83],[111,2],[114,84],[117,2],[134,85],[112,2],[129,86],[115,87],[130,88],[133,89],[128,90],[131,89],[108,2],[113,2],[132,91],[138,92],[126,2],[120,93],[118,94],[127,95],[124,96],[123,96],[119,97],[125,98],[139,99],[201,100],[195,101],[188,102],[187,103],[196,104],[197,89],[189,105],[202,106],[183,107],[184,108],[185,109],[204,110],[186,103],[190,106],[191,111],[198,112],[199,87],[200,111],[192,109],[203,89],[193,113],[194,114],[140,115],[179,116],[143,117],[144,117],[145,117],[146,117],[147,117],[148,117],[149,117],[150,117],[169,117],[151,117],[152,117],[153,117],[154,117],[155,117],[156,117],[176,117],[157,117],[158,117],[159,117],[174,117],[160,117],[175,117],[161,117],[172,117],[173,117],[162,117],[163,117],[164,117],[170,117],[171,117],[165,117],[166,117],[167,117],[168,117],[177,117],[178,117],[142,118],[141,119],[106,2],[242,2],[246,120],[248,121],[247,120],[245,122],[249,123],[253,124],[254,125],[100,126],[101,127],[102,128],[244,129],[243,2],[252,127],[207,2],[208,130],[206,2],[8,2],[9,2],[13,2],[12,2],[2,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[3,2],[4,2],[25,2],[22,2],[23,2],[24,2],[26,2],[27,2],[28,2],[5,2],[29,2],[30,2],[31,2],[32,2],[6,2],[45,2],[33,2],[34,2],[35,2],[36,2],[7,2],[37,2],[42,2],[43,2],[38,2],[39,2],[40,2],[41,2],[1,2],[44,2],[11,2],[10,2],[105,138],[212,139],[229,140],[226,141],[209,142],[230,143]],"semanticDiagnosticsPerFile":[233,231,236,232,234,235,227,237,238,239,240,250,251,214,215,213,216,217,218,219,220,221,222,223,224,225,48,49,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,50,98,66,67,68,99,69,70,71,72,73,74,75,76,77,78,79,80,82,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,256,255,257,258,259,228,103,260,261,47,46,241,116,182,181,180,121,137,135,136,122,205,107,109,110,111,114,117,134,112,129,115,130,133,128,131,108,113,132,138,126,120,118,127,124,123,119,125,139,201,195,188,187,196,197,189,202,183,184,185,204,186,190,191,198,199,200,192,203,193,194,140,179,143,144,145,146,147,148,149,150,169,151,152,153,154,155,156,176,157,158,159,174,160,175,161,172,173,162,163,164,170,171,165,166,167,168,177,178,142,141,106,242,246,248,247,245,249,253,254,100,101,102,244,243,252,207,208,206,8,9,13,12,2,14,15,16,17,18,19,20,21,3,4,25,22,23,24,26,27,28,5,29,30,31,32,6,45,33,34,35,36,7,37,42,43,38,39,40,41,1,44,11,10,105,212,104,229,226,209,230,210,211],"latestChangedDtsFile":"./index.d.ts"},"version":"4.8.4"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ export interface FarosClientConfig {
2
+ readonly url: string;
3
+ readonly apiKey: string;
4
+ readonly useGraphQLV2?: boolean;
5
+ }
6
+ export interface NamedQuery {
7
+ readonly dataPath: string;
8
+ readonly query: string;
9
+ }
10
+ export interface SecretName {
11
+ readonly name: string;
12
+ readonly group?: string;
13
+ }
14
+ export interface Account {
15
+ readonly accountId: string;
16
+ readonly tenantId: string;
17
+ readonly farosApiKeyId: string;
18
+ readonly type: string;
19
+ readonly mode?: string | null;
20
+ readonly params: Record<string, any>;
21
+ readonly secretName: SecretName;
22
+ readonly scheduleExpression?: string | null;
23
+ readonly executionTimeoutInSecs: number;
24
+ readonly runtimeVersion?: string | null;
25
+ readonly memorySizeInMbs: number;
26
+ readonly version?: string | null;
27
+ readonly lastModified: Date;
28
+ }
29
+ export declare type UpdateAccount = Omit<Account, 'lastModified'>;
30
+ export interface Location {
31
+ readonly uid: string;
32
+ readonly raw: string;
33
+ readonly address?: Address;
34
+ readonly coordinates?: Coordinates;
35
+ readonly room?: string;
36
+ }
37
+ export interface Address {
38
+ readonly uid: string;
39
+ readonly fullAddress?: string;
40
+ readonly street?: string;
41
+ readonly houseNumber?: string;
42
+ readonly unit?: string;
43
+ readonly postalCode?: string;
44
+ readonly city?: string;
45
+ readonly state?: string;
46
+ readonly stateCode?: string;
47
+ readonly country?: string;
48
+ readonly countryCode?: string;
49
+ }
50
+ export interface Coordinates {
51
+ lat: number;
52
+ lon: number;
53
+ }
package/lib/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/lib/utils.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare class Utils {
2
+ static urlWithoutTrailingSlashes(url: string): string;
3
+ }
package/lib/utils.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Utils = void 0;
4
+ class Utils {
5
+ static urlWithoutTrailingSlashes(url) {
6
+ return new URL(url).toString().replace(/\/{1,10}$/, '');
7
+ }
8
+ }
9
+ exports.Utils = Utils;
package/package.json CHANGED
@@ -1,7 +1,13 @@
1
1
  {
2
2
  "name": "faros-js-client",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Faros API client for JavaScript/TypeScript",
5
+ "keywords": [
6
+ "api-client",
7
+ "javascript",
8
+ "typescript",
9
+ "faros"
10
+ ],
5
11
  "author": "Faros AI, Inc.",
6
12
  "homepage": "https://www.faros.ai",
7
13
  "license": "Apache-2.0",