@xapp/arachne-web-service 0.6.0 → 0.6.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/lib/ArachneWebService.d.ts +17 -37
- package/lib/ArachneWebService.js +144 -38
- package/lib/ArachneWebService.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/models.d.ts +109 -0
- package/lib/models.js +3 -0
- package/lib/models.js.map +1 -0
- package/lib/utils/getBusinessData.d.ts +4 -0
- package/lib/utils/getBusinessData.js +37 -0
- package/lib/utils/getBusinessData.js.map +1 -0
- package/lib/utils/getCallToAction.d.ts +11 -0
- package/lib/utils/getCallToAction.js +30 -0
- package/lib/utils/getCallToAction.js.map +1 -0
- package/lib/utils/getColors.d.ts +0 -0
- package/lib/utils/getColors.js +4 -0
- package/lib/utils/getColors.js.map +1 -0
- package/lib/utils/getPrompt.d.ts +11 -0
- package/lib/utils/getPrompt.js +25 -0
- package/lib/utils/getPrompt.js.map +1 -0
- package/lib/utils/getSiteMap.d.ts +15 -0
- package/lib/utils/getSiteMap.js +140 -0
- package/lib/utils/getSiteMap.js.map +1 -0
- package/lib/utils/image.d.ts +1 -0
- package/lib/utils/image.js +11 -1
- package/lib/utils/image.js.map +1 -1
- package/package.json +12 -11
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*! Copyright (c) 2023, XAPP AI */
|
|
2
2
|
import "isomorphic-fetch";
|
|
3
3
|
import { DetectorResult } from "@xapp/arachne-parsers";
|
|
4
|
-
import {
|
|
4
|
+
import { WebsiteSchema, WebsiteDescriptiveData, ScreenshotLocation, BusinessData } from "./models";
|
|
5
5
|
export interface ArachneAppGetInfoOptions {
|
|
6
6
|
/**
|
|
7
7
|
* Provide an openAI key to use OpenAI to determine the call to action of the website.
|
|
@@ -15,10 +15,17 @@ export interface ArachneAppGetInfoOptions {
|
|
|
15
15
|
* If not provided, you will not get primaryColor, secondaryColor, or images.
|
|
16
16
|
*/
|
|
17
17
|
screenshotsPath?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Provide a path for saving the markdown of the website
|
|
20
|
+
*/
|
|
21
|
+
markdownPath?: string;
|
|
18
22
|
/**
|
|
19
23
|
* Run headless, true by default.
|
|
20
24
|
*/
|
|
21
25
|
headless?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Override the viewport size for the browser window.
|
|
28
|
+
*/
|
|
22
29
|
viewportSize?: {
|
|
23
30
|
width: number;
|
|
24
31
|
height: number;
|
|
@@ -32,50 +39,22 @@ export interface ArachneAppGetInfoOptions {
|
|
|
32
39
|
*/
|
|
33
40
|
pageHandlerTimeout?: number;
|
|
34
41
|
}
|
|
35
|
-
export interface
|
|
36
|
-
localBusiness?: LocalBusiness;
|
|
37
|
-
}
|
|
38
|
-
export interface WebsiteDescriptiveData {
|
|
39
|
-
/**
|
|
40
|
-
* A square image that most likely is the logo.
|
|
41
|
-
*/
|
|
42
|
-
logo?: string;
|
|
43
|
-
/**
|
|
44
|
-
* Primary color detected on the website
|
|
45
|
-
*/
|
|
46
|
-
primaryColor?: string;
|
|
47
|
-
/**
|
|
48
|
-
* Secondary color that complements the primary color on the website.
|
|
49
|
-
*/
|
|
50
|
-
secondaryColor?: string;
|
|
42
|
+
export interface WebsiteData {
|
|
51
43
|
/**
|
|
52
|
-
*
|
|
44
|
+
* Descriptive metadata for the website.
|
|
53
45
|
*/
|
|
54
|
-
|
|
55
|
-
callToAction: string;
|
|
56
|
-
url?: string;
|
|
57
|
-
}[];
|
|
46
|
+
site: WebsiteDescriptiveData;
|
|
58
47
|
/**
|
|
59
|
-
* A
|
|
48
|
+
* A list of detected technologies
|
|
60
49
|
*/
|
|
61
|
-
|
|
50
|
+
detectedTechnologies: DetectorResult[];
|
|
62
51
|
/**
|
|
63
|
-
*
|
|
52
|
+
* Information related to the organization
|
|
64
53
|
*/
|
|
65
|
-
|
|
66
|
-
number: string;
|
|
67
|
-
purpose?: string;
|
|
68
|
-
}[];
|
|
69
|
-
}
|
|
70
|
-
export interface ScreenshotLocation {
|
|
54
|
+
business: BusinessData;
|
|
71
55
|
/**
|
|
72
|
-
*
|
|
56
|
+
* JSON+LD schema detected on the website
|
|
73
57
|
*/
|
|
74
|
-
filePath: string;
|
|
75
|
-
}
|
|
76
|
-
export interface WebsiteData {
|
|
77
|
-
site: WebsiteDescriptiveData;
|
|
78
|
-
detectedTechnologies: DetectorResult[];
|
|
79
58
|
schema: WebsiteSchema;
|
|
80
59
|
/**
|
|
81
60
|
* The screenshots that were taken from the website.
|
|
@@ -85,6 +64,7 @@ export interface WebsiteData {
|
|
|
85
64
|
export declare class ArachneWebService {
|
|
86
65
|
/**
|
|
87
66
|
* Get data on the provided website.
|
|
67
|
+
*
|
|
88
68
|
* @param url
|
|
89
69
|
* @param options
|
|
90
70
|
* @returns
|
package/lib/ArachneWebService.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
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
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -16,19 +39,24 @@ exports.ArachneWebService = void 0;
|
|
|
16
39
|
/*! Copyright (c) 2023, XAPP AI */
|
|
17
40
|
require("isomorphic-fetch"); // must be at top, making available to all
|
|
18
41
|
const path_1 = require("path");
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const cheerio = __importStar(require("cheerio"));
|
|
19
44
|
const arachne_1 = require("@xapp/arachne");
|
|
20
45
|
const arachne_parsers_1 = require("@xapp/arachne-parsers");
|
|
21
46
|
const stentor_logger_1 = require("stentor-logger");
|
|
22
|
-
const stentor_utils_1 = require("stentor-utils");
|
|
23
47
|
const node_vibrant_1 = __importDefault(require("node-vibrant"));
|
|
24
|
-
const { encode } = require('gpt-3-encoder');
|
|
25
48
|
const autoScroll_1 = require("./utils/autoScroll");
|
|
26
49
|
const findBestFaviconURL_1 = require("./utils/findBestFaviconURL");
|
|
27
50
|
const image_1 = require("./utils/image");
|
|
28
51
|
const isLambda_1 = require("./utils/isLambda");
|
|
52
|
+
const getSiteMap_1 = require("./utils/getSiteMap");
|
|
53
|
+
const getPrompt_1 = require("./utils/getPrompt");
|
|
54
|
+
const getBusinessData_1 = require("./utils/getBusinessData");
|
|
55
|
+
const getCallToAction_1 = require("./utils/getCallToAction");
|
|
29
56
|
class ArachneWebService {
|
|
30
57
|
/**
|
|
31
58
|
* Get data on the provided website.
|
|
59
|
+
*
|
|
32
60
|
* @param url
|
|
33
61
|
* @param options
|
|
34
62
|
* @returns
|
|
@@ -39,6 +67,10 @@ class ArachneWebService {
|
|
|
39
67
|
const detectedTechnologies = [];
|
|
40
68
|
const schema = {};
|
|
41
69
|
const screenshots = [];
|
|
70
|
+
let business = {};
|
|
71
|
+
// first get the sitemap
|
|
72
|
+
const aboutUs = yield (0, getSiteMap_1.getAboutUs)(url);
|
|
73
|
+
(0, stentor_logger_1.log)().debug(`Found an about us page at ${aboutUs}`);
|
|
42
74
|
const queue = new arachne_1.MemoryRequestQueue();
|
|
43
75
|
queue.addRequest({ url });
|
|
44
76
|
const launchOptions = {
|
|
@@ -57,7 +89,7 @@ class ArachneWebService {
|
|
|
57
89
|
}
|
|
58
90
|
let browser;
|
|
59
91
|
try {
|
|
60
|
-
(0, stentor_logger_1.log)().debug('Looking for chrome-aws-lambda');
|
|
92
|
+
(0, stentor_logger_1.log)().debug('Looking for chrome-aws-lambda...');
|
|
61
93
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
62
94
|
const chromium = require('@sparticuz/chrome-aws-lambda');
|
|
63
95
|
browser = yield chromium.puppeteer.launch({
|
|
@@ -80,6 +112,8 @@ class ArachneWebService {
|
|
|
80
112
|
pageHandlerTimeout,
|
|
81
113
|
pageHandler: (page, request) => __awaiter(this, void 0, void 0, function* () {
|
|
82
114
|
const title = yield page.title();
|
|
115
|
+
const u = new URL(url);
|
|
116
|
+
const fileName = `${u.hostname}${u.pathname}`.replace(/[./]/g, "_");
|
|
83
117
|
(0, stentor_logger_1.log)().info(`Loaded ${request.url} : ${title}`);
|
|
84
118
|
if (pageWait) {
|
|
85
119
|
(0, stentor_logger_1.log)().info(`Waiting for ${pageWaitTime} ms for page to completely load.`);
|
|
@@ -91,6 +125,8 @@ class ArachneWebService {
|
|
|
91
125
|
// page.content() gets you the HTML after it has been modified by the JavaScript
|
|
92
126
|
// on the page while response.text() only gives you the HTML from the original GET
|
|
93
127
|
const html = yield page.content();
|
|
128
|
+
const $ = cheerio.load(html);
|
|
129
|
+
const description = $('meta[name="description"]').attr('content');
|
|
94
130
|
const detectors = [
|
|
95
131
|
new arachne_parsers_1.XAPPDetector(html),
|
|
96
132
|
new arachne_parsers_1.SurefireDetector(html)
|
|
@@ -98,12 +134,22 @@ class ArachneWebService {
|
|
|
98
134
|
detectedTechnologies.push(...new arachne_parsers_1.MultiDetector(html, detectors).detect());
|
|
99
135
|
const things = new arachne_parsers_1.ArachneJSONLD(html).getThings();
|
|
100
136
|
let localBusiness;
|
|
137
|
+
let homeConstructionBusiness;
|
|
138
|
+
(0, stentor_logger_1.log)().info('Looking through JSON Schema...');
|
|
101
139
|
for (const thing of things) {
|
|
102
140
|
if ((0, arachne_parsers_1.isLocalBusiness)(thing)) {
|
|
103
141
|
(0, stentor_logger_1.log)().debug(`Found local business information`);
|
|
104
142
|
localBusiness = thing;
|
|
105
143
|
schema.localBusiness = thing;
|
|
106
144
|
}
|
|
145
|
+
else if ((0, arachne_parsers_1.isHomeConstructionBusiness)(thing)) {
|
|
146
|
+
(0, stentor_logger_1.log)().debug(`Found home construction business`);
|
|
147
|
+
homeConstructionBusiness = thing;
|
|
148
|
+
schema.homeConstructionBusiness = thing;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
(0, stentor_logger_1.log)().debug(`Found JSON Schema ${thing["@id"]} ${thing["@type"]}`);
|
|
152
|
+
}
|
|
107
153
|
}
|
|
108
154
|
// We are going to try to figure out the icon!
|
|
109
155
|
if (localBusiness && typeof localBusiness !== "string") {
|
|
@@ -127,9 +173,7 @@ class ArachneWebService {
|
|
|
127
173
|
}
|
|
128
174
|
// Try to figure out primary color, yup
|
|
129
175
|
if (options.screenshotsPath) {
|
|
130
|
-
const
|
|
131
|
-
const imageName = `${u.hostname}${u.pathname}`.replace(/[./]/g, "_");
|
|
132
|
-
const path = (0, path_1.resolve)(options.screenshotsPath, `${imageName}.png`);
|
|
176
|
+
const path = (0, path_1.resolve)(options.screenshotsPath, `${fileName}.png`);
|
|
133
177
|
(0, stentor_logger_1.log)().debug(`Saving screenshot to ${path}`);
|
|
134
178
|
const captureBeyondViewport = options.viewportSize ? false : true;
|
|
135
179
|
const fullPage = options.viewportSize ? false : true;
|
|
@@ -141,7 +185,8 @@ class ArachneWebService {
|
|
|
141
185
|
screenshots.push({
|
|
142
186
|
filePath: path
|
|
143
187
|
});
|
|
144
|
-
(0, stentor_logger_1.log)().debug(`Screenshot saved
|
|
188
|
+
(0, stentor_logger_1.log)().debug(`Screenshot saved.`);
|
|
189
|
+
(0, stentor_logger_1.log)().debug(`Analyzing colors...`);
|
|
145
190
|
const v = new node_vibrant_1.default(path);
|
|
146
191
|
const palette = yield v.getPalette();
|
|
147
192
|
let swatchName = undefined;
|
|
@@ -158,7 +203,18 @@ class ArachneWebService {
|
|
|
158
203
|
swatchName = swatch;
|
|
159
204
|
mostPopular = current;
|
|
160
205
|
}
|
|
161
|
-
|
|
206
|
+
switch (swatch) {
|
|
207
|
+
case "LightVibrant":
|
|
208
|
+
case "Vibrant":
|
|
209
|
+
site.vibrantColor = current === null || current === void 0 ? void 0 : current.hex;
|
|
210
|
+
continue;
|
|
211
|
+
case "DarkVibrant":
|
|
212
|
+
site.darkVibrantColor = current === null || current === void 0 ? void 0 : current.hex;
|
|
213
|
+
continue;
|
|
214
|
+
default:
|
|
215
|
+
}
|
|
216
|
+
const debugPreview = '\x1b[48;2;' + (0, image_1.hexToRGB)(current === null || current === void 0 ? void 0 : current.hex) + 'm \x1b[0m';
|
|
217
|
+
debugSwatches = `${debugSwatches} ${swatch} (${current === null || current === void 0 ? void 0 : current.population}):${current === null || current === void 0 ? void 0 : current.hex} ${debugPreview} `;
|
|
162
218
|
}
|
|
163
219
|
}
|
|
164
220
|
if (swatchName) {
|
|
@@ -169,24 +225,64 @@ class ArachneWebService {
|
|
|
169
225
|
}
|
|
170
226
|
site.primaryColor = mostPopular === null || mostPopular === void 0 ? void 0 : mostPopular.hex;
|
|
171
227
|
site.secondaryColor = (0, image_1.complementHexColor)(site.primaryColor);
|
|
172
|
-
(0,
|
|
173
|
-
(0,
|
|
228
|
+
const primaryPreview = '\x1b[48;2;' + (0, image_1.hexToRGB)(site.primaryColor) + 'm \x1b[0m';
|
|
229
|
+
const secondaryPreview = '\x1b[48;2;' + (0, image_1.hexToRGB)(site.secondaryColor) + 'm \x1b[0m';
|
|
230
|
+
const vibrantPreview = '\x1b[48;2;' + (0, image_1.hexToRGB)(site.vibrantColor) + 'm \x1b[0m';
|
|
231
|
+
(0, stentor_logger_1.log)().debug(`Primary color: ${site.primaryColor} ${primaryPreview}`);
|
|
232
|
+
(0, stentor_logger_1.log)().debug(`Secondary color: ${site.secondaryColor} ${secondaryPreview}`);
|
|
233
|
+
(0, stentor_logger_1.log)().debug(`Vibrant color: ${site.vibrantColor} ${vibrantPreview}`);
|
|
234
|
+
(0, stentor_logger_1.log)().debug(`All swatches are: ${debugSwatches}`);
|
|
174
235
|
}
|
|
175
236
|
else {
|
|
176
237
|
(0, stentor_logger_1.log)().info(`screenshotsPath not provided, cannot determine primaryColor and secondaryColor`);
|
|
177
238
|
}
|
|
239
|
+
// Convert to markdown
|
|
240
|
+
const markdown = new arachne_parsers_1.ArachneHTMLtoText({ stripTags: [...arachne_parsers_1.DEFAULT_STRIP_TAGS, "head", "img", "iframe", "style"] }).convert(html, true);
|
|
241
|
+
if (options.markdownPath) {
|
|
242
|
+
const path = (0, path_1.resolve)(options.markdownPath, `${fileName}.md`);
|
|
243
|
+
(0, stentor_logger_1.log)().debug(`Writing markdown to ${path}...`);
|
|
244
|
+
yield fs.promises.writeFile(path, markdown);
|
|
245
|
+
(0, stentor_logger_1.log)().debug(`Written.`);
|
|
246
|
+
}
|
|
247
|
+
let aiData = undefined;
|
|
178
248
|
const { openAIKey = process.env.OPENAI_API_KEY } = options;
|
|
179
249
|
// Use OpenAI to determine Call To Action
|
|
180
250
|
if (openAIKey) {
|
|
181
251
|
(0, stentor_logger_1.log)().info(`Calling OpenAI....`);
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
252
|
+
const webPrompt = (0, getPrompt_1.getWebMarkdownPrompt)(markdown, url);
|
|
253
|
+
let prompt = webPrompt.prompt;
|
|
254
|
+
let maxTokens = webPrompt.maxTokens;
|
|
255
|
+
let tokens = webPrompt.tokens;
|
|
256
|
+
// first try if over max tokens
|
|
257
|
+
if (maxTokens < 0 && aboutUs) {
|
|
258
|
+
// load about us
|
|
259
|
+
(0, stentor_logger_1.log)().info(`Too many tokens, attempting to load about us page at ${aboutUs}...`);
|
|
260
|
+
yield page.goto(aboutUs);
|
|
261
|
+
(0, stentor_logger_1.log)().info(`Loaded...`);
|
|
262
|
+
const aboutUsHTML = yield page.content();
|
|
263
|
+
const aboutUsMarkdown = new arachne_parsers_1.ArachneHTMLtoText({ stripTags: [...arachne_parsers_1.DEFAULT_STRIP_TAGS, "head", "img", "iframe", "style"] }).convert(aboutUsHTML, true);
|
|
264
|
+
const aboutUsPrompt = (0, getPrompt_1.getWebMarkdownPrompt)(aboutUsMarkdown, url);
|
|
265
|
+
(0, stentor_logger_1.log)().info(`About Us tokens: ${aboutUsPrompt.tokens} max: ${aboutUsPrompt.maxTokens}`);
|
|
266
|
+
if (aboutUsPrompt.maxTokens > 0) {
|
|
267
|
+
(0, stentor_logger_1.log)().info(`Using about us page.`);
|
|
268
|
+
prompt = aboutUsPrompt.prompt;
|
|
269
|
+
maxTokens = aboutUsPrompt.maxTokens;
|
|
270
|
+
tokens = aboutUsPrompt.tokens;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (maxTokens < 0 && localBusiness || homeConstructionBusiness) {
|
|
274
|
+
(0, stentor_logger_1.log)().info(`Too many tokens, attempting to use LocalBusiness schema to generate description.`);
|
|
275
|
+
// try second prompt where we send the JSON.
|
|
276
|
+
const jsonSchemaPrompt = (0, getPrompt_1.getJSONSchemaPrompt)(localBusiness || homeConstructionBusiness, url);
|
|
277
|
+
(0, stentor_logger_1.log)().info(`JSON Schema tokens: ${jsonSchemaPrompt.tokens} max: ${jsonSchemaPrompt.maxTokens}`);
|
|
278
|
+
if (jsonSchemaPrompt.maxTokens > 0) {
|
|
279
|
+
(0, stentor_logger_1.log)().info(`LocalBusiness JSON fits within token limit, using it.`);
|
|
280
|
+
prompt = jsonSchemaPrompt.prompt;
|
|
281
|
+
maxTokens = jsonSchemaPrompt.maxTokens;
|
|
282
|
+
tokens = jsonSchemaPrompt.tokens;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
(0, stentor_logger_1.log)().info(`Final prompt is ${tokens} tokens, setting max_tokens to ${maxTokens}.`);
|
|
190
286
|
const options = {
|
|
191
287
|
method: 'POST',
|
|
192
288
|
headers: {
|
|
@@ -197,7 +293,7 @@ class ArachneWebService {
|
|
|
197
293
|
model: "text-davinci-003",
|
|
198
294
|
prompt,
|
|
199
295
|
temperature: 0.25,
|
|
200
|
-
max_tokens,
|
|
296
|
+
max_tokens: maxTokens,
|
|
201
297
|
top_p: 1,
|
|
202
298
|
frequency_penalty: 0,
|
|
203
299
|
presence_penalty: 0
|
|
@@ -211,7 +307,7 @@ class ArachneWebService {
|
|
|
211
307
|
if (status === 200) {
|
|
212
308
|
return response.json();
|
|
213
309
|
}
|
|
214
|
-
return;
|
|
310
|
+
return response;
|
|
215
311
|
}).finally(() => {
|
|
216
312
|
// eslint-disable-next-line no-console
|
|
217
313
|
console.timeEnd("open_ai_web");
|
|
@@ -221,30 +317,39 @@ class ArachneWebService {
|
|
|
221
317
|
(0, stentor_logger_1.log)().info(`OpenAI token usage: prompt ${usage.prompt_tokens} completion ${usage.completion_tokens} total ${usage.total_tokens}`);
|
|
222
318
|
// Add the leading { as it is included in the query
|
|
223
319
|
const completion = `{\n${openAIResponse.choices[0].text}`;
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
320
|
+
try {
|
|
321
|
+
aiData = JSON.parse(completion);
|
|
322
|
+
(0, stentor_logger_1.log)().debug(JSON.stringify(aiData, undefined, 2));
|
|
323
|
+
}
|
|
324
|
+
catch (e) {
|
|
325
|
+
(0, stentor_logger_1.log)().warn(`Unable to parse AI response.`);
|
|
326
|
+
(0, stentor_logger_1.log)().info(completion);
|
|
327
|
+
}
|
|
229
328
|
}
|
|
230
329
|
else {
|
|
231
330
|
(0, stentor_logger_1.log)().warn(`Unabled to get website info from OpenAI status:${status}`);
|
|
232
331
|
(0, stentor_logger_1.log)().debug(openAIResponse);
|
|
233
332
|
}
|
|
234
333
|
}
|
|
334
|
+
// We now go through and try to find data from what we have!
|
|
335
|
+
const businessData = (0, getBusinessData_1.getBusinessData)(schema.localBusiness || schema.homeConstructionBusiness);
|
|
336
|
+
business = Object.assign({}, businessData);
|
|
337
|
+
// Find some AI overrides (if we have the aiData)
|
|
338
|
+
if (aiData === null || aiData === void 0 ? void 0 : aiData.organization_name) {
|
|
339
|
+
business.name = aiData.organization_name;
|
|
340
|
+
}
|
|
341
|
+
// Set some items
|
|
342
|
+
if (aiData === null || aiData === void 0 ? void 0 : aiData.description) {
|
|
343
|
+
site.description = aiData.description;
|
|
344
|
+
}
|
|
235
345
|
else {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const match = matches[0].toLowerCase();
|
|
244
|
-
const cleaned = match.split(" ").map((i) => (0, stentor_utils_1.capitalize)(i)).join(" ");
|
|
245
|
-
(0, stentor_logger_1.log)().debug(`Found CTA "${cleaned}"`);
|
|
246
|
-
site.callsToAction = [{ callToAction: cleaned }];
|
|
247
|
-
}
|
|
346
|
+
site.description = description;
|
|
347
|
+
}
|
|
348
|
+
if (aiData === null || aiData === void 0 ? void 0 : aiData.calls_to_action) {
|
|
349
|
+
site.callsToAction = aiData.calls_to_action;
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
site.callsToAction = (0, getCallToAction_1.getCallToAction)(html);
|
|
248
353
|
}
|
|
249
354
|
})
|
|
250
355
|
// end of the page handler
|
|
@@ -254,7 +359,8 @@ class ArachneWebService {
|
|
|
254
359
|
site,
|
|
255
360
|
detectedTechnologies,
|
|
256
361
|
schema,
|
|
257
|
-
screenshots
|
|
362
|
+
screenshots,
|
|
363
|
+
business
|
|
258
364
|
};
|
|
259
365
|
});
|
|
260
366
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArachneWebService.js","sourceRoot":"","sources":["../src/ArachneWebService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ArachneWebService.js","sourceRoot":"","sources":["../src/ArachneWebService.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
/*! Copyright (c) 2023, XAPP AI */
|
|
18
18
|
__exportStar(require("./ArachneWebService"), exports);
|
|
19
|
+
__exportStar(require("./models"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,sDAAoC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,sDAAoC;AACpC,2CAAyB"}
|
package/lib/models.d.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/*! Copyright (c) 2023, XAPP AI */
|
|
2
|
+
import { HomeAndConstructionBusiness, LocalBusiness } from "schema-dts";
|
|
3
|
+
export interface WebsiteSchema {
|
|
4
|
+
localBusiness?: LocalBusiness;
|
|
5
|
+
homeConstructionBusiness?: HomeAndConstructionBusiness;
|
|
6
|
+
}
|
|
7
|
+
export interface WebsiteDescriptiveData {
|
|
8
|
+
/**
|
|
9
|
+
* A square image that most likely is the logo.
|
|
10
|
+
*/
|
|
11
|
+
logo?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Calls to action detected on the website such as "Free Quote" or "Schedule Consultation"
|
|
14
|
+
*/
|
|
15
|
+
callsToAction?: {
|
|
16
|
+
callToAction: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
}[];
|
|
19
|
+
/**
|
|
20
|
+
* A description of the organization found on the website
|
|
21
|
+
*/
|
|
22
|
+
description?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Phone numbers
|
|
25
|
+
*/
|
|
26
|
+
phoneNumbers?: {
|
|
27
|
+
number: string;
|
|
28
|
+
purpose?: string;
|
|
29
|
+
}[];
|
|
30
|
+
/**
|
|
31
|
+
* Primary (most popular) color detected on the website
|
|
32
|
+
*/
|
|
33
|
+
primaryColor?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Secondary color that complements the primary color on the website.
|
|
36
|
+
*/
|
|
37
|
+
secondaryColor?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Vibrant color, excellent for highlight
|
|
40
|
+
*/
|
|
41
|
+
vibrantColor?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Dark vibrant color
|
|
44
|
+
*/
|
|
45
|
+
darkVibrantColor?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ScreenshotLocation {
|
|
48
|
+
/**
|
|
49
|
+
* The local file path that the screenshot was saved to.
|
|
50
|
+
*/
|
|
51
|
+
filePath: string;
|
|
52
|
+
}
|
|
53
|
+
export interface BusinessHourPeriod {
|
|
54
|
+
open: {
|
|
55
|
+
day: "SUNDAY" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY";
|
|
56
|
+
time: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
type HOME_CONSTRUCTION_SERVICES = "plumbing" | "hvac" | "roofing" | "remodelling" | "";
|
|
60
|
+
type HOME_SERVICES = "moving" | "cleaning";
|
|
61
|
+
type PROFESSIONAL_SERVICES = "legal";
|
|
62
|
+
export interface BusinessAddress {
|
|
63
|
+
formated?: string;
|
|
64
|
+
streetAddress?: string;
|
|
65
|
+
postalCode?: string;
|
|
66
|
+
/**
|
|
67
|
+
* City, Town or Locality. This is typically from the "city" of "city", "state"
|
|
68
|
+
*/
|
|
69
|
+
locality?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Typically the state.
|
|
72
|
+
*/
|
|
73
|
+
region?: string;
|
|
74
|
+
country?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface BusinessAreasServed {
|
|
77
|
+
locality?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface BusinessData {
|
|
80
|
+
/**
|
|
81
|
+
* Name of the business
|
|
82
|
+
*/
|
|
83
|
+
name?: string;
|
|
84
|
+
services?: (HOME_SERVICES | HOME_CONSTRUCTION_SERVICES | PROFESSIONAL_SERVICES)[];
|
|
85
|
+
/**
|
|
86
|
+
* How the business describes themselves
|
|
87
|
+
*/
|
|
88
|
+
typeRaw?: string;
|
|
89
|
+
/**
|
|
90
|
+
* Phone numbers
|
|
91
|
+
*/
|
|
92
|
+
phoneNumbers?: {
|
|
93
|
+
number: string;
|
|
94
|
+
purpose?: string;
|
|
95
|
+
}[];
|
|
96
|
+
/**
|
|
97
|
+
* Primary business address
|
|
98
|
+
*/
|
|
99
|
+
address?: BusinessAddress;
|
|
100
|
+
serviceArea?: BusinessAreasServed;
|
|
101
|
+
geo?: {
|
|
102
|
+
lat: string;
|
|
103
|
+
lon: string;
|
|
104
|
+
};
|
|
105
|
+
hours?: {
|
|
106
|
+
periods: [];
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export {};
|
package/lib/models.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright (c) 2023, XAPP AI */
|
|
2
|
+
import { HomeAndConstructionBusiness, LocalBusiness } from "schema-dts";
|
|
3
|
+
import { BusinessData } from "../models";
|
|
4
|
+
export declare function getBusinessData(schema: LocalBusiness | HomeAndConstructionBusiness | undefined): Partial<BusinessData>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getBusinessData = void 0;
|
|
4
|
+
const arachne_parsers_1 = require("@xapp/arachne-parsers");
|
|
5
|
+
function getBusinessData(schema) {
|
|
6
|
+
if (!schema) {
|
|
7
|
+
return {};
|
|
8
|
+
}
|
|
9
|
+
const partial = {};
|
|
10
|
+
if (schema && typeof schema === "object") {
|
|
11
|
+
// try to get it from JSON?
|
|
12
|
+
if (typeof schema.name === "string") {
|
|
13
|
+
partial.name = schema === null || schema === void 0 ? void 0 : schema.name;
|
|
14
|
+
}
|
|
15
|
+
if (typeof schema.telephone === "string") {
|
|
16
|
+
partial.phoneNumbers = [{ number: schema.telephone }];
|
|
17
|
+
}
|
|
18
|
+
if ((0, arachne_parsers_1.isTyped)(schema.address)) {
|
|
19
|
+
const address = schema.address;
|
|
20
|
+
if ((0, arachne_parsers_1.isPostalAddress)(address)) {
|
|
21
|
+
partial.address = {};
|
|
22
|
+
if (address.addressLocality && typeof address.addressLocality === "string") {
|
|
23
|
+
partial.address.locality = address.addressLocality;
|
|
24
|
+
}
|
|
25
|
+
if (address.streetAddress && typeof address.streetAddress === "string") {
|
|
26
|
+
partial.address.streetAddress = address.streetAddress;
|
|
27
|
+
}
|
|
28
|
+
if (address.postalCode && typeof address.postalCode === "string") {
|
|
29
|
+
partial.address.postalCode = address.postalCode;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return partial;
|
|
35
|
+
}
|
|
36
|
+
exports.getBusinessData = getBusinessData;
|
|
37
|
+
//# sourceMappingURL=getBusinessData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBusinessData.js","sourceRoot":"","sources":["../../src/utils/getBusinessData.ts"],"names":[],"mappings":";;;AAGA,2DAAiE;AAEjE,SAAgB,eAAe,CAAC,MAA+D;IAE3F,IAAI,CAAC,MAAM,EAAE;QACT,OAAO,EAAE,CAAC;KACb;IAED,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAEtC,2BAA2B;QAC3B,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjC,OAAO,CAAC,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC;SAC/B;QAED,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;YACtC,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;SACxD;QAED,IAAI,IAAA,yBAAO,EAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAEzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAE/B,IAAI,IAAA,iCAAe,EAAC,OAAO,CAAC,EAAE;gBAC1B,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;gBACrB,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,EAAE;oBACxE,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;iBACtD;gBAED,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE;oBACpE,OAAO,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;iBACzD;gBAED,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;oBAC9D,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;iBACnD;aACJ;SACJ;KACJ;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAzCD,0CAyCC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*! Copyright (c) 2023, XAPP AI */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.getCallToAction = void 0;
|
|
5
|
+
const stentor_logger_1 = require("stentor-logger");
|
|
6
|
+
const stentor_utils_1 = require("stentor-utils");
|
|
7
|
+
/**
|
|
8
|
+
* Uses a regex to try to find calls to action within the HTML.
|
|
9
|
+
*
|
|
10
|
+
* @param html
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
function getCallToAction(html) {
|
|
14
|
+
const callsToAction = [];
|
|
15
|
+
// Try to figure out the call to action
|
|
16
|
+
// TODO: Can we use our model export and a simple NLU to better find possible matches?
|
|
17
|
+
const REGEX = new RegExp(/(free|get|request|schedule)( a| an|) (consultation|quote|estimate|inspection|estimates|assessment|appointment)/gmi);
|
|
18
|
+
const matches = html.match(REGEX);
|
|
19
|
+
// Just grab the first
|
|
20
|
+
if (matches && (0, stentor_utils_1.existsAndNotEmpty)(matches)) {
|
|
21
|
+
(0, stentor_logger_1.log)().debug(`Found ${matches.length} potential CTAs`);
|
|
22
|
+
const match = matches[0].toLowerCase();
|
|
23
|
+
const cleaned = match.split(" ").map((i) => (0, stentor_utils_1.capitalize)(i)).join(" ");
|
|
24
|
+
(0, stentor_logger_1.log)().debug(`Found CTA "${cleaned}"`);
|
|
25
|
+
callsToAction.push({ callToAction: cleaned });
|
|
26
|
+
}
|
|
27
|
+
return callsToAction;
|
|
28
|
+
}
|
|
29
|
+
exports.getCallToAction = getCallToAction;
|
|
30
|
+
//# sourceMappingURL=getCallToAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCallToAction.js","sourceRoot":"","sources":["../../src/utils/getCallToAction.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAElC,mDAAqC;AACrC,iDAA8D;AAG9D;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,IAAY;IAExC,MAAM,aAAa,GAA6C,EAAE,CAAC;IAEnE,uCAAuC;IACvC,sFAAsF;IACtF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,mHAAmH,CAAC,CAAC;IAE9I,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAElC,sBAAsB;IACtB,IAAI,OAAO,IAAI,IAAA,iCAAiB,EAAC,OAAO,CAAC,EAAE;QACvC,IAAA,oBAAG,GAAE,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,OAAO,GAAW,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAU,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7E,IAAA,oBAAG,GAAE,CAAC,KAAK,CAAC,cAAc,OAAO,GAAG,CAAC,CAAC;QACtC,aAAa,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;KACjD;IAED,OAAO,aAAa,CAAC;AACzB,CAAC;AApBD,0CAoBC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getColors.js","sourceRoot":"","sources":["../../src/utils/getColors.ts"],"names":[],"mappings":";AACA,SAAS;AAER,kCAAkC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Prompt {
|
|
2
|
+
prompt: string;
|
|
3
|
+
tokens: number;
|
|
4
|
+
maxTokens: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function getTokens(prompt: string, response?: number): {
|
|
7
|
+
tokens: number;
|
|
8
|
+
maxTokens: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function getWebMarkdownPrompt(markdown: string, url: string): Prompt;
|
|
11
|
+
export declare function getJSONSchemaPrompt(json: any, url: string): Prompt;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getJSONSchemaPrompt = exports.getWebMarkdownPrompt = exports.getTokens = void 0;
|
|
4
|
+
/*! Copyright (c) 2023, XAPP AI */
|
|
5
|
+
const { encode } = require('gpt-3-encoder');
|
|
6
|
+
function getTokens(prompt, response = 550) {
|
|
7
|
+
const tokens = encode(prompt).length;
|
|
8
|
+
const maxTokens = 4000 - response - tokens;
|
|
9
|
+
return { tokens, maxTokens };
|
|
10
|
+
}
|
|
11
|
+
exports.getTokens = getTokens;
|
|
12
|
+
function getWebMarkdownPrompt(markdown, url) {
|
|
13
|
+
const prompt = `Your task is to analyze the contents of a website (provided in markdown below) found at ${url} and provide information about the organization from what is on the website. You will only provide information available through the website content about the services they provide, contact information and a description of the business.\n\n===========\n${markdown}\n===========\nPlease print out in JSON format information about the website above with the following keys:\n\n\"organization_name\" - The name of the organization for the website.\n\"phone_numbers\" - An array of phone numbers for the organization. If available, include what they are used for such as \"customer support\" or \"sales\", if unknown then leave it blank. Use an object with keys: number and purpose.\n\"addresses\" - An array of addresses for the organization.\n\"services\" - An array of the top five unique most common services the organization provides, they should be concinse and no more than a few words such as \"Roofing\", \"Conversational AI Services\", \"Bathroom Remodelling\"\n\"calls_to_action\" - An array of the top five unique calls to action found on the site and their fully formed URL if they have one. Good examples of calls to actions are \"Request Demo\", \"Get Started\", \"Free Quote\", \"Schedule Consultation\", \"Sign Up\". Bad examples are \"Learn More\" or \"Follow us on Facebook\". Use an object with keys: url & callToAction in the array. For the url please combine it properly with the website's URL.\n\"description\" - A description of what the organization does, include the name of the organization, their services, their location, phone number, email. Keep it concise and to a few sentences and around 480 characters.\n \n{`;
|
|
14
|
+
const tokens = getTokens(prompt);
|
|
15
|
+
return Object.assign({ prompt }, tokens);
|
|
16
|
+
}
|
|
17
|
+
exports.getWebMarkdownPrompt = getWebMarkdownPrompt;
|
|
18
|
+
function getJSONSchemaPrompt(json, url) {
|
|
19
|
+
const jsonString = JSON.stringify(json);
|
|
20
|
+
const prompt = `${jsonString}\n====\nAbove is the JSON schema for a website found at ${url}. Please print out in JSON format information about the website above with the following keys:\n\n\"organization_name\" - The name of the organization for the website.\n\"description\" - A description of what the organization does, include the name of the organization, their services, their location, phone number, email and hours if available. Keep it concise and to a few sentences and around 480 characters.\n \n{`;
|
|
21
|
+
const tokens = getTokens(prompt);
|
|
22
|
+
return Object.assign({ prompt }, tokens);
|
|
23
|
+
}
|
|
24
|
+
exports.getJSONSchemaPrompt = getJSONSchemaPrompt;
|
|
25
|
+
//# sourceMappingURL=getPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPrompt.js","sourceRoot":"","sources":["../../src/utils/getPrompt.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAClC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAS5C,SAAgB,SAAS,CAAC,MAAc,EAAE,WAAmB,GAAG;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,SAAS,GAAW,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC;IAEnD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AALD,8BAKC;AAGD,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,GAAW;IAE9D,MAAM,MAAM,GAAG,2FAA2F,GAAG,iQAAiQ,QAAQ,w2CAAw2C,CAAC;IAC/tD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,uBACI,MAAM,IACH,MAAM,EACZ;AACL,CAAC;AARD,oDAQC;AAED,SAAgB,mBAAmB,CAAC,IAAS,EAAE,GAAW;IAEtD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,GAAG,UAAU,2DAA2D,GAAG,saAAsa,CAAC;IACjgB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,uBACI,MAAM,IACH,MAAM,EACZ;AACL,CAAC;AAVD,kDAUC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*! Copyright (c) 2023, XAPP AI */
|
|
2
|
+
import "isomorphic-fetch";
|
|
3
|
+
import "abort-controller/polyfill";
|
|
4
|
+
/**
|
|
5
|
+
* Crawls a webpages sitemap and returns a list of all the URLs found within.
|
|
6
|
+
*
|
|
7
|
+
* It will additionally crawl and sitemaps listed within the original.
|
|
8
|
+
*
|
|
9
|
+
* @note Written with the help of OpenAI
|
|
10
|
+
*
|
|
11
|
+
* @param sitemapUrl
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
export declare function getSitemap(sitemapUrl: string): Promise<string[]>;
|
|
15
|
+
export declare function getAboutUs(url: string): Promise<string | undefined>;
|
|
@@ -0,0 +1,140 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.getAboutUs = exports.getSitemap = void 0;
|
|
36
|
+
/*! Copyright (c) 2023, XAPP AI */
|
|
37
|
+
require("isomorphic-fetch"); // must be at top, making available to all
|
|
38
|
+
require("abort-controller/polyfill");
|
|
39
|
+
const cheerio = __importStar(require("cheerio"));
|
|
40
|
+
const stentor_logger_1 = require("stentor-logger");
|
|
41
|
+
const fetchSitemap = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
const controller = new AbortController();
|
|
43
|
+
const { signal } = controller;
|
|
44
|
+
const TIMEOUT = 5000;
|
|
45
|
+
// Start a timer that will cancel the fetch operation if not complete within the timeout
|
|
46
|
+
const timeoutId = setTimeout(() => controller.abort(), TIMEOUT);
|
|
47
|
+
try {
|
|
48
|
+
const text = yield fetch(url, { signal }).then((response) => {
|
|
49
|
+
clearTimeout(timeoutId);
|
|
50
|
+
return response.text();
|
|
51
|
+
});
|
|
52
|
+
return text;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error(`Failed to fetch sitemap: ${error}`);
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Crawls a webpages sitemap and returns a list of all the URLs found within.
|
|
61
|
+
*
|
|
62
|
+
* It will additionally crawl and sitemaps listed within the original.
|
|
63
|
+
*
|
|
64
|
+
* @note Written with the help of OpenAI
|
|
65
|
+
*
|
|
66
|
+
* @param sitemapUrl
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
69
|
+
function getSitemap(sitemapUrl) {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
const xmlData = yield fetchSitemap(sitemapUrl);
|
|
72
|
+
if (!xmlData) {
|
|
73
|
+
console.error('No sitemap data retrieved.');
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const $ = cheerio.load(xmlData, {
|
|
77
|
+
xmlMode: true
|
|
78
|
+
});
|
|
79
|
+
let allUrls = [];
|
|
80
|
+
// Extract all urls
|
|
81
|
+
$('url').each((i, url) => {
|
|
82
|
+
const loc = $(url).find('loc').text();
|
|
83
|
+
allUrls.push(loc);
|
|
84
|
+
});
|
|
85
|
+
// Extract sitemaps and crawl recursively
|
|
86
|
+
const sitemapNodes = $('sitemap').toArray();
|
|
87
|
+
for (const sitemapNode of sitemapNodes) {
|
|
88
|
+
const loc = $(sitemapNode).find('loc').text();
|
|
89
|
+
const urls = yield getSitemap(loc);
|
|
90
|
+
allUrls = allUrls.concat(urls);
|
|
91
|
+
}
|
|
92
|
+
return allUrls;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
exports.getSitemap = getSitemap;
|
|
96
|
+
function getAboutUs(url) {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
const siteUrl = new URL(url);
|
|
99
|
+
const originalPath = siteUrl.pathname;
|
|
100
|
+
const sitemapUrl = new URL(url);
|
|
101
|
+
sitemapUrl.pathname = `${originalPath}sitemap.xml`;
|
|
102
|
+
(0, stentor_logger_1.log)().debug(`Loading sitemap at ${sitemapUrl.toString()}`);
|
|
103
|
+
const sitemap = yield getSitemap(sitemapUrl.toString());
|
|
104
|
+
// clean
|
|
105
|
+
const cleaned = sitemap.map((value) => {
|
|
106
|
+
if (value.startsWith("/")) {
|
|
107
|
+
const cleanedUrl = new URL(url);
|
|
108
|
+
cleanedUrl.pathname = value;
|
|
109
|
+
return cleanedUrl.toString();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// we could have been passed a URL that already has a pathname, we filter by those first
|
|
116
|
+
const filtered = cleaned.filter((value) => {
|
|
117
|
+
try {
|
|
118
|
+
const siteUrl = new URL(value);
|
|
119
|
+
const sitePath = siteUrl.pathname;
|
|
120
|
+
return sitePath.startsWith(originalPath);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
(0, stentor_logger_1.log)().debug(`Could not validate url ${value}`);
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
});
|
|
127
|
+
(0, stentor_logger_1.log)().debug(`Sitemap has ${sitemap.length} pages, filtered to ${filtered.length}`);
|
|
128
|
+
// find about us page
|
|
129
|
+
const aboutUs = filtered.find((value) => {
|
|
130
|
+
const url = new URL(value);
|
|
131
|
+
const path = url.pathname;
|
|
132
|
+
// provided by OpenAI
|
|
133
|
+
const aboutUsRegex = /\/(about(-us)?|company\/about|who-we-are|our-story|info\/about|en\/about|about\/our-company)(\/)?$/i;
|
|
134
|
+
return aboutUsRegex.test(path);
|
|
135
|
+
});
|
|
136
|
+
return aboutUs;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
exports.getAboutUs = getAboutUs;
|
|
140
|
+
//# sourceMappingURL=getSiteMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSiteMap.js","sourceRoot":"","sources":["../../src/utils/getSiteMap.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,4BAA0B,CAAC,0CAA0C;AACrE,qCAAkC;AAClC,iDAAmC;AAEnC,mDAAqC;AAErC,MAAM,YAAY,GAAG,CAAO,GAAW,EAAmB,EAAE;IAExD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAE9B,MAAM,OAAO,GAAG,IAAI,CAAC;IAErB,wFAAwF;IACxF,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAGhE,IAAI;QACA,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxD,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;KACf;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;KACb;AACL,CAAC,CAAA,CAAA;AAED;;;;;;;;;GASG;AACH,SAAsB,UAAU,CAAC,UAAkB;;QAC/C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,EAAE,CAAC;SACb;QAED,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;YAC5B,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,IAAI,OAAO,GAAa,EAAE,CAAC;QAE3B,mBAAmB;QACnB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,yCAAyC;QACzC,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5C,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;YACpC,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAClC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CAAA;AA7BD,gCA6BC;AAED,SAAsB,UAAU,CAAC,GAAW;;QAExC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;QAEtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,UAAU,CAAC,QAAQ,GAAG,GAAG,YAAY,aAAa,CAAC;QACnD,IAAA,oBAAG,GAAE,CAAC,KAAK,CAAC,sBAAsB,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAExD,QAAQ;QACR,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACvB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAC5B,OAAO,UAAU,CAAC,QAAQ,EAAE,CAAC;aAChC;iBAAM;gBACH,OAAO,KAAK,CAAC;aAChB;QACL,CAAC,CAAC,CAAC;QAEH,wFAAwF;QACxF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI;gBACA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAClC,OAAO,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;aAC5C;YAAC,OAAO,CAAC,EAAE;gBACR,IAAA,oBAAG,GAAE,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;aAClD;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAA,oBAAG,GAAE,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,MAAM,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,qBAAqB;QACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC1B,qBAAqB;YACrB,MAAM,YAAY,GAAG,qGAAqG,CAAC;YAE3H,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACnB,CAAC;CAAA;AA9CD,gCA8CC"}
|
package/lib/utils/image.d.ts
CHANGED
|
@@ -19,4 +19,5 @@ export declare function imageIsSquare(url: string, minimumSize?: number): Promis
|
|
|
19
19
|
* @returns
|
|
20
20
|
*/
|
|
21
21
|
export declare function complementHexColor(hex: string | undefined): string | undefined;
|
|
22
|
+
export declare function hexToRGB(hex: string | undefined): string | undefined;
|
|
22
23
|
export declare function generateImage(height: number, width: number, hex: string): Promise<Buffer>;
|
package/lib/utils/image.js
CHANGED
|
@@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
14
|
};
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.generateImage = exports.complementHexColor = exports.imageIsSquare = void 0;
|
|
16
|
+
exports.generateImage = exports.hexToRGB = exports.complementHexColor = exports.imageIsSquare = void 0;
|
|
17
17
|
const sharp_1 = __importDefault(require("sharp"));
|
|
18
18
|
/**
|
|
19
19
|
* Determines if the image at the URL provided is square.
|
|
@@ -72,6 +72,16 @@ function complementHexColor(hex) {
|
|
|
72
72
|
return compColor;
|
|
73
73
|
}
|
|
74
74
|
exports.complementHexColor = complementHexColor;
|
|
75
|
+
function hexToRGB(hex) {
|
|
76
|
+
if (!hex) {
|
|
77
|
+
return hex;
|
|
78
|
+
}
|
|
79
|
+
const r = parseInt(hex.slice(1, 3), 16);
|
|
80
|
+
const g = parseInt(hex.slice(3, 5), 16);
|
|
81
|
+
const b = parseInt(hex.slice(5, 7), 16);
|
|
82
|
+
return `${r};${g};${b}`;
|
|
83
|
+
}
|
|
84
|
+
exports.hexToRGB = hexToRGB;
|
|
75
85
|
// not tested yet
|
|
76
86
|
function generateImage(height, width, hex) {
|
|
77
87
|
return __awaiter(this, void 0, void 0, function* () {
|
package/lib/utils/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/utils/image.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;;;;;;;;;;;;;AAElC,kDAA0B;AAE1B;;;;;;;;GAQG;AACH,SAAsB,aAAa,CAAC,GAAW,EAAE,WAAoB;;QAEjE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,MAAM,IAAA,eAAK,EAAC,SAAS,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,MAAM,QAAQ,GAAG,KAAK,KAAK,MAAM,CAAC;QAElC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9D,OAAO,QAAQ,IAAI,KAAK,IAAI,WAAW,CAAC;SAC3C;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CAAA;AAnBD,sCAmBC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,GAAuB;IACtD,IAAI,CAAC,GAAG,EAAE;QACN,OAAO,SAAS,CAAC;KACpB;IACD,kDAAkD;IAClD,MAAM,QAAQ,GAAG,oCAAoC,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrB,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;KACnD;IAED,gDAAgD;IAChD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAClB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;KACnE;IAED,oCAAoC;IACpC,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5E,SAAS,IAAI,aAAa,CAAC;KAC9B;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAxBD,gDAwBC;AAGD,iBAAiB;AACjB,SAAsB,aAAa,CAAC,MAAc,EAAE,KAAa,EAAE,GAAW;;QAC1E,OAAO,IAAA,eAAK,EAAC;YACT,MAAM,EAAE;gBACJ,KAAK;gBACL,MAAM;gBACN,QAAQ,EAAE,CAAC;gBACX,UAAU,EAAE,GAAG;aAClB;SACJ,CAAC;aACG,GAAG,EAAE;aACL,QAAQ,EAAE,CAAC;IACpB,CAAC;CAAA;AAXD,sCAWC"}
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/utils/image.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xapp/arachne-web-service",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"types": "lib/index",
|
|
5
5
|
"main": "lib/index",
|
|
6
6
|
"files": [
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"node": "^14 || ^16 || ^18"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@microsoft/api-extractor": "7.
|
|
17
|
+
"@microsoft/api-extractor": "7.35.0",
|
|
18
18
|
"@types/chai": "4.3.4",
|
|
19
19
|
"@types/mocha": "10.0.1",
|
|
20
20
|
"@types/node": "18.16.7",
|
|
@@ -24,23 +24,24 @@
|
|
|
24
24
|
"chai": "4.3.7",
|
|
25
25
|
"dotenv": "16.0.3",
|
|
26
26
|
"mocha": "10.2.0",
|
|
27
|
-
"sinon": "15.0
|
|
27
|
+
"sinon": "15.1.0",
|
|
28
28
|
"sinon-chai": "3.7.0",
|
|
29
29
|
"ts-node": "10.9.1",
|
|
30
|
-
"tslib": "2.5.
|
|
31
|
-
"typescript": "
|
|
30
|
+
"tslib": "2.5.2",
|
|
31
|
+
"typescript": "5.0.4"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@xapp/arachne": "0.6.
|
|
35
|
-
"@xapp/arachne-parsers": "0.6.
|
|
34
|
+
"@xapp/arachne": "0.6.1",
|
|
35
|
+
"@xapp/arachne-parsers": "0.6.2",
|
|
36
|
+
"abort-controller": "3.0.0",
|
|
36
37
|
"gpt-3-encoder": "1.1.4",
|
|
37
38
|
"isomorphic-fetch": "3.0.0",
|
|
38
39
|
"node-vibrant": "3.2.1-alpha.1",
|
|
39
40
|
"schema-dts": "1.1.2",
|
|
40
41
|
"sharp": "0.32.1",
|
|
41
|
-
"stentor-logger": "1.57.
|
|
42
|
-
"stentor-models": "1.57.
|
|
43
|
-
"stentor-utils": "1.57.
|
|
42
|
+
"stentor-logger": "1.57.143",
|
|
43
|
+
"stentor-models": "1.57.143",
|
|
44
|
+
"stentor-utils": "1.57.143"
|
|
44
45
|
},
|
|
45
46
|
"scripts": {
|
|
46
47
|
"api": "api-extractor run --local",
|
|
@@ -48,5 +49,5 @@
|
|
|
48
49
|
"clean": "rm -rf ./lib/*",
|
|
49
50
|
"test:f": "mocha --recursive -r ts-node/register \"./src/**/*.ftest.ts\""
|
|
50
51
|
},
|
|
51
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "9a263d95de9a4d87f1e9680b760252966986bc46"
|
|
52
53
|
}
|