@bisibility/sdk 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/README.md ADDED
@@ -0,0 +1,222 @@
1
+ # @bisibility/sdk
2
+
3
+ TypeScript SDK for the Bisibility REST API.
4
+
5
+ ## Requirements
6
+
7
+ - Node.js >= 18 (the SDK uses the global `fetch`, `Headers`, and `AbortSignal` APIs).
8
+ - The package is **ESM-only** (`"type": "module"`). Use `import` — there is no CommonJS build.
9
+ From CommonJS you can use `await import("@bisibility/sdk")`.
10
+ - On runtimes without a global `fetch` (or to use a custom HTTP stack), inject your own
11
+ implementation via the `fetch` config option (see Configuration).
12
+
13
+ ## Install
14
+
15
+ ```sh
16
+ npm install @bisibility/sdk
17
+ ```
18
+
19
+ ## Quickstart
20
+
21
+ ```ts
22
+ import { BisibilityClient } from "@bisibility/sdk";
23
+
24
+ const bisibility = new BisibilityClient({
25
+ apiKey: process.env.BISIBILITY_API_KEY
26
+ });
27
+
28
+ const projects = await bisibility.listProjects();
29
+ const projectId = projects.data[0]?.id;
30
+
31
+ if (projectId) {
32
+ const created = await bisibility.createKeywords(projectId, {
33
+ keywords: [
34
+ {
35
+ keyword: "rank tracker api",
36
+ target_url: "https://example.com/rank-tracker",
37
+ tags: ["api"]
38
+ }
39
+ ]
40
+ });
41
+
42
+ const keywordId = created.results[0]?.keyword.id;
43
+ if (keywordId) {
44
+ const check = await bisibility.runRankCheck(keywordId);
45
+ console.log(check.position, check.ranking_url);
46
+ }
47
+ }
48
+ ```
49
+
50
+ ## Configuration
51
+
52
+ ```ts
53
+ const bisibility = new BisibilityClient({
54
+ apiKey: "bsk_live_...",
55
+ baseUrl: "https://bisibility.com/api/v1"
56
+ });
57
+ ```
58
+
59
+ `baseUrl` should point at the API v1 root. For self-hosted installs, pass your own
60
+ `https://your-host.example/api/v1` URL. Browser apps may pass a relative URL such as `/api/v1`.
61
+
62
+ The client accepts project API keys (`bsk_live_...`) and personal access tokens
63
+ (`bsp_live_...`). For a PAT with multiple project memberships, set `projectId`
64
+ to send `X-Bisibility-Project` on project-implicit routes:
65
+
66
+ ```ts
67
+ const bisibility = new BisibilityClient({
68
+ apiKey: process.env.BISIBILITY_PERSONAL_ACCESS_TOKEN,
69
+ projectId: "prj_abc123"
70
+ });
71
+
72
+ const me = await bisibility.getMe();
73
+ const project = await bisibility.createProject({ domain: "example.com", name: "Example" });
74
+ await bisibility.createProjectApiKey(project.id, { name: "CI" });
75
+ ```
76
+
77
+ A custom `fetch` implementation can be injected — useful for older runtimes, proxies, or testing:
78
+
79
+ ```ts
80
+ const bisibility = new BisibilityClient({
81
+ apiKey: "bsk_live_...",
82
+ fetch: myFetch
83
+ });
84
+ ```
85
+
86
+ Protected methods send `Authorization: Bearer <apiKey>`. Write methods accept an optional
87
+ `idempotencyKey` request option, which maps to the server `Idempotency-Key` header.
88
+ Requests set `redirect: "error"` so credentials are never forwarded through an HTTP redirect.
89
+ Custom `fetch` implementations should preserve that behavior.
90
+
91
+ Every method accepts per-request options:
92
+
93
+ ```ts
94
+ await bisibility.listProjects({
95
+ headers: { "X-Request-Id": "..." },
96
+ signal: controller.signal, // your own AbortSignal
97
+ timeout: 10_000 // ms; composed with `signal` when both are set
98
+ });
99
+ ```
100
+
101
+ ## Methods
102
+
103
+ - Discovery: `getHealth`, `getOpenApi`, `getCapabilities`, `getLlmsText`
104
+ - Public cost (no API key required): `getProviderRates`, `getCostEstimate`
105
+ - Account and personal tokens: `getMe`, `updateMe`, `listMyTokens`, `createMyToken`,
106
+ `revokeMyToken`
107
+ - Projects: `listProjects`, `createProject`, `getProject`, `updateProject`, `deleteProject`,
108
+ `updateProjectDefaults`
109
+ - API keys: `listApiKeys`, `createApiKey`, `revokeApiKey`, `listProjectApiKeys`,
110
+ `createProjectApiKey`
111
+ - Webhooks: `listWebhooks`, `createWebhook`, `updateWebhook`, `deleteWebhook`
112
+ - Keywords: `listKeywords`, `createKeywords`, `addKeywords`, `getKeyword`, `updateKeyword`,
113
+ `setKeywordTargetUrl`, `deleteKeyword`, `bulkUpdateKeywords`
114
+ - Rank checks: `listRankChecks`, `runRankCheck`, `getRankCheckResult`
115
+ - Signals: `createSignal`, `listSignals`
116
+ - Alert rules and triggered alerts: `listAlertRules`, `createAlertRule`, `updateAlertRule`,
117
+ `deleteAlertRule`, `listTriggeredAlerts`
118
+ - Team: `listTeamMembers`, `listTeamInvites`, `createTeamInvite`, `revokeTeamInvite`,
119
+ `revokeTeamInviteById`
120
+ - Providers: `listProviders`, `connectProvider`, `testProviderConnection`,
121
+ `updateProviderSettings`, `setProviderEnabled`, `enableProvider`, `disableProvider`,
122
+ `setProviderPriority`, `setPrimaryProvider`, `disconnectProvider`
123
+ - Saved views: `listSavedViews`, `createSavedView`, `deleteSavedView`, `deleteSavedViewById`
124
+ - Competitors: `listCompetitors`, `addCompetitor`, `removeCompetitor`, `removeCompetitorById`
125
+ - Notification preferences: `getNotificationPreferences`, `updateNotificationPreferences`
126
+ - Migration tokens: `listMigrationTokens`, `mintMigrationToken`, `revokeMigrationToken`,
127
+ `revokeMigrationTokenById`
128
+
129
+ List methods return `{ data, meta }` with `meta.next_cursor`. Resource methods return the resource
130
+ object directly, matching the Bisibility API response shape.
131
+
132
+ ### Project defaults
133
+
134
+ `updateProjectDefaults(projectId, patch)` sends `PATCH /projects/{id}/defaults` and returns the
135
+ persisted `ProjectDefaults` (default market, schedule, and timezone for new keywords):
136
+
137
+ ```ts
138
+ await bisibility.updateProjectDefaults(projectId, {
139
+ country: "United States",
140
+ device: "desktop",
141
+ frequency: "daily"
142
+ });
143
+ ```
144
+
145
+ ### Asynchronous rank checks
146
+
147
+ `runRankCheck` runs synchronously by default. Pass `async: true` to enqueue the check instead —
148
+ the server responds `202` with a `RankCheck` in `status: "running"` that you can poll via
149
+ `getRankCheckResult`:
150
+
151
+ ```ts
152
+ const queued = await bisibility.runRankCheck(keywordId, undefined, { async: true });
153
+ // queued.status === "running"
154
+ const result = await bisibility.getRankCheckResult(queued.id);
155
+ ```
156
+
157
+ Failed checks carry `status: "failed"`, an `error` message, and provider fallback `attempts`.
158
+
159
+ ### Signals
160
+
161
+ `createSignal` ingests a signal (`POST /signals`) into the project tied to your API key —
162
+ `source` must be `"deploy"`, `"cms"`, or `"api"`, and `type` follows the
163
+ `category.event` pattern (for example `deploy.completed`). `listSignals(projectId, options)`
164
+ pages through a project's signals newest first with optional `source`, `type`, `from`, and `to`
165
+ filters:
166
+
167
+ ```ts
168
+ await bisibility.createSignal({
169
+ source: "deploy",
170
+ type: "deploy.completed",
171
+ payload: { version: "1.2.3" }, // <= 8KB serialized
172
+ url: "https://example.com/releases/1"
173
+ });
174
+
175
+ const recent = await bisibility.listSignals(projectId, {
176
+ source: "deploy",
177
+ from: "2026-07-01T00:00:00.000Z"
178
+ });
179
+ ```
180
+
181
+ ### Public cost estimates
182
+
183
+ `getProviderRates` and `getCostEstimate` are anonymous — they work without an `apiKey`:
184
+
185
+ ```ts
186
+ const rates = await bisibility.getProviderRates();
187
+ const estimate = await bisibility.getCostEstimate({
188
+ keywords: 250,
189
+ frequency: "daily",
190
+ provider: "dataforseo",
191
+ option: "standard"
192
+ });
193
+ // estimate.data.monthly_cost_usd
194
+ ```
195
+
196
+ ## Errors
197
+
198
+ Non-2xx API responses throw `BisibilityApiError`. The original RFC problem details body is available
199
+ on `error.problem`. `error.headers` retains ordinary response headers such as `Retry-After`, while
200
+ credential and cookie headers are removed before the error is exposed to application logs.
201
+
202
+ ```ts
203
+ import { BisibilityApiError } from "@bisibility/sdk";
204
+
205
+ try {
206
+ await bisibility.getKeyword("kw_missing");
207
+ } catch (error) {
208
+ if (error instanceof BisibilityApiError) {
209
+ console.error(error.status, error.problem?.detail);
210
+ }
211
+ }
212
+ ```
213
+
214
+ ## Contributing and security
215
+
216
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for the development workflow and
217
+ [SECURITY.md](SECURITY.md) for private vulnerability reporting. Changes are recorded in
218
+ [CHANGELOG.md](CHANGELOG.md).
219
+
220
+ ## License
221
+
222
+ Licensed under the GNU Affero General Public License v3.0 only. See [LICENSE](LICENSE).
@@ -0,0 +1,89 @@
1
+ import type { AddCompetitorInput, AlertRule, ApiKey, BisibilityClientConfig, Capability, Competitor, CompetitorListResponse, ConnectProviderInput, CostEstimate, CreateAlertRuleInput, CreateKeywordsInput, CreateKeywordsResponse, CreateMyTokenInput, CreateProjectInput, CreateSavedViewInput, CreateSignalInput, CreateTeamInviteInput, CreateWebhookInput, CreatedApiKey, CreatedPersonalAccessToken, CreatedTeamInvite, DataResponse, DeleteAlertRuleResponse, DeleteSavedViewResponse, GetCostEstimateOptions, HealthResponse, IssuedMigrationToken, Keyword, KeywordBulkInput, KeywordBulkResponse, ListKeywordsOptions, ListRankChecksOptions, ListResponse, ListSignalsOptions, Me, MigrationTokenListResponse, MintMigrationTokenInput, NotificationPreferences, OpenApiDocument, PaginationOptions, PersonalAccessToken, Project, ProjectDefaults, ProjectDefaultsPatch, Provider, ProviderConnection, ProviderDisconnectResponse, ProviderRate, ProviderSettingsInput, ProviderTestResult, RankCheck, RemoveCompetitorResponse, RequestOptions, RevokedMigrationToken, RevokedTeamInvite, RunRankCheckInput, RunRankCheckOptions, SavedView, Signal, TeamInvite, TeamMember, TestProviderConnectionInput, TriggeredAlert, UpdateAlertRuleInput, UpdateKeywordInput, UpdateMeInput, UpdateNotificationPreferencesInput, UpdateProjectInput, UpdateWebhookInput, Webhook } from "./types.js";
2
+ export declare class BisibilityClient {
3
+ #private;
4
+ readonly baseUrl: string;
5
+ constructor(config?: BisibilityClientConfig);
6
+ getHealth(options?: RequestOptions): Promise<HealthResponse>;
7
+ getOpenApi(options?: RequestOptions): Promise<OpenApiDocument>;
8
+ getCapabilities(options?: RequestOptions): Promise<DataResponse<Capability[]>>;
9
+ getLlmsText(options?: RequestOptions): Promise<string>;
10
+ getProviderRates(options?: RequestOptions): Promise<DataResponse<ProviderRate[]>>;
11
+ getCostEstimate(input: GetCostEstimateOptions, options?: RequestOptions): Promise<DataResponse<CostEstimate>>;
12
+ getMe(options?: RequestOptions): Promise<Me>;
13
+ updateMe(input: UpdateMeInput, options?: RequestOptions): Promise<Me>;
14
+ listMyTokens(options?: RequestOptions): Promise<ListResponse<PersonalAccessToken>>;
15
+ createMyToken(input: CreateMyTokenInput, options?: RequestOptions): Promise<CreatedPersonalAccessToken>;
16
+ revokeMyToken(tokenId: string, options?: RequestOptions): Promise<PersonalAccessToken>;
17
+ listProjects(options?: RequestOptions): Promise<ListResponse<Project>>;
18
+ createProject(input: CreateProjectInput, options?: RequestOptions): Promise<Project>;
19
+ getProject(projectId: string, options?: RequestOptions): Promise<Project>;
20
+ updateProject(projectId: string, input: UpdateProjectInput, options?: RequestOptions): Promise<Project>;
21
+ deleteProject(projectId: string, options?: RequestOptions): Promise<Project>;
22
+ updateProjectDefaults(projectId: string, input: ProjectDefaultsPatch, options?: RequestOptions): Promise<ProjectDefaults>;
23
+ listApiKeys(options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<ApiKey>>;
24
+ createApiKey(input: {
25
+ name: string;
26
+ }, options?: RequestOptions): Promise<CreatedApiKey>;
27
+ revokeApiKey(keyId: string, options?: RequestOptions): Promise<ApiKey>;
28
+ listProjectApiKeys(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<ApiKey>>;
29
+ createProjectApiKey(projectId: string, input: {
30
+ name: string;
31
+ }, options?: RequestOptions): Promise<CreatedApiKey>;
32
+ listWebhooks(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<Webhook>>;
33
+ createWebhook(projectId: string, input: CreateWebhookInput, options?: RequestOptions): Promise<Webhook>;
34
+ updateWebhook(projectId: string, webhookId: string, input: UpdateWebhookInput, options?: RequestOptions): Promise<Webhook>;
35
+ deleteWebhook(projectId: string, webhookId: string, options?: RequestOptions): Promise<Webhook>;
36
+ listKeywords(projectId: string, options?: ListKeywordsOptions, requestOptions?: RequestOptions): Promise<ListResponse<Keyword>>;
37
+ addKeywords(projectId: string, input: CreateKeywordsInput, options?: RequestOptions): Promise<CreateKeywordsResponse>;
38
+ createKeywords(projectId: string, input: CreateKeywordsInput, options?: RequestOptions): Promise<CreateKeywordsResponse>;
39
+ getKeyword(keywordId: string, options?: RequestOptions): Promise<Keyword>;
40
+ updateKeyword(keywordId: string, input: UpdateKeywordInput, options?: RequestOptions): Promise<Keyword>;
41
+ setKeywordTargetUrl(keywordId: string, targetUrl: string | null, options?: RequestOptions): Promise<Keyword>;
42
+ deleteKeyword(keywordId: string, options?: RequestOptions): Promise<Keyword>;
43
+ bulkUpdateKeywords(input: KeywordBulkInput, options?: RequestOptions): Promise<KeywordBulkResponse>;
44
+ listRankChecks(keywordId: string, options?: ListRankChecksOptions, requestOptions?: RequestOptions): Promise<ListResponse<RankCheck>>;
45
+ runRankCheck(keywordId: string, input?: RunRankCheckInput, options?: RunRankCheckOptions): Promise<RankCheck>;
46
+ getRankCheckResult(checkId: string, options?: RequestOptions): Promise<RankCheck>;
47
+ createSignal(input: CreateSignalInput, options?: RequestOptions): Promise<Signal>;
48
+ listSignals(projectId: string, options?: ListSignalsOptions, requestOptions?: RequestOptions): Promise<ListResponse<Signal>>;
49
+ listAlertRules(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<AlertRule>>;
50
+ createAlertRule(projectId: string, input: CreateAlertRuleInput, options?: RequestOptions): Promise<AlertRule>;
51
+ updateAlertRule(ruleId: string, input: UpdateAlertRuleInput, options?: RequestOptions): Promise<AlertRule>;
52
+ deleteAlertRule(ruleId: string, options?: RequestOptions): Promise<DeleteAlertRuleResponse>;
53
+ listTriggeredAlerts(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<TriggeredAlert>>;
54
+ listTeamMembers(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<TeamMember>>;
55
+ listTeamInvites(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<TeamInvite>>;
56
+ createTeamInvite(projectId: string, input: CreateTeamInviteInput, options?: RequestOptions): Promise<CreatedTeamInvite>;
57
+ revokeTeamInvite(projectId: string, inviteId: string, options?: RequestOptions): Promise<RevokedTeamInvite>;
58
+ revokeTeamInviteById(inviteId: string, options?: RequestOptions): Promise<RevokedTeamInvite>;
59
+ listProviders(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<Provider>>;
60
+ connectProvider(projectId: string, providerId: string, input?: ConnectProviderInput, options?: RequestOptions): Promise<ProviderConnection>;
61
+ testProviderConnection(projectId: string, providerId: string, input?: TestProviderConnectionInput, options?: RequestOptions): Promise<ProviderTestResult>;
62
+ updateProviderSettings(projectId: string, providerId: string, input: ProviderSettingsInput, options?: RequestOptions): Promise<ProviderConnection>;
63
+ setProviderEnabled(projectId: string, providerId: string, enabled: boolean, options?: RequestOptions): Promise<ProviderConnection>;
64
+ enableProvider(projectId: string, providerId: string, options?: RequestOptions): Promise<ProviderConnection>;
65
+ disableProvider(projectId: string, providerId: string, options?: RequestOptions): Promise<ProviderConnection>;
66
+ setProviderPriority(projectId: string, providerId: string, priority: number, options?: RequestOptions): Promise<ProviderConnection>;
67
+ setPrimaryProvider(projectId: string, providerId: string, primary?: boolean, options?: RequestOptions): Promise<ProviderConnection>;
68
+ disconnectProvider(projectId: string, providerId: string, options?: RequestOptions): Promise<ProviderDisconnectResponse>;
69
+ listSavedViews(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<ListResponse<SavedView>>;
70
+ createSavedView(projectId: string, input: CreateSavedViewInput, options?: RequestOptions): Promise<SavedView>;
71
+ deleteSavedView(projectId: string, viewId: string, options?: RequestOptions): Promise<DeleteSavedViewResponse>;
72
+ deleteSavedViewById(viewId: string, options?: RequestOptions): Promise<DeleteSavedViewResponse>;
73
+ listCompetitors(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<CompetitorListResponse>;
74
+ addCompetitor(projectId: string, input: AddCompetitorInput, options?: RequestOptions): Promise<Competitor>;
75
+ removeCompetitor(projectId: string, competitorId: string, options?: RequestOptions): Promise<RemoveCompetitorResponse>;
76
+ removeCompetitorById(competitorId: string, options?: RequestOptions): Promise<RemoveCompetitorResponse>;
77
+ getNotificationPreferences(projectId: string, options?: RequestOptions): Promise<NotificationPreferences>;
78
+ updateNotificationPreferences(projectId: string, input: UpdateNotificationPreferencesInput, options?: RequestOptions): Promise<NotificationPreferences>;
79
+ listMigrationTokens(projectId: string, options?: PaginationOptions, requestOptions?: RequestOptions): Promise<MigrationTokenListResponse>;
80
+ mintMigrationToken(projectId: string, input?: MintMigrationTokenInput, options?: RequestOptions): Promise<IssuedMigrationToken>;
81
+ revokeMigrationToken(projectId: string, tokenId: string, options?: RequestOptions): Promise<RevokedMigrationToken>;
82
+ revokeMigrationTokenById(tokenId: string, options?: RequestOptions): Promise<RevokedMigrationToken>;
83
+ private buildUrl;
84
+ private request;
85
+ private jsonFromResponse;
86
+ private errorFromResponse;
87
+ }
88
+ export declare function createBisibilityClient(config?: BisibilityClientConfig): BisibilityClient;
89
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}