@fixl-tech/igp-personalization 1.1.2

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.
Files changed (54) hide show
  1. package/README.md +511 -0
  2. package/dist/catalog.d.ts +5 -0
  3. package/dist/catalog.d.ts.map +1 -0
  4. package/dist/catalog.js +76 -0
  5. package/dist/catalog.js.map +1 -0
  6. package/dist/client.d.ts +33 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +101 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/designs.d.ts +12 -0
  11. package/dist/designs.d.ts.map +1 -0
  12. package/dist/designs.js +44 -0
  13. package/dist/designs.js.map +1 -0
  14. package/dist/errors.d.ts +17 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +31 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/ids.d.ts +2 -0
  19. package/dist/ids.d.ts.map +1 -0
  20. package/dist/ids.js +12 -0
  21. package/dist/ids.js.map +1 -0
  22. package/dist/index.d.ts +13 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +37 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/products.d.ts +12 -0
  27. package/dist/products.d.ts.map +1 -0
  28. package/dist/products.js +41 -0
  29. package/dist/products.js.map +1 -0
  30. package/dist/signing.d.ts +12 -0
  31. package/dist/signing.d.ts.map +1 -0
  32. package/dist/signing.js +55 -0
  33. package/dist/signing.js.map +1 -0
  34. package/dist/storage/json-file.d.ts +6 -0
  35. package/dist/storage/json-file.d.ts.map +1 -0
  36. package/dist/storage/json-file.js +62 -0
  37. package/dist/storage/json-file.js.map +1 -0
  38. package/dist/storage/memory.d.ts +3 -0
  39. package/dist/storage/memory.d.ts.map +1 -0
  40. package/dist/storage/memory.js +36 -0
  41. package/dist/storage/memory.js.map +1 -0
  42. package/dist/studio.d.ts +6 -0
  43. package/dist/studio.d.ts.map +1 -0
  44. package/dist/studio.js +16 -0
  45. package/dist/studio.js.map +1 -0
  46. package/dist/types.d.ts +130 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +3 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/validation.d.ts +8 -0
  51. package/dist/validation.d.ts.map +1 -0
  52. package/dist/validation.js +101 -0
  53. package/dist/validation.js.map +1 -0
  54. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.ts"],"names":[],"mappings":";;AAQA,oCAUC;AAlBD,uCAA0C;AAC1C,yCAA4C;AAO5C,SAAgB,YAAY,CAAC,OAA4B;IACvD,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,IAAI,yBAAc,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7C,OAAO,EAAE,IAAI,uBAAa,CAAC,OAAO,CAAC,OAAO,CAAC;KAC5C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,130 @@
