@beacon-build/sdk 2.17.1 → 3.0.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/CHANGELOG.md +33 -0
- package/dist/clients/billing-requests.types.d.ts +48 -0
- package/dist/clients/billing-requests.types.d.ts.map +1 -0
- package/dist/clients/billing-requests.types.js +2 -0
- package/dist/clients/billing-requests.types.js.map +1 -0
- package/dist/clients/billing-seat-fees.types.d.ts +105 -0
- package/dist/clients/billing-seat-fees.types.d.ts.map +1 -0
- package/dist/clients/billing-seat-fees.types.js +2 -0
- package/dist/clients/billing-seat-fees.types.js.map +1 -0
- package/dist/clients/billing.client.d.ts +121 -0
- package/dist/clients/billing.client.d.ts.map +1 -0
- package/dist/clients/billing.client.js +116 -0
- package/dist/clients/billing.client.js.map +1 -0
- package/dist/clients/capture.client.d.ts +5 -1
- package/dist/clients/capture.client.d.ts.map +1 -1
- package/dist/clients/capture.client.js.map +1 -1
- package/dist/factory/agent-sdk.d.ts +5 -2
- package/dist/factory/agent-sdk.d.ts.map +1 -1
- package/dist/factory/agent-sdk.js +2 -1
- package/dist/factory/agent-sdk.js.map +1 -1
- package/dist/factory/tenant-agent-sdk.d.ts +27 -0
- package/dist/factory/tenant-agent-sdk.d.ts.map +1 -0
- package/dist/factory/tenant-agent-sdk.js +136 -0
- package/dist/factory/tenant-agent-sdk.js.map +1 -0
- package/dist/factory/user-sdk.d.ts +11 -0
- package/dist/factory/user-sdk.d.ts.map +1 -1
- package/dist/factory/user-sdk.js +16 -0
- package/dist/factory/user-sdk.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/manifest.negative-list.d.ts.map +1 -1
- package/dist/manifest.negative-list.js +11 -1
- package/dist/manifest.negative-list.js.map +1 -1
- package/dist/manifest.public-entries.d.ts +1 -1
- package/dist/manifest.public-entries.d.ts.map +1 -1
- package/dist/manifest.public-entries.js +3 -1
- package/dist/manifest.public-entries.js.map +1 -1
- package/dist/transport/errors.d.ts +7 -1
- package/dist/transport/errors.d.ts.map +1 -1
- package/dist/transport/errors.js +6 -1
- package/dist/transport/errors.js.map +1 -1
- package/dist/transport/http-client.d.ts +14 -2
- package/dist/transport/http-client.d.ts.map +1 -1
- package/dist/transport/http-client.js +24 -10
- package/dist/transport/http-client.js.map +1 -1
- package/dist/transport/request-origin.d.ts +44 -0
- package/dist/transport/request-origin.d.ts.map +1 -0
- package/dist/transport/request-origin.js +99 -0
- package/dist/transport/request-origin.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* B987 (F712 AC-7, D1) — `createTenantAgentClient`: an Agent SDK authenticated with a TENANT
|
|
3
|
+
* credential (an owner-minted token, or a tenant API key). `services/api` never accepts the
|
|
4
|
+
* AS-issued token directly, so this client performs, transparently:
|
|
5
|
+
*
|
|
6
|
+
* api_key: client_credentials at POST /api/oauth/token (client_secret_basic) → AS token
|
|
7
|
+
* minted_token: the AS token is the credential itself
|
|
8
|
+
* both: POST /api/v1/oauth/token-exchange → internal agent token (cached until shortly
|
|
9
|
+
* before its expiry), re-obtained on expiry or on a 401 (HttpClient's
|
|
10
|
+
* onUnauthorized hook — one retry, single-flight).
|
|
11
|
+
*
|
|
12
|
+
* The secret/token never leaves this module except in the Authorization header of those two
|
|
13
|
+
* requests. Raw fetch is deliberate here: these are the bootstrap calls that PRODUCE the bearer
|
|
14
|
+
* every other SDK method uses (same rationale as the mcp-core OAuth client).
|
|
15
|
+
*/
|
|
16
|
+
import { SdkError, statusToSdkCode } from '../transport/errors.js';
|
|
17
|
+
import { createAgentClient } from './agent-sdk.js';
|
|
18
|
+
// Portable (browser + node) base64 helpers — the SDK has no Node-only dependency.
|
|
19
|
+
function base64(value) {
|
|
20
|
+
return btoa(value);
|
|
21
|
+
}
|
|
22
|
+
function base64UrlDecode(value) {
|
|
23
|
+
const b64 = value.replace(/-/g, '+').replace(/_/g, '/');
|
|
24
|
+
return atob(b64 + '='.repeat((4 - (b64.length % 4)) % 4));
|
|
25
|
+
}
|
|
26
|
+
function jwtExpMs(token) {
|
|
27
|
+
try {
|
|
28
|
+
const payload = JSON.parse(base64UrlDecode(token.split('.')[1] ?? ''));
|
|
29
|
+
return typeof payload.exp === 'number' ? payload.exp * 1000 : 0;
|
|
30
|
+
}
|
|
31
|
+
catch (_err) {
|
|
32
|
+
// not a decodable JWT — no expiry known, treated as already expired (re-obtain)
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function failFrom(res, what) {
|
|
37
|
+
let code;
|
|
38
|
+
try {
|
|
39
|
+
const body = (await res.json());
|
|
40
|
+
code = body.code ?? body.error;
|
|
41
|
+
}
|
|
42
|
+
catch (_err) {
|
|
43
|
+
// non-JSON error body — classify by status only
|
|
44
|
+
}
|
|
45
|
+
throw new SdkError(statusToSdkCode(res.status), `${what} failed (${res.status})`, res.status, code);
|
|
46
|
+
}
|
|
47
|
+
export function createTenantAgentTokenProvider(config) {
|
|
48
|
+
const doFetch = config.fetch ?? fetch;
|
|
49
|
+
const skewMs = (config.refreshSkewSeconds ?? 30) * 1000;
|
|
50
|
+
const base = config.baseUrl.replace(/\/+$/, '');
|
|
51
|
+
let asToken;
|
|
52
|
+
let internal;
|
|
53
|
+
let inFlight;
|
|
54
|
+
const fresh = (c) => !!c && c.expiresAtMs - skewMs > Date.now();
|
|
55
|
+
async function obtainAsToken() {
|
|
56
|
+
if (config.credential.kind === 'minted_token')
|
|
57
|
+
return config.credential.token;
|
|
58
|
+
if (fresh(asToken))
|
|
59
|
+
return asToken.token;
|
|
60
|
+
const { clientId, clientSecret } = config.credential;
|
|
61
|
+
const basic = base64(`${clientId}:${clientSecret}`);
|
|
62
|
+
let res;
|
|
63
|
+
try {
|
|
64
|
+
res = await doFetch(`${base}/api/oauth/token`, {
|
|
65
|
+
method: 'POST',
|
|
66
|
+
headers: {
|
|
67
|
+
authorization: `Basic ${basic}`,
|
|
68
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
69
|
+
},
|
|
70
|
+
body: 'grant_type=client_credentials',
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
throw new SdkError('network_error', `token request failed: ${String(err)}`);
|
|
75
|
+
}
|
|
76
|
+
if (!res.ok)
|
|
77
|
+
return failFrom(res, 'client_credentials token request');
|
|
78
|
+
const body = (await res.json());
|
|
79
|
+
asToken = {
|
|
80
|
+
token: body.access_token,
|
|
81
|
+
expiresAtMs: body.expires_in
|
|
82
|
+
? Date.now() + body.expires_in * 1000
|
|
83
|
+
: jwtExpMs(body.access_token),
|
|
84
|
+
};
|
|
85
|
+
return asToken.token;
|
|
86
|
+
}
|
|
87
|
+
async function exchange() {
|
|
88
|
+
const federated = await obtainAsToken();
|
|
89
|
+
let res;
|
|
90
|
+
try {
|
|
91
|
+
res = await doFetch(`${base}/api/v1/oauth/token-exchange`, {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers: { authorization: `Bearer ${federated}` },
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
throw new SdkError('network_error', `token exchange failed: ${String(err)}`);
|
|
98
|
+
}
|
|
99
|
+
if (!res.ok)
|
|
100
|
+
return failFrom(res, 'token exchange');
|
|
101
|
+
const body = (await res.json());
|
|
102
|
+
internal = { token: body.data.token, expiresAtMs: Date.parse(body.data.expiresAt) };
|
|
103
|
+
return internal.token;
|
|
104
|
+
}
|
|
105
|
+
function singleFlight() {
|
|
106
|
+
if (!inFlight) {
|
|
107
|
+
inFlight = exchange().finally(() => {
|
|
108
|
+
inFlight = undefined;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return inFlight;
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
async getToken() {
|
|
115
|
+
if (fresh(internal))
|
|
116
|
+
return internal.token;
|
|
117
|
+
return singleFlight();
|
|
118
|
+
},
|
|
119
|
+
async refresh() {
|
|
120
|
+
internal = undefined;
|
|
121
|
+
asToken = undefined;
|
|
122
|
+
return singleFlight();
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** An Agent SDK authenticated with a tenant credential (exchange + refresh transparent). */
|
|
127
|
+
export function createTenantAgentClient(config) {
|
|
128
|
+
const provider = createTenantAgentTokenProvider(config);
|
|
129
|
+
return createAgentClient({
|
|
130
|
+
baseUrl: config.baseUrl,
|
|
131
|
+
agentToken: () => provider.getToken(),
|
|
132
|
+
onUnauthorized: () => provider.refresh(),
|
|
133
|
+
...(config.fetch ? { fetch: config.fetch } : {}),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=tenant-agent-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-agent-sdk.js","sourceRoot":"","sources":["../../src/factory/tenant-agent-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProjectsClient } from '../clients/projects.client.js';
|
|
2
2
|
import { OnboardingClient } from '../clients/onboarding.client.js';
|
|
3
|
+
import { BillingClient } from '../clients/billing.client.js';
|
|
3
4
|
export interface UserSdkConfig {
|
|
4
5
|
/** Base URL for the beacon API (e.g. 'https://api.beacon.build') */
|
|
5
6
|
baseUrl: string;
|
|
@@ -12,6 +13,8 @@ export interface UserSdk {
|
|
|
12
13
|
projects: ProjectsClient;
|
|
13
14
|
/** Onboarding client for guided wizard draft CRUD (F640) */
|
|
14
15
|
onboarding: OnboardingClient;
|
|
16
|
+
/** FS64: pricing (F564) + subscription lifecycle (F705) */
|
|
17
|
+
billing: BillingClient;
|
|
15
18
|
}
|
|
16
19
|
/**
|
|
17
20
|
* createUserClient — creates an SDK instance authenticated with a user JWT.
|
|
@@ -19,4 +22,12 @@ export interface UserSdk {
|
|
|
19
22
|
* the caller must be a human user (F639).
|
|
20
23
|
*/
|
|
21
24
|
export declare function createUserClient(config: UserSdkConfig): UserSdk;
|
|
25
|
+
/**
|
|
26
|
+
* FS64/F564 AC-3 — unauthenticated pricing read (`GET /api/v1/pricing`, authMode 'public') so
|
|
27
|
+
* beacon-web shows exactly the values the cockpit reads. No token: the route is mounted before
|
|
28
|
+
* the auth guard.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createPublicPricingClient(config: {
|
|
31
|
+
baseUrl: string;
|
|
32
|
+
}): Pick<BillingClient, 'pricing'>;
|
|
22
33
|
//# sourceMappingURL=user-sdk.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-sdk.d.ts","sourceRoot":"","sources":["../../src/factory/user-sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"user-sdk.d.ts","sourceRoot":"","sources":["../../src/factory/user-sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,MAAM,WAAW,aAAa;IAC1B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACpD,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,OAAO;IACpB,sDAAsD;IACtD,QAAQ,EAAE,cAAc,CAAA;IACxB,4DAA4D;IAC5D,UAAU,EAAE,gBAAgB,CAAA;IAC5B,2DAA2D;IAC3D,OAAO,EAAE,aAAa,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAgB/D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAA;CAClB,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAQjC"}
|
package/dist/factory/user-sdk.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HttpClient } from '../transport/http-client.js';
|
|
2
2
|
import { ProjectsClient } from '../clients/projects.client.js';
|
|
3
3
|
import { OnboardingClient } from '../clients/onboarding.client.js';
|
|
4
|
+
import { BillingClient } from '../clients/billing.client.js';
|
|
4
5
|
/**
|
|
5
6
|
* createUserClient — creates an SDK instance authenticated with a user JWT.
|
|
6
7
|
* Used for user-scoped operations such as atomic project provisioning where
|
|
@@ -18,6 +19,21 @@ export function createUserClient(config) {
|
|
|
18
19
|
return {
|
|
19
20
|
projects: new ProjectsClient(v1Http),
|
|
20
21
|
onboarding: new OnboardingClient(v1Http),
|
|
22
|
+
billing: new BillingClient(v1Http),
|
|
21
23
|
};
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* FS64/F564 AC-3 — unauthenticated pricing read (`GET /api/v1/pricing`, authMode 'public') so
|
|
27
|
+
* beacon-web shows exactly the values the cockpit reads. No token: the route is mounted before
|
|
28
|
+
* the auth guard.
|
|
29
|
+
*/
|
|
30
|
+
export function createPublicPricingClient(config) {
|
|
31
|
+
const http = new HttpClient({
|
|
32
|
+
baseUrl: config.baseUrl,
|
|
33
|
+
basePath: '/api/v1',
|
|
34
|
+
getToken: () => '',
|
|
35
|
+
});
|
|
36
|
+
const client = new BillingClient(http);
|
|
37
|
+
return { pricing: () => client.pricing() };
|
|
38
|
+
}
|
|
23
39
|
//# sourceMappingURL=user-sdk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-sdk.js","sourceRoot":"","sources":["../../src/factory/user-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"user-sdk.js","sourceRoot":"","sources":["../../src/factory/user-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAmB5D;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAA;IAC9B,MAAM,QAAQ,GACV,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAA;IACrD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,SAAS;QACnB,QAAQ;QACR,cAAc,EAAE,MAAM,CAAC,cAAc;KACxC,CAAC,CAAA;IAEF,OAAO;QACH,QAAQ,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC;QACpC,UAAU,EAAE,IAAI,gBAAgB,CAAC,MAAM,CAAC;QACxC,OAAO,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC;KACrC,CAAA;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAEzC;IACG,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;KACrB,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAA;IACtC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAA;AAC9C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,13 +15,15 @@
|
|
|
15
15
|
* use. See that package's `index.ts` for the internal surface.
|
|
16
16
|
*/
|
|
17
17
|
export { createAgentClient, type AgentSdk, type AgentSdkConfig } from './factory/agent-sdk.js';
|
|
18
|
-
export {
|
|
18
|
+
export { createTenantAgentClient, createTenantAgentTokenProvider, type TenantCredential, type TenantAgentSdkConfig, type TenantAgentTokenProvider, } from './factory/tenant-agent-sdk.js';
|
|
19
|
+
export { createPublicPricingClient, createUserClient, type UserSdk, type UserSdkConfig, } from './factory/user-sdk.js';
|
|
19
20
|
export { createAuthClient, type AuthClient, type LoginResult, type RegisterResult, type RefreshResult, type MeResult, type InviteDetails, } from './clients/auth.client.js';
|
|
20
21
|
export { RealtimeSdkClient, type RealtimeSdkClientConfig } from './realtime/realtime.client.js';
|
|
21
22
|
export * from './index.auth-and-capture.js';
|
|
22
23
|
export { computePermissions, type Permissions, type RoleRow } from './permissions.js';
|
|
23
24
|
export { SdkError, type SdkErrorCode, statusToSdkCode, apiCodeToSdkCode, } from './transport/errors.js';
|
|
24
|
-
export { HttpClient, type HttpClientConfig } from './transport/http-client.js';
|
|
25
|
+
export { HttpClient, type HttpClientConfig, type HttpRequestOptions, } from './transport/http-client.js';
|
|
26
|
+
export { runWithBackgroundOrigin, requestOriginHeaders, withBackgroundRefetchOrigin, installBackgroundRefetchOrigin, } from './transport/request-origin.js';
|
|
25
27
|
export { SseClient, type SseStreamHandler, type SseStreamResult } from './transport/sse-client.js';
|
|
26
28
|
export { MultipartClient, type MultipartClientConfig } from './transport/multipart-client.js';
|
|
27
29
|
export { BinaryClient, type BinaryClientConfig, type BinaryDownloadResult, } from './transport/binary-client.js';
|
|
@@ -29,6 +31,9 @@ export { AgentCapabilityClient, type CapabilityCandidateDto, } from './clients/a
|
|
|
29
31
|
export { AgentControllerClient, type AgentControllerEntryDto, type AgentControllerRevokeResult, type AgentControllerPrincipalIdentity, type MainAgentValidityDto, } from './clients/agent/agent-controller.client.js';
|
|
30
32
|
export { SystemOneClient, type SystemOneClassifyRequest, type SystemOneClassifyResult, type SystemOneClassifyOk, type SystemOneClassifySkipped, type SystemOneQuestion, type SystemOneNoulQuestion, type SystemOneChoiceQuestion, type SystemOneScoreQuestion, type SystemOneAnswer, type SystemOneNoulAnswer, type SystemOneChoiceAnswer, type SystemOneScoreAnswer, type SystemOneUsage, } from './clients/agent/system-one.client.js';
|
|
31
33
|
export { ProjectsClient, type OwnerProvisionDto, type ProjectProvisionDetailsDto, type MainAgentProvisionDetailsDto, type ProvisionProjectRequestDto, type ProvisionedProjectDto, } from './clients/projects.client.js';
|
|
34
|
+
export { BillingClient, BillingEntityInactiveError, PaymentOverdueError, PaymentRequiredError, PersonalSubscriptionRequiredError, ProjectOwnerRequiredError, toTypedBillingError, type BillingStatusDto, type BillingStatusValue, type CompanyBillingStatusDto, type InactiveReasonValue, type PricingDto, type PricingInputDto, type PricingTierDto, type PricingVersionDto, type UserBillingStatusDto, } from './clients/billing.client.js';
|
|
35
|
+
export type { BillingEntityRowDto, BillingTierDto, InvoiceDto, LadderRoleDto, SeatFeePersonDto, SeatFeesDto, SeatFeesQuery, } from './clients/billing-seat-fees.types.js';
|
|
36
|
+
export type { BillableRequestsDto, BillableRequestsPersonDto, BillableRequestsQuery, ProjectRequestsDto, } from './clients/billing-requests.types.js';
|
|
32
37
|
export { OnboardingClient, type OnboardingDraftDto, type SaveOnboardingDraftDto, } from './clients/onboarding.client.js';
|
|
33
38
|
export { SDK_MANIFEST, SDK_NEGATIVE_LIST, type ManifestEntry, type ManifestNegativeEntry, type SdkAuthMode, } from './manifest.js';
|
|
34
39
|
export { TaskConfigClient } from './clients/shared/task-config.client.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE9F,OAAO,EACH,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,GAChC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACH,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,OAAO,EACZ,KAAK,aAAa,GACrB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACH,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,aAAa,GACrB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAK/F,cAAc,6BAA6B,CAAA;AAG3C,OAAO,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAGrF,OAAO,EACH,QAAQ,EACR,KAAK,YAAY,EACjB,eAAe,EACf,gBAAgB,GACnB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACH,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GAC1B,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACH,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,8BAA8B,GACjC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAClG,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAE7F,OAAO,EACH,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC5B,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACH,qBAAqB,EACrB,KAAK,sBAAsB,GAC9B,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EACH,qBAAqB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,oBAAoB,GAC5B,MAAM,4CAA4C,CAAA;AAEnD,OAAO,EACH,eAAe,EACf,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,cAAc,GACtB,MAAM,sCAAsC,CAAA;AAG7C,OAAO,EACH,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,GAC7B,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACH,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,iCAAiC,EACjC,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC5B,MAAM,6BAA6B,CAAA;AACpC,YAAY,EACR,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,GAChB,MAAM,sCAAsC,CAAA;AAC7C,YAAY,EACR,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,GACrB,MAAM,qCAAqC,CAAA;AAE5C,OAAO,EACH,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC9B,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EACH,YAAY,EACZ,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,GACnB,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAA;AAGhF,YAAY,EAER,OAAO,EACP,aAAa,EACb,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,cAAc,EAEd,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EAEvB,MAAM,EACN,UAAU,EACV,WAAW,EACX,iBAAiB,EAEjB,QAAQ,EACR,eAAe,EACf,eAAe,EAEf,OAAO,EAEP,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,EAErB,cAAc,EAEd,QAAQ,EAER,KAAK,EAEL,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAEhB,WAAW,EACX,kBAAkB,EAElB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EAEZ,eAAe,EACf,eAAe,EACf,iBAAiB,EAEjB,WAAW,EAEX,YAAY,EAEZ,UAAU,EACV,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,GACf,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
*/
|
|
17
17
|
// ── Factory functions ──────────────────────────────────────────────────────────
|
|
18
18
|
export { createAgentClient } from './factory/agent-sdk.js';
|
|
19
|
-
|
|
19
|
+
// B987: Agent SDK authenticated with a tenant credential (owner-minted token or tenant API key).
|
|
20
|
+
export { createTenantAgentClient, createTenantAgentTokenProvider, } from './factory/tenant-agent-sdk.js';
|
|
21
|
+
export { createPublicPricingClient, createUserClient, } from './factory/user-sdk.js';
|
|
20
22
|
// ── Auth client ────────────────────────────────────────────────────────────────
|
|
21
23
|
export { createAuthClient, } from './clients/auth.client.js';
|
|
22
24
|
// ── Realtime (implemented in F141) ────────────────────────────────────────────
|
|
@@ -30,7 +32,9 @@ export { computePermissions } from './permissions.js';
|
|
|
30
32
|
// ── Errors ────────────────────────────────────────────────────────────────────
|
|
31
33
|
export { SdkError, statusToSdkCode, apiCodeToSdkCode, } from './transport/errors.js';
|
|
32
34
|
// ── Transport (for advanced consumers, incl. @beacon-build/sdk-internal) ─────
|
|
33
|
-
export { HttpClient } from './transport/http-client.js';
|
|
35
|
+
export { HttpClient, } from './transport/http-client.js';
|
|
36
|
+
// C907/AC-8: background (never-billed) request-origin marking — see request-origin.ts.
|
|
37
|
+
export { runWithBackgroundOrigin, requestOriginHeaders, withBackgroundRefetchOrigin, installBackgroundRefetchOrigin, } from './transport/request-origin.js';
|
|
34
38
|
export { SseClient } from './transport/sse-client.js';
|
|
35
39
|
export { MultipartClient } from './transport/multipart-client.js';
|
|
36
40
|
// C434: needed by task-attachment-http.ts (packages/infrastructure) to fetch attachment bytes through the Ops-keyed path, same as AdminTasksClient.downloadAttachment.
|
|
@@ -43,6 +47,8 @@ export { AgentControllerClient, } from './clients/agent/agent-controller.client.
|
|
|
43
47
|
export { SystemOneClient, } from './clients/agent/system-one.client.js';
|
|
44
48
|
// F639: Atomic project provisioning
|
|
45
49
|
export { ProjectsClient, } from './clients/projects.client.js';
|
|
50
|
+
// FS64: pricing (F564) + subscription lifecycle (F705) client and typed billing errors
|
|
51
|
+
export { BillingClient, BillingEntityInactiveError, PaymentOverdueError, PaymentRequiredError, PersonalSubscriptionRequiredError, ProjectOwnerRequiredError, toTypedBillingError, } from './clients/billing.client.js';
|
|
46
52
|
// F640: Onboarding draft client
|
|
47
53
|
export { OnboardingClient, } from './clients/onboarding.client.js';
|
|
48
54
|
// ── Manifest (for drift testing) ──────────────────────────────────────────────
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,kFAAkF;AAClF,OAAO,EAAE,iBAAiB,EAAsC,MAAM,wBAAwB,CAAA;AAC9F,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,kFAAkF;AAClF,OAAO,EAAE,iBAAiB,EAAsC,MAAM,wBAAwB,CAAA;AAC9F,iGAAiG;AACjG,OAAO,EACH,uBAAuB,EACvB,8BAA8B,GAIjC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACH,yBAAyB,EACzB,gBAAgB,GAGnB,MAAM,uBAAuB,CAAA;AAE9B,kFAAkF;AAClF,OAAO,EACH,gBAAgB,GAOnB,MAAM,0BAA0B,CAAA;AAEjC,iFAAiF;AACjF,OAAO,EAAE,iBAAiB,EAAgC,MAAM,+BAA+B,CAAA;AAE/F,iFAAiF;AACjF,uFAAuF;AACvF,yEAAyE;AACzE,cAAc,6BAA6B,CAAA;AAE3C,iFAAiF;AACjF,OAAO,EAAE,kBAAkB,EAAkC,MAAM,kBAAkB,CAAA;AAErF,iFAAiF;AACjF,OAAO,EACH,QAAQ,EAER,eAAe,EACf,gBAAgB,GACnB,MAAM,uBAAuB,CAAA;AAE9B,gFAAgF;AAChF,OAAO,EACH,UAAU,GAGb,MAAM,4BAA4B,CAAA;AACnC,uFAAuF;AACvF,OAAO,EACH,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,8BAA8B,GACjC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,SAAS,EAA+C,MAAM,2BAA2B,CAAA;AAClG,OAAO,EAAE,eAAe,EAA8B,MAAM,iCAAiC,CAAA;AAC7F,uKAAuK;AACvK,OAAO,EACH,YAAY,GAGf,MAAM,8BAA8B,CAAA;AAErC,iFAAiF;AACjF,OAAO,EACH,qBAAqB,GAExB,MAAM,sCAAsC,CAAA;AAC7C,8DAA8D;AAC9D,OAAO,EACH,qBAAqB,GAKxB,MAAM,4CAA4C,CAAA;AACnD,qDAAqD;AACrD,OAAO,EACH,eAAe,GAclB,MAAM,sCAAsC,CAAA;AAE7C,oCAAoC;AACpC,OAAO,EACH,cAAc,GAMjB,MAAM,8BAA8B,CAAA;AAErC,uFAAuF;AACvF,OAAO,EACH,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,iCAAiC,EACjC,yBAAyB,EACzB,mBAAmB,GAUtB,MAAM,6BAA6B,CAAA;AAgBpC,gCAAgC;AAChC,OAAO,EACH,gBAAgB,GAGnB,MAAM,gCAAgC,CAAA;AAEvC,iFAAiF;AACjF,OAAO,EACH,YAAY,EACZ,iBAAiB,GAIpB,MAAM,eAAe,CAAA;AAEtB,wFAAwF;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.negative-list.d.ts","sourceRoot":"","sources":["../src/manifest.negative-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,eAAO,MAAM,iBAAiB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"manifest.negative-list.d.ts","sourceRoot":"","sources":["../src/manifest.negative-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,eAAO,MAAM,iBAAiB,EAAE,qBAAqB,EAqPpD,CAAA"}
|
|
@@ -163,7 +163,7 @@ export const SDK_NEGATIVE_LIST = [
|
|
|
163
163
|
{
|
|
164
164
|
method: 'POST',
|
|
165
165
|
path: '/api/v1/oauth/token-exchange',
|
|
166
|
-
reason:
|
|
166
|
+
reason: "B978/AC-1: client-facing federated→internal token exchange — called by packages/mcp-core/src/login-provider/oauth-client.ts (native mcp/agent + beacon-cli) and by the SDK's own createTenantAgentClient token provider (B987) via raw fetch during bootstrap auth: it PRODUCES the bearer every typed SDK method then uses, so it is never itself a typed SDK method",
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
169
|
method: 'POST',
|
|
@@ -243,5 +243,15 @@ export const SDK_NEGATIVE_LIST = [
|
|
|
243
243
|
path: '/api/v1/ops/identity/federated-tokens',
|
|
244
244
|
reason: 'F496 ops-guarded federated-token mint — consumed by agent/service callers via raw fetch (cross-project trust primitive), no admin-UI/SDK use case',
|
|
245
245
|
},
|
|
246
|
+
{
|
|
247
|
+
method: 'GET',
|
|
248
|
+
path: '/api/v1/files/public/{key}{.+}',
|
|
249
|
+
reason: 'F709 public read route — a byte stream loaded directly by the browser (<img src>) from the URL toAssetUrl/toAvatarUrl produce; no SDK method needed',
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
method: 'GET',
|
|
253
|
+
path: '/api/v1/assets/{id}/content',
|
|
254
|
+
reason: 'F709 private content route — a byte stream opened directly by the browser (inline view / ?download=1) from the URL toAssetUrl produces; no SDK method needed',
|
|
255
|
+
},
|
|
246
256
|
];
|
|
247
257
|
//# sourceMappingURL=manifest.negative-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.negative-list.js","sourceRoot":"","sources":["../src/manifest.negative-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAA4B;IACtD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,+CAA+C;KAC1D;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,2BAA2B;QACjC,MAAM,EAAE,+CAA+C;KAC1D;IACD,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,uBAAuB,EAAE;IACvE;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,6BAA6B;QACnC,MAAM,EAAE,4DAA4D;KACvE;IACD,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,2BAA2B,EAAE;IACzE;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,0DAA0D;KACrE;IAED,+EAA+E;IAC/E;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE,qEAAqE;KAChF;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,+LAA+L;KAC1M;IACD;QACI,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,iDAAiD;QACvD,MAAM,EAAE,uEAAuE;KAClF;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,+CAA+C;KAC1D;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,2BAA2B;QACjC,MAAM,EAAE,+CAA+C;KAC1D;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,+CAA+C;KAC1D;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,+CAA+C;KAC1D;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,gFAAgF;KAC3F;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,6JAA6J;KACxK;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,iDAAiD;QACvD,MAAM,EAAE,uEAAuE;KAClF;IACD;QACI,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,iDAAiD;QACvD,MAAM,EAAE,uEAAuE;KAClF;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,+IAA+I;KAC1J;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,4IAA4I;KACvJ;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,qJAAqJ;KAChK;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,gIAAgI;KAC3I;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,4IAA4I;KACvJ;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,iJAAiJ;KAC5J;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,gFAAgF;KAC3F;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,iKAAiK;KAC5K;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,6FAA6F;KACxG;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,+FAA+F;KAC1G;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,+BAA+B;QACrC,MAAM,EAAE,6FAA6F;KACxG;IACD;QACI,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE,iGAAiG;KAC5G;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,2GAA2G;KACtH;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,2LAA2L;KACtM;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"manifest.negative-list.js","sourceRoot":"","sources":["../src/manifest.negative-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* F603's package split — the `authMode: 'admin'` entries formerly alongside these moved to
|
|
4
4
|
* `@beacon-build/sdk-internal`).
|
|
5
5
|
*
|
|
6
|
-
* Covers: /api/auth/* (authMode 'public'
|
|
6
|
+
* Covers: /api/auth/* and the public pricing read GET /api/v1/pricing (F564) — authMode 'public'.
|
|
7
7
|
*/
|
|
8
8
|
import type { ManifestEntry } from './manifest.types.js';
|
|
9
9
|
export declare const MANIFEST_PUBLIC_ENTRIES: ManifestEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.public-entries.d.ts","sourceRoot":"","sources":["../src/manifest.public-entries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,eAAO,MAAM,uBAAuB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"manifest.public-entries.d.ts","sourceRoot":"","sources":["../src/manifest.public-entries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,eAAO,MAAM,uBAAuB,EAAE,aAAa,EAkClD,CAAA"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* F603's package split — the `authMode: 'admin'` entries formerly alongside these moved to
|
|
4
4
|
* `@beacon-build/sdk-internal`).
|
|
5
5
|
*
|
|
6
|
-
* Covers: /api/auth/* (authMode 'public'
|
|
6
|
+
* Covers: /api/auth/* and the public pricing read GET /api/v1/pricing (F564) — authMode 'public'.
|
|
7
7
|
*/
|
|
8
8
|
export const MANIFEST_PUBLIC_ENTRIES = [
|
|
9
9
|
// ── Auth ──────────────────────────────────────────────────────────────────
|
|
@@ -37,5 +37,7 @@ export const MANIFEST_PUBLIC_ENTRIES = [
|
|
|
37
37
|
sdkPath: 'auth.redeemMagicLink',
|
|
38
38
|
authMode: 'public',
|
|
39
39
|
},
|
|
40
|
+
// ── Pricing (F564 AC-3: public, identical to the authenticated read) ─────────
|
|
41
|
+
{ method: 'GET', path: '/api/v1/pricing', sdkPath: 'billing.pricing', authMode: 'public' },
|
|
40
42
|
];
|
|
41
43
|
//# sourceMappingURL=manifest.public-entries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.public-entries.js","sourceRoot":"","sources":["../src/manifest.public-entries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAoB;IACpD,6EAA6E;IAC7E,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACtF,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC5F,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1F,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACxF,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC/E;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,2BAA2B;QACpC,QAAQ,EAAE,QAAQ;KACrB;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,kCAAkC;QACxC,OAAO,EAAE,2BAA2B;QACpC,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1F;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,QAAQ;KACrB;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,sBAAsB;QAC/B,QAAQ,EAAE,QAAQ;KACrB;
|
|
1
|
+
{"version":3,"file":"manifest.public-entries.js","sourceRoot":"","sources":["../src/manifest.public-entries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAoB;IACpD,6EAA6E;IAC7E,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACtF,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC5F,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1F,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACxF,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC/E;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,2BAA2B;QACpC,QAAQ,EAAE,QAAQ;KACrB;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,kCAAkC;QACxC,OAAO,EAAE,2BAA2B;QACpC,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1F;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,QAAQ;KACrB;IACD;QACI,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,sBAAsB;QAC/B,QAAQ,EAAE,QAAQ;KACrB;IACD,gFAAgF;IAChF,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE;CAC7F,CAAA"}
|
|
@@ -43,6 +43,9 @@ export declare class SdkError extends Error {
|
|
|
43
43
|
* without pattern-matching on error prose (B300).
|
|
44
44
|
*/
|
|
45
45
|
readonly apiCode?: string | undefined;
|
|
46
|
+
/** Structured `details` from the error body (`body.details` or `body.error.details`),
|
|
47
|
+
* e.g. F705's BILLING_ENTITY_INACTIVE `{ entity, rootOrgId?, inactiveReason }`. */
|
|
48
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
46
49
|
constructor(code: SdkErrorCode, message: string, status?: number | undefined,
|
|
47
50
|
/**
|
|
48
51
|
* The VERBATIM `code` from the API response body, when it sent one.
|
|
@@ -53,7 +56,10 @@ export declare class SdkError extends Error {
|
|
|
53
56
|
* keeps the API's own word intact, so a caller can distinguish two different 409s
|
|
54
57
|
* without pattern-matching on error prose (B300).
|
|
55
58
|
*/
|
|
56
|
-
apiCode?: string | undefined
|
|
59
|
+
apiCode?: string | undefined,
|
|
60
|
+
/** Structured `details` from the error body (`body.details` or `body.error.details`),
|
|
61
|
+
* e.g. F705's BILLING_ENTITY_INACTIVE `{ entity, rootOrgId?, inactiveReason }`. */
|
|
62
|
+
details?: Record<string, unknown> | undefined);
|
|
57
63
|
}
|
|
58
64
|
export declare function statusToSdkCode(status: number): SdkErrorCode;
|
|
59
65
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/transport/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,YAAY;AACpB,uFAAuF;AACrF,cAAc;AAChB,wFAAwF;GACtF,WAAW;AACb,gFAAgF;GAC9E,WAAW;AACb;+FAC+F;GAC7F,UAAU;AACZ,4FAA4F;GAC1F,YAAY;AACd;;gGAEgG;GAC9F,oBAAoB;AACtB,4EAA4E;GAC1E,cAAc;AAChB;wFACwF;GACtF,cAAc;AAChB;yFACyF;GACvF,qBAAqB;AACvB;sEACsE;GACpE,eAAe,CAAA;AAErB,qBAAa,QAAS,SAAQ,KAAK;aAEX,IAAI,EAAE,YAAY;aAElB,MAAM,CAAC,EAAE,MAAM;IAC/B;;;;;;;;OAQG;aACa,OAAO,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/transport/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,YAAY;AACpB,uFAAuF;AACrF,cAAc;AAChB,wFAAwF;GACtF,WAAW;AACb,gFAAgF;GAC9E,WAAW;AACb;+FAC+F;GAC7F,UAAU;AACZ,4FAA4F;GAC1F,YAAY;AACd;;gGAEgG;GAC9F,oBAAoB;AACtB,4EAA4E;GAC1E,cAAc;AAChB;wFACwF;GACtF,cAAc;AAChB;yFACyF;GACvF,qBAAqB;AACvB;sEACsE;GACpE,eAAe,CAAA;AAErB,qBAAa,QAAS,SAAQ,KAAK;aAEX,IAAI,EAAE,YAAY;aAElB,MAAM,CAAC,EAAE,MAAM;IAC/B;;;;;;;;OAQG;aACa,OAAO,CAAC,EAAE,MAAM;IAChC;wFACoF;aACpE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAfjC,IAAI,EAAE,YAAY,EAClC,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA;IAC/B;;;;;;;;OAQG;IACa,OAAO,CAAC,EAAE,MAAM,YAAA;IAChC;wFACoF;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKxD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAoB5D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAmB9E"}
|
package/dist/transport/errors.js
CHANGED
|
@@ -2,6 +2,7 @@ export class SdkError extends Error {
|
|
|
2
2
|
code;
|
|
3
3
|
status;
|
|
4
4
|
apiCode;
|
|
5
|
+
details;
|
|
5
6
|
constructor(code, message, status,
|
|
6
7
|
/**
|
|
7
8
|
* The VERBATIM `code` from the API response body, when it sent one.
|
|
@@ -12,11 +13,15 @@ export class SdkError extends Error {
|
|
|
12
13
|
* keeps the API's own word intact, so a caller can distinguish two different 409s
|
|
13
14
|
* without pattern-matching on error prose (B300).
|
|
14
15
|
*/
|
|
15
|
-
apiCode
|
|
16
|
+
apiCode,
|
|
17
|
+
/** Structured `details` from the error body (`body.details` or `body.error.details`),
|
|
18
|
+
* e.g. F705's BILLING_ENTITY_INACTIVE `{ entity, rootOrgId?, inactiveReason }`. */
|
|
19
|
+
details) {
|
|
16
20
|
super(message);
|
|
17
21
|
this.code = code;
|
|
18
22
|
this.status = status;
|
|
19
23
|
this.apiCode = apiCode;
|
|
24
|
+
this.details = details;
|
|
20
25
|
this.name = 'SdkError';
|
|
21
26
|
}
|
|
22
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/transport/errors.ts"],"names":[],"mappings":"AAiCA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEX;IAEA;IAUA;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/transport/errors.ts"],"names":[],"mappings":"AAiCA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEX;IAEA;IAUA;IAGA;IAhBpB,YACoB,IAAkB,EAClC,OAAe,EACC,MAAe;IAC/B;;;;;;;;OAQG;IACa,OAAgB;IAChC;wFACoF;IACpE,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAA;QAjBE,SAAI,GAAJ,IAAI,CAAc;QAElB,WAAM,GAAN,MAAM,CAAS;QAUf,YAAO,GAAP,OAAO,CAAS;QAGhB,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;IAC1B,CAAC;CACJ;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC1C,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,GAAG;YACJ,OAAO,cAAc,CAAA;QACzB,KAAK,GAAG;YACJ,OAAO,WAAW,CAAA;QACtB,KAAK,GAAG;YACJ,OAAO,WAAW,CAAA;QACtB,KAAK,GAAG;YACJ,OAAO,UAAU,CAAA;QACrB,KAAK,GAAG;YACJ,iFAAiF;YACjF,OAAO,oBAAoB,CAAA;QAC/B,KAAK,GAAG;YACJ,OAAO,cAAc,CAAA;QACzB,KAAK,GAAG;YACJ,OAAO,qBAAqB,CAAA;QAChC;YACI,OAAO,cAAc,CAAA;IAC7B,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAc;IAC5D,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,KAAK,YAAY;YACb,OAAO,YAAY,CAAA;QACvB,KAAK,oBAAoB;YACrB,OAAO,oBAAoB,CAAA;QAC/B,KAAK,WAAW;YACZ,OAAO,WAAW,CAAA;QACtB,KAAK,UAAU;YACX,OAAO,UAAU,CAAA;QACrB,KAAK,cAAc;YACf,OAAO,cAAc,CAAA;QACzB,KAAK,WAAW;YACZ,OAAO,WAAW,CAAA;QACtB,KAAK,cAAc;YACf,OAAO,cAAc,CAAA;QACzB;YACI,OAAO,eAAe,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;AACL,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BillingOrigin } from '@beacon-build/core';
|
|
1
2
|
export interface HttpClientConfig {
|
|
2
3
|
baseUrl: string;
|
|
3
4
|
/** Base path prefix appended before each request path (e.g. '/api/v1') */
|
|
@@ -11,6 +12,17 @@ export interface HttpClientConfig {
|
|
|
11
12
|
* (single-flight) so a burst of 401s rotates the refresh token only once.
|
|
12
13
|
*/
|
|
13
14
|
onUnauthorized?: () => void | Promise<string | null | void>;
|
|
15
|
+
/** Optional fetch implementation (test seam / custom transport). Defaults to global fetch. */
|
|
16
|
+
fetch?: typeof fetch;
|
|
17
|
+
}
|
|
18
|
+
/** Per-request options for the read methods (`get`/`getEnvelope`). */
|
|
19
|
+
export interface HttpRequestOptions {
|
|
20
|
+
/**
|
|
21
|
+
* C907/AC-8: `'background'` marks an automatically repeated call (a poll) — sent as
|
|
22
|
+
* `X-Beacon-Request-Origin: background`, counted but never billed. Omitted: the ambient
|
|
23
|
+
* `runWithBackgroundOrigin` scope decides (see `request-origin.ts`), else interactive.
|
|
24
|
+
*/
|
|
25
|
+
origin?: BillingOrigin;
|
|
14
26
|
}
|
|
15
27
|
/**
|
|
16
28
|
* HttpClient — JSON HTTP wrapper for User-JWT and Agent-JWT authenticated requests.
|
|
@@ -30,12 +42,12 @@ export declare class HttpClient {
|
|
|
30
42
|
* unless a caller genuinely needs the status; see `postWithStatus`.
|
|
31
43
|
*/
|
|
32
44
|
private requestFull;
|
|
33
|
-
get<T>(path: string): Promise<T>;
|
|
45
|
+
get<T>(path: string, opts?: HttpRequestOptions): Promise<T>;
|
|
34
46
|
/**
|
|
35
47
|
* GET without unwrapping the `{ data }` envelope — returns the full body so
|
|
36
48
|
* callers can read `meta` (e.g. pagination total). F291.
|
|
37
49
|
*/
|
|
38
|
-
getEnvelope<T>(path: string): Promise<T>;
|
|
50
|
+
getEnvelope<T>(path: string, opts?: HttpRequestOptions): Promise<T>;
|
|
39
51
|
post<T>(path: string, body?: unknown): Promise<T>;
|
|
40
52
|
/**
|
|
41
53
|
* POST without unwrapping the `{ data }` envelope — mirrors `getEnvelope` exactly
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/transport/http-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/transport/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIvD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACxC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;IAC3D,8FAA8F;IAC9F,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACvB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IAC/B;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;CACzB;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACP,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;YAE9B,OAAO;IASrB;;;;;;OAMG;YACW,WAAW;IA+GzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/D;;;OAGG;IACH,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjD;;;;;OAKG;IACH,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAQzD;;;OAGG;IACH,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAOrF,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAOhD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAGtC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SdkError, apiCodeToSdkCode, statusToSdkCode } from './errors.js';
|
|
2
|
+
import { requestOriginHeaders } from './request-origin.js';
|
|
2
3
|
/**
|
|
3
4
|
* HttpClient — JSON HTTP wrapper for User-JWT and Agent-JWT authenticated requests.
|
|
4
5
|
* C213: a single transparent retry on 401 when onUnauthorized yields a fresh token
|
|
@@ -22,6 +23,9 @@ export class HttpClient {
|
|
|
22
23
|
* unless a caller genuinely needs the status; see `postWithStatus`.
|
|
23
24
|
*/
|
|
24
25
|
async requestFull(path, init = {}, opts = {}) {
|
|
26
|
+
// C907/AC-8: resolved BEFORE the first `await` — the ambient background scope is
|
|
27
|
+
// synchronous-only (see request-origin.ts).
|
|
28
|
+
const originHeaders = requestOriginHeaders(opts.origin);
|
|
25
29
|
const unwrap = opts.unwrap ?? true;
|
|
26
30
|
let token;
|
|
27
31
|
try {
|
|
@@ -39,10 +43,11 @@ export class HttpClient {
|
|
|
39
43
|
const headers = {
|
|
40
44
|
'Content-Type': 'application/json',
|
|
41
45
|
Authorization: `Bearer ${bearer}`,
|
|
46
|
+
...originHeaders,
|
|
42
47
|
...(init.headers ?? {}),
|
|
43
48
|
};
|
|
44
49
|
try {
|
|
45
|
-
return await fetch(url, { ...init, headers });
|
|
50
|
+
return await (this.config.fetch ?? fetch)(url, { ...init, headers });
|
|
46
51
|
}
|
|
47
52
|
catch (err) {
|
|
48
53
|
throw new SdkError('network_error', err instanceof Error ? err.message : 'Network request failed');
|
|
@@ -81,24 +86,33 @@ export class HttpClient {
|
|
|
81
86
|
// (transport/ops-api-client.ts) — was computed via body.code above but never
|
|
82
87
|
// threaded into the SdkError itself, so JWT-path callers could not read it.
|
|
83
88
|
let apiCode;
|
|
89
|
+
let details;
|
|
84
90
|
try {
|
|
85
91
|
const body = await res.json();
|
|
86
|
-
// Prefer body.code for precise error classification (e.g. 422 VALIDATION vs INVALID_TRANSITION)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
92
|
+
// Prefer body.code for precise error classification (e.g. 422 VALIDATION vs INVALID_TRANSITION);
|
|
93
|
+
// the API's global error envelope nests it as body.error.code (F564: e.g. the
|
|
94
|
+
// contributor-gating 409s thrown from the org-member write path).
|
|
95
|
+
const bodyCode = typeof body?.code === 'string'
|
|
96
|
+
? body.code
|
|
97
|
+
: typeof body?.error?.code === 'string'
|
|
98
|
+
? body.error.code
|
|
99
|
+
: undefined;
|
|
100
|
+
if (bodyCode) {
|
|
101
|
+
apiCode = bodyCode;
|
|
102
|
+
code = apiCodeToSdkCode(bodyCode, res.status);
|
|
90
103
|
}
|
|
91
104
|
if (body?.error?.message)
|
|
92
105
|
message = body.error.message;
|
|
93
106
|
else if (typeof body?.error === 'string')
|
|
94
107
|
message = body.error;
|
|
108
|
+
details = body?.details ?? body?.error?.details;
|
|
95
109
|
}
|
|
96
110
|
catch (_err) {
|
|
97
111
|
// Deliberately swallowed: an unparsable error body (e.g. non-JSON) must not
|
|
98
112
|
// block throwing the SdkError below — it falls back to the status-derived
|
|
99
113
|
// `code`/`message` computed above the try block.
|
|
100
114
|
}
|
|
101
|
-
throw new SdkError(code, message, res.status, apiCode);
|
|
115
|
+
throw new SdkError(code, message, res.status, apiCode, details);
|
|
102
116
|
}
|
|
103
117
|
// 204 No Content
|
|
104
118
|
if (res.status === 204)
|
|
@@ -108,15 +122,15 @@ export class HttpClient {
|
|
|
108
122
|
const data = (!unwrap ? body : body?.data !== undefined ? body.data : body);
|
|
109
123
|
return { data, status: res.status };
|
|
110
124
|
}
|
|
111
|
-
get(path) {
|
|
112
|
-
return this.request(path);
|
|
125
|
+
get(path, opts = {}) {
|
|
126
|
+
return this.request(path, {}, { origin: opts.origin });
|
|
113
127
|
}
|
|
114
128
|
/**
|
|
115
129
|
* GET without unwrapping the `{ data }` envelope — returns the full body so
|
|
116
130
|
* callers can read `meta` (e.g. pagination total). F291.
|
|
117
131
|
*/
|
|
118
|
-
getEnvelope(path) {
|
|
119
|
-
return this.request(path, {}, { unwrap: false });
|
|
132
|
+
getEnvelope(path, opts = {}) {
|
|
133
|
+
return this.request(path, {}, { unwrap: false, origin: opts.origin });
|
|
120
134
|
}
|
|
121
135
|
post(path, body) {
|
|
122
136
|
return this.request(path, {
|