@qianxiang-ai/fu-report-sdk 0.0.0-stage → 1.1.7
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/dist/client.d.ts +92 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +476 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime-config.d.ts +5 -0
- package/dist/runtime-config.d.ts.map +1 -0
- package/dist/runtime-config.js +54 -0
- package/dist/runtime-config.js.map +1 -0
- package/package.json +27 -3
- package/README.md +0 -3
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type ReportGroup, type ReportGroupItem, type CreatedReport, type ReportPage, type ReportCategory, type FuReportRuntimeConfig, type ReportQuery, type DesignerDocument, type DesignerContext, type SqlDatasetDefinition, type SqlDatasetUpdateCommand, type SqlDatasetSaveResult, type SqlDatasetCreateCommand, type SqlDatasetCreateResult, type SqlDatasetDeleteCommand, type SqlDatasetDeleteResult, type ManagedDatasetConfigurationSummary, type ManagedDatasetDefinition, type ManagedDatasetCreateCommand, type ManagedDatasetCreateResult, type ManagedDatasetUpdateCommand, type ManagedDatasetSaveResult, type ParameterOptionQuery, type ParameterOptionPage, type ManagedFormTargetSummary, type ManagedFormDefinition, type ManagedFormDefinitionCommand, type ManagedFormDeleteCommand, type ManagedFormSaveResult, type ManagedFormDeleteResult, type ManagedFormRecordCommand, type ManagedFormRecordResult, type ManagedFormSubmitCommand, type ManagedFormSubmissionResult, type ServerExportCommand, type ExportRun, type DesignerDocumentSaveCommand, type DesignerDocumentSaveResult, type ViewerRenderModel, type DatasetQuery, type DatasetQueryPage } from '@qianxiang-ai/fu-report-contracts';
|
|
2
|
+
export interface FuReportClientOptions {
|
|
3
|
+
config: FuReportRuntimeConfig;
|
|
4
|
+
fetcher?: typeof fetch;
|
|
5
|
+
requestContextProvider?: FuReportRequestContextProvider;
|
|
6
|
+
}
|
|
7
|
+
export interface FuReportRequestContext {
|
|
8
|
+
headers?: HeadersInit;
|
|
9
|
+
credentials?: RequestCredentials;
|
|
10
|
+
contextKey?: string;
|
|
11
|
+
}
|
|
12
|
+
export type FuReportRequestContextValue = FuReportRequestContext | null | undefined;
|
|
13
|
+
export type FuReportRequestContextProvider = () => FuReportRequestContextValue | PromiseLike<FuReportRequestContextValue>;
|
|
14
|
+
export interface FuReportRequestOptions {
|
|
15
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
16
|
+
query?: Record<string, unknown>;
|
|
17
|
+
body?: unknown;
|
|
18
|
+
form?: boolean;
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
headers?: HeadersInit;
|
|
21
|
+
}
|
|
22
|
+
export declare class FuReportClient {
|
|
23
|
+
readonly config: FuReportRuntimeConfig;
|
|
24
|
+
private readonly fetcher;
|
|
25
|
+
private readonly requestContextProvider?;
|
|
26
|
+
private readonly activeRequests;
|
|
27
|
+
private requestSequence;
|
|
28
|
+
private latestAppliedContextSequence;
|
|
29
|
+
private requestContextInitialized;
|
|
30
|
+
private requestContextKey;
|
|
31
|
+
constructor(options: FuReportClientOptions);
|
|
32
|
+
request<T>(path: string, options?: FuReportRequestOptions): Promise<T>;
|
|
33
|
+
cancelOutstandingRequests(reason?: string): void;
|
|
34
|
+
readonly reports: {
|
|
35
|
+
list: (query?: ReportQuery) => Promise<ReportPage>;
|
|
36
|
+
create: () => Promise<CreatedReport>;
|
|
37
|
+
remove: (id: string) => Promise<boolean>;
|
|
38
|
+
copy: (id: string) => Promise<boolean>;
|
|
39
|
+
};
|
|
40
|
+
readonly categories: {
|
|
41
|
+
list: (parentId?: string) => Promise<ReportCategory[]>;
|
|
42
|
+
create: (name: string, parentId?: string) => Promise<ReportCategory>;
|
|
43
|
+
rename: (id: string, name: string) => Promise<unknown>;
|
|
44
|
+
remove: (id: string) => Promise<unknown>;
|
|
45
|
+
countReports: (id: string) => Promise<number>;
|
|
46
|
+
moveReport: (reportId: string, categoryId?: string) => Promise<unknown>;
|
|
47
|
+
};
|
|
48
|
+
readonly reportGroups: {
|
|
49
|
+
get: (id: string) => Promise<ReportGroup & {
|
|
50
|
+
items: ReportGroupItem[];
|
|
51
|
+
}>;
|
|
52
|
+
};
|
|
53
|
+
readonly designer: {
|
|
54
|
+
getContext: (reportId: string, signal?: AbortSignal) => Promise<DesignerContext>;
|
|
55
|
+
getDocument: (reportId: string, signal?: AbortSignal) => Promise<DesignerDocument>;
|
|
56
|
+
getManagedDatasetCatalog: (reportId: string, signal?: AbortSignal) => Promise<ManagedDatasetConfigurationSummary[]>;
|
|
57
|
+
getManagedDataset: (reportId: string, datasetId: string, signal?: AbortSignal) => Promise<ManagedDatasetDefinition>;
|
|
58
|
+
createManagedDataset: (reportId: string, command: ManagedDatasetCreateCommand, signal?: AbortSignal) => Promise<ManagedDatasetCreateResult>;
|
|
59
|
+
saveManagedDataset: (reportId: string, datasetId: string, command: ManagedDatasetUpdateCommand, signal?: AbortSignal) => Promise<ManagedDatasetSaveResult>;
|
|
60
|
+
deleteManagedDataset: (reportId: string, datasetId: string, command: SqlDatasetDeleteCommand, signal?: AbortSignal) => Promise<SqlDatasetDeleteResult>;
|
|
61
|
+
getSqlDataset: (reportId: string, datasetId: string, signal?: AbortSignal) => Promise<SqlDatasetDefinition>;
|
|
62
|
+
createSqlDataset: (reportId: string, command: SqlDatasetCreateCommand, signal?: AbortSignal) => Promise<SqlDatasetCreateResult>;
|
|
63
|
+
saveSqlDataset: (reportId: string, datasetId: string, command: SqlDatasetUpdateCommand, signal?: AbortSignal) => Promise<SqlDatasetSaveResult>;
|
|
64
|
+
deleteSqlDataset: (reportId: string, datasetId: string, command: SqlDatasetDeleteCommand, signal?: AbortSignal) => Promise<SqlDatasetDeleteResult>;
|
|
65
|
+
saveDocument: (reportId: string, command: DesignerDocumentSaveCommand, signal?: AbortSignal) => Promise<DesignerDocumentSaveResult>;
|
|
66
|
+
getManagedFormTargets: (reportId: string, signal?: AbortSignal) => Promise<ManagedFormTargetSummary[]>;
|
|
67
|
+
getManagedFormDefinition: (reportId: string, signal?: AbortSignal) => Promise<ManagedFormDefinition>;
|
|
68
|
+
saveManagedFormDefinition: (reportId: string, command: ManagedFormDefinitionCommand, signal?: AbortSignal) => Promise<ManagedFormSaveResult>;
|
|
69
|
+
deleteManagedFormDefinition: (reportId: string, command: ManagedFormDeleteCommand, signal?: AbortSignal) => Promise<ManagedFormDeleteResult>;
|
|
70
|
+
};
|
|
71
|
+
readonly viewer: {
|
|
72
|
+
getContext: (reportId: string, signal?: AbortSignal) => Promise<ViewerRenderModel>;
|
|
73
|
+
getParameterOptions: (reportId: string, parameterName: string, input: ParameterOptionQuery, signal?: AbortSignal) => Promise<ParameterOptionPage>;
|
|
74
|
+
loadFormRecord: (reportId: string, input: ManagedFormRecordCommand, signal?: AbortSignal) => Promise<ManagedFormRecordResult>;
|
|
75
|
+
submitForm: (reportId: string, idempotencyKey: string, input: ManagedFormSubmitCommand, signal?: AbortSignal) => Promise<ManagedFormSubmissionResult>;
|
|
76
|
+
query: (reportId: string, input: DatasetQuery, signal?: AbortSignal) => Promise<DatasetQueryPage>;
|
|
77
|
+
cancelQuery: (reportId: string, queryId: string) => Promise<boolean>;
|
|
78
|
+
queryAll: (reportId: string, input: DatasetQuery, maxRows: number, signal?: AbortSignal) => Promise<DatasetQueryPage[]>;
|
|
79
|
+
};
|
|
80
|
+
readonly exports: {
|
|
81
|
+
submit: (reportId: string, command: ServerExportCommand, signal?: AbortSignal) => Promise<ExportRun>;
|
|
82
|
+
status: (reportId: string, exportId: string, signal?: AbortSignal) => Promise<ExportRun>;
|
|
83
|
+
cancel: (reportId: string, exportId: string, signal?: AbortSignal) => Promise<ExportRun>;
|
|
84
|
+
download: (reportId: string, exportId: string, signal?: AbortSignal) => Promise<Blob>;
|
|
85
|
+
};
|
|
86
|
+
private createUrl;
|
|
87
|
+
private requestBlob;
|
|
88
|
+
private resolveRequestContext;
|
|
89
|
+
private applyRequestContextKey;
|
|
90
|
+
private createHeaders;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAsChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,kCAAkC,EACvC,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAA;AAE1C,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,qBAAqB,CAAA;IAC7B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,sBAAsB,CAAC,EAAE,8BAA8B,CAAA;CACxD;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,2BAA2B,GAAG,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAA;AAEnF,MAAM,MAAM,8BAA8B,GAAG,MAC3C,2BAA2B,GAAG,WAAW,CAAC,2BAA2B,CAAC,CAAA;AAQxE,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAgC;IACxE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,4BAA4B,CAAI;IACxC,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,iBAAiB,CAAoB;gBAEjC,OAAO,EAAE,qBAAqB;IASpC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,CAAC,CAAC;IAyDhF,yBAAyB,CAAC,MAAM,SAAuC,GAAG,IAAI;IAK9E,QAAQ,CAAC,OAAO;uBACM,WAAW,KAAQ,OAAO,CAAC,UAAU,CAAC;sBAYxC,OAAO,CAAC,aAAa,CAAC;qBAG3B,MAAM;mBAMR,MAAM;MAMlB;IAED,QAAQ,CAAC,UAAU;qCACa,OAAO,CAAC,cAAc,EAAE,CAAC;uBAMlC,MAAM,wBAAmB,OAAO,CAAC,cAAc,CAAC;qBAOxD,MAAM,QAAQ,MAAM;qBASpB,MAAM;2BAQM,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;+BAO1B,MAAM;MAS9B;IAED,QAAQ,CAAC,YAAY;kBACH,MAAM,KAAG,OAAO,CAAC,WAAW,GAAG;YAAE,KAAK,EAAE,eAAe,EAAE,CAAA;SAAE,CAAC;MAM7E;IAED,QAAQ,CAAC,QAAQ;+BACc,MAAM,WAAW,WAAW,KAAG,OAAO,CAAC,eAAe,CAAC;gCAMtD,MAAM,WAAW,WAAW,KAAG,OAAO,CAAC,gBAAgB,CAAC;6CAO1E,MAAM,WACP,WAAW,KACnB,OAAO,CAAC,kCAAkC,EAAE,CAAC;sCAQpC,MAAM,aACL,MAAM,WACR,WAAW,KACnB,OAAO,CAAC,wBAAwB,CAAC;yCASxB,MAAM,WACP,2BAA2B,WAC3B,WAAW,KACnB,OAAO,CAAC,0BAA0B,CAAC;uCAQ1B,MAAM,aACL,MAAM,WACR,2BAA2B,WAC3B,WAAW,KACnB,OAAO,CAAC,wBAAwB,CAAC;yCASxB,MAAM,aACL,MAAM,WACR,uBAAuB,WACvB,WAAW,KACnB,OAAO,CAAC,sBAAsB,CAAC;kCAStB,MAAM,aACL,MAAM,WACR,WAAW,KACnB,OAAO,CAAC,oBAAoB,CAAC;qCASpB,MAAM,WACP,uBAAuB,WACvB,WAAW,KACnB,OAAO,CAAC,sBAAsB,CAAC;mCAQtB,MAAM,aACL,MAAM,WACR,uBAAuB,WACvB,WAAW,KACnB,OAAO,CAAC,oBAAoB,CAAC;qCASpB,MAAM,aACL,MAAM,WACR,uBAAuB,WACvB,WAAW,KACnB,OAAO,CAAC,sBAAsB,CAAC;iCAStB,MAAM,WACP,2BAA2B,WAC3B,WAAW,KACnB,OAAO,CAAC,0BAA0B,CAAC;0CAW1B,MAAM,WACP,WAAW,KACnB,OAAO,CAAC,wBAAwB,EAAE,CAAC;6CAO1B,MAAM,WACP,WAAW,KACnB,OAAO,CAAC,qBAAqB,CAAC;8CAOrB,MAAM,WACP,4BAA4B,WAC5B,WAAW,KACnB,OAAO,CAAC,qBAAqB,CAAC;gDASrB,MAAM,WACP,wBAAwB,WACxB,WAAW,KACnB,OAAO,CAAC,uBAAuB,CAAC;MAQpC;IAED,QAAQ,CAAC,MAAM;+BACgB,MAAM,WAAW,WAAW,KAAG,OAAO,CAAC,iBAAiB,CAAC;wCAO1E,MAAM,iBACD,MAAM,SACd,oBAAoB,WAClB,WAAW,KACnB,OAAO,CAAC,mBAAmB,CAAC;mCASnB,MAAM,SACT,wBAAwB,WACtB,WAAW,KACnB,OAAO,CAAC,uBAAuB,CAAC;+BASvB,MAAM,kBACA,MAAM,SACf,wBAAwB,WACtB,WAAW,KACnB,OAAO,CAAC,2BAA2B,CAAC;0BAW3B,MAAM,SACT,YAAY,WACV,WAAW,KACnB,OAAO,CAAC,gBAAgB,CAAC;gCAeE,MAAM,WAAW,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;6BAS5D,MAAM,SACT,YAAY,WACV,MAAM,WACN,WAAW,KACnB,OAAO,CAAC,gBAAgB,EAAE,CAAC;MAe/B;IAED,QAAQ,CAAC,OAAO;2BAEF,MAAM,WACP,mBAAmB,WACnB,WAAW,KACnB,OAAO,CAAC,SAAS,CAAC;2BAYT,MAAM,YACN,MAAM,WACP,WAAW,KACnB,OAAO,CAAC,SAAS,CAAC;2BAST,MAAM,YACN,MAAM,WACP,WAAW,KACnB,OAAO,CAAC,SAAS,CAAC;6BAST,MAAM,YACN,MAAM,WACP,WAAW,KACnB,OAAO,CAAC,IAAI,CAAC;MAQjB;IAED,OAAO,CAAC,SAAS;YAOH,WAAW;YA6BX,qBAAqB;IAgBnC,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,aAAa;CAMtB"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
import { FuReportApiError, FuIdSchema, ReportGroupSchema, CreatedReportSchema, ReportCategorySchema, ReportQuerySchema, ReportCountSchema, parseReportPage, parseReportCategories, ViewerRenderModelSchema, DatasetQuerySchema, DatasetQueryPageSchema, QueryIdSchema, DesignerDocumentSchema, DesignerContextSchema, SqlDatasetDefinitionSchema, SqlDatasetUpdateCommandSchema, SqlDatasetSaveResultSchema, SqlDatasetCreateCommandSchema, SqlDatasetCreateResultSchema, SqlDatasetDeleteCommandSchema, SqlDatasetDeleteResultSchema, ManagedDatasetCatalogSchema, ManagedDatasetDefinitionSchema, ManagedDatasetCreateCommandSchema, ManagedDatasetCreateResultSchema, ManagedDatasetUpdateCommandSchema, ManagedDatasetSaveResultSchema, PublicParameterNameSchema, ParameterOptionQuerySchema, ParameterOptionPageSchema, ManagedFormTargetCatalogSchema, ManagedFormDefinitionSchema, ManagedFormDefinitionCommandSchema, ManagedFormDeleteCommandSchema, ManagedFormSaveResultSchema, ManagedFormDeleteResultSchema, ManagedFormRecordCommandSchema, ManagedFormRecordResultSchema, ManagedFormSubmitCommandSchema, ManagedFormSubmissionResultSchema, IdempotencyKeySchema, ServerExportCommandSchema, ExportRunSchema, DesignerDocumentSaveCommandSchema, DesignerDocumentSaveResultSchema } from '@qianxiang-ai/fu-report-contracts';
|
|
2
|
+
export class FuReportClient {
|
|
3
|
+
config;
|
|
4
|
+
fetcher;
|
|
5
|
+
requestContextProvider;
|
|
6
|
+
activeRequests = new Set();
|
|
7
|
+
requestSequence = 0;
|
|
8
|
+
latestAppliedContextSequence = 0;
|
|
9
|
+
requestContextInitialized = false;
|
|
10
|
+
requestContextKey;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.config = options.config;
|
|
13
|
+
// Window.fetch is receiver-sensitive in browsers. Storing it directly on
|
|
14
|
+
// the client and later invoking `this.fetcher(...)` changes its receiver
|
|
15
|
+
// to FuReportClient and Chromium rejects the call as an illegal invocation.
|
|
16
|
+
this.fetcher = options.fetcher ?? globalThis.fetch.bind(globalThis);
|
|
17
|
+
this.requestContextProvider = options.requestContextProvider;
|
|
18
|
+
}
|
|
19
|
+
async request(path, options = {}) {
|
|
20
|
+
const requestSequence = ++this.requestSequence;
|
|
21
|
+
const controller = new AbortController();
|
|
22
|
+
const abortFromCaller = () => controller.abort(options.signal?.reason);
|
|
23
|
+
if (options.signal?.aborted)
|
|
24
|
+
abortFromCaller();
|
|
25
|
+
else
|
|
26
|
+
options.signal?.addEventListener('abort', abortFromCaller, { once: true });
|
|
27
|
+
this.activeRequests.add(controller);
|
|
28
|
+
try {
|
|
29
|
+
const method = options.method ?? 'GET';
|
|
30
|
+
const url = this.createUrl(path, options.query);
|
|
31
|
+
const requestContext = await this.resolveRequestContext();
|
|
32
|
+
if (controller.signal.aborted)
|
|
33
|
+
throw controller.signal.reason;
|
|
34
|
+
this.applyRequestContextKey(requestContext.contextKey, requestSequence, controller);
|
|
35
|
+
if (controller.signal.aborted)
|
|
36
|
+
throw controller.signal.reason;
|
|
37
|
+
const headers = requestContext.headers;
|
|
38
|
+
const requestHeaders = new Headers(options.headers);
|
|
39
|
+
requestHeaders.forEach((value, name) => headers.set(name, value));
|
|
40
|
+
for (const name of SDK_CONTROLLED_REQUEST_HEADERS)
|
|
41
|
+
headers.delete(name);
|
|
42
|
+
headers.set('Accept', 'application/json');
|
|
43
|
+
if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method.toUpperCase())) {
|
|
44
|
+
headers.set('X-Fu-Report-CSRF', '1');
|
|
45
|
+
}
|
|
46
|
+
let body;
|
|
47
|
+
if (options.body !== undefined) {
|
|
48
|
+
if (options.form) {
|
|
49
|
+
headers.set('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
|
|
50
|
+
body = toSearchParams(options.body).toString();
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
headers.set('Content-Type', 'application/json;charset=UTF-8');
|
|
54
|
+
body = JSON.stringify(options.body);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const response = await this.fetcher(url, {
|
|
58
|
+
method,
|
|
59
|
+
headers,
|
|
60
|
+
body,
|
|
61
|
+
signal: controller.signal,
|
|
62
|
+
credentials: requestContext.credentials
|
|
63
|
+
});
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
throw new FuReportApiError(await httpErrorMessage(response), response.status, response.status);
|
|
66
|
+
}
|
|
67
|
+
const envelope = await response.json();
|
|
68
|
+
if (!envelope.success) {
|
|
69
|
+
throw new FuReportApiError(envelope.message || 'Fu Report request failed', envelope.code);
|
|
70
|
+
}
|
|
71
|
+
return envelope.result;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
options.signal?.removeEventListener('abort', abortFromCaller);
|
|
75
|
+
this.activeRequests.delete(controller);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
cancelOutstandingRequests(reason = 'FU_REPORT_SECURITY_CONTEXT_CHANGED') {
|
|
79
|
+
for (const controller of this.activeRequests)
|
|
80
|
+
controller.abort(reason);
|
|
81
|
+
this.activeRequests.clear();
|
|
82
|
+
}
|
|
83
|
+
reports = {
|
|
84
|
+
list: async (query = {}) => {
|
|
85
|
+
const parsed = ReportQuerySchema.parse(query);
|
|
86
|
+
return parseReportPage(await this.request('/api/v2/reports', {
|
|
87
|
+
query: {
|
|
88
|
+
categoryId: parsed.reportType,
|
|
89
|
+
name: parsed.name,
|
|
90
|
+
pageNo: parsed.pageNo,
|
|
91
|
+
pageSize: parsed.pageSize
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
94
|
+
},
|
|
95
|
+
create: async () => CreatedReportSchema.parse(await this.request('/api/v2/reports', { method: 'POST' })),
|
|
96
|
+
remove: (id) => {
|
|
97
|
+
const reportId = FuIdSchema.parse(id);
|
|
98
|
+
return this.request(`/api/v2/reports/${encodeURIComponent(reportId)}`, {
|
|
99
|
+
method: 'DELETE'
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
copy: (id) => {
|
|
103
|
+
const reportId = FuIdSchema.parse(id);
|
|
104
|
+
return this.request(`/api/v2/reports/${encodeURIComponent(reportId)}/copy`, { method: 'POST' });
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
categories = {
|
|
108
|
+
list: async (parentId = '0') => {
|
|
109
|
+
const categoryId = FuIdSchema.parse(parentId);
|
|
110
|
+
return parseReportCategories(await this.request('/api/v2/report-categories', {
|
|
111
|
+
query: { parentId: categoryId }
|
|
112
|
+
}));
|
|
113
|
+
},
|
|
114
|
+
create: async (name, parentId = '0') => {
|
|
115
|
+
const title = ReportCategorySchema.shape.title.parse(name);
|
|
116
|
+
const categoryId = FuIdSchema.parse(parentId);
|
|
117
|
+
return ReportCategorySchema.parse(await this.request('/api/v2/report-categories', {
|
|
118
|
+
method: 'POST', body: { name: title, parentId: categoryId }
|
|
119
|
+
}));
|
|
120
|
+
},
|
|
121
|
+
rename: (id, name) => {
|
|
122
|
+
const categoryId = FuIdSchema.parse(id);
|
|
123
|
+
const title = ReportCategorySchema.shape.title.parse(name);
|
|
124
|
+
return this.request(`/api/v2/report-categories/${encodeURIComponent(categoryId)}`, {
|
|
125
|
+
method: 'PUT', body: { name: title }
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
remove: (id) => {
|
|
129
|
+
const categoryId = FuIdSchema.parse(id);
|
|
130
|
+
return this.request(`/api/v2/report-categories/${encodeURIComponent(categoryId)}`, {
|
|
131
|
+
method: 'DELETE'
|
|
132
|
+
});
|
|
133
|
+
},
|
|
134
|
+
countReports: async (id) => {
|
|
135
|
+
const categoryId = FuIdSchema.parse(id);
|
|
136
|
+
const result = await this.request(`/api/v2/report-categories/${encodeURIComponent(categoryId)}/report-count`);
|
|
137
|
+
return ReportCountSchema.parse(result);
|
|
138
|
+
},
|
|
139
|
+
moveReport: (reportId, categoryId = '0') => {
|
|
140
|
+
const safeReportId = FuIdSchema.parse(reportId);
|
|
141
|
+
const safeCategoryId = FuIdSchema.parse(categoryId);
|
|
142
|
+
return this.request(`/api/v2/reports/${encodeURIComponent(safeReportId)}/category`, {
|
|
143
|
+
method: 'PUT', body: { categoryId: safeCategoryId }
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
reportGroups = {
|
|
148
|
+
get: async (id) => {
|
|
149
|
+
const publicGroupId = FuIdSchema.parse(id);
|
|
150
|
+
return ReportGroupSchema.parse(await this.request(`/api/v2/report-groups/${encodeURIComponent(publicGroupId)}`));
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
designer = {
|
|
154
|
+
getContext: async (reportId, signal) => {
|
|
155
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
156
|
+
return DesignerContextSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/designer-context`, { signal }));
|
|
157
|
+
},
|
|
158
|
+
getDocument: async (reportId, signal) => {
|
|
159
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
160
|
+
return DesignerDocumentSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/document`, { signal }));
|
|
161
|
+
},
|
|
162
|
+
getManagedDatasetCatalog: async (reportId, signal) => {
|
|
163
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
164
|
+
return ManagedDatasetCatalogSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/managed-dataset-configurations`, { signal }));
|
|
165
|
+
},
|
|
166
|
+
getManagedDataset: async (reportId, datasetId, signal) => {
|
|
167
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
168
|
+
const publicDatasetId = FuIdSchema.parse(datasetId);
|
|
169
|
+
return ManagedDatasetDefinitionSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/datasets/${encodeURIComponent(publicDatasetId)}/managed-definition`, { signal }));
|
|
170
|
+
},
|
|
171
|
+
createManagedDataset: async (reportId, command, signal) => {
|
|
172
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
173
|
+
return ManagedDatasetCreateResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/managed-datasets`, { method: 'POST', body: ManagedDatasetCreateCommandSchema.parse(command), signal }));
|
|
174
|
+
},
|
|
175
|
+
saveManagedDataset: async (reportId, datasetId, command, signal) => {
|
|
176
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
177
|
+
const publicDatasetId = FuIdSchema.parse(datasetId);
|
|
178
|
+
return ManagedDatasetSaveResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/datasets/${encodeURIComponent(publicDatasetId)}/managed-definition`, { method: 'PUT', body: ManagedDatasetUpdateCommandSchema.parse(command), signal }));
|
|
179
|
+
},
|
|
180
|
+
deleteManagedDataset: async (reportId, datasetId, command, signal) => {
|
|
181
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
182
|
+
const publicDatasetId = FuIdSchema.parse(datasetId);
|
|
183
|
+
return SqlDatasetDeleteResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/datasets/${encodeURIComponent(publicDatasetId)}/managed-definition`, { method: 'DELETE', body: SqlDatasetDeleteCommandSchema.parse(command), signal }));
|
|
184
|
+
},
|
|
185
|
+
getSqlDataset: async (reportId, datasetId, signal) => {
|
|
186
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
187
|
+
const publicDatasetId = FuIdSchema.parse(datasetId);
|
|
188
|
+
return SqlDatasetDefinitionSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/datasets/${encodeURIComponent(publicDatasetId)}`, { signal }));
|
|
189
|
+
},
|
|
190
|
+
createSqlDataset: async (reportId, command, signal) => {
|
|
191
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
192
|
+
return SqlDatasetCreateResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/datasets`, { method: 'POST', body: SqlDatasetCreateCommandSchema.parse(command), signal }));
|
|
193
|
+
},
|
|
194
|
+
saveSqlDataset: async (reportId, datasetId, command, signal) => {
|
|
195
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
196
|
+
const publicDatasetId = FuIdSchema.parse(datasetId);
|
|
197
|
+
return SqlDatasetSaveResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/datasets/${encodeURIComponent(publicDatasetId)}`, { method: 'PUT', body: SqlDatasetUpdateCommandSchema.parse(command), signal }));
|
|
198
|
+
},
|
|
199
|
+
deleteSqlDataset: async (reportId, datasetId, command, signal) => {
|
|
200
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
201
|
+
const publicDatasetId = FuIdSchema.parse(datasetId);
|
|
202
|
+
return SqlDatasetDeleteResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/datasets/${encodeURIComponent(publicDatasetId)}`, { method: 'DELETE', body: SqlDatasetDeleteCommandSchema.parse(command), signal }));
|
|
203
|
+
},
|
|
204
|
+
saveDocument: async (reportId, command, signal) => {
|
|
205
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
206
|
+
return DesignerDocumentSaveResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/document`, {
|
|
207
|
+
method: 'PUT',
|
|
208
|
+
body: DesignerDocumentSaveCommandSchema.parse(command),
|
|
209
|
+
signal
|
|
210
|
+
}));
|
|
211
|
+
},
|
|
212
|
+
getManagedFormTargets: async (reportId, signal) => {
|
|
213
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
214
|
+
return ManagedFormTargetCatalogSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/form-targets`, { signal }));
|
|
215
|
+
},
|
|
216
|
+
getManagedFormDefinition: async (reportId, signal) => {
|
|
217
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
218
|
+
return ManagedFormDefinitionSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/form-definition`, { signal }));
|
|
219
|
+
},
|
|
220
|
+
saveManagedFormDefinition: async (reportId, command, signal) => {
|
|
221
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
222
|
+
return ManagedFormSaveResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/form-definition`, {
|
|
223
|
+
method: 'PUT', body: ManagedFormDefinitionCommandSchema.parse(command), signal
|
|
224
|
+
}));
|
|
225
|
+
},
|
|
226
|
+
deleteManagedFormDefinition: async (reportId, command, signal) => {
|
|
227
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
228
|
+
return ManagedFormDeleteResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/form-definition`, {
|
|
229
|
+
method: 'DELETE', body: ManagedFormDeleteCommandSchema.parse(command), signal
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
viewer = {
|
|
234
|
+
getContext: async (reportId, signal) => {
|
|
235
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
236
|
+
return ViewerRenderModelSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/viewer-context`, { signal }));
|
|
237
|
+
},
|
|
238
|
+
getParameterOptions: async (reportId, parameterName, input, signal) => {
|
|
239
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
240
|
+
const publicParameterName = PublicParameterNameSchema.parse(parameterName);
|
|
241
|
+
return ParameterOptionPageSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/parameters/${encodeURIComponent(publicParameterName)}/options`, { method: 'POST', body: ParameterOptionQuerySchema.parse(input), signal }));
|
|
242
|
+
},
|
|
243
|
+
loadFormRecord: async (reportId, input, signal) => {
|
|
244
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
245
|
+
return ManagedFormRecordResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/form-record`, {
|
|
246
|
+
method: 'POST', body: ManagedFormRecordCommandSchema.parse(input), signal
|
|
247
|
+
}));
|
|
248
|
+
},
|
|
249
|
+
submitForm: async (reportId, idempotencyKey, input, signal) => {
|
|
250
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
251
|
+
const safeKey = IdempotencyKeySchema.parse(idempotencyKey);
|
|
252
|
+
return ManagedFormSubmissionResultSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/form-submissions`, {
|
|
253
|
+
method: 'POST', body: ManagedFormSubmitCommandSchema.parse(input), signal,
|
|
254
|
+
headers: { 'Idempotency-Key': safeKey, 'X-Fu-Report-CSRF': '1' }
|
|
255
|
+
}));
|
|
256
|
+
},
|
|
257
|
+
query: async (reportId, input, signal) => {
|
|
258
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
259
|
+
const command = DatasetQuerySchema.parse(input);
|
|
260
|
+
const cancel = () => { void this.viewer.cancelQuery(publicReportId, command.queryId).catch(() => undefined); };
|
|
261
|
+
if (!signal?.aborted)
|
|
262
|
+
signal?.addEventListener('abort', cancel, { once: true });
|
|
263
|
+
try {
|
|
264
|
+
return DatasetQueryPageSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/query`, {
|
|
265
|
+
method: 'POST', body: command, signal
|
|
266
|
+
}));
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
signal?.removeEventListener('abort', cancel);
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
cancelQuery: async (reportId, queryId) => {
|
|
273
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
274
|
+
const safeQueryId = QueryIdSchema.parse(queryId);
|
|
275
|
+
return this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/queries/${encodeURIComponent(safeQueryId)}`, { method: 'DELETE' });
|
|
276
|
+
},
|
|
277
|
+
queryAll: async (reportId, input, maxRows, signal) => {
|
|
278
|
+
const pages = [];
|
|
279
|
+
let cursor = input.cursor;
|
|
280
|
+
let queryId = input.queryId;
|
|
281
|
+
let rowCount = 0;
|
|
282
|
+
do {
|
|
283
|
+
const limit = Math.min(input.limit, Math.max(1, maxRows - rowCount));
|
|
284
|
+
const page = await this.viewer.query(reportId, { ...input, queryId, cursor, limit }, signal);
|
|
285
|
+
pages.push(page);
|
|
286
|
+
rowCount += page.rows.length;
|
|
287
|
+
cursor = page.nextCursor ?? undefined;
|
|
288
|
+
queryId = crypto.randomUUID();
|
|
289
|
+
} while (cursor && rowCount < maxRows);
|
|
290
|
+
return pages;
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
exports = {
|
|
294
|
+
submit: async (reportId, command, signal) => {
|
|
295
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
296
|
+
const safeCommand = ServerExportCommandSchema.parse(command);
|
|
297
|
+
if (safeCommand.reportId !== publicReportId)
|
|
298
|
+
throw new Error('导出命令 reportId 与路径不一致');
|
|
299
|
+
return ExportRunSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/exports`, {
|
|
300
|
+
method: 'POST', body: safeCommand, signal,
|
|
301
|
+
headers: { 'Idempotency-Key': safeCommand.idempotencyKey, 'X-Fu-Report-CSRF': '1' }
|
|
302
|
+
}));
|
|
303
|
+
},
|
|
304
|
+
status: async (reportId, exportId, signal) => {
|
|
305
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
306
|
+
const safeExportId = ExportRunSchema.shape.runId.parse(exportId);
|
|
307
|
+
return ExportRunSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/exports/${encodeURIComponent(safeExportId)}`, { signal }));
|
|
308
|
+
},
|
|
309
|
+
cancel: async (reportId, exportId, signal) => {
|
|
310
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
311
|
+
const safeExportId = ExportRunSchema.shape.runId.parse(exportId);
|
|
312
|
+
return ExportRunSchema.parse(await this.request(`/api/v2/reports/${encodeURIComponent(publicReportId)}/exports/${encodeURIComponent(safeExportId)}`, { method: 'DELETE', signal, headers: { 'X-Fu-Report-CSRF': '1' } }));
|
|
313
|
+
},
|
|
314
|
+
download: async (reportId, exportId, signal) => {
|
|
315
|
+
const publicReportId = FuIdSchema.parse(reportId);
|
|
316
|
+
const safeExportId = ExportRunSchema.shape.runId.parse(exportId);
|
|
317
|
+
return this.requestBlob(`/api/v2/reports/${encodeURIComponent(publicReportId)}/exports/${encodeURIComponent(safeExportId)}/download`, signal);
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
createUrl(path, query) {
|
|
321
|
+
const base = trimSlash(this.config.apiBaseUrl);
|
|
322
|
+
const url = `${base}${path.startsWith('/') ? path : `/${path}`}`;
|
|
323
|
+
const search = toSearchParams(query);
|
|
324
|
+
return search.size > 0 ? `${url}?${search.toString()}` : url;
|
|
325
|
+
}
|
|
326
|
+
async requestBlob(path, signal) {
|
|
327
|
+
const requestSequence = ++this.requestSequence;
|
|
328
|
+
const controller = new AbortController();
|
|
329
|
+
const abortFromCaller = () => controller.abort(signal?.reason);
|
|
330
|
+
if (signal?.aborted)
|
|
331
|
+
abortFromCaller();
|
|
332
|
+
else
|
|
333
|
+
signal?.addEventListener('abort', abortFromCaller, { once: true });
|
|
334
|
+
this.activeRequests.add(controller);
|
|
335
|
+
try {
|
|
336
|
+
const requestContext = await this.resolveRequestContext();
|
|
337
|
+
if (controller.signal.aborted)
|
|
338
|
+
throw controller.signal.reason;
|
|
339
|
+
this.applyRequestContextKey(requestContext.contextKey, requestSequence, controller);
|
|
340
|
+
if (controller.signal.aborted)
|
|
341
|
+
throw controller.signal.reason;
|
|
342
|
+
const headers = requestContext.headers;
|
|
343
|
+
for (const name of SDK_CONTROLLED_REQUEST_HEADERS)
|
|
344
|
+
headers.delete(name);
|
|
345
|
+
headers.set('Accept', 'application/octet-stream');
|
|
346
|
+
const response = await this.fetcher(this.createUrl(path), {
|
|
347
|
+
method: 'GET', headers, signal: controller.signal,
|
|
348
|
+
credentials: requestContext.credentials
|
|
349
|
+
});
|
|
350
|
+
if (!response.ok)
|
|
351
|
+
throw new FuReportApiError(await httpErrorMessage(response), response.status, response.status);
|
|
352
|
+
return response.blob();
|
|
353
|
+
}
|
|
354
|
+
finally {
|
|
355
|
+
signal?.removeEventListener('abort', abortFromCaller);
|
|
356
|
+
this.activeRequests.delete(controller);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
async resolveRequestContext() {
|
|
360
|
+
const value = this.requestContextProvider
|
|
361
|
+
? await this.requestContextProvider()
|
|
362
|
+
: undefined;
|
|
363
|
+
if (value !== null && value !== undefined
|
|
364
|
+
&& (typeof value !== 'object' || Array.isArray(value))) {
|
|
365
|
+
throw new Error('请求上下文提供器必须返回对象、null 或 undefined');
|
|
366
|
+
}
|
|
367
|
+
const context = value ?? {};
|
|
368
|
+
return {
|
|
369
|
+
headers: this.createHeaders(context.headers),
|
|
370
|
+
credentials: requestCredentials(context.credentials),
|
|
371
|
+
contextKey: requestContextKey(context.contextKey)
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
applyRequestContextKey(contextKey, requestSequence, currentController) {
|
|
375
|
+
if (!this.requestContextInitialized) {
|
|
376
|
+
this.requestContextInitialized = true;
|
|
377
|
+
this.requestContextKey = contextKey;
|
|
378
|
+
this.latestAppliedContextSequence = requestSequence;
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (requestSequence < this.latestAppliedContextSequence
|
|
382
|
+
&& contextKey !== this.requestContextKey) {
|
|
383
|
+
currentController.abort('FU_REPORT_SECURITY_CONTEXT_CHANGED');
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
if (contextKey !== this.requestContextKey) {
|
|
387
|
+
this.requestContextKey = contextKey;
|
|
388
|
+
this.latestAppliedContextSequence = requestSequence;
|
|
389
|
+
for (const controller of this.activeRequests) {
|
|
390
|
+
if (controller !== currentController) {
|
|
391
|
+
controller.abort('FU_REPORT_SECURITY_CONTEXT_CHANGED');
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
this.latestAppliedContextSequence = Math.max(this.latestAppliedContextSequence, requestSequence);
|
|
397
|
+
}
|
|
398
|
+
createHeaders(contextHeaders) {
|
|
399
|
+
const headers = new Headers(contextHeaders);
|
|
400
|
+
for (const name of SDK_CONTROLLED_REQUEST_HEADERS)
|
|
401
|
+
headers.delete(name);
|
|
402
|
+
headers.set('Accept', 'application/json');
|
|
403
|
+
return headers;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
async function httpErrorMessage(response) {
|
|
407
|
+
const fallback = `Fu Report request failed: HTTP ${response.status}`;
|
|
408
|
+
try {
|
|
409
|
+
const value = await response.json();
|
|
410
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
411
|
+
return fallback;
|
|
412
|
+
const error = value.error;
|
|
413
|
+
if (!error || typeof error !== 'object' || Array.isArray(error))
|
|
414
|
+
return fallback;
|
|
415
|
+
const errorRecord = error;
|
|
416
|
+
const message = errorRecord.message;
|
|
417
|
+
if (typeof message !== 'string' || !message.trim() || message.length > 2_000
|
|
418
|
+
|| /[\u0000-\u001f\u007f]/.test(message))
|
|
419
|
+
return fallback;
|
|
420
|
+
const fields = errorRecord.fields;
|
|
421
|
+
if (!fields || typeof fields !== 'object' || Array.isArray(fields))
|
|
422
|
+
return message;
|
|
423
|
+
const detail = Object.values(fields).find(value => typeof value === 'string' && value.trim() && value.length <= 1_000
|
|
424
|
+
&& !/[\u0000-\u001f\u007f]/.test(value));
|
|
425
|
+
return typeof detail === 'string' ? `${message}:${detail}` : message;
|
|
426
|
+
}
|
|
427
|
+
catch {
|
|
428
|
+
return fallback;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
const SDK_CONTROLLED_REQUEST_HEADERS = [
|
|
432
|
+
'Accept',
|
|
433
|
+
'Content-Type',
|
|
434
|
+
'Content-Length',
|
|
435
|
+
'Host',
|
|
436
|
+
'Origin',
|
|
437
|
+
'Referer',
|
|
438
|
+
'Transfer-Encoding',
|
|
439
|
+
'X-Fu-Report-CSRF'
|
|
440
|
+
];
|
|
441
|
+
function requestCredentials(value) {
|
|
442
|
+
if (value === undefined)
|
|
443
|
+
return 'same-origin';
|
|
444
|
+
if (value === 'omit' || value === 'same-origin' || value === 'include')
|
|
445
|
+
return value;
|
|
446
|
+
throw new Error('请求上下文 credentials 必须为 omit、same-origin 或 include');
|
|
447
|
+
}
|
|
448
|
+
function requestContextKey(value) {
|
|
449
|
+
if (value === undefined)
|
|
450
|
+
return undefined;
|
|
451
|
+
if (typeof value !== 'string' || value.length === 0 || value.length > 512
|
|
452
|
+
|| /[\u0000-\u001f\u007f]/.test(value)) {
|
|
453
|
+
throw new Error('请求上下文 contextKey 必须为 1 到 512 个无控制字符的字符串');
|
|
454
|
+
}
|
|
455
|
+
return value;
|
|
456
|
+
}
|
|
457
|
+
function trimSlash(value) {
|
|
458
|
+
return value.endsWith('/') ? value.slice(0, -1) : value;
|
|
459
|
+
}
|
|
460
|
+
function toSearchParams(value) {
|
|
461
|
+
const search = new URLSearchParams();
|
|
462
|
+
if (!value || typeof value !== 'object')
|
|
463
|
+
return search;
|
|
464
|
+
Object.entries(value).forEach(([key, item]) => {
|
|
465
|
+
if (item === undefined || item === null || item === '')
|
|
466
|
+
return;
|
|
467
|
+
if (Array.isArray(item))
|
|
468
|
+
item.forEach(entry => search.append(key, String(entry)));
|
|
469
|
+
else if (typeof item === 'object')
|
|
470
|
+
search.set(key, JSON.stringify(item));
|
|
471
|
+
else
|
|
472
|
+
search.set(key, String(item));
|
|
473
|
+
});
|
|
474
|
+
return search;
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type FuReportAssetManifest, type FuReportRuntimeConfig } from '@qianxiang-ai/fu-report-contracts';
|
|
2
|
+
export declare function fetchFuReportRuntimeConfig(endpoint?: string, fetcher?: typeof fetch): Promise<FuReportRuntimeConfig>;
|
|
3
|
+
export declare function fetchFuReportAssetManifest(assetBaseUrl: string, fetcher?: typeof fetch): Promise<FuReportAssetManifest>;
|
|
4
|
+
export declare function verifyFuReportAssetResources(assetBaseUrl: string, manifest: FuReportAssetManifest, fetcher?: typeof fetch): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=runtime-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-config.d.ts","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,mCAAmC,CAAA;AAE1C,wBAAsB,0BAA0B,CAC9C,QAAQ,SAAkC,EAC1C,OAAO,GAAE,OAAO,KAAyC,GACxD,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;AAED,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,OAAO,KAAyC,GACxD,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;AAED,wBAAsB,4BAA4B,CAChD,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,GAAE,OAAO,KAAyC,GACxD,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { FuReportApiEnvelopeSchema, FuReportApiError, parseFuReportRuntimeConfig, FuReportAssetManifestSchema } from '@qianxiang-ai/fu-report-contracts';
|
|
2
|
+
export async function fetchFuReportRuntimeConfig(endpoint = '/fu-report/api/runtime-config', fetcher = globalThis.fetch.bind(globalThis)) {
|
|
3
|
+
const response = await fetcher(endpoint, {
|
|
4
|
+
credentials: 'omit',
|
|
5
|
+
headers: { Accept: 'application/json' }
|
|
6
|
+
});
|
|
7
|
+
if (!response.ok) {
|
|
8
|
+
throw new FuReportApiError(`Unable to load Fu Report runtime config: HTTP ${response.status}`, response.status, response.status);
|
|
9
|
+
}
|
|
10
|
+
const envelope = FuReportApiEnvelopeSchema.parse(await response.json());
|
|
11
|
+
if (!envelope.success) {
|
|
12
|
+
throw new FuReportApiError(envelope.message || 'Unable to load runtime config', envelope.code);
|
|
13
|
+
}
|
|
14
|
+
return parseFuReportRuntimeConfig(envelope.result);
|
|
15
|
+
}
|
|
16
|
+
export async function fetchFuReportAssetManifest(assetBaseUrl, fetcher = globalThis.fetch.bind(globalThis)) {
|
|
17
|
+
const endpoint = new URL('fu-report-manifest.json', ensureTrailingSlash(new URL(assetBaseUrl, globalThis.location?.href ?? 'https://fu-report.invalid').href));
|
|
18
|
+
const response = await fetcher(endpoint, {
|
|
19
|
+
credentials: 'omit',
|
|
20
|
+
cache: 'no-store',
|
|
21
|
+
headers: { Accept: 'application/json' }
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
throw new FuReportApiError(`Unable to load Fu Report asset manifest: HTTP ${response.status}`, response.status, response.status);
|
|
25
|
+
}
|
|
26
|
+
return FuReportAssetManifestSchema.parse(await response.json());
|
|
27
|
+
}
|
|
28
|
+
export async function verifyFuReportAssetResources(assetBaseUrl, manifest, fetcher = globalThis.fetch.bind(globalThis)) {
|
|
29
|
+
const base = ensureTrailingSlash(new URL(assetBaseUrl, globalThis.location?.href ?? 'https://fu-report.invalid').href);
|
|
30
|
+
for (let offset = 0; offset < manifest.resources.length; offset += 6) {
|
|
31
|
+
await Promise.all(manifest.resources.slice(offset, offset + 6).map(async (resource) => {
|
|
32
|
+
const endpoint = new URL(resource.path, base);
|
|
33
|
+
const response = await fetcher(endpoint, {
|
|
34
|
+
credentials: 'omit',
|
|
35
|
+
cache: 'no-cache'
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok)
|
|
38
|
+
throw new Error(`Fu Report 资源缺失:${resource.path}`);
|
|
39
|
+
const content = new Uint8Array(await response.arrayBuffer());
|
|
40
|
+
if (content.byteLength !== resource.size) {
|
|
41
|
+
throw new Error(`Fu Report 资源长度校验失败:${resource.path}`);
|
|
42
|
+
}
|
|
43
|
+
const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', content));
|
|
44
|
+
const hex = Array.from(digest, value => value.toString(16).padStart(2, '0')).join('');
|
|
45
|
+
if (hex !== resource.sha256) {
|
|
46
|
+
throw new Error(`Fu Report 资源哈希校验失败:${resource.path}`);
|
|
47
|
+
}
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function ensureTrailingSlash(value) {
|
|
52
|
+
return value.endsWith('/') ? value : `${value}/`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=runtime-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qianxiang-ai/fu-report-sdk",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.1.7",
|
|
4
|
+
"license": "AGPL-3.0-only",
|
|
5
|
+
"author": "位志国 <ijunfu@aliyun.com>",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public",
|
|
20
|
+
"registry": "https://registry.npmjs.org/"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@qianxiang-ai/fu-report-contracts": "1.1.7"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "node ../../scripts/clean-dist.mjs && tsc -p tsconfig.json",
|
|
27
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
28
|
+
"test": "vitest run src"
|
|
29
|
+
}
|
|
6
30
|
}
|
package/README.md
DELETED