orangeslice 1.8.2 → 1.8.4
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 +7 -13
- package/dist/api.d.ts +0 -4
- package/dist/api.js +8 -70
- package/dist/cli.js +3 -3
- package/dist/expansion.d.ts +31 -5
- package/dist/expansion.js +0 -33
- package/dist/index.d.ts +3 -10
- package/dist/index.js +14 -26
- package/docs/services/builtWith/index.md +6 -5
- package/docs/services/builtWith/searchByTech.ts +1 -1
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -44,10 +44,9 @@ const [companies, searchPage, ai] = await Promise.all([
|
|
|
44
44
|
|
|
45
45
|
## Service map
|
|
46
46
|
|
|
47
|
-
- `services.company.linkedin.search/
|
|
48
|
-
- `services.
|
|
49
|
-
- `services.person.
|
|
50
|
-
- `services.company.getEmployeesFromLinkedin`
|
|
47
|
+
- `services.company.linkedin.search/enrich`
|
|
48
|
+
- `services.company.getEmployeesFromLinkedin` (database-only B2B path)
|
|
49
|
+
- `services.person.linkedin.search/enrich`
|
|
51
50
|
- `services.web.search/batchSearch`
|
|
52
51
|
- `services.ai.generateObject`
|
|
53
52
|
- `services.scrape.website`
|
|
@@ -55,21 +54,16 @@ const [companies, searchPage, ai] = await Promise.all([
|
|
|
55
54
|
- `services.apify.runActor`
|
|
56
55
|
- `services.googleMaps.scrape`
|
|
57
56
|
- `services.geo.parseAddress`
|
|
58
|
-
- `services.healthcare.npi`
|
|
59
57
|
- `services.builtWith.lookupDomain/relationships/searchByTech`
|
|
60
58
|
|
|
61
59
|
## How routing works today
|
|
62
60
|
|
|
63
61
|
All service calls go through `post()` in `src/api.ts`.
|
|
64
62
|
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
- Polling
|
|
68
|
-
|
|
69
|
-
- `bridge` functions poll `https://orangeslice.ai/api/function/bridge-result`.
|
|
70
|
-
- Inngest secrets are server-side only (Next.js route env vars), never in the npm package.
|
|
71
|
-
|
|
72
|
-
The current endpoint-to-backend mapping is documented in `docs/runtime-routing.md`.
|
|
63
|
+
- Submit path: `https://enrichly-production.up.railway.app/function`
|
|
64
|
+
- Pending responses (`pending: true` / `202`) poll batch-service result endpoints.
|
|
65
|
+
- Polling timeout supports long-running workflows (up to 10 minutes).
|
|
66
|
+
- This package now exposes only batch-backed services.
|
|
73
67
|
|
|
74
68
|
## Docs installed by CLI
|
|
75
69
|
|
package/dist/api.d.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
export type FunctionType = "batch-native" | "bridge";
|
|
2
|
-
export declare const BATCH_NATIVE_FUNCTION_IDS: Set<string>;
|
|
3
1
|
interface PostOptions {
|
|
4
2
|
direct?: boolean;
|
|
5
3
|
}
|
|
6
|
-
export declare function getFunctionType(functionId: string): FunctionType;
|
|
7
|
-
export declare function getBridgeResultEventName(functionId: string): string | undefined;
|
|
8
4
|
export declare function post<T>(functionId: string, payload: Record<string, unknown>, options?: PostOptions): Promise<T>;
|
|
9
5
|
export {};
|
package/dist/api.js
CHANGED
|
@@ -1,47 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BATCH_NATIVE_FUNCTION_IDS = void 0;
|
|
4
|
-
exports.getFunctionType = getFunctionType;
|
|
5
|
-
exports.getBridgeResultEventName = getBridgeResultEventName;
|
|
6
3
|
exports.post = post;
|
|
7
4
|
/**
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
11
|
-
* - Pending polling splits by function type:
|
|
12
|
-
* - default: poll batch-service /function/result
|
|
13
|
-
* - bridge: poll Next.js bridge-result route only when backend provides bridge metadata
|
|
5
|
+
* Batch-only routing:
|
|
6
|
+
* - Submit all calls to Railway batch-service /function
|
|
7
|
+
* - Poll batch-service /function/result on pending responses
|
|
14
8
|
*/
|
|
15
9
|
const BASE_URL = "https://enrichly-production.up.railway.app/function";
|
|
16
|
-
const
|
|
17
|
-
const BRIDGE_POLL_URL = "https://orangeslice.ai/api/function/bridge-result";
|
|
18
|
-
const POLL_TIMEOUT_MS = 120000;
|
|
10
|
+
const POLL_TIMEOUT_MS = 600000;
|
|
19
11
|
const DEFAULT_POLL_INTERVAL_MS = 1000;
|
|
20
|
-
exports.BATCH_NATIVE_FUNCTION_IDS = new Set(["b2b", "batchserp", "generateObject"]);
|
|
21
|
-
const BRIDGE_RESULT_EVENT_BY_FUNCTION_ID = {
|
|
22
|
-
firecrawl: "proxy/firecrawl.result",
|
|
23
|
-
kernel: "proxy/kernel.result",
|
|
24
|
-
apify: "proxy/apify.result",
|
|
25
|
-
contact: "proxy/invoke.result",
|
|
26
|
-
"linkedin/find-profile-url": "proxy/linkedin-profile-url.result",
|
|
27
|
-
"find-linkedin-company-url": "proxy/linkedin-company-url.result",
|
|
28
|
-
"b2b-get-employees-for-company": "proxy/invoke.result",
|
|
29
|
-
geo: "proxy/invoke.result",
|
|
30
|
-
npi: "proxy/invoke.result",
|
|
31
|
-
googleMaps: "proxy/invoke.result",
|
|
32
|
-
builtwithLookupDomain: "proxy/invoke.result",
|
|
33
|
-
builtwithRelationships: "proxy/invoke.result",
|
|
34
|
-
builtwithSearchByTech: "proxy/invoke.result",
|
|
35
|
-
};
|
|
36
12
|
function sleep(ms) {
|
|
37
13
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
38
14
|
}
|
|
39
|
-
function getFunctionType(functionId) {
|
|
40
|
-
return exports.BATCH_NATIVE_FUNCTION_IDS.has(functionId) ? "batch-native" : "bridge";
|
|
41
|
-
}
|
|
42
|
-
function getBridgeResultEventName(functionId) {
|
|
43
|
-
return BRIDGE_RESULT_EVENT_BY_FUNCTION_ID[functionId];
|
|
44
|
-
}
|
|
45
15
|
async function readResponseBody(res) {
|
|
46
16
|
const text = await res.text();
|
|
47
17
|
if (!text)
|
|
@@ -131,40 +101,16 @@ async function pollBatchUntilComplete(baseUrl, functionId, pending) {
|
|
|
131
101
|
}
|
|
132
102
|
throw new Error(`[orangeslice] ${functionId}: polling timed out after ${POLL_TIMEOUT_MS}ms`);
|
|
133
103
|
}
|
|
134
|
-
async function pollBridgeUntilComplete(functionId, callbackEventId, eventName, firstPollAfterMs) {
|
|
135
|
-
const timeoutAt = Date.now() + POLL_TIMEOUT_MS;
|
|
136
|
-
let pollAfterMs = typeof firstPollAfterMs === "number" && firstPollAfterMs > 0 ? firstPollAfterMs : DEFAULT_POLL_INTERVAL_MS;
|
|
137
|
-
while (Date.now() < timeoutAt) {
|
|
138
|
-
await sleep(pollAfterMs);
|
|
139
|
-
const url = `${BRIDGE_POLL_URL}?callbackEventId=${encodeURIComponent(callbackEventId)}&eventName=${encodeURIComponent(eventName)}`;
|
|
140
|
-
const res = await fetch(url, { method: "GET", headers: { "Content-Type": "application/json" } });
|
|
141
|
-
const data = await readResponseBody(res);
|
|
142
|
-
if (isPendingResponse(data) || res.status === 202) {
|
|
143
|
-
const next = data.pollAfterMs;
|
|
144
|
-
pollAfterMs = typeof next === "number" && next > 0 ? next : DEFAULT_POLL_INTERVAL_MS;
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
if (!res.ok) {
|
|
148
|
-
const message = asErrorMessage(data) || JSON.stringify(data);
|
|
149
|
-
throw new Error(`[orangeslice] ${functionId}: ${res.status} ${message}`);
|
|
150
|
-
}
|
|
151
|
-
const message = asErrorMessage(data);
|
|
152
|
-
if (message) {
|
|
153
|
-
throw new Error(`[orangeslice] ${functionId}: ${message}`);
|
|
154
|
-
}
|
|
155
|
-
return data;
|
|
156
|
-
}
|
|
157
|
-
throw new Error(`[orangeslice] ${functionId}: bridge polling timed out after ${POLL_TIMEOUT_MS}ms`);
|
|
158
|
-
}
|
|
159
104
|
async function post(functionId, payload, options = {}) {
|
|
160
|
-
|
|
161
|
-
|
|
105
|
+
// Kept for backwards compatibility with older call sites.
|
|
106
|
+
void options;
|
|
107
|
+
const baseUrl = BASE_URL;
|
|
162
108
|
const url = `${baseUrl}?functionId=${functionId}`;
|
|
163
109
|
const body = JSON.stringify(payload);
|
|
164
110
|
const res = await fetchWithRedirect(url, {
|
|
165
111
|
method: "POST",
|
|
166
112
|
headers: { "Content-Type": "application/json" },
|
|
167
|
-
body
|
|
113
|
+
body
|
|
168
114
|
});
|
|
169
115
|
if (!res.ok) {
|
|
170
116
|
let message = `${res.status}`;
|
|
@@ -174,14 +120,6 @@ async function post(functionId, payload, options = {}) {
|
|
|
174
120
|
}
|
|
175
121
|
const data = await readResponseBody(res);
|
|
176
122
|
if (isPendingResponse(data)) {
|
|
177
|
-
if (functionType === "bridge") {
|
|
178
|
-
const bridgePending = data;
|
|
179
|
-
const resolvedCallbackId = bridgePending.callbackEventId;
|
|
180
|
-
const resolvedEventName = bridgePending.eventName || getBridgeResultEventName(functionId);
|
|
181
|
-
if (resolvedCallbackId && resolvedEventName) {
|
|
182
|
-
return pollBridgeUntilComplete(functionId, resolvedCallbackId, resolvedEventName, bridgePending.pollAfterMs);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
123
|
return pollBatchUntilComplete(baseUrl, functionId, data);
|
|
186
124
|
}
|
|
187
125
|
const errorMessage = asErrorMessage(data);
|
package/dist/cli.js
CHANGED
|
@@ -132,9 +132,9 @@ async function main() {
|
|
|
132
132
|
console.log(" 2) ./orangeslice-docs/services/index.md");
|
|
133
133
|
console.log(' Then tell it: "Use these docs as source of truth for all orangeslice operations."\n');
|
|
134
134
|
console.log(" Routing note:");
|
|
135
|
-
console.log(" -
|
|
136
|
-
console.log(" -
|
|
137
|
-
console.log(" -
|
|
135
|
+
console.log(" - all services submit to the batch-service /function endpoint");
|
|
136
|
+
console.log(" - pending jobs poll batch-service /function/result endpoints");
|
|
137
|
+
console.log(" - this package currently includes only batch-backed services\n");
|
|
138
138
|
console.log(" // LinkedIn B2B SQL");
|
|
139
139
|
console.log(' const { rows } = await services.company.linkedin.search({ sql: "SELECT * FROM linkedin_company LIMIT 10" });\n');
|
|
140
140
|
console.log(" // Web search");
|
package/dist/expansion.d.ts
CHANGED
|
@@ -1,11 +1,37 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface CompanyGetEmployeesFromLinkedinParams {
|
|
2
|
+
companySlug?: string;
|
|
3
|
+
linkedinUrl?: string;
|
|
4
|
+
searchStrategy?: "database" | "web";
|
|
5
|
+
titleVariations?: string[];
|
|
6
|
+
titleSqlFilter?: string;
|
|
7
|
+
sqlFilterClause?: string;
|
|
8
|
+
limit?: number;
|
|
9
|
+
onlyCurrent?: boolean;
|
|
10
|
+
usOnly?: boolean;
|
|
11
|
+
minConnections?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface CompanyEmployeeFromB2B {
|
|
15
|
+
lp_first_name: string | null;
|
|
16
|
+
lp_last_name: string | null;
|
|
17
|
+
lp_formatted_name: string | null;
|
|
18
|
+
lp_headline: string | null;
|
|
19
|
+
lp_location_name: string | null;
|
|
20
|
+
lp_public_profile_url: string | null;
|
|
21
|
+
lp_title: string | null;
|
|
22
|
+
lp_company_name: string | null;
|
|
23
|
+
lp_start_date: string | null;
|
|
24
|
+
lp_connections: number | null;
|
|
25
|
+
}
|
|
26
|
+
export interface CompanyGetEmployeesFromLinkedinResult {
|
|
27
|
+
employees: CompanyEmployeeFromB2B[];
|
|
28
|
+
nextPage: number | null;
|
|
29
|
+
totalResults: number | null;
|
|
30
|
+
}
|
|
2
31
|
export declare function personLinkedinEnrich(params: Record<string, unknown>): Promise<unknown>;
|
|
3
|
-
export declare function personContactGet(params: Record<string, unknown>): Promise<unknown>;
|
|
4
|
-
export declare function companyLinkedinFindUrl(params: Record<string, unknown>): Promise<unknown>;
|
|
5
32
|
export declare function companyLinkedinEnrich(params: Record<string, unknown>): Promise<unknown>;
|
|
6
|
-
export declare function companyGetEmployeesFromLinkedin(params:
|
|
33
|
+
export declare function companyGetEmployeesFromLinkedin(params: CompanyGetEmployeesFromLinkedinParams): Promise<CompanyGetEmployeesFromLinkedinResult>;
|
|
7
34
|
export declare function geoParseAddress(params: Record<string, unknown>): Promise<unknown>;
|
|
8
|
-
export declare function healthcareNpi(params: Record<string, unknown>): Promise<unknown>;
|
|
9
35
|
export declare function builtWithLookupDomain(params: Record<string, unknown>): Promise<unknown>;
|
|
10
36
|
export declare function builtWithRelationships(params: Record<string, unknown>): Promise<unknown>;
|
|
11
37
|
export declare function builtWithSearchByTech(params: Record<string, unknown>): Promise<unknown>;
|
package/dist/expansion.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.personLinkedinFindUrl = personLinkedinFindUrl;
|
|
4
3
|
exports.personLinkedinEnrich = personLinkedinEnrich;
|
|
5
|
-
exports.personContactGet = personContactGet;
|
|
6
|
-
exports.companyLinkedinFindUrl = companyLinkedinFindUrl;
|
|
7
4
|
exports.companyLinkedinEnrich = companyLinkedinEnrich;
|
|
8
5
|
exports.companyGetEmployeesFromLinkedin = companyGetEmployeesFromLinkedin;
|
|
9
6
|
exports.geoParseAddress = geoParseAddress;
|
|
10
|
-
exports.healthcareNpi = healthcareNpi;
|
|
11
7
|
exports.builtWithLookupDomain = builtWithLookupDomain;
|
|
12
8
|
exports.builtWithRelationships = builtWithRelationships;
|
|
13
9
|
exports.builtWithSearchByTech = builtWithSearchByTech;
|
|
@@ -22,9 +18,6 @@ function extractLinkedinUsername(url) {
|
|
|
22
18
|
const slug = match[1].trim();
|
|
23
19
|
return slug.length > 0 ? slug : undefined;
|
|
24
20
|
}
|
|
25
|
-
async function personLinkedinFindUrl(params) {
|
|
26
|
-
return (0, api_1.post)("linkedin/find-profile-url", params);
|
|
27
|
-
}
|
|
28
21
|
async function personLinkedinEnrich(params) {
|
|
29
22
|
const url = typeof params.url === "string" ? params.url.trim() : "";
|
|
30
23
|
const username = typeof params.username === "string" && params.username.trim().length > 0
|
|
@@ -70,27 +63,6 @@ async function personLinkedinEnrich(params) {
|
|
|
70
63
|
const data = await (0, api_1.post)("b2b", { sql }, { direct: true });
|
|
71
64
|
return data.rows?.[0] ?? null;
|
|
72
65
|
}
|
|
73
|
-
async function personContactGet(params) {
|
|
74
|
-
return (0, api_1.post)("contact", params);
|
|
75
|
-
}
|
|
76
|
-
async function companyLinkedinFindUrl(params) {
|
|
77
|
-
const companyName = typeof params.companyName === "string" && params.companyName.trim().length > 0
|
|
78
|
-
? params.companyName.trim()
|
|
79
|
-
: typeof params.name === "string" && params.name.trim().length > 0
|
|
80
|
-
? params.name.trim()
|
|
81
|
-
: undefined;
|
|
82
|
-
const website = typeof params.website === "string" && params.website.trim().length > 0
|
|
83
|
-
? params.website.trim()
|
|
84
|
-
: typeof params.domain === "string" && params.domain.trim().length > 0
|
|
85
|
-
? params.domain.trim()
|
|
86
|
-
: undefined;
|
|
87
|
-
const payload = {
|
|
88
|
-
...params,
|
|
89
|
-
...(companyName ? { companyName } : {}),
|
|
90
|
-
...(website ? { website } : {}),
|
|
91
|
-
};
|
|
92
|
-
return (0, api_1.post)("find-linkedin-company-url", payload);
|
|
93
|
-
}
|
|
94
66
|
async function companyLinkedinEnrich(params) {
|
|
95
67
|
const shorthand = typeof params.shorthand === "string" ? params.shorthand.trim() : "";
|
|
96
68
|
const url = typeof params.url === "string" ? params.url.trim() : "";
|
|
@@ -114,16 +86,11 @@ async function companyLinkedinEnrich(params) {
|
|
|
114
86
|
return data.rows?.[0] ?? null;
|
|
115
87
|
}
|
|
116
88
|
async function companyGetEmployeesFromLinkedin(params) {
|
|
117
|
-
// Route through the dedicated backend function, which uses optimized query plans.
|
|
118
|
-
// The raw SQL fallback can hit 60s statement timeouts on large companies.
|
|
119
89
|
return (0, api_1.post)("b2b-get-employees-for-company", params);
|
|
120
90
|
}
|
|
121
91
|
async function geoParseAddress(params) {
|
|
122
92
|
return (0, api_1.post)("geo", params);
|
|
123
93
|
}
|
|
124
|
-
async function healthcareNpi(params) {
|
|
125
|
-
return (0, api_1.post)("npi", params);
|
|
126
|
-
}
|
|
127
94
|
async function builtWithLookupDomain(params) {
|
|
128
95
|
return (0, api_1.post)("builtwithLookupDomain", params);
|
|
129
96
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,8 @@ export { runApifyActor } from "./apify";
|
|
|
12
12
|
export type { RunActorParams, RunActorResult, DatasetListParams } from "./apify";
|
|
13
13
|
export { googleMapsScrape } from "./googleMaps";
|
|
14
14
|
export type { GoogleMapsScrapeParams } from "./googleMaps";
|
|
15
|
-
export {
|
|
15
|
+
export { personLinkedinEnrich, companyLinkedinEnrich, companyGetEmployeesFromLinkedin, geoParseAddress, builtWithLookupDomain, builtWithRelationships, builtWithSearchByTech } from "./expansion";
|
|
16
|
+
export type { CompanyGetEmployeesFromLinkedinParams, CompanyGetEmployeesFromLinkedinResult, CompanyEmployeeFromB2B } from "./expansion";
|
|
16
17
|
import { linkedinSearch } from "./b2b";
|
|
17
18
|
import { webBatchSearch, webSearch } from "./serp";
|
|
18
19
|
import { generateObject } from "./generateObject";
|
|
@@ -20,11 +21,10 @@ import { scrapeWebsite } from "./firecrawl";
|
|
|
20
21
|
import { browserExecute } from "./browser";
|
|
21
22
|
import { runApifyActor } from "./apify";
|
|
22
23
|
import { googleMapsScrape } from "./googleMaps";
|
|
23
|
-
import {
|
|
24
|
+
import { personLinkedinEnrich, companyLinkedinEnrich, companyGetEmployeesFromLinkedin, geoParseAddress, builtWithLookupDomain, builtWithRelationships, builtWithSearchByTech } from "./expansion";
|
|
24
25
|
export declare const services: {
|
|
25
26
|
company: {
|
|
26
27
|
linkedin: {
|
|
27
|
-
findUrl: typeof companyLinkedinFindUrl;
|
|
28
28
|
enrich: typeof companyLinkedinEnrich;
|
|
29
29
|
search: typeof linkedinSearch;
|
|
30
30
|
};
|
|
@@ -32,13 +32,9 @@ export declare const services: {
|
|
|
32
32
|
};
|
|
33
33
|
person: {
|
|
34
34
|
linkedin: {
|
|
35
|
-
findUrl: typeof personLinkedinFindUrl;
|
|
36
35
|
enrich: typeof personLinkedinEnrich;
|
|
37
36
|
search: typeof linkedinSearch;
|
|
38
37
|
};
|
|
39
|
-
contact: {
|
|
40
|
-
get: typeof personContactGet;
|
|
41
|
-
};
|
|
42
38
|
};
|
|
43
39
|
web: {
|
|
44
40
|
search: typeof webSearch;
|
|
@@ -59,9 +55,6 @@ export declare const services: {
|
|
|
59
55
|
geo: {
|
|
60
56
|
parseAddress: typeof geoParseAddress;
|
|
61
57
|
};
|
|
62
|
-
healthcare: {
|
|
63
|
-
npi: typeof healthcareNpi;
|
|
64
|
-
};
|
|
65
58
|
googleMaps: {
|
|
66
59
|
scrape: typeof googleMapsScrape;
|
|
67
60
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.services = exports.builtWithSearchByTech = exports.builtWithRelationships = exports.builtWithLookupDomain = exports.
|
|
3
|
+
exports.services = exports.builtWithSearchByTech = exports.builtWithRelationships = exports.builtWithLookupDomain = exports.geoParseAddress = exports.companyGetEmployeesFromLinkedin = exports.companyLinkedinEnrich = exports.personLinkedinEnrich = exports.googleMapsScrape = exports.runApifyActor = exports.browserExecute = exports.scrapeWebsite = exports.generateObject = exports.webBatchSearch = exports.webSearch = exports.linkedinSearch = void 0;
|
|
4
4
|
var b2b_1 = require("./b2b");
|
|
5
5
|
Object.defineProperty(exports, "linkedinSearch", { enumerable: true, get: function () { return b2b_1.linkedinSearch; } });
|
|
6
6
|
var serp_1 = require("./serp");
|
|
@@ -17,14 +17,10 @@ Object.defineProperty(exports, "runApifyActor", { enumerable: true, get: functio
|
|
|
17
17
|
var googleMaps_1 = require("./googleMaps");
|
|
18
18
|
Object.defineProperty(exports, "googleMapsScrape", { enumerable: true, get: function () { return googleMaps_1.googleMapsScrape; } });
|
|
19
19
|
var expansion_1 = require("./expansion");
|
|
20
|
-
Object.defineProperty(exports, "personLinkedinFindUrl", { enumerable: true, get: function () { return expansion_1.personLinkedinFindUrl; } });
|
|
21
20
|
Object.defineProperty(exports, "personLinkedinEnrich", { enumerable: true, get: function () { return expansion_1.personLinkedinEnrich; } });
|
|
22
|
-
Object.defineProperty(exports, "personContactGet", { enumerable: true, get: function () { return expansion_1.personContactGet; } });
|
|
23
|
-
Object.defineProperty(exports, "companyLinkedinFindUrl", { enumerable: true, get: function () { return expansion_1.companyLinkedinFindUrl; } });
|
|
24
21
|
Object.defineProperty(exports, "companyLinkedinEnrich", { enumerable: true, get: function () { return expansion_1.companyLinkedinEnrich; } });
|
|
25
22
|
Object.defineProperty(exports, "companyGetEmployeesFromLinkedin", { enumerable: true, get: function () { return expansion_1.companyGetEmployeesFromLinkedin; } });
|
|
26
23
|
Object.defineProperty(exports, "geoParseAddress", { enumerable: true, get: function () { return expansion_1.geoParseAddress; } });
|
|
27
|
-
Object.defineProperty(exports, "healthcareNpi", { enumerable: true, get: function () { return expansion_1.healthcareNpi; } });
|
|
28
24
|
Object.defineProperty(exports, "builtWithLookupDomain", { enumerable: true, get: function () { return expansion_1.builtWithLookupDomain; } });
|
|
29
25
|
Object.defineProperty(exports, "builtWithRelationships", { enumerable: true, get: function () { return expansion_1.builtWithRelationships; } });
|
|
30
26
|
Object.defineProperty(exports, "builtWithSearchByTech", { enumerable: true, get: function () { return expansion_1.builtWithSearchByTech; } });
|
|
@@ -39,51 +35,43 @@ const expansion_2 = require("./expansion");
|
|
|
39
35
|
exports.services = {
|
|
40
36
|
company: {
|
|
41
37
|
linkedin: {
|
|
42
|
-
findUrl: expansion_2.companyLinkedinFindUrl,
|
|
43
38
|
enrich: expansion_2.companyLinkedinEnrich,
|
|
44
|
-
search: b2b_2.linkedinSearch
|
|
39
|
+
search: b2b_2.linkedinSearch
|
|
45
40
|
},
|
|
46
|
-
getEmployeesFromLinkedin: expansion_2.companyGetEmployeesFromLinkedin
|
|
41
|
+
getEmployeesFromLinkedin: expansion_2.companyGetEmployeesFromLinkedin
|
|
47
42
|
},
|
|
48
43
|
person: {
|
|
49
44
|
linkedin: {
|
|
50
|
-
findUrl: expansion_2.personLinkedinFindUrl,
|
|
51
45
|
enrich: expansion_2.personLinkedinEnrich,
|
|
52
|
-
search: b2b_2.linkedinSearch
|
|
53
|
-
}
|
|
54
|
-
contact: {
|
|
55
|
-
get: expansion_2.personContactGet,
|
|
56
|
-
},
|
|
46
|
+
search: b2b_2.linkedinSearch
|
|
47
|
+
}
|
|
57
48
|
},
|
|
58
49
|
web: {
|
|
59
50
|
search: serp_2.webSearch,
|
|
60
|
-
batchSearch: serp_2.webBatchSearch
|
|
51
|
+
batchSearch: serp_2.webBatchSearch
|
|
61
52
|
},
|
|
62
53
|
ai: {
|
|
63
|
-
generateObject: generateObject_2.generateObject
|
|
54
|
+
generateObject: generateObject_2.generateObject
|
|
64
55
|
},
|
|
65
56
|
scrape: {
|
|
66
|
-
website: firecrawl_2.scrapeWebsite
|
|
57
|
+
website: firecrawl_2.scrapeWebsite
|
|
67
58
|
},
|
|
68
59
|
browser: {
|
|
69
|
-
execute: browser_2.browserExecute
|
|
60
|
+
execute: browser_2.browserExecute
|
|
70
61
|
},
|
|
71
62
|
apify: {
|
|
72
|
-
runActor: apify_2.runApifyActor
|
|
63
|
+
runActor: apify_2.runApifyActor
|
|
73
64
|
},
|
|
74
65
|
geo: {
|
|
75
|
-
parseAddress: expansion_2.geoParseAddress
|
|
76
|
-
},
|
|
77
|
-
healthcare: {
|
|
78
|
-
npi: expansion_2.healthcareNpi,
|
|
66
|
+
parseAddress: expansion_2.geoParseAddress
|
|
79
67
|
},
|
|
80
68
|
googleMaps: {
|
|
81
|
-
scrape: googleMaps_2.googleMapsScrape
|
|
69
|
+
scrape: googleMaps_2.googleMapsScrape
|
|
82
70
|
},
|
|
83
71
|
builtWith: {
|
|
84
72
|
lookupDomain: expansion_2.builtWithLookupDomain,
|
|
85
73
|
relationships: expansion_2.builtWithRelationships,
|
|
86
|
-
searchByTech: expansion_2.builtWithSearchByTech
|
|
87
|
-
}
|
|
74
|
+
searchByTech: expansion_2.builtWithSearchByTech
|
|
75
|
+
}
|
|
88
76
|
};
|
|
89
77
|
exports.default = exports.services;
|
|
@@ -7,11 +7,11 @@ description: Technographic data enrichment — discover what technologies, frame
|
|
|
7
7
|
|
|
8
8
|
## Available Methods
|
|
9
9
|
|
|
10
|
-
| Method | Description | Credits
|
|
11
|
-
| --------------- | -------------------------------------- |
|
|
12
|
-
| `lookupDomain` | Get full technology stack for a domain | 1
|
|
13
|
-
| `relationships` | Find related/connected domains | 1
|
|
14
|
-
| `searchByTech` | Find companies using a specific tech | 1/result |
|
|
10
|
+
| Method | Description | Credits |
|
|
11
|
+
| --------------- | -------------------------------------- | ---------------------------- |
|
|
12
|
+
| `lookupDomain` | Get full technology stack for a domain | 1 |
|
|
13
|
+
| `relationships` | Find related/connected domains | 1 |
|
|
14
|
+
| `searchByTech` | Find companies using a specific tech | 1/result (up to 900/page) |
|
|
15
15
|
|
|
16
16
|
## Use Cases
|
|
17
17
|
|
|
@@ -31,6 +31,7 @@ description: Technographic data enrichment — discover what technologies, frame
|
|
|
31
31
|
|
|
32
32
|
- **Case-sensitive**: Use "Hubspot" not "HubSpot"
|
|
33
33
|
- **Find exact names**: Use `lookupDomain` on a site to see correct tech names
|
|
34
|
+
- **Pagination**: Each page returns up to 900 results (= 900 credits per page). Use `offset` from previous response to get next page.
|
|
34
35
|
|
|
35
36
|
## Example Workflows
|
|
36
37
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orangeslice",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.4",
|
|
4
4
|
"description": "B2B LinkedIn database prospector - 1.15B profiles, 85M companies",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
"scripts": {
|
|
16
16
|
"sync-docs": "node scripts/sync-docs.mjs",
|
|
17
17
|
"build": "tsc",
|
|
18
|
-
"prepublishOnly": "npm run sync-docs && npm run build"
|
|
19
|
-
"test": "npx tsx test.ts"
|
|
18
|
+
"prepublishOnly": "npm run sync-docs && npm run build"
|
|
20
19
|
},
|
|
21
20
|
"keywords": [
|
|
22
21
|
"b2b",
|