pi-kiosk-shared 2.1.52 → 2.1.54
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/analyticsAnonymousIdentity.d.ts +15 -0
- package/dist/analyticsAnonymousIdentity.d.ts.map +1 -0
- package/dist/analyticsAnonymousIdentity.js +38 -0
- package/dist/analyticsAnonymousIdentity.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PWA pseudonymous analytics identity — client-stable opaque keys (plan §Definitions).
|
|
3
|
+
*
|
|
4
|
+
* Keys MUST NOT be derived from IP, UA, or fingerprinting. Generation uses
|
|
5
|
+
* crypto.randomUUID() only.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ANALYTICS_ANONYMOUS_KEY_MIN_LENGTH = 8;
|
|
8
|
+
export declare const ANALYTICS_ANONYMOUS_KEY_MAX_LENGTH = 128;
|
|
9
|
+
export declare const ANALYTICS_ANONYMOUS_STORAGE_KEY_PREFIX = "analytics:anonymous:";
|
|
10
|
+
/** Generate a new opaque anonymous key (UUID v4). */
|
|
11
|
+
export declare function generateAnalyticsAnonymousKey(): string;
|
|
12
|
+
/** Validate client-supplied anonymous key format (no PII-shaped values). */
|
|
13
|
+
export declare function isValidAnalyticsAnonymousKey(key: string): boolean;
|
|
14
|
+
export declare function analyticsAnonymousStorageKey(tenantCode: string): string;
|
|
15
|
+
//# sourceMappingURL=analyticsAnonymousIdentity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticsAnonymousIdentity.d.ts","sourceRoot":"","sources":["../src/analyticsAnonymousIdentity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,kCAAkC,IAAI,CAAC;AACpD,eAAO,MAAM,kCAAkC,MAAM,CAAC;AACtD,eAAO,MAAM,sCAAsC,yBAAyB,CAAC;AAY7E,qDAAqD;AACrD,wBAAgB,6BAA6B,IAAI,MAAM,CAKtD;AAED,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQjE;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PWA pseudonymous analytics identity — client-stable opaque keys (plan §Definitions).
|
|
3
|
+
*
|
|
4
|
+
* Keys MUST NOT be derived from IP, UA, or fingerprinting. Generation uses
|
|
5
|
+
* crypto.randomUUID() only.
|
|
6
|
+
*/
|
|
7
|
+
export const ANALYTICS_ANONYMOUS_KEY_MIN_LENGTH = 8;
|
|
8
|
+
export const ANALYTICS_ANONYMOUS_KEY_MAX_LENGTH = 128;
|
|
9
|
+
export const ANALYTICS_ANONYMOUS_STORAGE_KEY_PREFIX = 'analytics:anonymous:';
|
|
10
|
+
const ANONYMOUS_KEY_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
11
|
+
function uuidv4Fallback() {
|
|
12
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
13
|
+
const r = Math.floor(Math.random() * 16);
|
|
14
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
15
|
+
return v.toString(16);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/** Generate a new opaque anonymous key (UUID v4). */
|
|
19
|
+
export function generateAnalyticsAnonymousKey() {
|
|
20
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
21
|
+
return crypto.randomUUID();
|
|
22
|
+
}
|
|
23
|
+
return uuidv4Fallback();
|
|
24
|
+
}
|
|
25
|
+
/** Validate client-supplied anonymous key format (no PII-shaped values). */
|
|
26
|
+
export function isValidAnalyticsAnonymousKey(key) {
|
|
27
|
+
if (key.length < ANALYTICS_ANONYMOUS_KEY_MIN_LENGTH) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (key.length > ANALYTICS_ANONYMOUS_KEY_MAX_LENGTH) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return ANONYMOUS_KEY_PATTERN.test(key);
|
|
34
|
+
}
|
|
35
|
+
export function analyticsAnonymousStorageKey(tenantCode) {
|
|
36
|
+
return `${ANALYTICS_ANONYMOUS_STORAGE_KEY_PREFIX}${tenantCode}`;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=analyticsAnonymousIdentity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticsAnonymousIdentity.js","sourceRoot":"","sources":["../src/analyticsAnonymousIdentity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AACtD,MAAM,CAAC,MAAM,sCAAsC,GAAG,sBAAsB,CAAC;AAE7E,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEjD,SAAS,cAAc;IACrB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,6BAA6B;IAC3C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACtD,IAAI,GAAG,CAAC,MAAM,GAAG,kCAAkC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,kCAAkC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAkB;IAC7D,OAAO,GAAG,sCAAsC,GAAG,UAAU,EAAE,CAAC;AAClE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export * from './hooks/useDatabaseHealth.js';
|
|
|
18
18
|
export * from './analyticsEvents.js';
|
|
19
19
|
export * from './analyticsExploreCaps.js';
|
|
20
20
|
export * from './analyticsApiTypes.js';
|
|
21
|
+
export * from './analyticsAnonymousIdentity.js';
|
|
21
22
|
export * from './auditEventCodes.js';
|
|
22
23
|
export * from './auditEventLabels.js';
|
|
23
24
|
export * from './analyticsEventLabels.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export * from './hooks/useDatabaseHealth.js';
|
|
|
18
18
|
export * from './analyticsEvents.js';
|
|
19
19
|
export * from './analyticsExploreCaps.js';
|
|
20
20
|
export * from './analyticsApiTypes.js';
|
|
21
|
+
export * from './analyticsAnonymousIdentity.js';
|
|
21
22
|
export * from './auditEventCodes.js';
|
|
22
23
|
export * from './auditEventLabels.js';
|
|
23
24
|
export * from './analyticsEventLabels.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-kiosk-shared",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.54",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "Shared types, API contracts, and error classes for Pi Kiosk system",
|
|
@@ -60,6 +60,11 @@
|
|
|
60
60
|
"require": "./dist/analyticsConsentAllowlist.js",
|
|
61
61
|
"types": "./dist/analyticsConsentAllowlist.d.ts"
|
|
62
62
|
},
|
|
63
|
+
"./analyticsAnonymousIdentity": {
|
|
64
|
+
"import": "./dist/analyticsAnonymousIdentity.js",
|
|
65
|
+
"require": "./dist/analyticsAnonymousIdentity.js",
|
|
66
|
+
"types": "./dist/analyticsAnonymousIdentity.d.ts"
|
|
67
|
+
},
|
|
63
68
|
"./clientLogRedaction": {
|
|
64
69
|
"import": "./dist/clientLogRedaction.js",
|
|
65
70
|
"require": "./dist/clientLogRedaction.js",
|