@scanly/parsers 2.0.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/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @scanly/parsers
2
+
3
+ Side-effect-free semantic parsing. Parsers never replace or mutate raw decode text and never execute URLs, Wi-Fi joins, calls, messages, or calendar actions.
@@ -0,0 +1,14 @@
1
+ export type StructuredPayloadKind = "url" | "wifi" | "vcard" | "email" | "telephone" | "sms" | "geo" | "calendar" | "gs1-element-string" | "gs1-digital-link";
2
+ export interface StructuredPayload {
3
+ kind: StructuredPayloadKind;
4
+ parserVersion: "1.0";
5
+ fields: Readonly<Record<string, string | string[] | number | boolean | null>>;
6
+ warnings: string[];
7
+ }
8
+ export interface SemanticParseResult {
9
+ rawText: string;
10
+ structured: StructuredPayload | null;
11
+ }
12
+ export declare function parseSemanticPayload(rawText: string): SemanticParseResult;
13
+ export declare function isSafeActionUrl(text: string): boolean;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,KAAK,GACL,MAAM,GACN,OAAO,GACP,OAAO,GACP,WAAW,GACX,KAAK,GACL,KAAK,GACL,UAAU,GACV,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,KAAK,CAAC;IACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACtC;AA8KD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAOzE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrD"}
package/dist/index.js ADDED
@@ -0,0 +1,203 @@
1
+ const PARSER_VERSION = "1.0";
2
+ function unescapeBackslash(value) {
3
+ return value.replace(/\\([\\;,nN:])/g, (_match, char) => char.toLowerCase() === "n" ? "\n" : char);
4
+ }
5
+ function splitEscaped(value, separator = ";") {
6
+ const output = [];
7
+ let current = "";
8
+ let escaped = false;
9
+ for (const char of value) {
10
+ if (escaped) {
11
+ current += `\\${char}`;
12
+ escaped = false;
13
+ }
14
+ else if (char === "\\") {
15
+ escaped = true;
16
+ }
17
+ else if (char === separator) {
18
+ output.push(current);
19
+ current = "";
20
+ }
21
+ else {
22
+ current += char;
23
+ }
24
+ }
25
+ output.push(current);
26
+ return output;
27
+ }
28
+ function parseUrl(text) {
29
+ try {
30
+ const url = new URL(text);
31
+ if (url.protocol !== "http:" && url.protocol !== "https:")
32
+ return null;
33
+ const fields = {
34
+ href: url.href,
35
+ protocol: url.protocol,
36
+ host: url.host,
37
+ pathname: url.pathname,
38
+ };
39
+ if (url.hostname === "id.gs1.org" || url.hostname.endsWith(".id.gs1.org")) {
40
+ return { kind: "gs1-digital-link", parserVersion: PARSER_VERSION, fields, warnings: [] };
41
+ }
42
+ return { kind: "url", parserVersion: PARSER_VERSION, fields, warnings: [] };
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ }
48
+ function parseWifi(text) {
49
+ if (!text.startsWith("WIFI:") || !text.endsWith(";;"))
50
+ return null;
51
+ const entries = splitEscaped(text.slice(5, -2));
52
+ const fields = {};
53
+ const keyNames = { T: "authentication", S: "ssid", P: "password", H: "hidden", I: "identity", A: "anonymousIdentity", E: "eapMethod", PH2: "phase2Method" };
54
+ for (const entry of entries) {
55
+ const index = entry.indexOf(":");
56
+ if (index <= 0)
57
+ continue;
58
+ const key = keyNames[entry.slice(0, index)];
59
+ if (!key)
60
+ continue;
61
+ const parsed = unescapeBackslash(entry.slice(index + 1));
62
+ fields[key] = key === "hidden" ? /^true$/i.test(parsed) : parsed;
63
+ }
64
+ if (typeof fields.ssid !== "string")
65
+ return null;
66
+ return { kind: "wifi", parserVersion: PARSER_VERSION, fields, warnings: [] };
67
+ }
68
+ function parseVcard(text) {
69
+ if (!/^BEGIN:VCARD\r?\n/i.test(text) || !/\r?\nEND:VCARD\s*$/i.test(text))
70
+ return null;
71
+ const fields = {};
72
+ for (const line of text.replace(/\r\n[ \t]/g, "").split(/\r?\n/).slice(1, -1)) {
73
+ const separator = line.indexOf(":");
74
+ if (separator <= 0)
75
+ continue;
76
+ const name = line.slice(0, separator).split(";", 1)[0].toLowerCase();
77
+ const value = unescapeBackslash(line.slice(separator + 1));
78
+ const existing = fields[name];
79
+ fields[name] = existing === undefined ? value : Array.isArray(existing) ? [...existing, value] : [existing, value];
80
+ }
81
+ return { kind: "vcard", parserVersion: PARSER_VERSION, fields, warnings: [] };
82
+ }
83
+ function parseEmail(text) {
84
+ if (!/^mailto:/i.test(text))
85
+ return null;
86
+ try {
87
+ const url = new URL(text);
88
+ return {
89
+ kind: "email",
90
+ parserVersion: PARSER_VERSION,
91
+ fields: {
92
+ address: decodeURIComponent(url.pathname),
93
+ subject: url.searchParams.get("subject"),
94
+ body: url.searchParams.get("body"),
95
+ cc: url.searchParams.getAll("cc"),
96
+ },
97
+ warnings: [],
98
+ };
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ function parseTelephone(text) {
105
+ if (!/^tel:/i.test(text))
106
+ return null;
107
+ const number = text.slice(4).trim();
108
+ if (!number)
109
+ return null;
110
+ return { kind: "telephone", parserVersion: PARSER_VERSION, fields: { number }, warnings: [] };
111
+ }
112
+ function parseSms(text) {
113
+ if (!/^(sms|smsto):/i.test(text))
114
+ return null;
115
+ const bodyStart = text.indexOf(":");
116
+ const rest = text.slice(bodyStart + 1);
117
+ const queryIndex = rest.indexOf("?");
118
+ const colonIndex = rest.indexOf(":");
119
+ const addressEnd = queryIndex >= 0 ? queryIndex : colonIndex >= 0 ? colonIndex : rest.length;
120
+ const address = rest.slice(0, addressEnd);
121
+ const body = queryIndex >= 0
122
+ ? new URLSearchParams(rest.slice(queryIndex + 1)).get("body")
123
+ : colonIndex >= 0 ? rest.slice(colonIndex + 1) : null;
124
+ if (!address)
125
+ return null;
126
+ return { kind: "sms", parserVersion: PARSER_VERSION, fields: { address, body }, warnings: [] };
127
+ }
128
+ function parseGeo(text) {
129
+ const match = /^geo:([-+]?\d+(?:\.\d+)?),([-+]?\d+(?:\.\d+)?)(?:,([-+]?\d+(?:\.\d+)?))?(?:\?(.*))?$/i.exec(text);
130
+ if (!match)
131
+ return null;
132
+ const latitude = Number(match[1]);
133
+ const longitude = Number(match[2]);
134
+ if (latitude < -90 || latitude > 90 || longitude < -180 || longitude > 180)
135
+ return null;
136
+ return { kind: "geo", parserVersion: PARSER_VERSION, fields: { latitude, longitude, altitude: match[3] ? Number(match[3]) : null, query: match[4] ? decodeURIComponent(match[4]) : null }, warnings: [] };
137
+ }
138
+ function parseCalendar(text) {
139
+ if (!/^BEGIN:VEVENT\r?\n/i.test(text) || !/\r?\nEND:VEVENT\s*$/i.test(text))
140
+ return null;
141
+ const fields = {};
142
+ for (const line of text.split(/\r?\n/).slice(1, -1)) {
143
+ const separator = line.indexOf(":");
144
+ if (separator <= 0)
145
+ continue;
146
+ const name = line.slice(0, separator).split(";", 1)[0].toLowerCase();
147
+ fields[name] = unescapeBackslash(line.slice(separator + 1));
148
+ }
149
+ return { kind: "calendar", parserVersion: PARSER_VERSION, fields, warnings: [] };
150
+ }
151
+ function parseGs1(text) {
152
+ const normalized = text.startsWith("]") && text.length > 3 ? text.slice(3) : text;
153
+ const fields = {};
154
+ if (/^\(\d{2,4}\)/.test(normalized)) {
155
+ const matches = [...normalized.matchAll(/\((\d{2,4})\)([^()]*)/g)];
156
+ if (!matches.length || !/^(?:\(\d{2,4}\)[^()]*)+$/.test(normalized))
157
+ return null;
158
+ if (matches.length > 32)
159
+ return null;
160
+ for (const match of matches)
161
+ fields[match[1]] = match[2];
162
+ return { kind: "gs1-element-string", parserVersion: PARSER_VERSION, fields, warnings: [] };
163
+ }
164
+ if (!/^\d{2,4}/.test(normalized))
165
+ return null;
166
+ const variableAIs = new Set(["10", "21", "22", "30", "37", "240", "241", "250", "400", "401", "420", "421", "422", "423", "424", "425", "426"]);
167
+ const knownAIs = ["3100", "3101", "3102", "3103", "3104", "3105", "3106", "3107", "3108", "3109", "00", "01", "02", "11", "12", "13", "15", "17", "20", "10", "21", "22", "30", "37", "240", "241", "250", "400", "401", "420", "421", "422", "423", "424", "425", "426"];
168
+ let cursor = 0;
169
+ while (cursor < normalized.length) {
170
+ const ai = knownAIs.find((candidate) => normalized.startsWith(candidate, cursor));
171
+ if (!ai)
172
+ return null;
173
+ cursor += ai.length;
174
+ const variable = variableAIs.has(ai) || (ai.startsWith("310") && ai.length === 4);
175
+ const fixedLength = ai === "01" ? 14 : ai === "17" || ai === "11" || ai === "13" || ai === "15" ? 6 : ai.startsWith("310") ? 6 : undefined;
176
+ const separator = normalized.indexOf("\u001d", cursor);
177
+ const end = variable ? (separator >= 0 ? separator : normalized.length) : cursor + (fixedLength ?? -1);
178
+ if (end < cursor || end > normalized.length)
179
+ return null;
180
+ const value = normalized.slice(cursor, end);
181
+ if (!value || (!variable && value.length !== fixedLength))
182
+ return null;
183
+ if (Object.keys(fields).length >= 32)
184
+ return null;
185
+ fields[ai] = value;
186
+ cursor = end + (separator === end ? 1 : 0);
187
+ }
188
+ return Object.keys(fields).length ? { kind: "gs1-element-string", parserVersion: PARSER_VERSION, fields, warnings: [] } : null;
189
+ }
190
+ export function parseSemanticPayload(rawText) {
191
+ const parsers = [parseWifi, parseVcard, parseEmail, parseTelephone, parseSms, parseGeo, parseCalendar, parseGs1, parseUrl];
192
+ for (const parser of parsers) {
193
+ const structured = parser(rawText);
194
+ if (structured)
195
+ return { rawText, structured };
196
+ }
197
+ return { rawText, structured: null };
198
+ }
199
+ export function isSafeActionUrl(text) {
200
+ const parsed = parseUrl(text);
201
+ return parsed?.kind === "url" || parsed?.kind === "gs1-digital-link";
202
+ }
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@scanly/parsers",
3
+ "version": "2.0.0",
4
+ "description": "Local-only semantic payload parsers for Scanly",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.build.json"
22
+ }
23
+ }