1
+ export type PrintAreaShape = 'rectangle' | 'rounded-rect' | 'ellipse' | 'diamond' | 'hexagon' | 'heart' | 'star' | 'custom';
2
+ export type Point = [number, number] | [number, number, number, number];
3
+ export interface PrintArea {
4
+ id: string;
5
+ name: string;
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ shape: PrintAreaShape;
11
+ points?: Point[];
12
+ }
13
+ export interface Product {
14
+ id: string;
15
+ name: string;
16
+ price: number;
17
+ category: string;
18
+ mockup: string;
19
+ canvasWidth: number;
20
+ canvasHeight: number;
21
+ printAreas: PrintArea[];
22
+ custom: boolean;
23
+ createdAt?: string;
24
+ printArea?: Omit<PrintArea, 'id' | 'name'> | undefined;
25
+ }
26
+ export interface CustomProductInput {
27
+ name: string;
28
+ mockupUrl: string;
29
+ printAreas?: Array<Partial<PrintArea>>;
30
+ printArea?: Partial<PrintArea>;
31
+ price?: number;
32
+ category?: string;
33
+ canvasWidth?: number;
34
+ canvasHeight?: number;
35
+ }
36
+ export interface DesignLayer {
37
+ type: string;
38
+ [key: string]: unknown;
39
+ }
40
+ export interface DesignInput {
41
+ productId: string;
42
+ productName?: string;
43
+ layers: DesignLayer[];
44
+ previewDataUrl?: string | null;
45
+ }
46
+ export interface Design {
47
+ id: string;
48
+ productId: string;
49
+ productName: string;
50
+ layers: DesignLayer[];
51
+ previewDataUrl: string | null;
52
+ createdAt: string;
53
+ }
54
+ export interface StoredDocument {
55
+ id: string;
56
+ }
57
+ export interface StorageCollection<TDoc extends StoredDocument = StoredDocument> {
58
+ all(): Promise<TDoc[]>;
59
+ get(id: string): Promise<TDoc | null>;
60
+ put(doc: TDoc): Promise<void>;
61
+ remove(id: string): Promise<boolean>;
62
+ count?(): Promise<number>;
63
+ }
64
+ export interface StorageAdapter {
65
+ collection<TDoc extends StoredDocument = StoredDocument>(name: string): StorageCollection<TDoc>;
66
+ }
67
+ export interface Studio {
68
+ storage: StorageAdapter;
69
+ products: ProductServiceContract;
70
+ designs: DesignServiceContract;
71
+ }
72
+ export interface ProductServiceContract {
73
+ list(): Promise<Product[]>;
74
+ get(id: string): Promise<Product>;
75
+ addCustom(input: CustomProductInput): Promise<Product>;
76
+ removeCustom(id: string): Promise<{
77
+ ok: true;
78
+ }>;
79
+ }
80
+ export interface DesignServiceContract {
81
+ list(): Promise<Design[]>;
82
+ get(id: string): Promise<Design>;
83
+ save(input: DesignInput): Promise<Design>;
84
+ delete(id: string): Promise<{
85
+ ok: true;
86
+ }>;
87
+ }
88
+ export interface ClientOptions {
89
+ apiKey: string;
90
+ apiSecret: string;
91
+ baseUrl?: string;
92
+ fetchImpl?: typeof fetch;
93
+ }
94
+ export interface UploadOptions {
95
+ filename?: string;
96
+ contentType?: string;
97
+ }
98
+ export interface UploadResult {
99
+ url: string;
100
+ key?: string;
101
+ filename?: string;
102
+ provider: string;
103
+ size: number;
104
+ mimetype: string;
105
+ }
106
+ export interface AccountResult {
107
+ tenant: {
108
+ id: string;
109
+ name: string;
110
+ plan: string;
111
+ };
112
+ usage: {
113
+ period: string;
114
+ requests: number;
115
+ };
116
+ limits: Record<string, number>;
117
+ }
118
+ export interface SigningInput {
119
+ secret: string;
120
+ method: string;
121
+ path: string;
122
+ timestamp: string | number;
123
+ body?: string | Buffer | object | null | undefined;
124
+ }
125
+ export interface VerifyInput extends SigningInput {
126
+ signature: string;
127
+ maxSkewSeconds?: number;
128
+ now?: number;
129
+ }
130
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { createId } from './ids';
2
+ import type { CustomProductInput, DesignInput, Point, PrintArea, Product } from './types';
3
+ export declare function sanitizePoints(pts: unknown): Point[] | null;
4
+ export declare function sanitizeArea(area: unknown, idx?: number): PrintArea | null;
5
+ export declare function buildCustomProductFields(input: CustomProductInput): Omit<Product, 'id' | 'createdAt'>;
6
+ export declare function validateDesignInput(input: DesignInput): void;
7
+ export { createId };
8
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAkB,OAAO,EAAE,MAAM,SAAS,CAAC;AAM1G,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,IAAI,CAc3D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,SAAS,GAAG,IAAI,CA2BrE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,CAAC,CAgDrG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAK5D;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createId = void 0;
4
+ exports.sanitizePoints = sanitizePoints;
5
+ exports.sanitizeArea = sanitizeArea;
6
+ exports.buildCustomProductFields = buildCustomProductFields;
7
+ exports.validateDesignInput = validateDesignInput;
8
+ const catalog_1 = require("./catalog");
9
+ const errors_1 = require("./errors");
10
+ const ids_1 = require("./ids");
11
+ Object.defineProperty(exports, "createId", { enumerable: true, get: function () { return ids_1.createId; } });
12
+ function isRecord(value) {
13
+ return value !== null && typeof value === 'object';
14
+ }
15
+ function sanitizePoints(pts) {
16
+ if (!Array.isArray(pts))
17
+ return null;
18
+ const out = [];
19
+ for (const point of pts) {
20
+ if (!Array.isArray(point))
21
+ continue;
22
+ const [x, y, cx, cy] = point;
23
+ if (Number.isFinite(x) && Number.isFinite(y)) {
24
+ if (Number.isFinite(cx) && Number.isFinite(cy))
25
+ out.push([Number(x), Number(y), Number(cx), Number(cy)]);
26
+ else
27
+ out.push([Number(x), Number(y)]);
28
+ }
29
+ }
30
+ return out.length >= 3 ? out : null;
31
+ }
32
+ function sanitizeArea(area, idx = 0) {
33
+ if (!isRecord(area))
34
+ return null;
35
+ for (const key of ['x', 'y', 'width', 'height']) {
36
+ if (typeof area[key] !== 'number')
37
+ return null;
38
+ }
39
+ const rawShape = area.shape;
40
+ const shape = catalog_1.ALLOWED_SHAPES.includes(rawShape)
41
+ ? rawShape
42
+ : 'rectangle';
43
+ const clean = {
44
+ id: typeof area.id === 'string' && area.id ? area.id : `a${idx + 1}`,
45
+ name: typeof area.name === 'string' && area.name.trim() ? area.name.trim().slice(0, 40) : `Area ${idx + 1}`,
46
+ x: Number(area.x),
47
+ y: Number(area.y),
48
+ width: Number(area.width),
49
+ height: Number(area.height),
50
+ shape,
51
+ };
52
+ if (shape === 'custom') {
53
+ const points = sanitizePoints(area.points);
54
+ if (!points)
55
+ return null;
56
+ clean.points = points;
57
+ }
58
+ return clean;
59
+ }
60
+ function buildCustomProductFields(input) {
61
+ const { name, mockupUrl, printAreas, printArea, price, category, canvasWidth, canvasHeight, } = input || {};
62
+ if (!name || !mockupUrl) {
63
+ throw new errors_1.ValidationError('name and mockupUrl are required');
64
+ }
65
+ const rawAreas = Array.isArray(printAreas) ? printAreas : printArea ? [printArea] : [];
66
+ if (rawAreas.length === 0) {
67
+ throw new errors_1.ValidationError('At least one print area is required');
68
+ }
69
+ const cleanAreas = rawAreas.map((area, idx) => sanitizeArea(area, idx)).filter((area) => area !== null);
70
+ if (cleanAreas.length === 0) {
71
+ throw new errors_1.ValidationError('No valid print areas after sanitisation');
72
+ }
73
+ // Keep area IDs stable while preventing duplicate IDs inside one product.
74
+ const seen = new Set();
75
+ cleanAreas.forEach((area, idx) => {
76
+ let id = area.id;
77
+ while (seen.has(id))
78
+ id = `${area.id}_${idx}`;
79
+ area.id = id;
80
+ seen.add(id);
81
+ });
82
+ const cw = Number.isFinite(Number(canvasWidth)) && Number(canvasWidth) > 0 ? Math.round(Number(canvasWidth)) : 600;
83
+ const ch = Number.isFinite(Number(canvasHeight)) && Number(canvasHeight) > 0 ? Math.round(Number(canvasHeight)) : 600;
84
+ return {
85
+ name: String(name).slice(0, 80),
86
+ price: Number(price) || 0,
87
+ category: category || 'Custom',
88
+ mockup: mockupUrl,
89
+ canvasWidth: cw,
90
+ canvasHeight: ch,
91
+ printAreas: cleanAreas,
92
+ custom: true,
93
+ };
94
+ }
95
+ function validateDesignInput(input) {
96
+ const candidate = input;
97
+ if (!candidate?.productId || !Array.isArray(candidate.layers)) {
98
+ throw new errors_1.ValidationError('productId and layers[] are required');
99
+ }
100
+ }
101
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@fixl-tech/igp-personalization",
3
+ "version": "1.1.2",
4
+ "description": "Unified TypeScript SDK for IGP-style product personalization: local studio engine, storage adapters, validation, signing, and hosted API client.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "commonjs",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "clean": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
20
+ "build": "npm run clean && tsc -p tsconfig.json",
21
+ "test": "npm run build && node test/smoke.js",
22
+ "prepublishOnly": "npm run test"
23
+ },
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "keywords": [
28
+ "personalization",
29
+ "product-customizer",
30
+ "sdk",
31
+ "catalog",
32
+ "designs",
33
+ "hmac",
34
+ "typescript",
35
+ "igp"
36
+ ],
37
+ "author": "",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": ""
42
+ },
43
+ "bugs": {
44
+ "url": ""
45
+ },
46
+ "homepage": "",
47
+ "devDependencies": {
48
+ "@types/node": "^20.19.1",
49
+ "typescript": "^5.8.3"
50
+ },
51
+ "dependencies": {}
52
+ }