@astram/frontend-core 0.15.1 → 0.17.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.
@@ -0,0 +1,144 @@
1
+ /**
2
+ * createClientDataService — platform-agnostic calls to the client-data approval routes
3
+ * (model-provider-client-data SPEC v7 §3, §13): a tenant admin approves sending the company's real
4
+ * data to ONE deployment-approved model provider profile; a second admin may have to confirm; any
5
+ * holder can revoke. Like the other services it takes an injected HTTP client and receives the
6
+ * bearer token per call.
7
+ *
8
+ * Every method resolves to a plain result object (never throws): `{ ok:true, ... }` on success,
9
+ * `{ ok:false, status, code, error }` otherwise. `code` is one of the fixed codes in
10
+ * {@link CLIENT_DATA_ERROR_CODES} (or `null`), `error` is this package's fixed text for it; the
11
+ * server's own message is never passed on.
12
+ *
13
+ * The identity routes these hit (all gated on `identity:agent:client_data_approve`):
14
+ * GET /identity/agent/client-data → ClientDataOverview
15
+ * POST /identity/agent/client-data/approvals { profile, dataClasses, fileContent, reason, code }
16
+ * → { uuid, state: 'pending'|'active' }
17
+ * POST /identity/agent/client-data/approvals/:uuid/confirm { code } → { uuid, state: 'active' }
18
+ * POST /identity/agent/client-data/approvals/:uuid/revoke { reason } → { uuid, state: 'revoked' }
19
+ *
20
+ * The step-up `code` (the admin's own authenticator code) travels in the body of request and
21
+ * confirm ONLY: never in a URL, never in a returned object or error, never logged. Revoke has no
22
+ * step-up. Labels come from the server (people are labels, never ids); `uuid` is for API calls only.
23
+ * Render every string as text.
24
+ */
25
+ import type { HttpClient } from '../http/types.js';
26
+ /** The fixed route error codes with their HTTP statuses (SPEC v7 §10, §13). */
27
+ export declare const CLIENT_DATA_ERROR_STATUS: {
28
+ readonly invalid_request: 400;
29
+ readonly profile_not_client_data: 400;
30
+ readonly classes_exceed_deployment: 400;
31
+ readonly file_content_not_allowed: 400;
32
+ readonly forbidden: 403;
33
+ readonly step_up_required: 403;
34
+ readonly confirmer_is_requester: 403;
35
+ readonly approval_not_found: 404;
36
+ readonly approval_pending_exists: 409;
37
+ readonly approval_active_exists: 409;
38
+ readonly approval_not_pending: 409;
39
+ readonly approval_not_revocable: 409;
40
+ readonly approval_state_changed: 409;
41
+ readonly deployment_changed: 409;
42
+ readonly too_many_requests: 429;
43
+ readonly revoke_unavailable: 503;
44
+ readonly authentication_unavailable: 503;
45
+ readonly unavailable: 503;
46
+ };
47
+ export type ClientDataErrorCode = keyof typeof CLIENT_DATA_ERROR_STATUS;
48
+ export declare const CLIENT_DATA_ERROR_CODES: readonly ClientDataErrorCode[];
49
+ export declare function isClientDataErrorCode(v: unknown): v is ClientDataErrorCode;
50
+ /** The short user-facing English text for a code (no ids, no server text). */
51
+ export declare function clientDataErrorText(code: ClientDataErrorCode): string;
52
+ export type ClientDataDataClass = 'internal' | 'confidential' | 'restricted';
53
+ /** One deployment-approved profile (read-only; no secrets). `profile` is the profile name. */
54
+ export interface DeploymentApproval {
55
+ profile: string;
56
+ provider: string;
57
+ /** The deployment approval's contract reference. */
58
+ reference: string;
59
+ region: string;
60
+ retentionDays: number;
61
+ dataClasses: string[];
62
+ fileContent: boolean;
63
+ approvedBy: string;
64
+ /** ISO date. */
65
+ approvedOn: string;
66
+ }
67
+ export type ClientDataApprovalState = 'pending' | 'active' | 'revoked' | 'superseded' | string;
68
+ /** One approval with labels, never user ids. `uuid` is for API calls only. */
69
+ export interface ClientDataApproval {
70
+ uuid: string;
71
+ profile: string;
72
+ provider: string;
73
+ state: ClientDataApprovalState;
74
+ dataClasses: string[];
75
+ fileContent: boolean;
76
+ requestedByLabel: string;
77
+ /** True when the caller made this request (hide Confirm). */
78
+ requestedByMe: boolean;
79
+ /** Epoch milliseconds. */
80
+ requestedAtMs: number | null;
81
+ confirmedByLabel: string | null;
82
+ confirmedAtMs: number | null;
83
+ revokedByLabel: string | null;
84
+ revokedAtMs: number | null;
85
+ reason: string;
86
+ revokeReason: string | null;
87
+ disclosureVersion: number;
88
+ /** False when the deployment approval no longer matches this approval. */
89
+ deploymentMatches: boolean;
90
+ }
91
+ export interface ClientDataOverview {
92
+ deployment: DeploymentApproval[];
93
+ twoPerson: boolean;
94
+ approvals: ClientDataApproval[];
95
+ }
96
+ /** The request body. `code` is the admin's own authenticator code (step-up). */
97
+ export interface ClientDataRequestInput {
98
+ profile: string;
99
+ /** `internal` is always included by the server. */
100
+ dataClasses: readonly ClientDataDataClass[] | readonly string[];
101
+ fileContent: boolean;
102
+ /** 1–500 characters, no control characters. */
103
+ reason: string;
104
+ code: string;
105
+ }
106
+ export interface ClientDataConfirmInput {
107
+ code: string;
108
+ }
109
+ export interface ClientDataRevokeInput {
110
+ /** 1–200 characters, no control characters. */
111
+ reason: string;
112
+ }
113
+ export interface ClientDataFailure {
114
+ ok: false;
115
+ status: number;
116
+ code: ClientDataErrorCode | null;
117
+ error: string;
118
+ }
119
+ export type ListClientDataResult = ({
120
+ ok: true;
121
+ } & ClientDataOverview) | ClientDataFailure;
122
+ export type RequestClientDataResult = {
123
+ ok: true;
124
+ uuid: string;
125
+ state: 'pending' | 'active';
126
+ } | ClientDataFailure;
127
+ export type ConfirmClientDataResult = {
128
+ ok: true;
129
+ uuid: string;
130
+ state: 'active';
131
+ } | ClientDataFailure;
132
+ export type RevokeClientDataResult = {
133
+ ok: true;
134
+ uuid: string;
135
+ state: 'revoked';
136
+ } | ClientDataFailure;
137
+ export interface ClientDataService {
138
+ list(accessToken: string): Promise<ListClientDataResult>;
139
+ request(accessToken: string, input: ClientDataRequestInput): Promise<RequestClientDataResult>;
140
+ confirm(accessToken: string, uuid: string, input: ClientDataConfirmInput): Promise<ConfirmClientDataResult>;
141
+ revoke(accessToken: string, uuid: string, input: ClientDataRevokeInput): Promise<RevokeClientDataResult>;
142
+ }
143
+ export declare function createClientDataService(http: HttpClient): ClientDataService;
144
+ //# sourceMappingURL=clientDataService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientDataService.d.ts","sourceRoot":"","sources":["../../src/agentClientData/clientDataService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ const BASE = '/identity/agent/client-data';
2
+ /** The fixed route error codes with their HTTP statuses (SPEC v7 §10, §13). */
3
+ export const CLIENT_DATA_ERROR_STATUS = {
4
+ invalid_request: 400,
5
+ profile_not_client_data: 400,
6
+ classes_exceed_deployment: 400,
7
+ file_content_not_allowed: 400,
8
+ forbidden: 403,
9
+ step_up_required: 403,
10
+ confirmer_is_requester: 403,
11
+ approval_not_found: 404,
12
+ approval_pending_exists: 409,
13
+ approval_active_exists: 409,
14
+ approval_not_pending: 409,
15
+ approval_not_revocable: 409,
16
+ approval_state_changed: 409,
17
+ deployment_changed: 409,
18
+ too_many_requests: 429,
19
+ revoke_unavailable: 503,
20
+ authentication_unavailable: 503,
21
+ unavailable: 503,
22
+ };
23
+ export const CLIENT_DATA_ERROR_CODES = Object.keys(CLIENT_DATA_ERROR_STATUS);
24
+ export function isClientDataErrorCode(v) {
25
+ return typeof v === 'string' && Object.prototype.hasOwnProperty.call(CLIENT_DATA_ERROR_STATUS, v);
26
+ }
27
+ const CODE_TEXT = {
28
+ invalid_request: 'The request is not valid. Check the details and try again.',
29
+ profile_not_client_data: 'This model provider is not approved for client data.',
30
+ classes_exceed_deployment: 'The data classes go beyond what the deployment approved for this provider.',
31
+ file_content_not_allowed: 'The deployment does not allow file content for this provider.',
32
+ forbidden: 'You do not have access to perform this action.',
33
+ step_up_required: 'Enter the current code from your authenticator app to continue.',
34
+ confirmer_is_requester: 'A different administrator must confirm this request.',
35
+ approval_not_found: 'That approval was not found.',
36
+ approval_pending_exists: 'A request is already waiting for confirmation.',
37
+ approval_active_exists: 'This approval is already active.',
38
+ approval_not_pending: 'This request is no longer waiting for confirmation.',
39
+ approval_not_revocable: 'This approval can no longer be revoked.',
40
+ approval_state_changed: 'This approval changed while it was being revoked. Try again.',
41
+ deployment_changed: 'The deployment approval changed since this request. Make a new request.',
42
+ too_many_requests: 'Too many attempts. Try again later.',
43
+ revoke_unavailable: 'The revoke could not be made safe. Nothing was changed. Try again.',
44
+ authentication_unavailable: 'Verification is temporarily unavailable. Try again.',
45
+ unavailable: 'This action is temporarily unavailable. Nothing was changed. Try again.',
46
+ };
47
+ /** The short user-facing English text for a code (no ids, no server text). */
48
+ export function clientDataErrorText(code) {
49
+ return CODE_TEXT[code];
50
+ }
51
+ /** Fixed text per status when no known code came back. */
52
+ const STATUS_TEXT = {
53
+ 0: 'Could not reach the server. Check your connection and try again.',
54
+ 401: 'Please sign in again.',
55
+ 403: 'You do not have access to perform this action.',
56
+ 503: 'Client data approval is temporarily unavailable. Try again shortly.',
57
+ };
58
+ const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
59
+ const strOr = (v, d = '') => (typeof v === 'string' ? v : d);
60
+ const strOrNull = (v) => (typeof v === 'string' ? v : null);
61
+ const numOrNull = (v) => typeof v === 'number' && Number.isFinite(v) ? v : null;
62
+ const strings = (v) => Array.isArray(v) ? v.filter((x) => typeof x === 'string') : [];
63
+ function fail(status, data, generic) {
64
+ const body = isRecord(data) ? data : {};
65
+ const code = isClientDataErrorCode(body.code) ? body.code : null;
66
+ return {
67
+ ok: false,
68
+ status,
69
+ code,
70
+ error: code !== null ? CODE_TEXT[code] : (STATUS_TEXT[status] ?? generic),
71
+ };
72
+ }
73
+ /** A transport exception becomes a typed failure; the thrown text is never kept. */
74
+ function thrown(generic) {
75
+ return { ok: false, status: 0, code: null, error: STATUS_TEXT[0] ?? generic };
76
+ }
77
+ function toDeployment(raw) {
78
+ if (!isRecord(raw) || typeof raw.profile !== 'string')
79
+ return null;
80
+ return {
81
+ profile: raw.profile,
82
+ provider: strOr(raw.provider),
83
+ reference: strOr(raw.reference),
84
+ region: strOr(raw.region),
85
+ retentionDays: typeof raw.retentionDays === 'number' ? raw.retentionDays : 0,
86
+ dataClasses: strings(raw.dataClasses),
87
+ fileContent: raw.fileContent === true,
88
+ approvedBy: strOr(raw.approvedBy),
89
+ approvedOn: strOr(raw.approvedOn),
90
+ };
91
+ }
92
+ function toApproval(raw) {
93
+ if (!isRecord(raw) || typeof raw.uuid !== 'string' || typeof raw.state !== 'string')
94
+ return null;
95
+ return {
96
+ uuid: raw.uuid,
97
+ profile: strOr(raw.profile),
98
+ provider: strOr(raw.provider),
99
+ state: raw.state,
100
+ dataClasses: strings(raw.dataClasses),
101
+ fileContent: raw.fileContent === true,
102
+ requestedByLabel: strOr(raw.requestedByLabel),
103
+ requestedByMe: raw.requestedByMe === true,
104
+ requestedAtMs: numOrNull(raw.requestedAtMs),
105
+ confirmedByLabel: strOrNull(raw.confirmedByLabel),
106
+ confirmedAtMs: numOrNull(raw.confirmedAtMs),
107
+ revokedByLabel: strOrNull(raw.revokedByLabel),
108
+ revokedAtMs: numOrNull(raw.revokedAtMs),
109
+ reason: strOr(raw.reason),
110
+ revokeReason: strOrNull(raw.revokeReason),
111
+ disclosureVersion: typeof raw.disclosureVersion === 'number' ? raw.disclosureVersion : 1,
112
+ deploymentMatches: raw.deploymentMatches !== false,
113
+ };
114
+ }
115
+ const one = (uuid) => `${BASE}/approvals/${encodeURIComponent(uuid)}`;
116
+ export function createClientDataService(http) {
117
+ return {
118
+ async list(accessToken) {
119
+ const generic = 'Could not load the client data approvals.';
120
+ try {
121
+ const r = await http.get(BASE, { bearerToken: accessToken });
122
+ if (!r.ok)
123
+ return fail(r.status, r.data, generic);
124
+ const d = isRecord(r.data) ? r.data : {};
125
+ const deployment = [];
126
+ for (const x of Array.isArray(d.deployment) ? d.deployment : []) {
127
+ const row = toDeployment(x);
128
+ if (row !== null)
129
+ deployment.push(row);
130
+ }
131
+ const approvals = [];
132
+ for (const x of Array.isArray(d.approvals) ? d.approvals : []) {
133
+ const row = toApproval(x);
134
+ if (row !== null)
135
+ approvals.push(row);
136
+ }
137
+ // Fail safe: an absent flag means the stricter two-person rule.
138
+ return { ok: true, deployment, twoPerson: d.twoPerson !== false, approvals };
139
+ }
140
+ catch {
141
+ return thrown(generic);
142
+ }
143
+ },
144
+ /** Request (two-person) or grant (single admin) an approval; only documented fields are sent. */
145
+ async request(accessToken, input) {
146
+ const generic = 'Could not send the request.';
147
+ try {
148
+ const body = {
149
+ profile: input.profile,
150
+ dataClasses: [...input.dataClasses],
151
+ fileContent: input.fileContent,
152
+ reason: input.reason,
153
+ code: input.code,
154
+ };
155
+ const r = await http.post(`${BASE}/approvals`, body, { bearerToken: accessToken });
156
+ if (!r.ok)
157
+ return fail(r.status, r.data, generic);
158
+ const d = isRecord(r.data) ? r.data : {};
159
+ if (typeof d.uuid !== 'string' || (d.state !== 'pending' && d.state !== 'active')) {
160
+ return { ok: false, status: r.status, code: null, error: generic };
161
+ }
162
+ return { ok: true, uuid: d.uuid, state: d.state };
163
+ }
164
+ catch {
165
+ return thrown(generic);
166
+ }
167
+ },
168
+ /** The second administrator confirms; the body is the step-up code only. */
169
+ async confirm(accessToken, uuid, input) {
170
+ const generic = 'Could not confirm the request.';
171
+ try {
172
+ const r = await http.post(`${one(uuid)}/confirm`, { code: input.code }, { bearerToken: accessToken });
173
+ if (!r.ok)
174
+ return fail(r.status, r.data, generic);
175
+ const d = isRecord(r.data) ? r.data : {};
176
+ if (typeof d.uuid !== 'string' || d.state !== 'active') {
177
+ return { ok: false, status: r.status, code: null, error: generic };
178
+ }
179
+ return { ok: true, uuid: d.uuid, state: 'active' };
180
+ }
181
+ catch {
182
+ return thrown(generic);
183
+ }
184
+ },
185
+ /** Revoke a pending or active approval; no step-up code is sent. */
186
+ async revoke(accessToken, uuid, input) {
187
+ const generic = 'Could not revoke the approval.';
188
+ try {
189
+ const r = await http.post(`${one(uuid)}/revoke`, { reason: input.reason }, { bearerToken: accessToken });
190
+ if (!r.ok)
191
+ return fail(r.status, r.data, generic);
192
+ const d = isRecord(r.data) ? r.data : {};
193
+ if (typeof d.uuid !== 'string' || d.state !== 'revoked') {
194
+ return { ok: false, status: r.status, code: null, error: generic };
195
+ }
196
+ return { ok: true, uuid: d.uuid, state: 'revoked' };
197
+ }
198
+ catch {
199
+ return thrown(generic);
200
+ }
201
+ },
202
+ };
203
+ }
204
+ //# sourceMappingURL=clientDataService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientDataService.js","sourceRoot":"","sources":["../../src/agentClientData/clientDataService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * createClientDataDisclosureService — platform-agnostic calls to the client-data disclosure routes
3
+ * (model-provider-client-data SPEC v7 §5 C "Acknowledgement", §5 D "Disclosure"): before an AI
4
+ * assistant task may send a company's real data to the model provider, each user acknowledges the
5
+ * CURRENT version of the disclosure of the company's active approval. Like the other services it
6
+ * takes an injected HTTP client and receives the bearer token per call.
7
+ *
8
+ * Every method resolves to a plain result object (never throws): `{ ok:true, ... }` on success,
9
+ * `{ ok:false, status, code, error }` otherwise. `code` is one of the fixed codes in
10
+ * {@link DISCLOSURE_ERROR_CODES} (or `null`), `error` is this package's fixed text for it; the
11
+ * server's own message is never passed on.
12
+ *
13
+ * The identity routes these hit (the session user and company only; nothing is taken from the body):
14
+ * GET /identity/agent/client-data/disclosure → the active approvals' disclosures
15
+ * POST /identity/agent/client-data/disclosure/:approvalUuid/ack { version }
16
+ * → 200; 409 disclosure_version_stale
17
+ * carries the current disclosure
18
+ *
19
+ * A disclosure is shown as text: `statements` are server-written sentences (render as plain text),
20
+ * `masking` lists names and versions only (never a pattern). `approvalUuid` is for API calls only.
21
+ */
22
+ import type { HttpClient } from '../http/types.js';
23
+ /** The fixed route error codes with their HTTP statuses. */
24
+ export declare const DISCLOSURE_ERROR_STATUS: {
25
+ readonly invalid_request: 400;
26
+ readonly approval_not_found: 404;
27
+ readonly disclosure_version_stale: 409;
28
+ };
29
+ export type DisclosureErrorCode = keyof typeof DISCLOSURE_ERROR_STATUS;
30
+ export declare const DISCLOSURE_ERROR_CODES: readonly DisclosureErrorCode[];
31
+ export declare function isDisclosureErrorCode(v: unknown): v is DisclosureErrorCode;
32
+ /** The short user-facing English text for a code (no ids, no server text). */
33
+ export declare function disclosureErrorText(code: DisclosureErrorCode): string;
34
+ /** The masking policy as the disclosure shows it: names, versions and limits only. */
35
+ export interface ClientDataDisclosureMasking {
36
+ mode: string;
37
+ budgetMs: number;
38
+ ip: boolean;
39
+ nationalIds: string[];
40
+ detectors: {
41
+ kind: string;
42
+ version: number;
43
+ }[];
44
+ declaredKinds: string[];
45
+ headerHints: Record<string, string[]>;
46
+ }
47
+ /** One active approval's disclosure for the session company. */
48
+ export interface ClientDataDisclosure {
49
+ /** For API calls only (the acknowledgement route); never show it. */
50
+ approvalUuid: string;
51
+ profile: string;
52
+ provider: string;
53
+ region: string;
54
+ retentionDays: number;
55
+ dataClasses: string[];
56
+ fileContent: boolean;
57
+ masking: ClientDataDisclosureMasking | null;
58
+ /** Server-written sentences, in order (render as plain text). */
59
+ statements: string[];
60
+ /** The version to acknowledge. */
61
+ version: number;
62
+ /** The digest of the canonical disclosure (display a short form at most). */
63
+ digest: string;
64
+ /** True when the session user has acknowledged exactly this version. */
65
+ acknowledged: boolean;
66
+ }
67
+ export interface DisclosureFailure {
68
+ ok: false;
69
+ status: number;
70
+ code: DisclosureErrorCode | null;
71
+ error: string;
72
+ /** Set on `disclosure_version_stale` (409): the current disclosure to show before re-acknowledging. */
73
+ disclosure?: ClientDataDisclosure;
74
+ }
75
+ export type GetDisclosureResult = {
76
+ ok: true;
77
+ disclosures: ClientDataDisclosure[];
78
+ } | DisclosureFailure;
79
+ export type AcknowledgeDisclosureResult = {
80
+ ok: true;
81
+ approvalUuid: string;
82
+ version: number;
83
+ } | DisclosureFailure;
84
+ export interface AcknowledgeDisclosureInput {
85
+ /** The disclosure version the user read (`ClientDataDisclosure.version`). */
86
+ version: number;
87
+ }
88
+ export interface ClientDataDisclosureService {
89
+ getDisclosure(accessToken: string): Promise<GetDisclosureResult>;
90
+ acknowledgeDisclosure(accessToken: string, approvalUuid: string, input: AcknowledgeDisclosureInput): Promise<AcknowledgeDisclosureResult>;
91
+ }
92
+ export declare function createClientDataDisclosureService(http: HttpClient): ClientDataDisclosureService;
93
+ //# sourceMappingURL=disclosureService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosureService.d.ts","sourceRoot":"","sources":["../../src/agentClientData/disclosureService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAEvE,eAAO,MAAM,sBAAsB,EAE9B,SAAS,mBAAmB,EAAE,CAAC;AAEpC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,mBAAmB,CAE1E;AASD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAErE;AAUD,sFAAsF;AACtF,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC5C,iEAAiE;IACjE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,uGAAuG;IACvG,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,MAAM,mBAAmB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAAG,iBAAiB,CAAC;AACxE,MAAM,MAAM,2BAA2B,GACrC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,CAAC;AAE1E,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjE,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACzC;AA6ED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,UAAU,GAAG,2BAA2B,CAwC/F"}
@@ -0,0 +1,135 @@
1
+ const BASE = '/identity/agent/client-data/disclosure';
2
+ /** The fixed route error codes with their HTTP statuses. */
3
+ export const DISCLOSURE_ERROR_STATUS = {
4
+ invalid_request: 400,
5
+ approval_not_found: 404,
6
+ disclosure_version_stale: 409,
7
+ };
8
+ export const DISCLOSURE_ERROR_CODES = Object.keys(DISCLOSURE_ERROR_STATUS);
9
+ export function isDisclosureErrorCode(v) {
10
+ return typeof v === 'string' && Object.prototype.hasOwnProperty.call(DISCLOSURE_ERROR_STATUS, v);
11
+ }
12
+ const CODE_TEXT = {
13
+ invalid_request: 'The request is not valid. Check the details and try again.',
14
+ approval_not_found: 'That approval was not found. It may have ended.',
15
+ disclosure_version_stale: 'The notice changed since you opened it. Read the current notice and acknowledge it again.',
16
+ };
17
+ /** The short user-facing English text for a code (no ids, no server text). */
18
+ export function disclosureErrorText(code) {
19
+ return CODE_TEXT[code];
20
+ }
21
+ /** Fixed text per status when no known code came back. */
22
+ const STATUS_TEXT = {
23
+ 0: 'Could not reach the server. Check your connection and try again.',
24
+ 401: 'Please sign in again.',
25
+ 403: 'You do not have access to perform this action.',
26
+ 503: 'The notice is temporarily unavailable. Try again shortly.',
27
+ };
28
+ const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
29
+ const strOr = (v, d = '') => (typeof v === 'string' ? v : d);
30
+ const numOr = (v, d) => typeof v === 'number' && Number.isFinite(v) ? v : d;
31
+ const strings = (v) => Array.isArray(v) ? v.filter((x) => typeof x === 'string') : [];
32
+ function toMasking(raw) {
33
+ if (!isRecord(raw))
34
+ return null;
35
+ const detectors = [];
36
+ for (const d of Array.isArray(raw.detectors) ? raw.detectors : []) {
37
+ if (isRecord(d) && typeof d.kind === 'string') {
38
+ detectors.push({ kind: d.kind, version: numOr(d.version, 1) });
39
+ }
40
+ }
41
+ const headerHints = {};
42
+ if (isRecord(raw.headerHints)) {
43
+ for (const [kind, words] of Object.entries(raw.headerHints))
44
+ headerHints[kind] = strings(words);
45
+ }
46
+ return {
47
+ mode: strOr(raw.mode),
48
+ budgetMs: numOr(raw.budgetMs, 0),
49
+ ip: raw.ip === true,
50
+ nationalIds: strings(raw.nationalIds),
51
+ detectors,
52
+ declaredKinds: strings(raw.declaredKinds),
53
+ headerHints,
54
+ };
55
+ }
56
+ function toDisclosure(raw) {
57
+ // The server names the approval `uuid` (identity `ClientDataDisclosureView`); the client calls it
58
+ // `approvalUuid` to keep it apart from other ids in a consumer's state.
59
+ if (!isRecord(raw) || typeof raw.uuid !== 'string')
60
+ return null;
61
+ return {
62
+ approvalUuid: raw.uuid,
63
+ profile: strOr(raw.profile),
64
+ provider: strOr(raw.provider),
65
+ region: strOr(raw.region),
66
+ retentionDays: numOr(raw.retentionDays, 0),
67
+ dataClasses: strings(raw.dataClasses),
68
+ fileContent: raw.fileContent === true,
69
+ masking: toMasking(raw.masking),
70
+ statements: strings(raw.statements),
71
+ version: numOr(raw.version, 1),
72
+ digest: strOr(raw.digest),
73
+ // Fail safe: anything but an explicit true is "not acknowledged".
74
+ acknowledged: raw.acknowledged === true,
75
+ };
76
+ }
77
+ function fail(status, data, generic) {
78
+ const body = isRecord(data) ? data : {};
79
+ const code = isDisclosureErrorCode(body.code) ? body.code : null;
80
+ const out = {
81
+ ok: false,
82
+ status,
83
+ code,
84
+ error: code !== null ? CODE_TEXT[code] : (STATUS_TEXT[status] ?? generic),
85
+ };
86
+ if (code === 'disclosure_version_stale') {
87
+ // The 409 body carries the current disclosure in `disclosure` (no `acknowledged`: false here).
88
+ const current = toDisclosure(body.disclosure);
89
+ if (current !== null)
90
+ out.disclosure = current;
91
+ }
92
+ return out;
93
+ }
94
+ /** A transport exception becomes a typed failure; the thrown text is never kept. */
95
+ function thrown(generic) {
96
+ return { ok: false, status: 0, code: null, error: STATUS_TEXT[0] ?? generic };
97
+ }
98
+ export function createClientDataDisclosureService(http) {
99
+ return {
100
+ async getDisclosure(accessToken) {
101
+ const generic = 'Could not load the notice.';
102
+ try {
103
+ const r = await http.get(BASE, { bearerToken: accessToken });
104
+ if (!r.ok)
105
+ return fail(r.status, r.data, generic);
106
+ // The route answers `{ approvals: [...] }`.
107
+ const list = isRecord(r.data) && Array.isArray(r.data.approvals) ? r.data.approvals : [];
108
+ const disclosures = [];
109
+ for (const x of list) {
110
+ const row = toDisclosure(x);
111
+ if (row !== null)
112
+ disclosures.push(row);
113
+ }
114
+ return { ok: true, disclosures };
115
+ }
116
+ catch {
117
+ return thrown(generic);
118
+ }
119
+ },
120
+ /** Acknowledge the version the user read; the body is `{ version }` only. */
121
+ async acknowledgeDisclosure(accessToken, approvalUuid, input) {
122
+ const generic = 'Could not record your acknowledgement.';
123
+ try {
124
+ const r = await http.post(`${BASE}/${encodeURIComponent(approvalUuid)}/ack`, { version: input.version }, { bearerToken: accessToken });
125
+ if (!r.ok)
126
+ return fail(r.status, r.data, generic);
127
+ return { ok: true, approvalUuid, version: input.version };
128
+ }
129
+ catch {
130
+ return thrown(generic);
131
+ }
132
+ },
133
+ };
134
+ }
135
+ //# sourceMappingURL=disclosureService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosureService.js","sourceRoot":"","sources":["../../src/agentClientData/disclosureService.ts"],"names":[],"mappings":"AAuBA,MAAM,IAAI,GAAG,wCAAwC,CAAC;AAEtD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,eAAe,EAAE,GAAG;IACpB,kBAAkB,EAAE,GAAG;IACvB,wBAAwB,EAAE,GAAG;CACrB,CAAC;AAIX,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAC/C,uBAAuB,CACU,CAAC;AAEpC,MAAM,UAAU,qBAAqB,CAAC,CAAU;IAC9C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,SAAS,GAAkD;IAC/D,eAAe,EAAE,4DAA4D;IAC7E,kBAAkB,EAAE,iDAAiD;IACrE,wBAAwB,EACtB,2FAA2F;CAC9F,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,IAAyB;IAC3D,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,0DAA0D;AAC1D,MAAM,WAAW,GAAqC;IACpD,CAAC,EAAE,kEAAkE;IACrE,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,gDAAgD;IACrD,GAAG,EAAE,2DAA2D;CACjE,CAAC;AA8DF,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAgC,EAAE,CAC5D,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE3D,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,CAAC,GAAG,EAAE,EAAU,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,CAAS,EAAU,EAAE,CAC9C,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,MAAM,OAAO,GAAG,CAAC,CAAU,EAAY,EAAE,CACvC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9E,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,SAAS,GAAwC,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClE,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9C,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAA6B,EAAE,CAAC;IACjD,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAClG,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,IAAI;QACnB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACrC,SAAS;QACT,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACzC,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,kGAAkG;IAClG,wEAAwE;IACxE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO;QACL,YAAY,EAAE,GAAG,CAAC,IAAI;QACtB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QAC3B,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACzB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACrC,WAAW,EAAE,GAAG,CAAC,WAAW,KAAK,IAAI;QACrC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACnC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACzB,kEAAkE;QAClE,YAAY,EAAE,GAAG,CAAC,YAAY,KAAK,IAAI;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,MAAc,EAAE,IAAa,EAAE,OAAe;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,MAAM,GAAG,GAAsB;QAC7B,EAAE,EAAE,KAAK;QACT,MAAM;QACN,IAAI;QACJ,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC;KAC1E,CAAC;IACF,IAAI,IAAI,KAAK,0BAA0B,EAAE,CAAC;QACxC,+FAA+F;QAC/F,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,IAAI;YAAE,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oFAAoF;AACpF,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,IAAgB;IAChE,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,WAAW;YAC7B,MAAM,OAAO,GAAG,4BAA4B,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC7D,IAAI,CAAC,CAAC,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAClD,4CAA4C;gBAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,MAAM,WAAW,GAA2B,EAAE,CAAC;gBAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,GAAG,KAAK,IAAI;wBAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,KAAK,CAAC,qBAAqB,CACzB,WAAW,EACX,YAAY,EACZ,KAAK;YAEL,MAAM,OAAO,GAAG,wCAAwC,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CACvB,GAAG,IAAI,IAAI,kBAAkB,CAAC,YAAY,CAAC,MAAM,EACjD,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAC1B,EAAE,WAAW,EAAE,WAAW,EAAE,CAC7B,CAAC;gBACF,IAAI,CAAC,CAAC,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,5 +5,9 @@ export * from './auth/index.js';
5
5
  export * from './agent/index.js';
