@abyss-project/tools 2.10.0 → 2.11.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/.eslintrc.js +33 -33
- package/.prettierrc +5 -5
- package/dist/api/atlas-group.api.js.map +1 -1
- package/dist/api/atlas-page.api.js.map +1 -1
- package/dist/api/atlas.api.js +3 -3
- package/dist/api/atlas.api.js.map +1 -1
- package/dist/api/atlas.public.api.js.map +1 -1
- package/dist/api/board-card.api.js.map +1 -1
- package/dist/api/board-column.api.js.map +1 -1
- package/dist/api/board-label.api.js +1 -2
- package/dist/api/board-label.api.js.map +1 -1
- package/dist/api/board.api.js +7 -5
- package/dist/api/board.api.js.map +1 -1
- package/dist/api/draw.api.js +1 -2
- package/dist/api/draw.api.js.map +1 -1
- package/dist/api/draw.public.api.js.map +1 -1
- package/dist/api/extraction-plan-preset.api.js +19 -6
- package/dist/api/extraction-plan-preset.api.js.map +1 -1
- package/dist/api/extraction-settings.api.js.map +1 -1
- package/dist/api/extraction.api.d.ts +2 -5
- package/dist/api/extraction.api.js +17 -45
- package/dist/api/extraction.api.js.map +1 -1
- package/dist/api/extraction.application.api.js +2 -2
- package/dist/api/extraction.application.api.js.map +1 -1
- package/dist/api/retrospective.api.js +2 -1
- package/dist/api/retrospective.api.js.map +1 -1
- package/dist/api/short-link.admin.api.js.map +1 -1
- package/dist/api/short-link.api.js.map +1 -1
- package/dist/api/short-link.public.api.js.map +1 -1
- package/dist/api/tag.api.js.map +1 -1
- package/dist/server-sent-events/server-sent-events.manager.d.ts +1 -2
- package/dist/server-sent-events/server-sent-events.manager.js +1 -2
- package/dist/server-sent-events/server-sent-events.manager.js.map +1 -1
- package/dist/types/enum/extraction-warning.enum.d.ts +2 -1
- package/dist/types/enum/extraction-warning.enum.js +1 -0
- package/dist/types/enum/extraction-warning.enum.js.map +1 -1
- package/dist/types/enum/rcb-bank.enum.js +252 -36
- package/dist/types/enum/rcb-bank.enum.js.map +1 -1
- package/dist/types/interface/models/extraction-fetched-provenance.dto.test.js +8 -2
- package/dist/types/interface/models/extraction-fetched-provenance.dto.test.js.map +1 -1
- package/dist/types/interface/models/extraction-plan.dto.test.js +6 -1
- package/dist/types/interface/models/extraction-plan.dto.test.js.map +1 -1
- package/dist/types/interface/models/extraction-spatial-template.dto.test.js +20 -3
- package/dist/types/interface/models/extraction-spatial-template.dto.test.js.map +1 -1
- package/package.json +4 -1
- package/src/api/atlas-group.api.ts +4 -1
- package/src/api/atlas-page.api.ts +12 -6
- package/src/api/atlas.api.ts +12 -7
- package/src/api/atlas.public.api.ts +3 -1
- package/src/api/board-card.api.ts +6 -3
- package/src/api/board-column.api.ts +4 -1
- package/src/api/board-label.api.ts +7 -3
- package/src/api/board.api.ts +19 -10
- package/src/api/draw.api.ts +16 -12
- package/src/api/draw.public.api.ts +3 -1
- package/src/api/extraction-plan-preset.api.ts +64 -18
- package/src/api/extraction-settings.api.ts +2 -8
- package/src/api/extraction.api.ts +41 -68
- package/src/api/extraction.application.api.ts +19 -14
- package/src/api/retrospective.api.ts +8 -5
- package/src/api/short-link.admin.api.ts +14 -4
- package/src/api/short-link.api.ts +39 -17
- package/src/api/short-link.public.api.ts +25 -11
- package/src/api/tag.api.ts +3 -1
- package/src/server-sent-events/server-sent-events.manager.ts +5 -3
- package/src/types/enum/extraction-warning.enum.ts +16 -0
- package/src/types/enum/rcb-bank.enum.ts +255 -41
- package/src/types/interface/api/responses/retrospective.response.ts +2 -1
- package/src/types/interface/models/content-share.dto.ts +5 -1
- package/src/types/interface/models/extraction-fetched-provenance.dto.test.ts +20 -9
- package/src/types/interface/models/extraction-plan.dto.test.ts +17 -4
- package/src/types/interface/models/extraction-spatial-template.dto.test.ts +26 -5
- package/src/types/interface/models/probe-webhook.dto.ts +3 -4
- package/tsconfig.check.json +15 -0
- package/dist/api/memo.api.d.ts +0 -15
- package/dist/api/memo.api.js +0 -49
- package/dist/api/memo.api.js.map +0 -1
- package/dist/constants/memo.constants.d.ts +0 -3
- package/dist/constants/memo.constants.js +0 -7
- package/dist/constants/memo.constants.js.map +0 -1
- package/dist/types/interface/api/requests/memo.request.d.ts +0 -41
- package/dist/types/interface/api/requests/memo.request.js +0 -3
- package/dist/types/interface/api/requests/memo.request.js.map +0 -1
- package/dist/types/interface/api/responses/memo.response.d.ts +0 -27
- package/dist/types/interface/api/responses/memo.response.js +0 -3
- package/dist/types/interface/api/responses/memo.response.js.map +0 -1
- package/dist/types/interface/models/memo.dto.d.ts +0 -20
- package/dist/types/interface/models/memo.dto.js +0 -3
- package/dist/types/interface/models/memo.dto.js.map +0 -1
package/src/api/atlas.api.ts
CHANGED
|
@@ -22,8 +22,9 @@ import {
|
|
|
22
22
|
export const paginateAtlas = async (
|
|
23
23
|
query: IPaginateAtlasQuery,
|
|
24
24
|
): Promise<IPaginateAtlasResponse> => {
|
|
25
|
-
return (
|
|
26
|
-
.
|
|
25
|
+
return (
|
|
26
|
+
await AbyssToolsCore.axios.get<IPaginateAtlasResponse>(`atlas/paginate`, { params: query })
|
|
27
|
+
).data;
|
|
27
28
|
};
|
|
28
29
|
|
|
29
30
|
export const paginateProjectAtlas = async (
|
|
@@ -52,7 +53,8 @@ export const updateAtlas = async (
|
|
|
52
53
|
params: IUpdateAtlasParams,
|
|
53
54
|
body: IUpdateAtlasBody,
|
|
54
55
|
): Promise<IUpdateAtlasResponse> => {
|
|
55
|
-
return (await AbyssToolsCore.axios.put<IUpdateAtlasResponse>(`atlas/${params.atlasId}`, body))
|
|
56
|
+
return (await AbyssToolsCore.axios.put<IUpdateAtlasResponse>(`atlas/${params.atlasId}`, body))
|
|
57
|
+
.data;
|
|
56
58
|
};
|
|
57
59
|
|
|
58
60
|
export const createAtlas = async (body: ICreateAtlasBody): Promise<ICreateAtlasResponse> => {
|
|
@@ -64,7 +66,10 @@ export const createForOrganizationAtlas = async (
|
|
|
64
66
|
body: ICreateAtlasBody,
|
|
65
67
|
): Promise<ICreateAtlasResponse> => {
|
|
66
68
|
return (
|
|
67
|
-
await AbyssToolsCore.axios.post<ICreateAtlasResponse>(
|
|
69
|
+
await AbyssToolsCore.axios.post<ICreateAtlasResponse>(
|
|
70
|
+
`atlas/organization/${params.organizationId}`,
|
|
71
|
+
body,
|
|
72
|
+
)
|
|
68
73
|
).data;
|
|
69
74
|
};
|
|
70
75
|
|
|
@@ -92,9 +97,9 @@ export const transferAtlas = async (
|
|
|
92
97
|
).data;
|
|
93
98
|
};
|
|
94
99
|
|
|
95
|
-
export const countOrganizationAtlas = async (
|
|
96
|
-
|
|
97
|
-
): Promise<ICountOrganizationResponse> => {
|
|
100
|
+
export const countOrganizationAtlas = async (params: {
|
|
101
|
+
organizationId: string;
|
|
102
|
+
}): Promise<ICountOrganizationResponse> => {
|
|
98
103
|
return (
|
|
99
104
|
await AbyssToolsCore.axios.get<ICountOrganizationResponse>(
|
|
100
105
|
`atlas/organization/${params.organizationId}/count`,
|
|
@@ -13,7 +13,9 @@ export const getAtlasPublic = async (
|
|
|
13
13
|
params: IGetAtlasPublicParams,
|
|
14
14
|
): Promise<IGetAtlasPublicResponse> => {
|
|
15
15
|
return (
|
|
16
|
-
await AbyssToolsCore.axios.get<IGetAtlasPublicResponse>(
|
|
16
|
+
await AbyssToolsCore.axios.get<IGetAtlasPublicResponse>(
|
|
17
|
+
`atlas/public/${params.publicAccessToken}`,
|
|
18
|
+
)
|
|
17
19
|
).data;
|
|
18
20
|
};
|
|
19
21
|
|
|
@@ -130,8 +130,11 @@ export const searchBoardCard = async (
|
|
|
130
130
|
query: ISearchBoardCardQuery,
|
|
131
131
|
): Promise<ISearchBoardCardResponse> => {
|
|
132
132
|
return (
|
|
133
|
-
await AbyssToolsCore.axios.get<ISearchBoardCardResponse>(
|
|
134
|
-
params
|
|
135
|
-
|
|
133
|
+
await AbyssToolsCore.axios.get<ISearchBoardCardResponse>(
|
|
134
|
+
`board/${params.boardId}/card/search`,
|
|
135
|
+
{
|
|
136
|
+
params: query,
|
|
137
|
+
},
|
|
138
|
+
)
|
|
136
139
|
).data;
|
|
137
140
|
};
|
|
@@ -49,6 +49,9 @@ export const createBoardColumn = async (
|
|
|
49
49
|
body: ICreateBoardColumnBody,
|
|
50
50
|
): Promise<ICreateBoardColumnResponse> => {
|
|
51
51
|
return (
|
|
52
|
-
await AbyssToolsCore.axios.post<ICreateBoardColumnResponse>(
|
|
52
|
+
await AbyssToolsCore.axios.post<ICreateBoardColumnResponse>(
|
|
53
|
+
`board/${params.boardId}/column`,
|
|
54
|
+
body,
|
|
55
|
+
)
|
|
53
56
|
).data;
|
|
54
57
|
};
|
|
@@ -55,7 +55,10 @@ export const createBoardLabel = async (
|
|
|
55
55
|
body: ICreateBoardLabelBody,
|
|
56
56
|
): Promise<ICreateBoardLabelResponse> => {
|
|
57
57
|
return (
|
|
58
|
-
await AbyssToolsCore.axios.post<ICreateBoardLabelResponse>(
|
|
58
|
+
await AbyssToolsCore.axios.post<ICreateBoardLabelResponse>(
|
|
59
|
+
`board/${params.boardId}/label`,
|
|
60
|
+
body,
|
|
61
|
+
)
|
|
59
62
|
).data;
|
|
60
63
|
};
|
|
61
64
|
|
|
@@ -82,6 +85,7 @@ export const removeBoardLabel = async (
|
|
|
82
85
|
export const listBoardLabels = async (
|
|
83
86
|
params: IListBoardLabelParams,
|
|
84
87
|
): Promise<IListBoardLabelResponse> => {
|
|
85
|
-
return (
|
|
86
|
-
.
|
|
88
|
+
return (
|
|
89
|
+
await AbyssToolsCore.axios.get<IListBoardLabelResponse>(`board/${params.boardId}/label/list`)
|
|
90
|
+
).data;
|
|
87
91
|
};
|
package/src/api/board.api.ts
CHANGED
|
@@ -31,7 +31,8 @@ export const getBoard = async (params: IGetBoardParams): Promise<IGetBoardRespon
|
|
|
31
31
|
export const getBySlugBoard = async (
|
|
32
32
|
params: IGetBySlugBoardParams,
|
|
33
33
|
): Promise<IGetBySlugBoardResponse> => {
|
|
34
|
-
return (await AbyssToolsCore.axios.get<IGetBySlugBoardResponse>(`board/slug/${params.slug}`))
|
|
34
|
+
return (await AbyssToolsCore.axios.get<IGetBySlugBoardResponse>(`board/slug/${params.slug}`))
|
|
35
|
+
.data;
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
export const deleteBoard = async (params: IDeleteBoardParams): Promise<IDeleteBoardResponse> => {
|
|
@@ -42,7 +43,8 @@ export const updateBoard = async (
|
|
|
42
43
|
params: IUpdateBoardParams,
|
|
43
44
|
body: IUpdateBoardBody,
|
|
44
45
|
): Promise<IUpdateBoardResponse> => {
|
|
45
|
-
return (await AbyssToolsCore.axios.put<IUpdateBoardResponse>(`board/${params.boardId}`, body))
|
|
46
|
+
return (await AbyssToolsCore.axios.put<IUpdateBoardResponse>(`board/${params.boardId}`, body))
|
|
47
|
+
.data;
|
|
46
48
|
};
|
|
47
49
|
|
|
48
50
|
export const createBoard = async (body: ICreateBoardBody): Promise<ICreateBoardResponse> => {
|
|
@@ -54,12 +56,18 @@ export const createForOrganizationBoard = async (
|
|
|
54
56
|
body: ICreateBoardBody,
|
|
55
57
|
): Promise<ICreateBoardResponse> => {
|
|
56
58
|
return (
|
|
57
|
-
await AbyssToolsCore.axios.post<ICreateBoardResponse>(
|
|
59
|
+
await AbyssToolsCore.axios.post<ICreateBoardResponse>(
|
|
60
|
+
`board/organization/${params.organizationId}`,
|
|
61
|
+
body,
|
|
62
|
+
)
|
|
58
63
|
).data;
|
|
59
64
|
};
|
|
60
65
|
|
|
61
|
-
export const listBoard = async (query?: {
|
|
62
|
-
|
|
66
|
+
export const listBoard = async (query?: {
|
|
67
|
+
sharedWithMe?: boolean;
|
|
68
|
+
}): Promise<IListBoardUserResponse> => {
|
|
69
|
+
return (await AbyssToolsCore.axios.get<IListBoardUserResponse>('board/list', { params: query }))
|
|
70
|
+
.data;
|
|
63
71
|
};
|
|
64
72
|
|
|
65
73
|
export const listBoardProject = async (params: {
|
|
@@ -71,8 +79,9 @@ export const listBoardProject = async (params: {
|
|
|
71
79
|
};
|
|
72
80
|
|
|
73
81
|
export const getNextCardPreviewBoard = async (): Promise<IGetNextCardPreviewBoardResponse> => {
|
|
74
|
-
return (
|
|
75
|
-
.
|
|
82
|
+
return (
|
|
83
|
+
await AbyssToolsCore.axios.post<IGetNextCardPreviewBoardResponse>(`board/next-card-preview`)
|
|
84
|
+
).data;
|
|
76
85
|
};
|
|
77
86
|
|
|
78
87
|
export const listBoardOrganization = async (
|
|
@@ -111,9 +120,9 @@ export const transferBoard = async (
|
|
|
111
120
|
).data;
|
|
112
121
|
};
|
|
113
122
|
|
|
114
|
-
export const countOrganizationBoard = async (
|
|
115
|
-
|
|
116
|
-
): Promise<ICountOrganizationResponse> => {
|
|
123
|
+
export const countOrganizationBoard = async (params: {
|
|
124
|
+
organizationId: string;
|
|
125
|
+
}): Promise<ICountOrganizationResponse> => {
|
|
117
126
|
return (
|
|
118
127
|
await AbyssToolsCore.axios.get<ICountOrganizationResponse>(
|
|
119
128
|
`board/organization/${params.organizationId}/count`,
|
package/src/api/draw.api.ts
CHANGED
|
@@ -29,9 +29,12 @@ export const paginateProjectDraw = async (
|
|
|
29
29
|
query: IPaginateDrawQuery,
|
|
30
30
|
): Promise<IPaginateDrawResponse> => {
|
|
31
31
|
return (
|
|
32
|
-
await AbyssToolsCore.axios.get<IPaginateDrawResponse>(
|
|
33
|
-
params
|
|
34
|
-
|
|
32
|
+
await AbyssToolsCore.axios.get<IPaginateDrawResponse>(
|
|
33
|
+
`project/${params.projectId}/draw/paginate`,
|
|
34
|
+
{
|
|
35
|
+
params: query,
|
|
36
|
+
},
|
|
37
|
+
)
|
|
35
38
|
).data;
|
|
36
39
|
};
|
|
37
40
|
|
|
@@ -58,8 +61,12 @@ export const createForOrganizationDraw = async (
|
|
|
58
61
|
params: ICreateForOrganizationDrawParams,
|
|
59
62
|
body: ICreateDrawBody,
|
|
60
63
|
): Promise<ICreateDrawResponse> => {
|
|
61
|
-
return (
|
|
62
|
-
.
|
|
64
|
+
return (
|
|
65
|
+
await AbyssToolsCore.axios.post<ICreateDrawResponse>(
|
|
66
|
+
`draw/organization/${params.organizationId}`,
|
|
67
|
+
body,
|
|
68
|
+
)
|
|
69
|
+
).data;
|
|
63
70
|
};
|
|
64
71
|
|
|
65
72
|
export const paginateOrganizationDraw = async (
|
|
@@ -79,16 +86,13 @@ export const transferDraw = async (
|
|
|
79
86
|
body: ITransferContentBody,
|
|
80
87
|
): Promise<ITransferDrawResponse> => {
|
|
81
88
|
return (
|
|
82
|
-
await AbyssToolsCore.axios.post<ITransferDrawResponse>(
|
|
83
|
-
`draw/${params.drawId}/transfer`,
|
|
84
|
-
body,
|
|
85
|
-
)
|
|
89
|
+
await AbyssToolsCore.axios.post<ITransferDrawResponse>(`draw/${params.drawId}/transfer`, body)
|
|
86
90
|
).data;
|
|
87
91
|
};
|
|
88
92
|
|
|
89
|
-
export const countOrganizationDraw = async (
|
|
90
|
-
|
|
91
|
-
): Promise<ICountOrganizationResponse> => {
|
|
93
|
+
export const countOrganizationDraw = async (params: {
|
|
94
|
+
organizationId: string;
|
|
95
|
+
}): Promise<ICountOrganizationResponse> => {
|
|
92
96
|
return (
|
|
93
97
|
await AbyssToolsCore.axios.get<ICountOrganizationResponse>(
|
|
94
98
|
`draw/organization/${params.organizationId}/count`,
|
|
@@ -15,7 +15,9 @@ export const getDrawPublic = async (
|
|
|
15
15
|
params: IGetDrawPublicParams,
|
|
16
16
|
): Promise<IGetDrawPublicResponse> => {
|
|
17
17
|
return (
|
|
18
|
-
await AbyssToolsCore.axios.get<IGetDrawPublicResponse>(
|
|
18
|
+
await AbyssToolsCore.axios.get<IGetDrawPublicResponse>(
|
|
19
|
+
`draw/public/${params.publicAccessToken}`,
|
|
20
|
+
)
|
|
19
21
|
).data;
|
|
20
22
|
};
|
|
21
23
|
|
|
@@ -11,11 +11,7 @@
|
|
|
11
11
|
// ──────────────────────────────────────────────
|
|
12
12
|
|
|
13
13
|
import { AbyssToolsCore } from '..';
|
|
14
|
-
import type {
|
|
15
|
-
ICreatePlanPresetBody,
|
|
16
|
-
IUpdatePlanPresetBody,
|
|
17
|
-
IListPlanPresetQuery,
|
|
18
|
-
} from '../types';
|
|
14
|
+
import type { ICreatePlanPresetBody, IUpdatePlanPresetBody, IListPlanPresetQuery } from '../types';
|
|
19
15
|
import type {
|
|
20
16
|
IListModesResponse,
|
|
21
17
|
IListPlanPresetsResponse,
|
|
@@ -30,22 +26,72 @@ function authHeader(apiKey?: string): Record<string, string> {
|
|
|
30
26
|
}
|
|
31
27
|
|
|
32
28
|
export const listModes = async (apiKey?: string): Promise<IListModesResponse> =>
|
|
33
|
-
(
|
|
29
|
+
(
|
|
30
|
+
await AbyssToolsCore.axios.get<IListModesResponse>(`extract/modes`, {
|
|
31
|
+
headers: authHeader(apiKey),
|
|
32
|
+
})
|
|
33
|
+
).data;
|
|
34
34
|
|
|
35
|
-
export const listExtractionPlanPresets = async (
|
|
36
|
-
|
|
35
|
+
export const listExtractionPlanPresets = async (
|
|
36
|
+
query: IListPlanPresetQuery = {},
|
|
37
|
+
apiKey?: string,
|
|
38
|
+
): Promise<IListPlanPresetsResponse> =>
|
|
39
|
+
(
|
|
40
|
+
await AbyssToolsCore.axios.get<IListPlanPresetsResponse>(`extract/plans`, {
|
|
41
|
+
params: query,
|
|
42
|
+
headers: authHeader(apiKey),
|
|
43
|
+
})
|
|
44
|
+
).data;
|
|
37
45
|
|
|
38
|
-
export const getExtractionPlanPreset = async (
|
|
39
|
-
|
|
46
|
+
export const getExtractionPlanPreset = async (
|
|
47
|
+
id: string,
|
|
48
|
+
apiKey?: string,
|
|
49
|
+
): Promise<IGetPlanPresetResponse> =>
|
|
50
|
+
(
|
|
51
|
+
await AbyssToolsCore.axios.get<IGetPlanPresetResponse>(`extract/plans/${id}`, {
|
|
52
|
+
headers: authHeader(apiKey),
|
|
53
|
+
})
|
|
54
|
+
).data;
|
|
40
55
|
|
|
41
|
-
export const createExtractionPlanPreset = async (
|
|
42
|
-
|
|
56
|
+
export const createExtractionPlanPreset = async (
|
|
57
|
+
body: ICreatePlanPresetBody,
|
|
58
|
+
apiKey?: string,
|
|
59
|
+
): Promise<IGetPlanPresetResponse> =>
|
|
60
|
+
(
|
|
61
|
+
await AbyssToolsCore.axios.post<IGetPlanPresetResponse>(`extract/plans`, body, {
|
|
62
|
+
headers: authHeader(apiKey),
|
|
63
|
+
})
|
|
64
|
+
).data;
|
|
43
65
|
|
|
44
|
-
export const updateExtractionPlanPreset = async (
|
|
45
|
-
|
|
66
|
+
export const updateExtractionPlanPreset = async (
|
|
67
|
+
id: string,
|
|
68
|
+
body: IUpdatePlanPresetBody,
|
|
69
|
+
apiKey?: string,
|
|
70
|
+
): Promise<IGetPlanPresetResponse> =>
|
|
71
|
+
(
|
|
72
|
+
await AbyssToolsCore.axios.put<IGetPlanPresetResponse>(`extract/plans/${id}`, body, {
|
|
73
|
+
headers: authHeader(apiKey),
|
|
74
|
+
})
|
|
75
|
+
).data;
|
|
46
76
|
|
|
47
|
-
export const deleteExtractionPlanPreset = async (
|
|
48
|
-
|
|
77
|
+
export const deleteExtractionPlanPreset = async (
|
|
78
|
+
id: string,
|
|
79
|
+
apiKey?: string,
|
|
80
|
+
): Promise<IDeletePlanPresetResponse> =>
|
|
81
|
+
(
|
|
82
|
+
await AbyssToolsCore.axios.delete<IDeletePlanPresetResponse>(`extract/plans/${id}`, {
|
|
83
|
+
headers: authHeader(apiKey),
|
|
84
|
+
})
|
|
85
|
+
).data;
|
|
49
86
|
|
|
50
|
-
export const setDefaultExtractionPlanPreset = async (
|
|
51
|
-
|
|
87
|
+
export const setDefaultExtractionPlanPreset = async (
|
|
88
|
+
id: string,
|
|
89
|
+
apiKey?: string,
|
|
90
|
+
): Promise<IGetPlanPresetResponse> =>
|
|
91
|
+
(
|
|
92
|
+
await AbyssToolsCore.axios.post<IGetPlanPresetResponse>(
|
|
93
|
+
`extract/plans/${id}/default`,
|
|
94
|
+
{},
|
|
95
|
+
{ headers: authHeader(apiKey) },
|
|
96
|
+
)
|
|
97
|
+
).data;
|
|
@@ -9,14 +9,8 @@
|
|
|
9
9
|
// ──────────────────────────────────────────────
|
|
10
10
|
|
|
11
11
|
import { AbyssToolsCore } from '..';
|
|
12
|
-
import type {
|
|
13
|
-
|
|
14
|
-
IUpsertExtractionSettingsBody,
|
|
15
|
-
} from '../types';
|
|
16
|
-
import type {
|
|
17
|
-
IGetExtractionSettingsResponse,
|
|
18
|
-
IUpsertExtractionSettingsResponse,
|
|
19
|
-
} from '../types';
|
|
12
|
+
import type { IGetExtractionSettingsQuery, IUpsertExtractionSettingsBody } from '../types';
|
|
13
|
+
import type { IGetExtractionSettingsResponse, IUpsertExtractionSettingsResponse } from '../types';
|
|
20
14
|
|
|
21
15
|
const DEFAULT_API_KEY_HEADER = 'abyss-api-key';
|
|
22
16
|
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Sync helper accepts an inline PDF buffer (multipart) or a storage_file_id.
|
|
5
5
|
// Queue helper enqueues for async processing + webhook delivery.
|
|
6
|
+
//
|
|
7
|
+
// Multipart bodies are built with the global `FormData` + `Blob` — the same
|
|
8
|
+
// code in a browser and on Node (>= 18, see package.json `engines`). axios
|
|
9
|
+
// serializes a spec-compliant FormData on both and sets the multipart
|
|
10
|
+
// boundary itself, so no content-type header is ever set by hand.
|
|
6
11
|
// ──────────────────────────────────────────────
|
|
7
12
|
|
|
8
13
|
import { AbyssToolsCore } from '..';
|
|
@@ -92,16 +97,9 @@ function authHeader(apiKey?: string): Record<string, string> {
|
|
|
92
97
|
return apiKey ? { [DEFAULT_API_KEY_HEADER]: apiKey } : {};
|
|
93
98
|
}
|
|
94
99
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
// Use indirect eval so bundlers (esbuild/vite/webpack) do not try to
|
|
100
|
-
// resolve the Node-only "form-data" package when this file is included
|
|
101
|
-
// in a browser bundle. The require only runs at runtime on Node.
|
|
102
|
-
// eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
|
|
103
|
-
const nodeRequire: NodeRequire = new Function('return require')();
|
|
104
|
-
return nodeRequire('form-data');
|
|
100
|
+
/** The PDF bytes as a multipart file part: filename kept, `application/pdf` type. */
|
|
101
|
+
function appendPdfPart(form: FormData, pdf: Buffer | Uint8Array, filename: string): void {
|
|
102
|
+
form.append('file', new Blob([pdf], { type: 'application/pdf' }), filename);
|
|
105
103
|
}
|
|
106
104
|
|
|
107
105
|
function serializeParams<T extends object>(o: T): Record<string, unknown> {
|
|
@@ -124,18 +122,22 @@ export interface ExtractCallOptions {
|
|
|
124
122
|
idempotencyKey?: string;
|
|
125
123
|
}
|
|
126
124
|
|
|
125
|
+
/**
|
|
126
|
+
* `POST /extract/extract` with `processing: 'sync'`. The route still moves an
|
|
127
|
+
* async plan (an OCR pass, or more than one pass — inline or reached through
|
|
128
|
+
* `plan_preset_id`) onto the queue and answers 202 with the queue body, so the
|
|
129
|
+
* call resolves either the extraction (`extraction_id`) or the queued job
|
|
130
|
+
* (`job_id`); narrow on `'job_id' in response.data`.
|
|
131
|
+
*/
|
|
127
132
|
export const extractSync = async (
|
|
128
133
|
body: IExtractBody,
|
|
129
134
|
scope: IExtractionContentScopeQuery = {},
|
|
130
135
|
apiKey?: string,
|
|
131
136
|
opts: ExtractCallOptions = {},
|
|
132
|
-
): Promise<IExtractSyncResponse> => {
|
|
133
|
-
return postExtract(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
apiKey,
|
|
137
|
-
opts,
|
|
138
|
-
) as Promise<IExtractSyncResponse>;
|
|
137
|
+
): Promise<IExtractSyncResponse | IExtractQueueResponse> => {
|
|
138
|
+
return postExtract({ ...body, processing: 'sync' }, scope, apiKey, opts) as Promise<
|
|
139
|
+
IExtractSyncResponse | IExtractQueueResponse
|
|
140
|
+
>;
|
|
139
141
|
};
|
|
140
142
|
|
|
141
143
|
export const extractQueue = async (
|
|
@@ -164,11 +166,11 @@ const postExtract = async (
|
|
|
164
166
|
}
|
|
165
167
|
const params = serializeParams(scope);
|
|
166
168
|
if (body.pdf) {
|
|
167
|
-
const
|
|
169
|
+
const form = buildExtractMultipart(body);
|
|
168
170
|
return (
|
|
169
171
|
await AbyssToolsCore.axios.post(`extract/extract`, form, {
|
|
170
172
|
params,
|
|
171
|
-
headers: { ...
|
|
173
|
+
headers: { ...authHeader(apiKey), ...extraHeaders },
|
|
172
174
|
maxBodyLength: Infinity,
|
|
173
175
|
maxContentLength: Infinity,
|
|
174
176
|
})
|
|
@@ -185,13 +187,13 @@ const postExtract = async (
|
|
|
185
187
|
).data;
|
|
186
188
|
};
|
|
187
189
|
|
|
188
|
-
function appendIf(form:
|
|
190
|
+
function appendIf(form: FormData, key: string, value: unknown): void {
|
|
189
191
|
if (value === undefined || value === null) return;
|
|
190
192
|
form.append(key, String(value));
|
|
191
193
|
}
|
|
192
194
|
|
|
193
195
|
/** Append the shared extract text fields (all optional) onto a multipart form. */
|
|
194
|
-
function appendExtractFields(form:
|
|
196
|
+
function appendExtractFields(form: FormData, body: IExtractBody): void {
|
|
195
197
|
appendIf(form, 'mode', body.mode);
|
|
196
198
|
if (body.hint) form.append('hint', JSON.stringify(body.hint));
|
|
197
199
|
appendIf(form, 'template_id', body.template_id);
|
|
@@ -201,43 +203,32 @@ function appendExtractFields(form: any, body: IExtractBody): void {
|
|
|
201
203
|
if (typeof body.archive === 'boolean') form.append('archive', String(body.archive));
|
|
202
204
|
if (typeof body.force === 'boolean') form.append('force', String(body.force));
|
|
203
205
|
if (body.processing) form.append('processing', body.processing);
|
|
206
|
+
if (body.plan) form.append('plan', JSON.stringify(body.plan));
|
|
207
|
+
appendIf(form, 'plan_preset_id', body.plan_preset_id);
|
|
208
|
+
// Wire name read by the API's parseExtractRequest ('true' / 'false').
|
|
209
|
+
if (typeof body.improvementConsent === 'boolean') {
|
|
210
|
+
form.append('improvement_consent', String(body.improvementConsent));
|
|
211
|
+
}
|
|
204
212
|
}
|
|
205
213
|
|
|
206
214
|
/**
|
|
207
|
-
* Build the multipart form for an extract upload
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
* caller. Requires `body.pdf` to be set.
|
|
215
|
+
* Build the multipart form for an extract upload, shared by the personal and
|
|
216
|
+
* application extract clients: the PDF as the `file` part (filename from
|
|
217
|
+
* `body.pdf_filename`, default `document.pdf`) plus the extract text fields.
|
|
218
|
+
* Scope params + auth headers are added by the caller; axios sets the
|
|
219
|
+
* multipart content type. Requires `body.pdf` to be set.
|
|
213
220
|
*/
|
|
214
|
-
export
|
|
215
|
-
body: IExtractBody,
|
|
216
|
-
): Promise<{ form: any; formHeaders: Record<string, string> }> {
|
|
221
|
+
export function buildExtractMultipart(body: IExtractBody): FormData {
|
|
217
222
|
const pdf = body.pdf;
|
|
218
223
|
if (!pdf) {
|
|
219
224
|
// Precondition: only the multipart-upload path calls this (both callers
|
|
220
225
|
// guard on `body.pdf` first). Enforced here so the helper is self-contained.
|
|
221
226
|
throw new Error('buildExtractMultipart requires body.pdf');
|
|
222
227
|
}
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
if (isBrowser) {
|
|
226
|
-
const form = new FormData();
|
|
227
|
-
const blob = new Blob([pdf as Uint8Array], { type: 'application/pdf' });
|
|
228
|
-
form.append('file', blob, filename);
|
|
229
|
-
appendExtractFields(form, body);
|
|
230
|
-
return { form, formHeaders: {} };
|
|
231
|
-
}
|
|
232
|
-
const FormDataCtor = await loadFormData();
|
|
233
|
-
const form = new FormDataCtor();
|
|
234
|
-
const buf = Buffer.isBuffer(pdf) ? pdf : Buffer.from(pdf);
|
|
235
|
-
form.append('file', buf, { filename, contentType: 'application/pdf' });
|
|
228
|
+
const form = new FormData();
|
|
229
|
+
appendPdfPart(form, pdf, body.pdf_filename ?? 'document.pdf');
|
|
236
230
|
appendExtractFields(form, body);
|
|
237
|
-
return
|
|
238
|
-
form,
|
|
239
|
-
formHeaders: typeof form.getHeaders === 'function' ? form.getHeaders() : {},
|
|
240
|
-
};
|
|
231
|
+
return form;
|
|
241
232
|
}
|
|
242
233
|
|
|
243
234
|
export const extractBulk = async (
|
|
@@ -260,29 +251,11 @@ export const detect = async (
|
|
|
260
251
|
pdfFilename = 'document.pdf',
|
|
261
252
|
apiKey?: string,
|
|
262
253
|
): Promise<IDetectResponse> => {
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
const form = new FormData();
|
|
266
|
-
const blob = new Blob([pdf as Uint8Array], { type: 'application/pdf' });
|
|
267
|
-
form.append('file', blob, pdfFilename);
|
|
268
|
-
return (
|
|
269
|
-
await AbyssToolsCore.axios.post<IDetectResponse>(`extract/detect`, form, {
|
|
270
|
-
headers: authHeader(apiKey),
|
|
271
|
-
maxBodyLength: Infinity,
|
|
272
|
-
maxContentLength: Infinity,
|
|
273
|
-
})
|
|
274
|
-
).data;
|
|
275
|
-
}
|
|
276
|
-
const FormDataCtor = await loadFormData();
|
|
277
|
-
const form = new FormDataCtor();
|
|
278
|
-
const buf = Buffer.isBuffer(pdf) ? pdf : Buffer.from(pdf);
|
|
279
|
-
form.append('file', buf, { filename: pdfFilename, contentType: 'application/pdf' });
|
|
254
|
+
const form = new FormData();
|
|
255
|
+
appendPdfPart(form, pdf, pdfFilename);
|
|
280
256
|
return (
|
|
281
257
|
await AbyssToolsCore.axios.post<IDetectResponse>(`extract/detect`, form, {
|
|
282
|
-
headers:
|
|
283
|
-
...(typeof form.getHeaders === 'function' ? form.getHeaders() : {}),
|
|
284
|
-
...authHeader(apiKey),
|
|
285
|
-
},
|
|
258
|
+
headers: authHeader(apiKey),
|
|
286
259
|
maxBodyLength: Infinity,
|
|
287
260
|
maxContentLength: Infinity,
|
|
288
261
|
})
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
// for inter-service callers (e.g. AbyssBanking) authenticating with a project
|
|
7
7
|
// API key instead of a personal/org session.
|
|
8
8
|
//
|
|
9
|
-
// Reuses extraction.api.ts's `buildExtractMultipart` (the same
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
9
|
+
// Reuses extraction.api.ts's `buildExtractMultipart` (the same global
|
|
10
|
+
// `FormData` + `Blob` multipart body as the personal client) and every
|
|
11
|
+
// request/response TYPE verbatim (`IExtractBody`, `IExtractSyncResponse`) —
|
|
12
|
+
// never redefined here. There is NO scope query param: unlike the
|
|
13
|
+
// personal/org route's `?organization_id=`, an application caller's scope is
|
|
14
|
+
// entirely its `:applicationId` URL segment, resolved server-side by
|
|
15
|
+
// ApplicationMiddleware (round-trips to abyss-main).
|
|
16
16
|
//
|
|
17
17
|
// `authHeaderApplication` is kept LOCAL and unexported, same convention as the
|
|
18
18
|
// personal client's own `authHeader` — it sends `API_KEY_APPLICATION_HEADER`
|
|
@@ -34,11 +34,16 @@ function authHeaderApplication(applicationApiKey?: string): Record<string, strin
|
|
|
34
34
|
/**
|
|
35
35
|
* `POST /extract/application/:applicationId/extract` — run one synchronous
|
|
36
36
|
* extraction OWNED by `applicationId` and BILLED to its resolved owning
|
|
37
|
-
* organization.
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
37
|
+
* organization. The route accepts only a multipart PDF upload: send
|
|
38
|
+
* `body.pdf`, with `body.mode` `auto` or `hint`; `body.plan` (inline, single
|
|
39
|
+
* pass, no OCR, no template pass) and `body.improvementConsent` travel as
|
|
40
|
+
* multipart fields. The route refuses `storage_file_id`, `plan_preset_id`,
|
|
41
|
+
* `template_id` and `template` with a 4xx. A body without `pdf` is sent as
|
|
42
|
+
* JSON and never runs an extraction: the memory watchdog may answer 503 before
|
|
43
|
+
* the route reads the body; past it, the route answers a 4xx — the
|
|
44
|
+
* `storage_file_id` refusal when the body carries one, otherwise "Provide file
|
|
45
|
+
* (multipart pdf)". `options` forwards a Stripe-style
|
|
46
|
+
* `Idempotency-Key` header (24h replay window) when set.
|
|
42
47
|
*/
|
|
43
48
|
export const runExtractionApplication = async (
|
|
44
49
|
applicationId: string,
|
|
@@ -53,10 +58,10 @@ export const runExtractionApplication = async (
|
|
|
53
58
|
const url = `extract/application/${applicationId}/extract`;
|
|
54
59
|
|
|
55
60
|
if (body.pdf) {
|
|
56
|
-
const
|
|
61
|
+
const form = buildExtractMultipart(body);
|
|
57
62
|
return (
|
|
58
63
|
await AbyssToolsCore.axios.post<IExtractSyncResponse>(url, form, {
|
|
59
|
-
headers: { ...
|
|
64
|
+
headers: { ...authHeaderApplication(applicationApiKey), ...extraHeaders },
|
|
60
65
|
maxBodyLength: Infinity,
|
|
61
66
|
maxContentLength: Infinity,
|
|
62
67
|
})
|
|
@@ -23,7 +23,9 @@ export const getRetrospective = async (
|
|
|
23
23
|
params: IGetRetrospectiveParams,
|
|
24
24
|
): Promise<IGetRetrospectiveResponse> => {
|
|
25
25
|
return (
|
|
26
|
-
await AbyssToolsCore.axios.get<IGetRetrospectiveResponse>(
|
|
26
|
+
await AbyssToolsCore.axios.get<IGetRetrospectiveResponse>(
|
|
27
|
+
`retrospective/${params.retrospectiveId}`,
|
|
28
|
+
)
|
|
27
29
|
).data;
|
|
28
30
|
};
|
|
29
31
|
|
|
@@ -52,7 +54,8 @@ export const paginateRetrospective = async (
|
|
|
52
54
|
export const createRetrospective = async (
|
|
53
55
|
body: ICreateRetrospectiveBody,
|
|
54
56
|
): Promise<ICreateRetrospectiveResponse> => {
|
|
55
|
-
return (await AbyssToolsCore.axios.post<ICreateRetrospectiveResponse>(`retrospective`, body))
|
|
57
|
+
return (await AbyssToolsCore.axios.post<ICreateRetrospectiveResponse>(`retrospective`, body))
|
|
58
|
+
.data;
|
|
56
59
|
};
|
|
57
60
|
|
|
58
61
|
export const createForOrganizationRetrospective = async (
|
|
@@ -113,9 +116,9 @@ export const transferRetrospective = async (
|
|
|
113
116
|
).data;
|
|
114
117
|
};
|
|
115
118
|
|
|
116
|
-
export const countOrganizationRetrospective = async (
|
|
117
|
-
|
|
118
|
-
): Promise<ICountOrganizationResponse> => {
|
|
119
|
+
export const countOrganizationRetrospective = async (params: {
|
|
120
|
+
organizationId: string;
|
|
121
|
+
}): Promise<ICountOrganizationResponse> => {
|
|
119
122
|
return (
|
|
120
123
|
await AbyssToolsCore.axios.get<ICountOrganizationResponse>(
|
|
121
124
|
`retrospective/organization/${params.organizationId}/count`,
|