@haneinfo/frontend-instances 0.0.0-stage → 0.2.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/dist/server.js ADDED
@@ -0,0 +1,189 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import 'server-only';
3
+ import { parse } from 'csv-parse/sync';
4
+ import ExcelJS from 'exceljs';
5
+ import { DetailClient, ImportClient, ListClient } from './client.js';
6
+ import { labelKeys, } from './contracts.js';
7
+ import { normalizeQuery } from './query.js';
8
+ export { dateRange, importMapping, normalizeQuery } from './query.js';
9
+ export function instanceError(error) {
10
+ const value = error;
11
+ if (value?.statusCode === 401)
12
+ return { key: 'unauthorized' };
13
+ if (value?.statusCode === 403)
14
+ return { key: 'forbidden' };
15
+ if (value?.statusCode === 404)
16
+ return { key: 'notFound' };
17
+ if (value?.message === 'invalidInput')
18
+ return { key: 'invalidInput' };
19
+ return { key: 'requestFailed', message: value?.statusCode ? value.message : undefined };
20
+ }
21
+ const segment = (value) => {
22
+ if (typeof value !== 'string' || !value || value.length > 200)
23
+ throw new Error('invalidInput');
24
+ return encodeURIComponent(value);
25
+ };
26
+ const json = (body, method = 'POST') => ({
27
+ method,
28
+ body: JSON.stringify(body),
29
+ });
30
+ /** Called only inside an authenticated App Server Action. API authorization is authoritative. */
31
+ export async function performInstanceRequest(apiFetch, request) {
32
+ switch (request.kind) {
33
+ case 'query':
34
+ return apiFetch(`/list-view/machines/${segment(request.machineCode)}/query`, json(normalizeQuery(request.query)));
35
+ case 'saveView':
36
+ return apiFetch('/list-view/views', json({
37
+ machineCode: request.machineCode,
38
+ name: request.name,
39
+ query: normalizeQuery(request.query),
40
+ }));
41
+ case 'shareView':
42
+ return apiFetch(`/list-view/views/${segment(request.id)}/sharing`, json({ visibility: request.visibility, roles: request.roles }, 'PATCH'));
43
+ case 'export':
44
+ return trimJob(await apiFetch('/import-export/exports', json({
45
+ format: request.format,
46
+ source: { machineCode: request.machineCode, query: normalizeQuery(request.query) },
47
+ })));
48
+ case 'timeline':
49
+ return apiFetch(`/state-machine-instances/${segment(request.id)}/timeline?${new URLSearchParams({ offset: String(request.offset), limit: '50' })}`);
50
+ case 'mentionable':
51
+ return apiFetch(`/state-machine-instances/${segment(request.id)}/mentionable?${new URLSearchParams({ q: request.q })}`);
52
+ case 'comment':
53
+ return apiFetch(`/state-machine-instances/${segment(request.id)}/comments`, json({ body: request.body }));
54
+ case 'follow':
55
+ return apiFetch(`/state-machine-instances/${segment(request.id)}/follow`, request.enabled ? { method: 'POST' } : { method: 'DELETE' });
56
+ case 'importFields':
57
+ return apiFetch(`/import-export/machines/${segment(request.machineCode)}/fields`);
58
+ case 'preflight':
59
+ return trimJob(await apiFetch('/import-export/imports/preflight', json(request.input)));
60
+ case 'confirm': {
61
+ if (request.confirmed !== true)
62
+ throw new Error('invalidInput');
63
+ return trimJob(await apiFetch(`/import-export/imports/${segment(request.id)}/confirm`, json({ confirmed: true })));
64
+ }
65
+ case 'job':
66
+ return trimJob(await apiFetch(`/background-jobs/${segment(request.id)}`));
67
+ default:
68
+ throw new Error('invalidInput');
69
+ }
70
+ }
71
+ /** Never serialize the uploaded file, job params or downloadable base64 result to the browser. */
72
+ function trimJob(job) {
73
+ let result = job.result;
74
+ if (result) {
75
+ const { file: _file, ...metadata } = result;
76
+ result = metadata;
77
+ }
78
+ return {
79
+ id: job.id,
80
+ status: job.status,
81
+ progress: job.progress,
82
+ lastError: job.lastError,
83
+ result,
84
+ };
85
+ }
86
+ /** Read headers locally; the backend still parses and validates the complete file at preflight. */
87
+ export async function readImportUpload(form) {
88
+ const file = form.get('file');
89
+ if (!(file instanceof File) || !file.size || file.size > 10 * 1024 * 1024)
90
+ throw new Error('invalidInput');
91
+ const bytes = Buffer.from(await file.arrayBuffer());
92
+ const extension = file.name.split('.').pop()?.toLowerCase();
93
+ let headers;
94
+ if (extension === 'csv') {
95
+ const rows = parse(bytes, { bom: true, to: 1, skip_empty_lines: true });
96
+ headers = rows[0] ?? [];
97
+ }
98
+ else if (extension === 'xlsx') {
99
+ const book = new ExcelJS.Workbook();
100
+ await book.xlsx.load(bytes);
101
+ const row = book.worksheets[0]?.getRow(1);
102
+ headers = row ? Array.from({ length: row.cellCount }, (_, i) => row.getCell(i + 1).value) : [];
103
+ }
104
+ else
105
+ throw new Error('invalidInput');
106
+ if (!headers.length ||
107
+ headers.length > 100 ||
108
+ headers.some((h) => typeof h !== 'string' || !h.trim()) ||
109
+ new Set(headers).size !== headers.length)
110
+ throw new Error('invalidInput');
111
+ return {
112
+ headers: headers,
113
+ format: extension,
114
+ contentBase64: bytes.toString('base64'),
115
+ };
116
+ }
117
+ function labels(t) {
118
+ return Object.fromEntries(labelKeys.map((key) => [key, t(key)]));
119
+ }
120
+ function displayFields(fields) {
121
+ return fields.map(({ id, key, label, type, children }) => ({
122
+ id,
123
+ key,
124
+ label,
125
+ type,
126
+ ...(children ? { children: displayFields(children) } : {}),
127
+ }));
128
+ }
129
+ function leafFields(fields) {
130
+ return fields.flatMap((field) => (field.children ? leafFields(field.children) : [field]));
131
+ }
132
+ function PageError({ error, t, hideResource = false, }) {
133
+ const reason = instanceError(error);
134
+ const key = hideResource && reason.key === 'forbidden' ? 'notFound' : reason.key;
135
+ return (_jsxs("p", { role: "alert", className: "rounded-md border p-4 text-destructive", children: [t(key), reason.message && `: ${reason.message}`] }));
136
+ }
137
+ export async function renderInstanceListPage(options) {
138
+ const { apiFetch, machineCode, LinkComponent, t, basePath } = options;
139
+ try {
140
+ await options.getCurrentUser();
141
+ const fields = await apiFetch(`/list-view/machines/${segment(machineCode)}/fields`);
142
+ const params = await options.searchParams;
143
+ const query = normalizeQuery(params.query ? JSON.parse(params.query) : {});
144
+ const [result, views] = await Promise.all([
145
+ apiFetch(`/list-view/machines/${segment(machineCode)}/query`, json(query)),
146
+ apiFetch('/list-view/views'),
147
+ ]);
148
+ return (_jsxs("div", { className: "flex min-w-0 flex-col gap-4", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsx("h1", { className: "font-bold text-2xl", children: t('listTitle') }), _jsx(LinkComponent, { href: `${basePath}/import`, children: t('importTitle') })] }), _jsx(ListClient, { fields: fields, initial: result, initialQuery: query, views: views.filter((v) => v.machineCode === machineCode), machineCode: machineCode, basePath: basePath, labels: labels(t), action: options.action }, params.query ?? '')] }));
149
+ }
150
+ catch (error) {
151
+ return _jsx(PageError, { error: error, t: t });
152
+ }
153
+ }
154
+ export async function renderInstanceDetailPage(options) {
155
+ const { apiFetch, t, LinkComponent } = options;
156
+ try {
157
+ await options.getCurrentUser();
158
+ const detail = await apiFetch(`/state-machine-instances/${segment(options.id)}`);
159
+ const timeline = await apiFetch(`/state-machine-instances/${segment(options.id)}/timeline?offset=0&limit=50`);
160
+ const subject = detail.instance.bundle.root.definition.spec.subject;
161
+ const form = subject
162
+ ? detail.instance.bundle.definitions[`${subject.kind}/${subject.code}`]?.definition.spec
163
+ : undefined;
164
+ const numbers = (detail.instance.bundle.root.definition.spec.transitions ?? []).flatMap((transition) => {
165
+ const key = transition.numbering?.fieldKey;
166
+ const field = leafFields(form?.fields ?? []).find((field) => field.key === key);
167
+ const value = key ? detail.instance.data[field?.id ?? key] : undefined;
168
+ return typeof value === 'string' && value ? [value] : [];
169
+ });
170
+ return (_jsxs("div", { className: "flex min-w-0 flex-col gap-4", children: [_jsx(LinkComponent, { href: options.basePath, children: t('back') }), _jsx("h1", { className: "font-bold text-2xl", children: t('detailTitle') }), _jsx(DetailClient, { id: options.id, data: detail.instance.data, fields: displayFields(form?.fields ?? []), initialNumbers: [...new Set(numbers)], state: detail.instance.state, submitterId: detail.instance.submitterId, submitterName: detail.instance.submitterName, createdAt: detail.instance.startedAt, initial: timeline, labels: labels(t), action: options.action })] }));
171
+ }
172
+ catch (error) {
173
+ return _jsx(PageError, { error: error, t: t, hideResource: true });
174
+ }
175
+ }
176
+ export async function renderImportPage(options) {
177
+ try {
178
+ await options.getCurrentUser();
179
+ const machine = options.machines[0];
180
+ if (!machine)
181
+ throw new Error('invalidInput');
182
+ const fields = await options.apiFetch(`/import-export/machines/${segment(machine.code)}/fields`);
183
+ return (_jsxs("div", { className: "flex min-w-0 flex-col gap-4", children: [_jsx(options.LinkComponent, { href: options.basePath, children: options.t('back') }), _jsx("h1", { className: "font-bold text-2xl", children: options.t('importTitle') }), _jsx(ImportClient, { machines: options.machines, fields: fields, labels: labels(options.t), action: options.action, uploadAction: options.uploadAction, downloadBase: `${options.basePath}/download` })] }));
184
+ }
185
+ catch (error) {
186
+ return _jsx(PageError, { error: error, t: options.t });
187
+ }
188
+ }
189
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,60 @@
1
1
  {
2
2
  "name": "@haneinfo/frontend-instances",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "Shared instance lists, collaboration and import/export pages",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "agent-guide.md"
11
+ ],
12
+ "exports": {
13
+ "./server": {
14
+ "types": "./dist/server.d.ts",
15
+ "default": "./dist/server.js"
16
+ },
17
+ "./client": {
18
+ "types": "./dist/client.d.ts",
19
+ "default": "./dist/client.js"
20
+ },
21
+ "./contracts": {
22
+ "types": "./dist/contracts.d.ts",
23
+ "default": "./dist/contracts.js"
24
+ }
25
+ },
26
+ "dependencies": {
27
+ "csv-parse": "^6.1.0",
28
+ "exceljs": "^4.4.0",
29
+ "server-only": "^0.0.1",
30
+ "@haneinfo/frontend-shell": "1.4.0"
31
+ },
32
+ "peerDependencies": {
33
+ "next": "^16.0.0",
34
+ "react": "^19.0.0",
35
+ "react-dom": "^19.0.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^24.13.0",
39
+ "@types/react": "^19.2.17",
40
+ "@types/react-dom": "^19.2.3",
41
+ "next": "^16.3.1",
42
+ "react": "^19.2.7",
43
+ "react-dom": "^19.2.7",
44
+ "typescript": "^5.9.3",
45
+ "vitest": "^4.1.11"
46
+ },
47
+ "engines": {
48
+ "node": ">=22.0.0"
49
+ },
50
+ "license": "UNLICENSED",
51
+ "publishConfig": {
52
+ "registry": "https://registry.npmjs.org/",
53
+ "access": "public"
54
+ },
55
+ "scripts": {
56
+ "build": "tsc -p tsconfig.build.json",
57
+ "typecheck": "tsc --noEmit",
58
+ "test": "vitest run"
59
+ }
6
60
  }