@betterview/integration-toolkit 0.1.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.
- package/.eslintignore +8 -0
- package/.eslintrc.js +273 -0
- package/.prettierignore +7 -0
- package/.prettierrc +19 -0
- package/CODEOWNERS +6 -0
- package/README.md +2 -0
- package/component-harness-server/index.html +11 -0
- package/component-harness-server/src/App.js +34 -0
- package/component-harness-server/src/fonts/biotif-black-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-black-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-blackitalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-blackitalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-bold-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-bold-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-bolditalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-bolditalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-book-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-book-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-bookitalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-bookitalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-extrabold-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-extrabold-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-extrabolditalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-extrabolditalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-light-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-light-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-lightitalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-lightitalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-medium-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-medium-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-mediumitalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-mediumitalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-regular-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-regular-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-regularitalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-regularitalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-semibold-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-semibold-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/biotif-semibolditalic-webfont.woff +0 -0
- package/component-harness-server/src/fonts/biotif-semibolditalic-webfont.woff2 +0 -0
- package/component-harness-server/src/fonts/pensumpro-black.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-blackitalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-bold.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-bolditalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-book.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-bookitalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-extrabold.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-extrabolditalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-extralight.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-extralightitalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-light.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-lightitalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-medium.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-mediumitalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-regular.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-regularitalic.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-thin.otf +0 -0
- package/component-harness-server/src/fonts/pensumpro-thinitalic.otf +0 -0
- package/component-harness-server/src/index.js +5 -0
- package/component-harness-server/src/styles/betterview.styl +34 -0
- package/component-harness-server/src/styles/fonts.styl +208 -0
- package/component-harness-server/src/styles/mixins.styl +23 -0
- package/component-harness-server/src/styles/reset.styl +28 -0
- package/component-harness-server/src/styles/vars.styl +77 -0
- package/component-harness-server/src/styles.styl +29 -0
- package/package.json +65 -0
- package/src/ComponentHarness/index.ts +93 -0
- package/src/Deployment/index.ts +72 -0
- package/src/Network/axios-error-handling.ts +76 -0
- package/src/Network/index.ts +14 -0
- package/src/TestHarness/index.ts +48 -0
- package/src/dummy.test.ts +1 -0
- package/src/types/IEnrichmentIntegration.ts +73 -0
- package/src/types/IPartnerDataSchema.ts +39 -0
- package/src/types/index.ts +2 -0
- package/src/utils/index.ts +5 -0
- package/tsconfig.build.json +14 -0
- package/tsconfig.eslint.json +20 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { IEnrichmentIntegration, IEnrichmentIntegrationRequestData } from '../Types';
|
|
2
|
+
import { jsonLog } from '../utils';
|
|
3
|
+
|
|
4
|
+
export default class TestHarness {
|
|
5
|
+
public integration: IEnrichmentIntegration;
|
|
6
|
+
public requestData: IEnrichmentIntegrationRequestData | undefined;
|
|
7
|
+
|
|
8
|
+
constructor(integration: IEnrichmentIntegration, requestData?: IEnrichmentIntegrationRequestData) {
|
|
9
|
+
this.integration = integration;
|
|
10
|
+
this.requestData = requestData;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public async runGetData(): Promise<Record<string, any>> {
|
|
14
|
+
if (!this.requestData) {
|
|
15
|
+
this.setMockRequestData();
|
|
16
|
+
}
|
|
17
|
+
console.log('URL: ', this.integration.getUrl());
|
|
18
|
+
console.log('Request data set to: ', jsonLog(this.requestData));
|
|
19
|
+
const result = await this.integration.getData(this.requestData!);
|
|
20
|
+
console.log(
|
|
21
|
+
`Result from ${this.integration.registration.partner}_${this.integration.registration.offering}:`,
|
|
22
|
+
jsonLog(result)
|
|
23
|
+
);
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public runGetUrl() {
|
|
28
|
+
this.integration.getUrl();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public setMockRequestData() {
|
|
32
|
+
this.requestData = {
|
|
33
|
+
propertyId: 12345,
|
|
34
|
+
address: '100 Pringle Ave. Walnut Creek, CA 94596',
|
|
35
|
+
street: '100 Pringle Ave.',
|
|
36
|
+
city: 'Walnut Creek',
|
|
37
|
+
zip: '94596',
|
|
38
|
+
state: 'CA',
|
|
39
|
+
// fill this w/the true credentials from the offering
|
|
40
|
+
partnerhubCredentials: { username: 'test', password: 'test' },
|
|
41
|
+
externalId: 'external1',
|
|
42
|
+
secondaryExternalId: 'external2',
|
|
43
|
+
insuredName: 'Jane Doe',
|
|
44
|
+
latitude: 37.90820797421544,
|
|
45
|
+
longitude: -122.067761097756
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
test('Remove me when real tests are in place!', () => expect(true).not.toBe(false));
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface IEnrichmentIntegration {
|
|
2
|
+
version: string;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The integration name registred with the database
|
|
6
|
+
*/
|
|
7
|
+
registration: EnrichmentIntegrationRegistration;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Where in the workflow the integration should be run: Pre - normal location - before detections,
|
|
11
|
+
* Post - after detections, Adhoc, out of band, no need to run in a normal way.
|
|
12
|
+
*/
|
|
13
|
+
workflowLocation: EnrichmentIntegrationWorkflowLocation;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Should be used for the integration into the UI. If one integration is needed for another
|
|
17
|
+
* this is where we would reference that.
|
|
18
|
+
*/
|
|
19
|
+
dependencies?: EnrichmentIntegrationRegistration[];
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Data requirements is a defintion of what data is needed to send to the vendor to get data back.
|
|
23
|
+
*/
|
|
24
|
+
dataRequirements?: EnrichmentIntegrationDataRequirement[];
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Pulls data from the vendor and returns the data graph in JSON format.
|
|
28
|
+
*/
|
|
29
|
+
getData(requestData: IEnrichmentIntegrationRequestData): Promise<Record<string, any>>;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* retrieves the base URL for the integration.
|
|
33
|
+
*/
|
|
34
|
+
getUrl(): string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type EnrichmentIntegrationRegistration = {
|
|
38
|
+
id?: number;
|
|
39
|
+
billing_id?: number;
|
|
40
|
+
partner: string;
|
|
41
|
+
offering: string;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type EnrichmentIntegrationWorkflowLocation = 'Pre' | 'Post' | 'Adhoc';
|
|
45
|
+
|
|
46
|
+
export type EnrichmentIntegrationDataRequirement =
|
|
47
|
+
| 'partnerHubCredentials'
|
|
48
|
+
| 'propertyId'
|
|
49
|
+
| 'address'
|
|
50
|
+
| 'street'
|
|
51
|
+
| 'city'
|
|
52
|
+
| 'zip'
|
|
53
|
+
| 'state'
|
|
54
|
+
| 'externalId'
|
|
55
|
+
| 'secondaryExternalId'
|
|
56
|
+
| 'latitude'
|
|
57
|
+
| 'longitude'
|
|
58
|
+
| 'insuredName';
|
|
59
|
+
|
|
60
|
+
export interface IEnrichmentIntegrationRequestData {
|
|
61
|
+
partnerhubCredentials: Record<any, string>;
|
|
62
|
+
propertyId?: number | null;
|
|
63
|
+
address: string;
|
|
64
|
+
street: string;
|
|
65
|
+
city: string;
|
|
66
|
+
state: string;
|
|
67
|
+
zip: string;
|
|
68
|
+
externalId?: string | null;
|
|
69
|
+
secondaryExternalId?: string | null;
|
|
70
|
+
latitude: number;
|
|
71
|
+
longitude: number;
|
|
72
|
+
insuredName?: string | null;
|
|
73
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface IDataSchemaField {
|
|
2
|
+
description: string;
|
|
3
|
+
formatter?: Formatters;
|
|
4
|
+
jsonPath: string;
|
|
5
|
+
required?: boolean;
|
|
6
|
+
sample?: string | number | boolean;
|
|
7
|
+
title: string;
|
|
8
|
+
data_type:
|
|
9
|
+
| 'string'
|
|
10
|
+
| 'number'
|
|
11
|
+
| 'date'
|
|
12
|
+
| 'stringArray'
|
|
13
|
+
| 'objectArray'
|
|
14
|
+
| 'boolean'
|
|
15
|
+
| 'wkt'
|
|
16
|
+
| 'geojson'
|
|
17
|
+
| 'imgSrc'
|
|
18
|
+
| 'downloadSrc'
|
|
19
|
+
| 'coordinates' // an object keys named latitude longitude OR lat lng OR lat lon
|
|
20
|
+
| 'coordinatesLatLngCSV' // a coordinate string type like "32, -117"
|
|
21
|
+
| 'coordinatesLngLatCSV'; // a coordinate string type like "-117, 32"
|
|
22
|
+
fields?: IDataSchemaField[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface IPartnerDataSchema {
|
|
26
|
+
fields: IDataSchemaField[];
|
|
27
|
+
}
|
|
28
|
+
export interface IPartnerDataSchemas {
|
|
29
|
+
[name: string]: IPartnerDataSchema;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export enum Formatters {
|
|
33
|
+
numberWithCommas = 'numberWithCommas',
|
|
34
|
+
currencyWithCommas = 'currencyWithCommas',
|
|
35
|
+
scoreLetterToLowMedHigh = 'scoreLetterToLowMedHigh',
|
|
36
|
+
roundTwoDecimalPlaces = 'roundTwoDecimalPlaces',
|
|
37
|
+
decimalToPercentage = 'decimalToPercentage',
|
|
38
|
+
roundAndFormatWithCommas = 'roundAndFormatWithCommasFn'
|
|
39
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"include": ["src/**/*.js", "src/**/*.ts"],
|
|
4
|
+
"exclude": [
|
|
5
|
+
"node_modules",
|
|
6
|
+
".vscode",
|
|
7
|
+
"src/**/*.test.?s",
|
|
8
|
+
"src/**/*testData.?s",
|
|
9
|
+
"src/**/*.exclude.?s",
|
|
10
|
+
"src/__tests__/**/*.?s",
|
|
11
|
+
"src/__jest__/**/*.?s",
|
|
12
|
+
"src/__mocks__/**/*.?s"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
This config is necessary because ESlint needs to be able to transpile all TS files
|
|
3
|
+
that we want to lint, even if the real build excludes them (e.g. test files).
|
|
4
|
+
See: https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/README.md#parseroptionsproject
|
|
5
|
+
*/
|
|
6
|
+
{
|
|
7
|
+
"extends": "./tsconfig.json",
|
|
8
|
+
"include": [
|
|
9
|
+
"src/**/*.js",
|
|
10
|
+
"src/**/*.ts",
|
|
11
|
+
".eslintrc.js",
|
|
12
|
+
"*.js",
|
|
13
|
+
"*.ts",
|
|
14
|
+
"test/**/*.*"
|
|
15
|
+
],
|
|
16
|
+
"exclude": [
|
|
17
|
+
"node_modules",
|
|
18
|
+
".vscode"
|
|
19
|
+
]
|
|
20
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compileOnSave": true,
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"declaration": true,
|
|
5
|
+
"declarationMap": true,
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
"target": "ES2017",
|
|
9
|
+
"module": "commonjs",
|
|
10
|
+
"moduleResolution": "node",
|
|
11
|
+
"outDir": "tmp",
|
|
12
|
+
"rootDir": "src",
|
|
13
|
+
"sourceMap": true,
|
|
14
|
+
"allowJs": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"strictNullChecks": true,
|
|
17
|
+
"noImplicitReturns": true,
|
|
18
|
+
"baseUrl": "./src",
|
|
19
|
+
}
|
|
20
|
+
}
|