@mostajs/ticketing 2.1.0 → 3.0.1
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/api/detect.route.d.ts +19 -0
- package/dist/api/detect.route.d.ts.map +1 -0
- package/dist/api/detect.route.js +31 -0
- package/dist/api/detect.route.js.map +1 -0
- package/dist/api/recognize.route.d.ts +32 -0
- package/dist/api/recognize.route.d.ts.map +1 -0
- package/dist/api/recognize.route.js +86 -0
- package/dist/api/recognize.route.js.map +1 -0
- package/dist/components/FaceDetector.d.ts +28 -0
- package/dist/components/FaceDetector.d.ts.map +1 -0
- package/dist/components/FaceDetector.js +184 -0
- package/dist/components/FaceDetector.js.map +1 -0
- package/dist/components/ScanResultCard.d.ts +10 -0
- package/dist/components/ScanResultCard.d.ts.map +1 -0
- package/dist/components/ScanResultCard.js +63 -0
- package/dist/components/ScanResultCard.js.map +1 -0
- package/dist/components/ScannerView.d.ts +9 -0
- package/dist/components/ScannerView.d.ts.map +1 -0
- package/dist/components/ScannerView.js +62 -0
- package/dist/components/ScannerView.js.map +1 -0
- package/dist/hooks/useCamera.d.ts +18 -0
- package/dist/hooks/useCamera.d.ts.map +1 -0
- package/dist/hooks/useCamera.js +74 -0
- package/dist/hooks/useCamera.js.map +1 -0
- package/dist/hooks/useFaceDetection.d.ts +22 -0
- package/dist/hooks/useFaceDetection.d.ts.map +1 -0
- package/dist/hooks/useFaceDetection.js +62 -0
- package/dist/hooks/useFaceDetection.js.map +1 -0
- package/dist/hooks/useScan.d.ts +9 -0
- package/dist/hooks/useScan.d.ts.map +1 -0
- package/dist/hooks/useScan.js +101 -0
- package/dist/hooks/useScan.js.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/audio.d.ts +10 -0
- package/dist/lib/audio.d.ts.map +1 -0
- package/dist/lib/audio.js +29 -0
- package/dist/lib/audio.js.map +1 -0
- package/dist/lib/face-api.d.ts +24 -0
- package/dist/lib/face-api.d.ts.map +1 -0
- package/dist/lib/face-api.js +66 -0
- package/dist/lib/face-api.js.map +1 -0
- package/dist/lib/face-matcher.d.ts +19 -0
- package/dist/lib/face-matcher.d.ts.map +1 -0
- package/dist/lib/face-matcher.js +53 -0
- package/dist/lib/face-matcher.js.map +1 -0
- package/dist/lib/face-utils.d.ts +21 -0
- package/dist/lib/face-utils.d.ts.map +1 -0
- package/dist/lib/face-utils.js +40 -0
- package/dist/lib/face-utils.js.map +1 -0
- package/dist/pages/ScanPage.d.ts +2 -0
- package/dist/pages/ScanPage.d.ts.map +1 -0
- package/dist/pages/ScanPage.js +32 -0
- package/dist/pages/ScanPage.js.map +1 -0
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +9 -3
- package/dist/register.js.map +1 -1
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/dist/types/index.d.ts +115 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -2
- package/dist/types/index.js.map +1 -1
- package/i18n/fr/scan.json +25 -0
- package/package.json +82 -3
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Convert Float32Array descriptor to number[] for JSON/DB storage */
|
|
2
|
+
export declare function descriptorToArray(descriptor: Float32Array): number[];
|
|
3
|
+
/** Convert number[] back to Float32Array for comparison */
|
|
4
|
+
export declare function arrayToDescriptor(arr: number[]): Float32Array;
|
|
5
|
+
/** Validate that a descriptor is valid (128 elements) */
|
|
6
|
+
export declare function isValidDescriptor(data: unknown): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Draw a detection bounding box + score on a canvas overlay.
|
|
9
|
+
*/
|
|
10
|
+
export declare function drawDetection(canvas: HTMLCanvasElement, detection: {
|
|
11
|
+
detection: {
|
|
12
|
+
score: number;
|
|
13
|
+
box: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
} | null, videoWidth: number, videoHeight: number): void;
|
|
21
|
+
//# sourceMappingURL=face-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"face-utils.d.ts","sourceRoot":"","sources":["../../lib/face-utils.ts"],"names":[],"mappings":"AAGA,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,EAAE,CAEpE;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,CAE7D;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAIxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE;IAAE,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,EAChH,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,IAAI,CAmBN"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// @mostajs/ticketing — Face utility functions (from @mostajs/face)
|
|
2
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
|
+
/** Convert Float32Array descriptor to number[] for JSON/DB storage */
|
|
4
|
+
export function descriptorToArray(descriptor) {
|
|
5
|
+
return Array.from(descriptor);
|
|
6
|
+
}
|
|
7
|
+
/** Convert number[] back to Float32Array for comparison */
|
|
8
|
+
export function arrayToDescriptor(arr) {
|
|
9
|
+
return new Float32Array(arr);
|
|
10
|
+
}
|
|
11
|
+
/** Validate that a descriptor is valid (128 elements) */
|
|
12
|
+
export function isValidDescriptor(data) {
|
|
13
|
+
if (data instanceof Float32Array)
|
|
14
|
+
return data.length === 128;
|
|
15
|
+
if (Array.isArray(data))
|
|
16
|
+
return data.length === 128 && data.every((v) => typeof v === 'number');
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Draw a detection bounding box + score on a canvas overlay.
|
|
21
|
+
*/
|
|
22
|
+
export function drawDetection(canvas, detection, videoWidth, videoHeight) {
|
|
23
|
+
const ctx = canvas.getContext('2d');
|
|
24
|
+
if (!ctx)
|
|
25
|
+
return;
|
|
26
|
+
canvas.width = videoWidth;
|
|
27
|
+
canvas.height = videoHeight;
|
|
28
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
29
|
+
if (!detection)
|
|
30
|
+
return;
|
|
31
|
+
const box = detection.detection.box;
|
|
32
|
+
ctx.strokeStyle = '#22c55e';
|
|
33
|
+
ctx.lineWidth = 3;
|
|
34
|
+
ctx.strokeRect(box.x, box.y, box.width, box.height);
|
|
35
|
+
const score = Math.round(detection.detection.score * 100);
|
|
36
|
+
ctx.fillStyle = '#22c55e';
|
|
37
|
+
ctx.font = 'bold 14px sans-serif';
|
|
38
|
+
ctx.fillText(`Visage ${score}%`, box.x, box.y - 6);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=face-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"face-utils.js","sourceRoot":"","sources":["../../lib/face-utils.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,wCAAwC;AAExC,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAAC,UAAwB;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAC/B,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,GAAa;IAC7C,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,IAAI,IAAI,YAAY,YAAY;QAAE,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAA;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAA;IAC/F,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAyB,EACzB,SAAgH,EAChH,UAAkB,EAClB,WAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC,GAAG;QAAE,OAAM;IAEhB,MAAM,CAAC,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,CAAC,MAAM,GAAG,WAAW,CAAA;IAC3B,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAEhD,IAAI,CAAC,SAAS;QAAE,OAAM;IAEtB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAA;IACnC,GAAG,CAAC,WAAW,GAAG,SAAS,CAAA;IAC3B,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;IACjB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAEnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,CAAA;IACzD,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;IACzB,GAAG,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACjC,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScanPage.d.ts","sourceRoot":"","sources":["../../pages/ScanPage.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,QAAQ,4CA0C/B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
// @mostajs/ticketing — ScanPage (from @mostajs/scan)
|
|
4
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
export default function ScanPage() {
|
|
7
|
+
const [qrCode, setQrCode] = useState('');
|
|
8
|
+
const [result, setResult] = useState(null);
|
|
9
|
+
const [loading, setLoading] = useState(false);
|
|
10
|
+
async function handleScan() {
|
|
11
|
+
if (!qrCode.trim())
|
|
12
|
+
return;
|
|
13
|
+
setLoading(true);
|
|
14
|
+
setResult(null);
|
|
15
|
+
try {
|
|
16
|
+
const res = await fetch('/api/scan', {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
headers: { 'Content-Type': 'application/json' },
|
|
19
|
+
body: JSON.stringify({ qrCode }),
|
|
20
|
+
});
|
|
21
|
+
setResult(await res.json());
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
setResult({ error: 'Erreur reseau' });
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
setLoading(false);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return (_jsxs("div", { className: "p-6 space-y-4", children: [_jsx("h1", { className: "text-2xl font-bold", children: "Scanner" }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "text", value: qrCode, onChange: (e) => setQrCode(e.target.value), onKeyDown: (e) => e.key === 'Enter' && handleScan(), placeholder: "Code QR du ticket...", className: "flex-1 px-3 py-2 border rounded-md" }), _jsx("button", { onClick: handleScan, disabled: loading || !qrCode.trim(), className: "px-4 py-2 bg-sky-600 text-white rounded-md disabled:opacity-50", children: loading ? 'Scan...' : 'Valider' })] }), result && (_jsx("pre", { className: "p-4 bg-gray-50 rounded-lg text-sm overflow-auto", children: JSON.stringify(result, null, 2) }))] }));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=ScanPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScanPage.js","sourceRoot":"","sources":["../../pages/ScanPage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,qDAAqD;AACrD,wCAAwC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,MAAM,CAAC,OAAO,UAAU,QAAQ;IAC9B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACxC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAM,IAAI,CAAC,CAAA;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAM;QAC1B,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;aACjC,CAAC,CAAA;YACF,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;QACvC,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,aAAI,SAAS,EAAC,oBAAoB,wBAAa,EAC/C,eAAK,SAAS,EAAC,YAAY,aACzB,gBAAO,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1E,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,UAAU,EAAE,EACnD,WAAW,EAAC,sBAAsB,EAAC,SAAS,EAAC,oCAAoC,GAAG,EACtF,iBAAQ,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAC9D,SAAS,EAAC,gEAAgE,YACzE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GACzB,IACL,EACL,MAAM,IAAI,CACT,cAAK,SAAS,EAAC,iDAAiD,YAC7D,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAC5B,CACP,IACG,CACP,CAAA;AACH,CAAC"}
|
package/dist/register.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAWxD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CA4ClF"}
|
package/dist/register.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// @mostajs/ticketing — Runtime module registration
|
|
1
|
+
// @mostajs/ticketing — Runtime module registration (merged: ticketing + scan + face)
|
|
2
2
|
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
3
|
import { TicketSchema } from './schemas/ticket.schema';
|
|
4
4
|
import { ScanLogSchema } from './schemas/scan-log.schema';
|
|
@@ -8,17 +8,18 @@ import { ScanLogRepository } from './repositories/scan-log.repository';
|
|
|
8
8
|
import { ticketingMenuContribution } from './lib/menu';
|
|
9
9
|
import { TICKETING_PERMISSIONS, TICKETING_PERMISSION_DEFINITIONS, TICKETING_CATEGORY_DEFINITIONS } from './lib/permissions';
|
|
10
10
|
import TicketsPage from './pages/TicketsPage';
|
|
11
|
+
import ScanPage from './pages/ScanPage';
|
|
11
12
|
export function register(registry) {
|
|
12
13
|
registry.register({
|
|
13
14
|
manifest: {
|
|
14
15
|
name: 'ticketing',
|
|
15
16
|
package: '@mostajs/ticketing',
|
|
16
|
-
version: '
|
|
17
|
+
version: '3.0.0',
|
|
17
18
|
type: 'business',
|
|
18
19
|
priority: 95,
|
|
19
20
|
dependencies: ['auth', 'subscriptions'],
|
|
20
21
|
displayName: 'Billetterie',
|
|
21
|
-
description: 'Tickets, scan, validation — billetterie
|
|
22
|
+
description: 'Tickets, scan, face recognition, validation — billetterie complete',
|
|
22
23
|
icon: 'Ticket',
|
|
23
24
|
register: './dist/register.js',
|
|
24
25
|
},
|
|
@@ -38,8 +39,13 @@ export function register(registry) {
|
|
|
38
39
|
},
|
|
39
40
|
pages: [
|
|
40
41
|
{ path: 'tickets', component: TicketsPage, permission: 'ticket:view' },
|
|
42
|
+
{ path: 'scan', component: ScanPage, permission: 'scan:validate' },
|
|
41
43
|
],
|
|
42
44
|
menu: ticketingMenuContribution,
|
|
45
|
+
i18n: [
|
|
46
|
+
{ namespace: 'tickets', source: 'node_modules/@mostajs/ticketing/i18n/fr/tickets.json' },
|
|
47
|
+
{ namespace: 'scan', source: 'node_modules/@mostajs/ticketing/i18n/fr/scan.json' },
|
|
48
|
+
],
|
|
43
49
|
});
|
|
44
50
|
}
|
|
45
51
|
//# sourceMappingURL=register.js.map
|
package/dist/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,wCAAwC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAC3H,OAAO,WAAW,MAAM,qBAAqB,CAAA;AAC7C,OAAO,QAAQ,MAAM,kBAAkB,CAAA;AAEvC,MAAM,UAAU,QAAQ,CAAC,QAAmD;IAC1E,QAAQ,CAAC,QAAQ,CAAC;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;YACvC,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,oEAAoE;YACjF,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,oBAAoB;SAC/B;QAED,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;YACxC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;YAC1C,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;SAC3C;QAED,YAAY,EAAE;YACZ,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAgB,CAAC;YACxE,WAAW,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,OAAgB,CAAC;SAC3E;QAED,WAAW,EAAE;YACX,WAAW,EAAE,qBAAqB;YAClC,WAAW,EAAE,gCAAgC;YAC7C,UAAU,EAAE,8BAA8B;SAC3C;QAED,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE;YACtE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE;SACnE;QAED,IAAI,EAAE,yBAAyB;QAE/B,IAAI,EAAE;YACJ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,sDAAsD,EAAE;YACxF,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,mDAAmD,EAAE;SACnF;KACF,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -2,4 +2,8 @@ export { TicketRepository, ScanLogRepository } from './repositories/index';
|
|
|
2
2
|
export type { TicketDTO, ScanLogDTO } from './repositories/index';
|
|
3
3
|
export { createScanHandler } from './api/scan.route';
|
|
4
4
|
export { createTicketsHandler } from './api/tickets.route';
|
|
5
|
+
export { createDetectHandler } from './api/detect.route';
|
|
6
|
+
export type { DetectHandlerConfig } from './api/detect.route';
|
|
7
|
+
export { createRecognizeHandler } from './api/recognize.route';
|
|
8
|
+
export type { FaceCandidate, RecognizeHandlerConfig } from './api/recognize.route';
|
|
5
9
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC1E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC1E,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
// @mostajs/ticketing/server — Server-side exports (
|
|
1
|
+
// @mostajs/ticketing/server — Server-side exports (merged: ticketing + face)
|
|
2
2
|
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
3
|
export { TicketRepository, ScanLogRepository } from './repositories/index';
|
|
4
|
-
// API route factories
|
|
4
|
+
// API route factories — ticketing
|
|
5
5
|
export { createScanHandler } from './api/scan.route';
|
|
6
6
|
export { createTicketsHandler } from './api/tickets.route';
|
|
7
|
+
// API route factories — face
|
|
8
|
+
export { createDetectHandler } from './api/detect.route';
|
|
9
|
+
export { createRecognizeHandler } from './api/recognize.route';
|
|
7
10
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,wCAAwC;AAExC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAG1E,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,6BAA6B;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -96,4 +96,119 @@ export interface TicketsHandlerConfig {
|
|
|
96
96
|
}) => Promise<void>;
|
|
97
97
|
defaultCodeFormat?: CodeFormat;
|
|
98
98
|
}
|
|
99
|
+
export interface ScanTicketInfo {
|
|
100
|
+
ticketNumber: string;
|
|
101
|
+
clientName: string;
|
|
102
|
+
activityName: string;
|
|
103
|
+
ticketType: string;
|
|
104
|
+
validityMode: string;
|
|
105
|
+
status: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ScanClientInfo {
|
|
108
|
+
name: string;
|
|
109
|
+
clientNumber: string;
|
|
110
|
+
photo?: string;
|
|
111
|
+
faceDescriptor?: number[];
|
|
112
|
+
}
|
|
113
|
+
export interface ScanAccessInfo {
|
|
114
|
+
remainingQuota: number | null;
|
|
115
|
+
totalQuota: number | null;
|
|
116
|
+
endDate: string | null;
|
|
117
|
+
status: string;
|
|
118
|
+
}
|
|
119
|
+
export interface ScanResultData {
|
|
120
|
+
result: 'granted' | 'denied';
|
|
121
|
+
reason?: string;
|
|
122
|
+
isReentry?: boolean;
|
|
123
|
+
ticket?: ScanTicketInfo;
|
|
124
|
+
client?: ScanClientInfo;
|
|
125
|
+
access?: ScanAccessInfo;
|
|
126
|
+
}
|
|
127
|
+
export interface ScannerViewProps {
|
|
128
|
+
/** API endpoint for scan validation (default: '/api/scan') */
|
|
129
|
+
apiEndpoint?: string;
|
|
130
|
+
/** Called when a scan result is received */
|
|
131
|
+
onResult?: (data: ScanResultData) => void;
|
|
132
|
+
/** Called on scanner error */
|
|
133
|
+
onError?: (message: string) => void;
|
|
134
|
+
/** Translate function (default: identity) */
|
|
135
|
+
t?: (key: string) => string;
|
|
136
|
+
/** Labels for start/stop buttons */
|
|
137
|
+
startLabel?: string;
|
|
138
|
+
stopLabel?: string;
|
|
139
|
+
/** Sound frequencies: [grantedHz, deniedHz] */
|
|
140
|
+
soundFrequencies?: [number, number];
|
|
141
|
+
}
|
|
142
|
+
export interface ScanResultCardProps {
|
|
143
|
+
/** The scan result data */
|
|
144
|
+
data: ScanResultData;
|
|
145
|
+
/** Translate function (default: identity) */
|
|
146
|
+
t?: (key: string) => string;
|
|
147
|
+
/** Render custom content after client info (e.g., face verification) */
|
|
148
|
+
renderExtra?: (data: ScanResultData) => React.ReactNode;
|
|
149
|
+
}
|
|
150
|
+
export interface UseScanOptions {
|
|
151
|
+
/** API endpoint for scan validation (default: '/api/scan') */
|
|
152
|
+
apiEndpoint?: string;
|
|
153
|
+
/** Play audio feedback on result (default: true) */
|
|
154
|
+
audioFeedback?: boolean;
|
|
155
|
+
/** Sound frequencies: [grantedHz, deniedHz] (default: [800, 300]) */
|
|
156
|
+
soundFrequencies?: [number, number];
|
|
157
|
+
/** Called when a scan result is received */
|
|
158
|
+
onResult?: (data: ScanResultData) => void;
|
|
159
|
+
/** Called on error */
|
|
160
|
+
onError?: (message: string) => void;
|
|
161
|
+
}
|
|
162
|
+
export interface UseScanReturn {
|
|
163
|
+
/** Whether the scanner is actively scanning */
|
|
164
|
+
scanning: boolean;
|
|
165
|
+
/** Whether a scan is being processed */
|
|
166
|
+
processing: boolean;
|
|
167
|
+
/** The latest scan result */
|
|
168
|
+
result: ScanResultData | null;
|
|
169
|
+
/** Start the QR scanner */
|
|
170
|
+
startScanner: () => Promise<void>;
|
|
171
|
+
/** Stop the QR scanner */
|
|
172
|
+
stopScanner: () => void;
|
|
173
|
+
/** Reset the result */
|
|
174
|
+
resetResult: () => void;
|
|
175
|
+
}
|
|
176
|
+
export interface MostaFaceConfig {
|
|
177
|
+
/** Path to face-api.js model files (default: '/models/face-api') */
|
|
178
|
+
modelsPath?: string;
|
|
179
|
+
/** Detection score threshold (default: 0.5) */
|
|
180
|
+
scoreThreshold?: number;
|
|
181
|
+
/** TinyFaceDetector input size (default: 320) */
|
|
182
|
+
inputSize?: number;
|
|
183
|
+
/** Face matching distance threshold (default: 0.6) */
|
|
184
|
+
matchThreshold?: number;
|
|
185
|
+
}
|
|
186
|
+
export interface FaceDetectionResult {
|
|
187
|
+
detection: {
|
|
188
|
+
score: number;
|
|
189
|
+
box: {
|
|
190
|
+
x: number;
|
|
191
|
+
y: number;
|
|
192
|
+
width: number;
|
|
193
|
+
height: number;
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
landmarks?: any;
|
|
197
|
+
}
|
|
198
|
+
export interface FaceMatchResult<T> {
|
|
199
|
+
match: T;
|
|
200
|
+
distance: number;
|
|
201
|
+
}
|
|
202
|
+
export type FaceDescriptor = Float32Array | number[];
|
|
203
|
+
export interface FaceSettings {
|
|
204
|
+
/** Enable face detection/recognition (default: true) */
|
|
205
|
+
faceRecognitionEnabled: boolean;
|
|
206
|
+
/** Match distance threshold — lower = stricter (default: 0.6) */
|
|
207
|
+
faceRecognitionThreshold: number;
|
|
208
|
+
/** Require face detected before photo capture (default: true) */
|
|
209
|
+
faceRequireForCapture: boolean;
|
|
210
|
+
/** Auto-verify face after scan (default: false) */
|
|
211
|
+
faceAutoVerify: boolean;
|
|
212
|
+
}
|
|
213
|
+
export declare const DEFAULT_FACE_SETTINGS: FaceSettings;
|
|
99
214
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
// @mostajs/ticketing — Types
|
|
1
|
+
// @mostajs/ticketing — Types (merged: ticketing + scan + face)
|
|
2
2
|
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
|
-
export {
|
|
3
|
+
export const DEFAULT_FACE_SETTINGS = {
|
|
4
|
+
faceRecognitionEnabled: true,
|
|
5
|
+
faceRecognitionThreshold: 0.6,
|
|
6
|
+
faceRequireForCapture: true,
|
|
7
|
+
faceAutoVerify: false,
|
|
8
|
+
};
|
|
4
9
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,wCAAwC;AAiPxC,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,sBAAsB,EAAE,IAAI;IAC5B,wBAAwB,EAAE,GAAG;IAC7B,qBAAqB,EAAE,IAAI;IAC3B,cAAc,EAAE,KAAK;CACtB,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_author": "Dr Hamid MADANI drmdh@msn.com",
|
|
3
|
+
"title": "Scanner",
|
|
4
|
+
"scan": "Scanner un ticket",
|
|
5
|
+
"history": "Historique des scans",
|
|
6
|
+
"result": {
|
|
7
|
+
"granted": "ACCÈS ACCORDÉ",
|
|
8
|
+
"denied": "ACCÈS REFUSÉ"
|
|
9
|
+
},
|
|
10
|
+
"info": {
|
|
11
|
+
"client": "Client",
|
|
12
|
+
"activity": "Activité",
|
|
13
|
+
"quotaRemaining": "Quota restant",
|
|
14
|
+
"locker": "Casier"
|
|
15
|
+
},
|
|
16
|
+
"denyReasons": {
|
|
17
|
+
"ticket_expired": "Ticket expiré",
|
|
18
|
+
"ticket_already_used": "Ticket déjà utilisé",
|
|
19
|
+
"ticket_cancelled": "Ticket annulé",
|
|
20
|
+
"quota_depleted": "Quota épuisé",
|
|
21
|
+
"access_expired": "Accès expiré",
|
|
22
|
+
"client_suspended": "Client suspendu",
|
|
23
|
+
"invalid_ticket": "Ticket invalide"
|
|
24
|
+
}
|
|
25
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mostajs/ticketing",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Ticketing module —
|
|
3
|
+
"version": "3.0.1",
|
|
4
|
+
"description": "Ticketing module — tickets, scan, face recognition, quota management (merged scan+face)",
|
|
5
5
|
"author": "Dr Hamid MADANI <drmdh@msn.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -28,6 +28,26 @@
|
|
|
28
28
|
"import": "./dist/lib/menu.js",
|
|
29
29
|
"default": "./dist/lib/menu.js"
|
|
30
30
|
},
|
|
31
|
+
"./lib/audio": {
|
|
32
|
+
"types": "./dist/lib/audio.d.ts",
|
|
33
|
+
"import": "./dist/lib/audio.js",
|
|
34
|
+
"default": "./dist/lib/audio.js"
|
|
35
|
+
},
|
|
36
|
+
"./lib/face-api": {
|
|
37
|
+
"types": "./dist/lib/face-api.d.ts",
|
|
38
|
+
"import": "./dist/lib/face-api.js",
|
|
39
|
+
"default": "./dist/lib/face-api.js"
|
|
40
|
+
},
|
|
41
|
+
"./lib/face-matcher": {
|
|
42
|
+
"types": "./dist/lib/face-matcher.d.ts",
|
|
43
|
+
"import": "./dist/lib/face-matcher.js",
|
|
44
|
+
"default": "./dist/lib/face-matcher.js"
|
|
45
|
+
},
|
|
46
|
+
"./lib/face-utils": {
|
|
47
|
+
"types": "./dist/lib/face-utils.d.ts",
|
|
48
|
+
"import": "./dist/lib/face-utils.js",
|
|
49
|
+
"default": "./dist/lib/face-utils.js"
|
|
50
|
+
},
|
|
31
51
|
"./types": {
|
|
32
52
|
"types": "./dist/types/index.d.ts",
|
|
33
53
|
"import": "./dist/types/index.js",
|
|
@@ -42,6 +62,52 @@
|
|
|
42
62
|
"types": "./dist/pages/TicketsPage.d.ts",
|
|
43
63
|
"import": "./dist/pages/TicketsPage.js",
|
|
44
64
|
"default": "./dist/pages/TicketsPage.js"
|
|
65
|
+
},
|
|
66
|
+
"./pages/ScanPage": {
|
|
67
|
+
"types": "./dist/pages/ScanPage.d.ts",
|
|
68
|
+
"import": "./dist/pages/ScanPage.js",
|
|
69
|
+
"default": "./dist/pages/ScanPage.js"
|
|
70
|
+
},
|
|
71
|
+
"./components/ScannerView": {
|
|
72
|
+
"types": "./dist/components/ScannerView.d.ts",
|
|
73
|
+
"import": "./dist/components/ScannerView.js",
|
|
74
|
+
"default": "./dist/components/ScannerView.js"
|
|
75
|
+
},
|
|
76
|
+
"./components/ScanResultCard": {
|
|
77
|
+
"types": "./dist/components/ScanResultCard.d.ts",
|
|
78
|
+
"import": "./dist/components/ScanResultCard.js",
|
|
79
|
+
"default": "./dist/components/ScanResultCard.js"
|
|
80
|
+
},
|
|
81
|
+
"./components/FaceDetector": {
|
|
82
|
+
"types": "./dist/components/FaceDetector.d.ts",
|
|
83
|
+
"import": "./dist/components/FaceDetector.js",
|
|
84
|
+
"default": "./dist/components/FaceDetector.js"
|
|
85
|
+
},
|
|
86
|
+
"./hooks/useScan": {
|
|
87
|
+
"types": "./dist/hooks/useScan.d.ts",
|
|
88
|
+
"import": "./dist/hooks/useScan.js",
|
|
89
|
+
"default": "./dist/hooks/useScan.js"
|
|
90
|
+
},
|
|
91
|
+
"./hooks/useCamera": {
|
|
92
|
+
"types": "./dist/hooks/useCamera.d.ts",
|
|
93
|
+
"import": "./dist/hooks/useCamera.js",
|
|
94
|
+
"default": "./dist/hooks/useCamera.js"
|
|
95
|
+
},
|
|
96
|
+
"./hooks/useFaceDetection": {
|
|
97
|
+
"types": "./dist/hooks/useFaceDetection.d.ts",
|
|
98
|
+
"import": "./dist/hooks/useFaceDetection.js",
|
|
99
|
+
"default": "./dist/hooks/useFaceDetection.js"
|
|
100
|
+
},
|
|
101
|
+
"./api/detect.route": {
|
|
102
|
+
"types": "./dist/api/detect.route.d.ts",
|
|
103
|
+
"import": "./dist/api/detect.route.js",
|
|
104
|
+
"default": "./dist/api/detect.route.js"
|
|
105
|
+
},
|
|
106
|
+
"./i18n/*": "./i18n/*",
|
|
107
|
+
"./api/recognize.route": {
|
|
108
|
+
"types": "./dist/api/recognize.route.d.ts",
|
|
109
|
+
"import": "./dist/api/recognize.route.js",
|
|
110
|
+
"default": "./dist/api/recognize.route.js"
|
|
45
111
|
}
|
|
46
112
|
},
|
|
47
113
|
"files": [
|
|
@@ -56,6 +122,8 @@
|
|
|
56
122
|
"ticket",
|
|
57
123
|
"scan",
|
|
58
124
|
"qrcode",
|
|
125
|
+
"face-recognition",
|
|
126
|
+
"face-detection",
|
|
59
127
|
"quota",
|
|
60
128
|
"nextjs",
|
|
61
129
|
"mosta"
|
|
@@ -73,11 +141,14 @@
|
|
|
73
141
|
"prepublishOnly": "npm run build"
|
|
74
142
|
},
|
|
75
143
|
"dependencies": {
|
|
76
|
-
"@mostajs/orm": "^1.4.12"
|
|
144
|
+
"@mostajs/orm": "^1.4.12",
|
|
145
|
+
"@vladmandic/face-api": "^1.7.0"
|
|
77
146
|
},
|
|
78
147
|
"peerDependencies": {
|
|
79
148
|
"@mostajs/socle": ">=2.0.0",
|
|
80
149
|
"@mostajs/subscriptions": ">=1.0.0",
|
|
150
|
+
"html5-qrcode": ">=2.3.0",
|
|
151
|
+
"lucide-react": ">=0.400.0",
|
|
81
152
|
"next": ">=14",
|
|
82
153
|
"react": ">=18"
|
|
83
154
|
},
|
|
@@ -87,12 +158,20 @@
|
|
|
87
158
|
},
|
|
88
159
|
"@mostajs/subscriptions": {
|
|
89
160
|
"optional": true
|
|
161
|
+
},
|
|
162
|
+
"html5-qrcode": {
|
|
163
|
+
"optional": true
|
|
164
|
+
},
|
|
165
|
+
"lucide-react": {
|
|
166
|
+
"optional": true
|
|
90
167
|
}
|
|
91
168
|
},
|
|
92
169
|
"devDependencies": {
|
|
93
170
|
"@mostajs/socle": "^2.0.0",
|
|
94
171
|
"@types/node": "^25.3.3",
|
|
95
172
|
"@types/react": "^19.0.0",
|
|
173
|
+
"html5-qrcode": "^2.3.8",
|
|
174
|
+
"lucide-react": "^0.575.0",
|
|
96
175
|
"next": "^16.1.6",
|
|
97
176
|
"react": "^19.0.0",
|
|
98
177
|
"typescript": "^5.9.3"
|