6
6
  export { createProposalService, previewCellText, PROPOSAL_ERROR_CODES, } from './proposals/proposalService.js';
7
7
  export type { ProposalService, ProposalState, ProposalOrigin, ProposalErrorCode, ProposalSummary, ProposalListQuery, ProposalEvidenceRef, ProposalMetadata, ProposalImpact, ProposalItemView, ProposalHistoryRow, ProposalDetail, ProposalDraft, SubmittedProposal, ProposalSelectionChange, ProposalFailure, ListProposalsResult, GetProposalResult, SubmitProposalResult, SelectProposalItemsResult, ProposalTransitionResult, ApplyProposalResult, } from './proposals/proposalService.js';
8
+ export { createClientDataService, clientDataErrorText, isClientDataErrorCode, CLIENT_DATA_ERROR_CODES, CLIENT_DATA_ERROR_STATUS, } from './agentClientData/clientDataService.js';
9
+ export type { ClientDataService, ClientDataErrorCode, ClientDataDataClass, DeploymentApproval, ClientDataApproval, ClientDataApprovalState, ClientDataOverview, ClientDataRequestInput, ClientDataConfirmInput, ClientDataRevokeInput, ClientDataFailure, ListClientDataResult, RequestClientDataResult, ConfirmClientDataResult, RevokeClientDataResult, } from './agentClientData/clientDataService.js';
10
+ export { createClientDataDisclosureService, disclosureErrorText, isDisclosureErrorCode, DISCLOSURE_ERROR_CODES, DISCLOSURE_ERROR_STATUS, } from './agentClientData/disclosureService.js';
11
+ export type { ClientDataDisclosureService, ClientDataDisclosure, ClientDataDisclosureMasking, DisclosureErrorCode, DisclosureFailure, GetDisclosureResult, AcknowledgeDisclosureResult, AcknowledgeDisclosureInput, } from './agentClientData/disclosureService.js';
8
12
  export type { PermissionCatalogRow } from './auth/identityService.js';
9
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAExC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,iCAAiC,EACjC,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,wCAAwC,CAAC;AAEhD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -5,4 +5,8 @@ export * from './auth/index.js';
5
5
  export * from './agent/index.js';
6
6
  // Governed proposals client (G-036 M3 / G-037 D4): values are text, ids are for linking only.
7
7
  export { createProposalService, previewCellText, PROPOSAL_ERROR_CODES, } from './proposals/proposalService.js';
8
+ // Client-data approval client (model-provider-client-data P2): the step-up code is never echoed.
9
+ export { createClientDataService, clientDataErrorText, isClientDataErrorCode, CLIENT_DATA_ERROR_CODES, CLIENT_DATA_ERROR_STATUS, } from './agentClientData/clientDataService.js';
10
+ // Client-data disclosure acknowledgement client (model-provider-client-data step 4).
11
+ export { createClientDataDisclosureService, disclosureErrorText, isDisclosureErrorCode, DISCLOSURE_ERROR_CODES, DISCLOSURE_ERROR_STATUS, } from './agentClientData/disclosureService.js';
8
12
  //# sourceMappingURL=index.js.map