@bctrl/sdk 1.0.1 → 1.0.3
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 +28 -29
- package/dist/bctrl.d.ts +22 -36
- package/dist/bctrl.js +40 -75
- package/dist/errors.d.ts +49 -43
- package/dist/errors.js +83 -120
- package/dist/files.d.ts +31 -0
- package/dist/files.js +97 -0
- package/dist/http.d.ts +18 -0
- package/dist/http.js +135 -0
- package/dist/index.d.ts +9 -12
- package/dist/index.js +7 -23
- package/dist/invocations.d.ts +86 -0
- package/dist/invocations.js +159 -0
- package/dist/pagination.d.ts +2 -0
- package/dist/pagination.js +13 -0
- package/dist/runs.d.ts +40 -0
- package/dist/runs.js +105 -0
- package/dist/runtimes.d.ts +69 -0
- package/dist/runtimes.js +202 -0
- package/dist/spaces.d.ts +40 -0
- package/dist/spaces.js +96 -0
- package/dist/types.d.ts +413 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +27 -0
- package/dist/version.js +2 -2
- package/package.json +4 -21
- package/dist/agents/browser-use/index.d.ts +0 -1
- package/dist/agents/browser-use/index.js +0 -9
- package/dist/agents/browser-use/namespace.d.ts +0 -39
- package/dist/agents/browser-use/namespace.js +0 -93
- package/dist/agents/index.d.ts +0 -2
- package/dist/agents/index.js +0 -17
- package/dist/agents/stagehand/core.d.ts +0 -93
- package/dist/agents/stagehand/core.js +0 -144
- package/dist/agents/stagehand/index.d.ts +0 -3
- package/dist/agents/stagehand/index.js +0 -24
- package/dist/agents/stagehand/namespace.d.ts +0 -51
- package/dist/agents/stagehand/namespace.js +0 -65
- package/dist/ai-credentials/client.d.ts +0 -12
- package/dist/ai-credentials/client.js +0 -70
- package/dist/ai-credentials/index.d.ts +0 -1
- package/dist/ai-credentials/index.js +0 -1
- package/dist/base/event-binding.d.ts +0 -7
- package/dist/base/event-binding.js +0 -23
- package/dist/base/types.d.ts +0 -109
- package/dist/base/types.js +0 -4
- package/dist/browser-extensions/client.d.ts +0 -15
- package/dist/browser-extensions/client.js +0 -72
- package/dist/browser-extensions/index.d.ts +0 -2
- package/dist/browser-extensions/index.js +0 -1
- package/dist/browser-profiles/client.d.ts +0 -11
- package/dist/browser-profiles/client.js +0 -63
- package/dist/browser-profiles/index.d.ts +0 -1
- package/dist/browser-profiles/index.js +0 -1
- package/dist/captcha/index.d.ts +0 -1
- package/dist/captcha/index.js +0 -1
- package/dist/captcha/namespace.d.ts +0 -34
- package/dist/captcha/namespace.js +0 -41
- package/dist/client/index.d.ts +0 -1
- package/dist/client/index.js +0 -1
- package/dist/client/rpc.d.ts +0 -83
- package/dist/client/rpc.js +0 -354
- package/dist/config.d.ts +0 -5
- package/dist/config.js +0 -28
- package/dist/constants/browser.d.ts +0 -2
- package/dist/constants/browser.js +0 -1
- package/dist/contracts/agent-tools.d.ts +0 -45
- package/dist/contracts/agent-tools.js +0 -31
- package/dist/contracts/automation.d.ts +0 -265
- package/dist/contracts/automation.js +0 -109
- package/dist/contracts/browser-management.d.ts +0 -179
- package/dist/contracts/browser-management.js +0 -95
- package/dist/contracts/browser-use.d.ts +0 -136
- package/dist/contracts/browser-use.js +0 -93
- package/dist/contracts/captcha.d.ts +0 -114
- package/dist/contracts/captcha.js +0 -40
- package/dist/contracts/desktop.d.ts +0 -223
- package/dist/contracts/desktop.js +0 -121
- package/dist/contracts/drivers/playwright.d.ts +0 -2008
- package/dist/contracts/drivers/playwright.js +0 -2033
- package/dist/contracts/drivers/puppeteer.d.ts +0 -1221
- package/dist/contracts/drivers/puppeteer.js +0 -941
- package/dist/contracts/drivers/selenium.d.ts +0 -156
- package/dist/contracts/drivers/selenium.js +0 -61
- package/dist/contracts/drivers/stagehand.d.ts +0 -155
- package/dist/contracts/drivers/stagehand.js +0 -7
- package/dist/contracts/extensions.d.ts +0 -13
- package/dist/contracts/extensions.js +0 -9
- package/dist/contracts/index.d.ts +0 -13
- package/dist/contracts/index.js +0 -13
- package/dist/contracts/public-api.d.ts +0 -360
- package/dist/contracts/public-api.js +0 -17
- package/dist/contracts/runtime.d.ts +0 -81
- package/dist/contracts/runtime.js +0 -16
- package/dist/contracts/stagehand.d.ts +0 -253
- package/dist/contracts/stagehand.js +0 -145
- package/dist/contracts/storage.d.ts +0 -51
- package/dist/contracts/storage.js +0 -56
- package/dist/contracts/vault.d.ts +0 -119
- package/dist/contracts/vault.js +0 -112
- package/dist/contracts/version.d.ts +0 -3
- package/dist/contracts/version.js +0 -16
- package/dist/desktop.d.ts +0 -2
- package/dist/desktop.js +0 -3
- package/dist/drivers/desktop/index.d.ts +0 -65
- package/dist/drivers/desktop/index.js +0 -68
- package/dist/drivers/desktop/session.d.ts +0 -313
- package/dist/drivers/desktop/session.js +0 -432
- package/dist/drivers/playwright/event-emitter.d.ts +0 -160
- package/dist/drivers/playwright/event-emitter.js +0 -297
- package/dist/drivers/playwright/generated/api-request-context.d.ts +0 -137
- package/dist/drivers/playwright/generated/api-request-context.js +0 -154
- package/dist/drivers/playwright/generated/api-response.d.ts +0 -119
- package/dist/drivers/playwright/generated/api-response.js +0 -123
- package/dist/drivers/playwright/generated/browser-context.d.ts +0 -284
- package/dist/drivers/playwright/generated/browser-context.js +0 -458
- package/dist/drivers/playwright/generated/browser.d.ts +0 -120
- package/dist/drivers/playwright/generated/browser.js +0 -151
- package/dist/drivers/playwright/generated/clock.d.ts +0 -80
- package/dist/drivers/playwright/generated/clock.js +0 -94
- package/dist/drivers/playwright/generated/console-message.d.ts +0 -94
- package/dist/drivers/playwright/generated/console-message.js +0 -89
- package/dist/drivers/playwright/generated/coverage.d.ts +0 -57
- package/dist/drivers/playwright/generated/coverage.js +0 -66
- package/dist/drivers/playwright/generated/dialog.d.ts +0 -79
- package/dist/drivers/playwright/generated/dialog.js +0 -80
- package/dist/drivers/playwright/generated/element-handle.d.ts +0 -399
- package/dist/drivers/playwright/generated/element-handle.js +0 -501
- package/dist/drivers/playwright/generated/frame-locator.d.ts +0 -34
- package/dist/drivers/playwright/generated/frame-locator.js +0 -63
- package/dist/drivers/playwright/generated/frame.d.ts +0 -557
- package/dist/drivers/playwright/generated/frame.js +0 -634
- package/dist/drivers/playwright/generated/js-handle.d.ts +0 -72
- package/dist/drivers/playwright/generated/js-handle.js +0 -92
- package/dist/drivers/playwright/generated/keyboard.d.ts +0 -103
- package/dist/drivers/playwright/generated/keyboard.js +0 -113
- package/dist/drivers/playwright/generated/locator.d.ts +0 -795
- package/dist/drivers/playwright/generated/locator.js +0 -974
- package/dist/drivers/playwright/generated/mouse.d.ts +0 -97
- package/dist/drivers/playwright/generated/mouse.js +0 -109
- package/dist/drivers/playwright/generated/page.d.ts +0 -762
- package/dist/drivers/playwright/generated/page.js +0 -988
- package/dist/drivers/playwright/generated/touchscreen.d.ts +0 -34
- package/dist/drivers/playwright/generated/touchscreen.js +0 -37
- package/dist/drivers/playwright/generated/tracing.d.ts +0 -78
- package/dist/drivers/playwright/generated/tracing.js +0 -80
- package/dist/drivers/playwright/generated/worker.d.ts +0 -53
- package/dist/drivers/playwright/generated/worker.js +0 -59
- package/dist/drivers/playwright/index.d.ts +0 -19
- package/dist/drivers/playwright/index.js +0 -20
- package/dist/drivers/playwright/remote-base.d.ts +0 -62
- package/dist/drivers/playwright/remote-base.js +0 -86
- package/dist/drivers/playwright/types.d.ts +0 -148
- package/dist/drivers/playwright/types.js +0 -8
- package/dist/drivers/puppeteer/errors.d.ts +0 -50
- package/dist/drivers/puppeteer/errors.js +0 -71
- package/dist/drivers/puppeteer/event-emitter.d.ts +0 -145
- package/dist/drivers/puppeteer/event-emitter.js +0 -259
- package/dist/drivers/puppeteer/generated/accessibility.d.ts +0 -77
- package/dist/drivers/puppeteer/generated/accessibility.js +0 -74
- package/dist/drivers/puppeteer/generated/browser-context.d.ts +0 -116
- package/dist/drivers/puppeteer/generated/browser-context.js +0 -168
- package/dist/drivers/puppeteer/generated/browser.d.ts +0 -169
- package/dist/drivers/puppeteer/generated/browser.js +0 -246
- package/dist/drivers/puppeteer/generated/console-message.d.ts +0 -54
- package/dist/drivers/puppeteer/generated/console-message.js +0 -69
- package/dist/drivers/puppeteer/generated/coverage.d.ts +0 -49
- package/dist/drivers/puppeteer/generated/coverage.js +0 -57
- package/dist/drivers/puppeteer/generated/dialog.d.ts +0 -46
- package/dist/drivers/puppeteer/generated/dialog.js +0 -60
- package/dist/drivers/puppeteer/generated/element-handle.d.ts +0 -261
- package/dist/drivers/puppeteer/generated/element-handle.js +0 -341
- package/dist/drivers/puppeteer/generated/file-chooser.d.ts +0 -34
- package/dist/drivers/puppeteer/generated/file-chooser.js +0 -43
- package/dist/drivers/puppeteer/generated/frame.d.ts +0 -221
- package/dist/drivers/puppeteer/generated/frame.js +0 -302
- package/dist/drivers/puppeteer/generated/http-request.d.ts +0 -195
- package/dist/drivers/puppeteer/generated/http-request.js +0 -243
- package/dist/drivers/puppeteer/generated/http-response.d.ts +0 -142
- package/dist/drivers/puppeteer/generated/http-response.js +0 -169
- package/dist/drivers/puppeteer/generated/js-handle.d.ts +0 -104
- package/dist/drivers/puppeteer/generated/js-handle.js +0 -125
- package/dist/drivers/puppeteer/generated/keyboard.d.ts +0 -79
- package/dist/drivers/puppeteer/generated/keyboard.js +0 -89
- package/dist/drivers/puppeteer/generated/locator.d.ts +0 -141
- package/dist/drivers/puppeteer/generated/locator.js +0 -164
- package/dist/drivers/puppeteer/generated/mouse.d.ts +0 -74
- package/dist/drivers/puppeteer/generated/mouse.js +0 -94
- package/dist/drivers/puppeteer/generated/page.d.ts +0 -604
- package/dist/drivers/puppeteer/generated/page.js +0 -776
- package/dist/drivers/puppeteer/generated/target.d.ts +0 -105
- package/dist/drivers/puppeteer/generated/target.js +0 -123
- package/dist/drivers/puppeteer/generated/touchscreen.d.ts +0 -87
- package/dist/drivers/puppeteer/generated/touchscreen.js +0 -103
- package/dist/drivers/puppeteer/generated/tracing.d.ts +0 -38
- package/dist/drivers/puppeteer/generated/tracing.js +0 -43
- package/dist/drivers/puppeteer/generated/web-worker.d.ts +0 -63
- package/dist/drivers/puppeteer/generated/web-worker.js +0 -73
- package/dist/drivers/puppeteer/index.d.ts +0 -21
- package/dist/drivers/puppeteer/index.js +0 -23
- package/dist/drivers/puppeteer/remote-base.d.ts +0 -57
- package/dist/drivers/puppeteer/remote-base.js +0 -79
- package/dist/drivers/puppeteer/types.d.ts +0 -178
- package/dist/drivers/puppeteer/types.js +0 -8
- package/dist/drivers/selenium/driver.d.ts +0 -28
- package/dist/drivers/selenium/driver.js +0 -169
- package/dist/drivers/selenium/element.d.ts +0 -34
- package/dist/drivers/selenium/element.js +0 -73
- package/dist/drivers/selenium/index.d.ts +0 -3
- package/dist/drivers/selenium/index.js +0 -5
- package/dist/drivers/selenium/types.d.ts +0 -2
- package/dist/drivers/selenium/types.js +0 -12
- package/dist/drivers/stagehand/generated/context.d.ts +0 -127
- package/dist/drivers/stagehand/generated/context.js +0 -153
- package/dist/drivers/stagehand/generated/locator.d.ts +0 -324
- package/dist/drivers/stagehand/generated/locator.js +0 -368
- package/dist/drivers/stagehand/generated/page.d.ts +0 -377
- package/dist/drivers/stagehand/generated/page.js +0 -439
- package/dist/drivers/stagehand/generated/response.d.ts +0 -197
- package/dist/drivers/stagehand/generated/response.js +0 -232
- package/dist/drivers/stagehand/index.d.ts +0 -5
- package/dist/drivers/stagehand/index.js +0 -8
- package/dist/drivers/stagehand/types.d.ts +0 -1
- package/dist/drivers/stagehand/types.js +0 -7
- package/dist/extensions/client.d.ts +0 -47
- package/dist/extensions/client.js +0 -154
- package/dist/extensions/index.d.ts +0 -1
- package/dist/extensions/index.js +0 -1
- package/dist/internal/dev-client.d.ts +0 -5
- package/dist/internal/dev-client.js +0 -9
- package/dist/internal/rpc-targets.d.ts +0 -17
- package/dist/internal/rpc-targets.js +0 -58
- package/dist/internal/serialization.d.ts +0 -32
- package/dist/internal/serialization.js +0 -42
- package/dist/internal/transport.d.ts +0 -24
- package/dist/internal/transport.js +0 -29
- package/dist/playwright.d.ts +0 -1
- package/dist/playwright.js +0 -2
- package/dist/puppeteer.d.ts +0 -1
- package/dist/puppeteer.js +0 -2
- package/dist/selenium.d.ts +0 -1
- package/dist/selenium.js +0 -2
- package/dist/stagehand.d.ts +0 -1
- package/dist/stagehand.js +0 -2
- package/dist/storage/client.d.ts +0 -151
- package/dist/storage/client.js +0 -329
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.js +0 -4
- package/dist/telemetry.d.ts +0 -18
- package/dist/telemetry.js +0 -93
- package/dist/updates/client.d.ts +0 -8
- package/dist/updates/client.js +0 -128
- package/dist/updates/index.d.ts +0 -1
- package/dist/updates/index.js +0 -1
- package/dist/utils/http.d.ts +0 -39
- package/dist/utils/http.js +0 -88
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.js +0 -4
- package/dist/utils/logger.d.ts +0 -27
- package/dist/utils/logger.js +0 -74
- package/dist/utils/schema.d.ts +0 -17
- package/dist/utils/schema.js +0 -31
- package/dist/utils/url.d.ts +0 -5
- package/dist/utils/url.js +0 -7
- package/dist/vault/client.d.ts +0 -43
- package/dist/vault/client.js +0 -123
- package/dist/vault/index.d.ts +0 -1
- package/dist/vault/index.js +0 -1
- package/dist/workspaces/browser-runtime.d.ts +0 -251
- package/dist/workspaces/browser-runtime.js +0 -1025
- package/dist/workspaces/client.d.ts +0 -48
- package/dist/workspaces/client.js +0 -222
- package/dist/workspaces/index.d.ts +0 -2
- package/dist/workspaces/index.js +0 -2
- package/dist/workspaces/runtime-event-pump.d.ts +0 -65
- package/dist/workspaces/runtime-event-pump.js +0 -716
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal SDK transport and handle helpers.
|
|
3
|
-
*
|
|
4
|
-
* These are SDK implementation details used by sessions, namespaces, and
|
|
5
|
-
* generated driver classes. They intentionally live inside the SDK so the
|
|
6
|
-
* public package does not depend on shared schema helpers for its own runtime.
|
|
7
|
-
*/
|
|
8
|
-
function hasHandleId(value) {
|
|
9
|
-
return (value !== null &&
|
|
10
|
-
typeof value === 'object' &&
|
|
11
|
-
'handleId' in value &&
|
|
12
|
-
typeof value.handleId === 'string');
|
|
13
|
-
}
|
|
14
|
-
export function extractHandleId(value) {
|
|
15
|
-
if (!value)
|
|
16
|
-
return undefined;
|
|
17
|
-
if (typeof value === 'string')
|
|
18
|
-
return value;
|
|
19
|
-
return value.handleId;
|
|
20
|
-
}
|
|
21
|
-
export function toHandleRef(value) {
|
|
22
|
-
if (hasHandleId(value)) {
|
|
23
|
-
return { __bctrl_handle_id: value.handleId };
|
|
24
|
-
}
|
|
25
|
-
return value;
|
|
26
|
-
}
|
|
27
|
-
export function serializeFunctionSource(value) {
|
|
28
|
-
return typeof value === 'function' ? Function.prototype.toString.call(value) : value;
|
|
29
|
-
}
|
package/dist/playwright.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './drivers/playwright/index.js';
|
package/dist/playwright.js
DELETED
package/dist/puppeteer.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './drivers/puppeteer/index.js';
|
package/dist/puppeteer.js
DELETED
package/dist/selenium.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './drivers/selenium/index.js';
|
package/dist/selenium.js
DELETED
package/dist/stagehand.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './drivers/stagehand/index.js';
|
package/dist/stagehand.js
DELETED
package/dist/storage/client.d.ts
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { type StorageBrowseResponse, type StorageReadResponse } from '../contracts/storage.js';
|
|
2
|
-
export type StorageBrowseResult = StorageBrowseResponse;
|
|
3
|
-
export type StorageBrowseFile = StorageBrowseResult['files'][number];
|
|
4
|
-
export type StorageReadResult = StorageReadResponse;
|
|
5
|
-
export interface UploadResult {
|
|
6
|
-
success: boolean;
|
|
7
|
-
key: string;
|
|
8
|
-
filename: string;
|
|
9
|
-
}
|
|
10
|
-
export interface PresignedUrlResult {
|
|
11
|
-
url: string;
|
|
12
|
-
key?: string;
|
|
13
|
-
expiresIn: number;
|
|
14
|
-
}
|
|
15
|
-
export interface StorageObject {
|
|
16
|
-
id: string;
|
|
17
|
-
workspace: string;
|
|
18
|
-
runtimeId: string | null;
|
|
19
|
-
source: string;
|
|
20
|
-
driver: string | null;
|
|
21
|
-
target: string | null;
|
|
22
|
-
logicalPath: string;
|
|
23
|
-
filename: string;
|
|
24
|
-
contentType: string;
|
|
25
|
-
sizeBytes: number;
|
|
26
|
-
createdAt: string | null;
|
|
27
|
-
expiresAt: string | null;
|
|
28
|
-
metadata: Record<string, unknown> | null;
|
|
29
|
-
}
|
|
30
|
-
export interface ListObjectsOptions {
|
|
31
|
-
workspace?: string;
|
|
32
|
-
runtimeId?: string;
|
|
33
|
-
source?: string;
|
|
34
|
-
driver?: string;
|
|
35
|
-
target?: string;
|
|
36
|
-
pathPrefix?: string;
|
|
37
|
-
limit?: number;
|
|
38
|
-
offset?: number;
|
|
39
|
-
}
|
|
40
|
-
export interface ListObjectsResult {
|
|
41
|
-
objects: StorageObject[];
|
|
42
|
-
}
|
|
43
|
-
export interface UploadObjectOptions {
|
|
44
|
-
workspace?: string;
|
|
45
|
-
path?: string;
|
|
46
|
-
source?: string;
|
|
47
|
-
runtimeId?: string;
|
|
48
|
-
driver?: string;
|
|
49
|
-
target?: string;
|
|
50
|
-
filename?: string;
|
|
51
|
-
}
|
|
52
|
-
export interface UploadObjectResult {
|
|
53
|
-
id: string;
|
|
54
|
-
workspace: string;
|
|
55
|
-
logicalPath: string;
|
|
56
|
-
objectKey: string;
|
|
57
|
-
filename: string;
|
|
58
|
-
sizeBytes: number;
|
|
59
|
-
contentType: string;
|
|
60
|
-
expiresAt: string | null;
|
|
61
|
-
}
|
|
62
|
-
export interface StorageBrowseOptions {
|
|
63
|
-
prefix?: string;
|
|
64
|
-
cursor?: string;
|
|
65
|
-
limit?: number;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Client for interacting with workspace storage.
|
|
69
|
-
*/
|
|
70
|
-
export declare class StorageClient {
|
|
71
|
-
private readonly baseUrl;
|
|
72
|
-
private readonly workspace;
|
|
73
|
-
private readonly apiKey?;
|
|
74
|
-
private readonly sessionId?;
|
|
75
|
-
constructor(baseUrl: string, workspace: string, apiKey?: string | undefined, sessionId?: string | undefined);
|
|
76
|
-
/**
|
|
77
|
-
* Get headers for API requests.
|
|
78
|
-
*/
|
|
79
|
-
private getHeaders;
|
|
80
|
-
/**
|
|
81
|
-
* Clone this client for another workspace while preserving auth/session binding.
|
|
82
|
-
*/
|
|
83
|
-
forWorkspace(workspace: string): StorageClient;
|
|
84
|
-
/**
|
|
85
|
-
* Build URL for object-catalog endpoints.
|
|
86
|
-
*/
|
|
87
|
-
private buildObjectsUrl;
|
|
88
|
-
private resolveWorkspace;
|
|
89
|
-
private encodePath;
|
|
90
|
-
private buildWorkspaceUrl;
|
|
91
|
-
private toBlob;
|
|
92
|
-
/**
|
|
93
|
-
* Upload a file to workspace storage.
|
|
94
|
-
*
|
|
95
|
-
* @param filePath - Logical path in storage (e.g., "uploads/document.pdf")
|
|
96
|
-
* @param data - File data as Buffer, Uint8Array, or Blob
|
|
97
|
-
* @param filename - Optional filename (defaults to last part of filePath)
|
|
98
|
-
*/
|
|
99
|
-
upload(filePath: string, data: Buffer | Uint8Array | Blob, filename?: string): Promise<UploadResult>;
|
|
100
|
-
/**
|
|
101
|
-
* Upload a file and register it in the storage object catalog.
|
|
102
|
-
*
|
|
103
|
-
* @param data - File data as Buffer, Uint8Array, or Blob
|
|
104
|
-
* @param options - Metadata and upload options
|
|
105
|
-
*/
|
|
106
|
-
uploadObject(data: Buffer | Uint8Array | Blob, options?: UploadObjectOptions): Promise<UploadObjectResult>;
|
|
107
|
-
/**
|
|
108
|
-
* Get a file by logical path as raw bytes.
|
|
109
|
-
*/
|
|
110
|
-
get(filePath: string): Promise<Buffer>;
|
|
111
|
-
/**
|
|
112
|
-
* Get a presigned URL for direct download by logical path.
|
|
113
|
-
*/
|
|
114
|
-
getDownloadUrl(filePath: string): Promise<string>;
|
|
115
|
-
/**
|
|
116
|
-
* Browse files/folders by logical prefix (hierarchical listing with cursor pagination).
|
|
117
|
-
*/
|
|
118
|
-
browse(options?: StorageBrowseOptions): Promise<StorageBrowseResult>;
|
|
119
|
-
/**
|
|
120
|
-
* Read a UTF-8 text preview by logical path.
|
|
121
|
-
*/
|
|
122
|
-
read(filePath: string, maxBytes?: number): Promise<StorageReadResult>;
|
|
123
|
-
/**
|
|
124
|
-
* List object metadata from the storage catalog.
|
|
125
|
-
*/
|
|
126
|
-
listObjects(options?: ListObjectsOptions): Promise<StorageObject[]>;
|
|
127
|
-
/**
|
|
128
|
-
* Download an object by catalog ID.
|
|
129
|
-
*/
|
|
130
|
-
downloadObject(id: string): Promise<Buffer>;
|
|
131
|
-
/**
|
|
132
|
-
* Get a presigned URL for direct download by object ID.
|
|
133
|
-
*/
|
|
134
|
-
getObjectDownloadUrl(id: string): Promise<string>;
|
|
135
|
-
/**
|
|
136
|
-
* Get all downloads as a ZIP file.
|
|
137
|
-
*/
|
|
138
|
-
getDownloadsZip(): Promise<Buffer>;
|
|
139
|
-
/**
|
|
140
|
-
* Delete a file by logical path.
|
|
141
|
-
*/
|
|
142
|
-
delete(filePath: string): Promise<void>;
|
|
143
|
-
/**
|
|
144
|
-
* Delete an object by catalog ID.
|
|
145
|
-
*/
|
|
146
|
-
deleteObject(id: string): Promise<void>;
|
|
147
|
-
/**
|
|
148
|
-
* Delete all files for this workspace.
|
|
149
|
-
*/
|
|
150
|
-
deleteAll(): Promise<number>;
|
|
151
|
-
}
|
package/dist/storage/client.js
DELETED
|
@@ -1,329 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// Storage Client - SDK client for R2 storage operations
|
|
3
|
-
// ============================================================================
|
|
4
|
-
import { StorageBrowseResponseSchema, StorageReadResponseSchema, } from '../contracts/storage.js';
|
|
5
|
-
import { SDK_VERSION } from '../version.js';
|
|
6
|
-
import { fetchWithTimeout, parseJsonResponse, LONG_TIMEOUT_MS } from '../utils/http.js';
|
|
7
|
-
import { stripTrailingSlash } from '../utils/url.js';
|
|
8
|
-
// ============================================================================
|
|
9
|
-
// Storage Client
|
|
10
|
-
// ============================================================================
|
|
11
|
-
/**
|
|
12
|
-
* Client for interacting with workspace storage.
|
|
13
|
-
*/
|
|
14
|
-
export class StorageClient {
|
|
15
|
-
baseUrl;
|
|
16
|
-
workspace;
|
|
17
|
-
apiKey;
|
|
18
|
-
sessionId;
|
|
19
|
-
constructor(baseUrl, workspace, apiKey, sessionId) {
|
|
20
|
-
this.baseUrl = baseUrl;
|
|
21
|
-
this.workspace = workspace;
|
|
22
|
-
this.apiKey = apiKey;
|
|
23
|
-
this.sessionId = sessionId;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Get headers for API requests.
|
|
27
|
-
*/
|
|
28
|
-
getHeaders(contentType) {
|
|
29
|
-
const headers = {
|
|
30
|
-
'x-sdk-version': SDK_VERSION,
|
|
31
|
-
};
|
|
32
|
-
if (this.apiKey) {
|
|
33
|
-
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
34
|
-
}
|
|
35
|
-
if (this.sessionId) {
|
|
36
|
-
headers['x-session-id'] = this.sessionId;
|
|
37
|
-
}
|
|
38
|
-
if (contentType) {
|
|
39
|
-
headers['Content-Type'] = contentType;
|
|
40
|
-
}
|
|
41
|
-
return headers;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Clone this client for another workspace while preserving auth/session binding.
|
|
45
|
-
*/
|
|
46
|
-
forWorkspace(workspace) {
|
|
47
|
-
return new StorageClient(this.baseUrl, workspace, this.apiKey, this.sessionId);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Build URL for object-catalog endpoints.
|
|
51
|
-
*/
|
|
52
|
-
buildObjectsUrl(path = '') {
|
|
53
|
-
const base = stripTrailingSlash(this.baseUrl);
|
|
54
|
-
return `${base}/storage/objects${path}`;
|
|
55
|
-
}
|
|
56
|
-
resolveWorkspace(workspace) {
|
|
57
|
-
const value = (workspace || this.workspace).trim();
|
|
58
|
-
if (!value) {
|
|
59
|
-
throw new Error('Workspace is required');
|
|
60
|
-
}
|
|
61
|
-
return value;
|
|
62
|
-
}
|
|
63
|
-
encodePath(filePath) {
|
|
64
|
-
return filePath
|
|
65
|
-
.split('/')
|
|
66
|
-
.filter((segment) => segment.length > 0)
|
|
67
|
-
.map((segment) => encodeURIComponent(segment))
|
|
68
|
-
.join('/');
|
|
69
|
-
}
|
|
70
|
-
buildWorkspaceUrl(path, workspace, params = {}) {
|
|
71
|
-
const query = new URLSearchParams({ workspace });
|
|
72
|
-
for (const [key, value] of Object.entries(params)) {
|
|
73
|
-
if (value === undefined || value === null || value === '')
|
|
74
|
-
continue;
|
|
75
|
-
query.set(key, String(value));
|
|
76
|
-
}
|
|
77
|
-
return this.buildObjectsUrl(`${path}?${query.toString()}`);
|
|
78
|
-
}
|
|
79
|
-
toBlob(data, contentType) {
|
|
80
|
-
if (data instanceof Blob)
|
|
81
|
-
return data;
|
|
82
|
-
const copy = new Uint8Array(data);
|
|
83
|
-
return new Blob([copy], contentType ? { type: contentType } : undefined);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Upload a file to workspace storage.
|
|
87
|
-
*
|
|
88
|
-
* @param filePath - Logical path in storage (e.g., "uploads/document.pdf")
|
|
89
|
-
* @param data - File data as Buffer, Uint8Array, or Blob
|
|
90
|
-
* @param filename - Optional filename (defaults to last part of filePath)
|
|
91
|
-
*/
|
|
92
|
-
async upload(filePath, data, filename) {
|
|
93
|
-
const workspace = this.resolveWorkspace();
|
|
94
|
-
const uploaded = await this.uploadObject(data, {
|
|
95
|
-
workspace,
|
|
96
|
-
path: filePath,
|
|
97
|
-
source: 'upload',
|
|
98
|
-
filename,
|
|
99
|
-
});
|
|
100
|
-
return {
|
|
101
|
-
success: true,
|
|
102
|
-
key: uploaded.objectKey,
|
|
103
|
-
filename: uploaded.filename,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Upload a file and register it in the storage object catalog.
|
|
108
|
-
*
|
|
109
|
-
* @param data - File data as Buffer, Uint8Array, or Blob
|
|
110
|
-
* @param options - Metadata and upload options
|
|
111
|
-
*/
|
|
112
|
-
async uploadObject(data, options = {}) {
|
|
113
|
-
const formData = new FormData();
|
|
114
|
-
const workspace = this.resolveWorkspace(options.workspace);
|
|
115
|
-
const logicalPath = options.path?.trim() || undefined;
|
|
116
|
-
const source = options.source?.trim() || 'upload';
|
|
117
|
-
const filename = options.filename?.trim() ||
|
|
118
|
-
(logicalPath ? logicalPath.split('/').pop() : null) ||
|
|
119
|
-
'file';
|
|
120
|
-
// Multipart parsing is sequential; send metadata fields before file.
|
|
121
|
-
formData.append('workspace', workspace);
|
|
122
|
-
formData.append('source', source);
|
|
123
|
-
if (logicalPath)
|
|
124
|
-
formData.append('path', logicalPath);
|
|
125
|
-
if (options.runtimeId)
|
|
126
|
-
formData.append('runtimeId', options.runtimeId);
|
|
127
|
-
if (options.driver)
|
|
128
|
-
formData.append('driver', options.driver);
|
|
129
|
-
if (options.target)
|
|
130
|
-
formData.append('target', options.target);
|
|
131
|
-
formData.append('file', this.toBlob(data), filename);
|
|
132
|
-
const response = await fetchWithTimeout(this.buildObjectsUrl(''), {
|
|
133
|
-
method: 'POST',
|
|
134
|
-
headers: this.getHeaders(),
|
|
135
|
-
body: formData,
|
|
136
|
-
}, LONG_TIMEOUT_MS);
|
|
137
|
-
if (!response.ok) {
|
|
138
|
-
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
139
|
-
throw new Error(`Upload object failed: ${error.error || response.statusText}`);
|
|
140
|
-
}
|
|
141
|
-
return parseJsonResponse(response, 'Upload storage object');
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Get a file by logical path as raw bytes.
|
|
145
|
-
*/
|
|
146
|
-
async get(filePath) {
|
|
147
|
-
const workspace = this.resolveWorkspace();
|
|
148
|
-
const encodedPath = this.encodePath(filePath);
|
|
149
|
-
const response = await fetchWithTimeout(this.buildWorkspaceUrl(`/by-path/get/${encodedPath}`, workspace), {
|
|
150
|
-
method: 'GET',
|
|
151
|
-
headers: this.getHeaders(),
|
|
152
|
-
}, LONG_TIMEOUT_MS);
|
|
153
|
-
if (!response.ok) {
|
|
154
|
-
throw new Error(`Get failed: ${response.statusText}`);
|
|
155
|
-
}
|
|
156
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
157
|
-
return Buffer.from(arrayBuffer);
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Get a presigned URL for direct download by logical path.
|
|
161
|
-
*/
|
|
162
|
-
async getDownloadUrl(filePath) {
|
|
163
|
-
const workspace = this.resolveWorkspace();
|
|
164
|
-
const encodedPath = this.encodePath(filePath);
|
|
165
|
-
const response = await fetchWithTimeout(this.buildWorkspaceUrl(`/by-path/presign-download/${encodedPath}`, workspace), {
|
|
166
|
-
method: 'GET',
|
|
167
|
-
headers: this.getHeaders(),
|
|
168
|
-
});
|
|
169
|
-
if (!response.ok) {
|
|
170
|
-
throw new Error(`Failed to get download URL: ${response.statusText}`);
|
|
171
|
-
}
|
|
172
|
-
const { url } = await parseJsonResponse(response, 'Get download URL');
|
|
173
|
-
return url;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Browse files/folders by logical prefix (hierarchical listing with cursor pagination).
|
|
177
|
-
*/
|
|
178
|
-
async browse(options = {}) {
|
|
179
|
-
const workspace = this.resolveWorkspace();
|
|
180
|
-
const response = await fetchWithTimeout(this.buildWorkspaceUrl('/by-path/browse', workspace, {
|
|
181
|
-
prefix: options.prefix,
|
|
182
|
-
cursor: options.cursor,
|
|
183
|
-
limit: options.limit,
|
|
184
|
-
}), {
|
|
185
|
-
method: 'GET',
|
|
186
|
-
headers: this.getHeaders(),
|
|
187
|
-
});
|
|
188
|
-
if (!response.ok) {
|
|
189
|
-
throw new Error(`Browse failed: ${response.statusText}`);
|
|
190
|
-
}
|
|
191
|
-
const data = await parseJsonResponse(response, 'Browse files');
|
|
192
|
-
return StorageBrowseResponseSchema.parse(data);
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Read a UTF-8 text preview by logical path.
|
|
196
|
-
*/
|
|
197
|
-
async read(filePath, maxBytes) {
|
|
198
|
-
const workspace = this.resolveWorkspace();
|
|
199
|
-
const encodedPath = this.encodePath(filePath);
|
|
200
|
-
const response = await fetchWithTimeout(this.buildWorkspaceUrl(`/by-path/read/${encodedPath}`, workspace, {
|
|
201
|
-
maxBytes,
|
|
202
|
-
}), {
|
|
203
|
-
method: 'GET',
|
|
204
|
-
headers: this.getHeaders(),
|
|
205
|
-
});
|
|
206
|
-
if (!response.ok) {
|
|
207
|
-
throw new Error(`Read failed: ${response.statusText}`);
|
|
208
|
-
}
|
|
209
|
-
const data = await parseJsonResponse(response, 'Read file text preview');
|
|
210
|
-
return StorageReadResponseSchema.parse(data);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* List object metadata from the storage catalog.
|
|
214
|
-
*/
|
|
215
|
-
async listObjects(options = {}) {
|
|
216
|
-
const workspace = this.resolveWorkspace(options.workspace);
|
|
217
|
-
const params = new URLSearchParams({ workspace });
|
|
218
|
-
if (options.runtimeId)
|
|
219
|
-
params.set('runtimeId', options.runtimeId);
|
|
220
|
-
if (options.source)
|
|
221
|
-
params.set('source', options.source);
|
|
222
|
-
if (options.driver)
|
|
223
|
-
params.set('driver', options.driver);
|
|
224
|
-
if (options.target)
|
|
225
|
-
params.set('target', options.target);
|
|
226
|
-
if (options.pathPrefix)
|
|
227
|
-
params.set('pathPrefix', options.pathPrefix);
|
|
228
|
-
if (typeof options.limit === 'number')
|
|
229
|
-
params.set('limit', String(options.limit));
|
|
230
|
-
if (typeof options.offset === 'number')
|
|
231
|
-
params.set('offset', String(options.offset));
|
|
232
|
-
const response = await fetchWithTimeout(this.buildObjectsUrl(`?${params.toString()}`), {
|
|
233
|
-
method: 'GET',
|
|
234
|
-
headers: this.getHeaders(),
|
|
235
|
-
});
|
|
236
|
-
if (!response.ok) {
|
|
237
|
-
throw new Error(`List objects failed: ${response.statusText}`);
|
|
238
|
-
}
|
|
239
|
-
const { objects } = await parseJsonResponse(response, 'List storage objects');
|
|
240
|
-
return objects;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Download an object by catalog ID.
|
|
244
|
-
*/
|
|
245
|
-
async downloadObject(id) {
|
|
246
|
-
const response = await fetchWithTimeout(this.buildObjectsUrl(`/${encodeURIComponent(id)}/download`), {
|
|
247
|
-
method: 'GET',
|
|
248
|
-
headers: this.getHeaders(),
|
|
249
|
-
}, LONG_TIMEOUT_MS);
|
|
250
|
-
if (!response.ok) {
|
|
251
|
-
throw new Error(`Object download failed: ${response.statusText}`);
|
|
252
|
-
}
|
|
253
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
254
|
-
return Buffer.from(arrayBuffer);
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Get a presigned URL for direct download by object ID.
|
|
258
|
-
*/
|
|
259
|
-
async getObjectDownloadUrl(id) {
|
|
260
|
-
const response = await fetchWithTimeout(this.buildObjectsUrl(`/${encodeURIComponent(id)}/presign-download`), {
|
|
261
|
-
method: 'GET',
|
|
262
|
-
headers: this.getHeaders(),
|
|
263
|
-
});
|
|
264
|
-
if (!response.ok) {
|
|
265
|
-
throw new Error(`Failed to get object download URL: ${response.statusText}`);
|
|
266
|
-
}
|
|
267
|
-
const { url } = await parseJsonResponse(response, 'Get object download URL');
|
|
268
|
-
return url;
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Get all downloads as a ZIP file.
|
|
272
|
-
*/
|
|
273
|
-
async getDownloadsZip() {
|
|
274
|
-
const workspace = this.resolveWorkspace();
|
|
275
|
-
const response = await fetchWithTimeout(this.buildWorkspaceUrl('/downloads', workspace), {
|
|
276
|
-
method: 'GET',
|
|
277
|
-
headers: this.getHeaders(),
|
|
278
|
-
}, LONG_TIMEOUT_MS);
|
|
279
|
-
if (!response.ok) {
|
|
280
|
-
if (response.status === 404) {
|
|
281
|
-
throw new Error('No downloads found');
|
|
282
|
-
}
|
|
283
|
-
throw new Error(`Failed to get downloads: ${response.statusText}`);
|
|
284
|
-
}
|
|
285
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
286
|
-
return Buffer.from(arrayBuffer);
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Delete a file by logical path.
|
|
290
|
-
*/
|
|
291
|
-
async delete(filePath) {
|
|
292
|
-
const workspace = this.resolveWorkspace();
|
|
293
|
-
const encodedPath = this.encodePath(filePath);
|
|
294
|
-
const response = await fetchWithTimeout(this.buildWorkspaceUrl(`/by-path/${encodedPath}`, workspace), {
|
|
295
|
-
method: 'DELETE',
|
|
296
|
-
headers: this.getHeaders(),
|
|
297
|
-
});
|
|
298
|
-
if (!response.ok) {
|
|
299
|
-
throw new Error(`Delete failed: ${response.statusText}`);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Delete an object by catalog ID.
|
|
304
|
-
*/
|
|
305
|
-
async deleteObject(id) {
|
|
306
|
-
const response = await fetchWithTimeout(this.buildObjectsUrl(`/${encodeURIComponent(id)}`), {
|
|
307
|
-
method: 'DELETE',
|
|
308
|
-
headers: this.getHeaders(),
|
|
309
|
-
});
|
|
310
|
-
if (!response.ok) {
|
|
311
|
-
throw new Error(`Delete object failed: ${response.statusText}`);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Delete all files for this workspace.
|
|
316
|
-
*/
|
|
317
|
-
async deleteAll() {
|
|
318
|
-
const workspace = this.resolveWorkspace();
|
|
319
|
-
const response = await fetchWithTimeout(this.buildWorkspaceUrl('', workspace), {
|
|
320
|
-
method: 'DELETE',
|
|
321
|
-
headers: this.getHeaders(),
|
|
322
|
-
});
|
|
323
|
-
if (!response.ok) {
|
|
324
|
-
throw new Error(`Delete all failed: ${response.statusText}`);
|
|
325
|
-
}
|
|
326
|
-
const result = await parseJsonResponse(response, 'Delete all');
|
|
327
|
-
return result.deletedCount;
|
|
328
|
-
}
|
|
329
|
-
}
|
package/dist/storage/index.d.ts
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export { StorageClient } from './client.js';
|
|
2
|
-
export type { StorageBrowseOptions, StorageBrowseFile, StorageBrowseResult, StorageReadResult, UploadResult, PresignedUrlResult, StorageObject, ListObjectsOptions, ListObjectsResult, UploadObjectOptions, UploadObjectResult, } from './client.js';
|
package/dist/storage/index.js
DELETED
package/dist/telemetry.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Initialize the isolated Sentry client for SDK telemetry.
|
|
3
|
-
* Idempotent — safe to call multiple times (e.g. from multiple Bctrl instances).
|
|
4
|
-
* Uses a separate client instance to avoid conflicts with user's Sentry.
|
|
5
|
-
*/
|
|
6
|
-
export declare function init(): void;
|
|
7
|
-
/**
|
|
8
|
-
* Disable telemetry. Once called, no events will be sent.
|
|
9
|
-
*/
|
|
10
|
-
export declare function disable(): void;
|
|
11
|
-
/**
|
|
12
|
-
* Capture an error and send it to Sentry (if telemetry is enabled).
|
|
13
|
-
*/
|
|
14
|
-
export declare function captureError(err: Error, context?: Record<string, unknown>): void;
|
|
15
|
-
/**
|
|
16
|
-
* Check if telemetry is currently enabled.
|
|
17
|
-
*/
|
|
18
|
-
export declare function isEnabled(): boolean;
|
package/dist/telemetry.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// SDK Telemetry - Isolated Sentry client for error tracking
|
|
3
|
-
// ============================================================================
|
|
4
|
-
//
|
|
5
|
-
// Uses a dedicated Sentry client that won't conflict with the user's own Sentry.
|
|
6
|
-
// Respects the `telemetry: false` opt-out in BctrlOptions.
|
|
7
|
-
// Strips auth headers and sensitive data before sending events.
|
|
8
|
-
// ============================================================================
|
|
9
|
-
import { NodeClient, Scope, makeNodeTransport, defaultStackParser, } from '@sentry/node';
|
|
10
|
-
import { SDK_VERSION } from './version.js';
|
|
11
|
-
let sentryClient;
|
|
12
|
-
let enabled = true;
|
|
13
|
-
function isRemoteTelemetryEnabled() {
|
|
14
|
-
return process.env.NODE_ENV !== 'development' || process.env.OBS_REMOTE === 'true';
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Initialize the isolated Sentry client for SDK telemetry.
|
|
18
|
-
* Idempotent — safe to call multiple times (e.g. from multiple Bctrl instances).
|
|
19
|
-
* Uses a separate client instance to avoid conflicts with user's Sentry.
|
|
20
|
-
*/
|
|
21
|
-
export function init() {
|
|
22
|
-
if (sentryClient)
|
|
23
|
-
return;
|
|
24
|
-
const dsn = process.env.SENTRY_DSN_SDK;
|
|
25
|
-
if (!dsn || !enabled || !isRemoteTelemetryEnabled())
|
|
26
|
-
return;
|
|
27
|
-
sentryClient = new NodeClient({
|
|
28
|
-
dsn,
|
|
29
|
-
release: `bctrl-sdk@${SDK_VERSION}`,
|
|
30
|
-
environment: process.env.NODE_ENV || 'production',
|
|
31
|
-
transport: makeNodeTransport,
|
|
32
|
-
stackParser: defaultStackParser,
|
|
33
|
-
integrations: [],
|
|
34
|
-
beforeSend(event) {
|
|
35
|
-
// Strip sensitive headers and data
|
|
36
|
-
if (event.request?.headers) {
|
|
37
|
-
delete event.request.headers['authorization'];
|
|
38
|
-
delete event.request.headers['x-internal-secret'];
|
|
39
|
-
delete event.request.headers['cookie'];
|
|
40
|
-
}
|
|
41
|
-
// Strip any sensitive data from breadcrumbs
|
|
42
|
-
if (event.breadcrumbs) {
|
|
43
|
-
for (const breadcrumb of event.breadcrumbs) {
|
|
44
|
-
if (breadcrumb.data) {
|
|
45
|
-
delete breadcrumb.data['authorization'];
|
|
46
|
-
delete breadcrumb.data['apiKey'];
|
|
47
|
-
delete breadcrumb.data['password'];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// Tag every event with SDK version
|
|
52
|
-
event.tags = { ...event.tags, sdkVersion: SDK_VERSION };
|
|
53
|
-
return event;
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Disable telemetry. Once called, no events will be sent.
|
|
59
|
-
*/
|
|
60
|
-
export function disable() {
|
|
61
|
-
enabled = false;
|
|
62
|
-
if (sentryClient) {
|
|
63
|
-
sentryClient.close();
|
|
64
|
-
sentryClient = undefined;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Capture an error and send it to Sentry (if telemetry is enabled).
|
|
69
|
-
*/
|
|
70
|
-
export function captureError(err, context) {
|
|
71
|
-
if (!enabled || !sentryClient)
|
|
72
|
-
return;
|
|
73
|
-
const scope = new Scope();
|
|
74
|
-
scope.setClient(sentryClient);
|
|
75
|
-
if (context) {
|
|
76
|
-
scope.setContext('bctrl', context);
|
|
77
|
-
if (context.endpoint)
|
|
78
|
-
scope.setTag('endpoint', String(context.endpoint));
|
|
79
|
-
if (context.method)
|
|
80
|
-
scope.setTag('method', String(context.method));
|
|
81
|
-
if (context.statusCode)
|
|
82
|
-
scope.setTag('statusCode', String(context.statusCode));
|
|
83
|
-
if (context.errorCode)
|
|
84
|
-
scope.setTag('errorCode', String(context.errorCode));
|
|
85
|
-
}
|
|
86
|
-
scope.captureException(err);
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Check if telemetry is currently enabled.
|
|
90
|
-
*/
|
|
91
|
-
export function isEnabled() {
|
|
92
|
-
return enabled && sentryClient !== undefined;
|
|
93
|
-
}
|
package/dist/updates/client.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { UpdateEvent } from '../contracts/public-api.js';
|
|
2
|
-
export declare class UpdatesClient {
|
|
3
|
-
private readonly baseUrl;
|
|
4
|
-
private readonly apiKey;
|
|
5
|
-
constructor(baseUrl: string, apiKey: string);
|
|
6
|
-
stream(signal?: AbortSignal): AsyncGenerator<UpdateEvent, void, void>;
|
|
7
|
-
private issueToken;
|
|
8
|
-
}
|