@ibgib/web-gib 0.0.58 → 0.0.60
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/AUTO-GENERATED-version.d.mts +1 -1
- package/dist/AUTO-GENERATED-version.mjs +1 -1
- package/dist/identity/custodian-delegate-helper.d.mts.map +1 -1
- package/dist/identity/custodian-delegate-helper.mjs +20 -3
- package/dist/identity/custodian-delegate-helper.mjs.map +1 -1
- package/dist/identity/identity-constants.mjs +2 -2
- package/dist/identity/identity-constants.mjs.map +1 -1
- package/dist/identity/identity-types.d.mts +4 -4
- package/dist/identity/identity-types.d.mts.map +1 -1
- package/dist/ui/component/identity/add-device/add-device.css +93 -17
- package/dist/ui/component/identity/add-device/add-device.d.mts +24 -7
- package/dist/ui/component/identity/add-device/add-device.d.mts.map +1 -1
- package/dist/ui/component/identity/add-device/add-device.html +97 -23
- package/dist/ui/component/identity/add-device/add-device.mjs +492 -184
- package/dist/ui/component/identity/add-device/add-device.mjs.map +1 -1
- package/dist/ui/component/identity/keystone-creator/keystone-creator.d.mts.map +1 -1
- package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs +126 -74
- package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs.map +1 -1
- package/dist/ui/component/identity/keystone-details/keystone-details.css +1 -1
- package/dist/ui/component/identity/keystone-details/keystone-details.d.mts +8 -8
- package/dist/ui/component/identity/keystone-details/keystone-details.d.mts.map +1 -1
- package/dist/ui/component/identity/keystone-details/keystone-details.html +29 -20
- package/dist/ui/component/identity/keystone-details/keystone-details.mjs +51 -51
- package/dist/ui/component/identity/keystone-details/keystone-details.mjs.map +1 -1
- package/dist/ui/component/identity/remove-device/remove-device.d.mts +1 -1
- package/dist/ui/component/identity/remove-device/remove-device.d.mts.map +1 -1
- package/dist/ui/component/identity/remove-device/remove-device.html +3 -3
- package/dist/ui/component/identity/remove-device/remove-device.mjs +7 -7
- package/dist/ui/component/identity/remove-device/remove-device.mjs.map +1 -1
- package/dist/util/device-helper.d.mts +30 -0
- package/dist/util/device-helper.d.mts.map +1 -0
- package/dist/util/device-helper.mjs +90 -0
- package/dist/util/device-helper.mjs.map +1 -0
- package/dist/util/device-helper.respec.d.mts +2 -0
- package/dist/util/device-helper.respec.d.mts.map +1 -0
- package/dist/util/device-helper.respec.mjs +83 -0
- package/dist/util/device-helper.respec.mjs.map +1 -0
- package/package.json +3 -3
- package/src/AUTO-GENERATED-version.mts +1 -1
- package/src/identity/custodian-delegate-helper.mts +28 -3
- package/src/identity/identity-constants.mts +2 -2
- package/src/identity/identity-types.mts +4 -4
- package/src/ui/component/identity/add-device/add-device.css +93 -17
- package/src/ui/component/identity/add-device/add-device.html +97 -23
- package/src/ui/component/identity/add-device/add-device.mts +579 -192
- package/src/ui/component/identity/keystone-creator/keystone-creator.mts +135 -76
- package/src/ui/component/identity/keystone-details/keystone-details.css +1 -1
- package/src/ui/component/identity/keystone-details/keystone-details.html +29 -20
- package/src/ui/component/identity/keystone-details/keystone-details.mts +57 -57
- package/src/ui/component/identity/remove-device/remove-device.html +3 -3
- package/src/ui/component/identity/remove-device/remove-device.mts +8 -8
- package/src/util/device-helper.mts +104 -0
- package/src/util/device-helper.respec.mts +90 -0
- package/tools/auto-generated-agent-skills/skills/ibgib-implementation-plan/SKILL.md +3 -0
|
@@ -48,7 +48,7 @@ export class RemoveDeviceComponentInstance extends IbGibFormInstanceBase {
|
|
|
48
48
|
this.elements.containerEl = this.shadowRoot.getElementById('container');
|
|
49
49
|
this.elements.titleEl = this.shadowRoot.getElementById('title');
|
|
50
50
|
this.elements.selectDelegateEl = this.shadowRoot.getElementById('select-delegate');
|
|
51
|
-
this.elements.
|
|
51
|
+
this.elements.inputPassword = this.shadowRoot.getElementById('input-password');
|
|
52
52
|
this.elements.btnRemoveDeviceEl = this.shadowRoot.getElementById('btn-remove-device');
|
|
53
53
|
this.elements.statusArea = this.shadowRoot.getElementById('status-area');
|
|
54
54
|
this.elements.statusText = this.shadowRoot.getElementById('status-text');
|
|
@@ -63,8 +63,8 @@ export class RemoveDeviceComponentInstance extends IbGibFormInstanceBase {
|
|
|
63
63
|
}
|
|
64
64
|
initHandlers() {
|
|
65
65
|
this.elements.btnRemoveDeviceEl.addEventListener('click', () => this.handleRemoveDevice());
|
|
66
|
-
this.elements.
|
|
67
|
-
this.elements.
|
|
66
|
+
this.elements.inputPassword.addEventListener('input', () => {
|
|
67
|
+
this.elements.inputPassword.classList.remove('invalid');
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
@@ -134,11 +134,11 @@ export class RemoveDeviceComponentInstance extends IbGibFormInstanceBase {
|
|
|
134
134
|
this.setStatus("Please select a device delegate to unlink.", "error");
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
|
-
const masterSecret = this.elements.
|
|
138
|
-
this.elements.
|
|
137
|
+
const masterSecret = this.elements.inputPassword.value.trim();
|
|
138
|
+
this.elements.inputPassword.value = masterSecret;
|
|
139
139
|
if (!masterSecret) {
|
|
140
|
-
this.elements.
|
|
141
|
-
this.setStatus("Please enter your master
|
|
140
|
+
this.elements.inputPassword.classList.add('invalid');
|
|
141
|
+
this.setStatus("Please enter your master password.", "error");
|
|
142
142
|
return;
|
|
143
143
|
}
|
|
144
144
|
if (!this.activePrimaryKeystone) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-device.mjs","sourceRoot":"","sources":["../../../../../src/ui/component/identity/remove-device/remove-device.mts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAGzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAG3F,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EACH,6BAA6B,EAAE,qBAAqB,GACvD,MAAM,yCAAyC,CAAC;AAKjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,MAAM,CAAC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;AAElE;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,6BAA6B;IAC9D,EAAE,GAAW,6BAA6B,CAAC;IAErD,WAAW,GAAY,IAAI,MAAM,CAAC,IAAI,4BAA4B,GAAG,CAAC,CAAC;IACvE,aAAa,GAAG,4BAA4B,CAAC;IAE7C;QACI,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1C,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,6BAA6B,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EACjB,IAAI,EACJ,SAAS,EAIZ;QACG,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAkC,CAAC;QAC9F,MAAM,SAAS,CAAC,UAAU,CAAC;YACvB,SAAS;YACT,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,CAAC,wBAAwB,EAAE,OAAO,CAAC;SAC3C,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AAaD;;GAEG;AACH,MAAM,OAAO,6BACT,SAAQ,qBAAqD;IAGnD,EAAE,GAAW,iCAAiC,CAAC;IACjD,qBAAqB,CAA+B;IAE5D;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAEQ,KAAK,CAAC,UAAU,CAAC,IAA2C;QACjE,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEQ,KAAK,CAAC,OAAO;QAClB,IAAI,CAAC,QAAQ,GAAG,EAA0B,CAAC;QAE3C,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,UAAW,CAAC,cAAc,CAAC,WAAW,CAAmB,CAAC;QAC3F,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,UAAW,CAAC,cAAc,CAAC,OAAO,CAAuB,CAAC;QACvF,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAW,CAAC,cAAc,CAAC,iBAAiB,CAAsB,CAAC;QACzG,IAAI,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"remove-device.mjs","sourceRoot":"","sources":["../../../../../src/ui/component/identity/remove-device/remove-device.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module util/device-helper
|
|
3
|
+
*
|
|
4
|
+
* Pure utility functions for generating clean, friendly, auto-generated device names/tags.
|
|
5
|
+
*/
|
|
6
|
+
export interface DeviceTagOptions {
|
|
7
|
+
userAgent?: string;
|
|
8
|
+
userAgentData?: {
|
|
9
|
+
mobile?: boolean;
|
|
10
|
+
platform?: string;
|
|
11
|
+
brands?: Array<{
|
|
12
|
+
brand: string;
|
|
13
|
+
version: string;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
maxTouchPoints?: number;
|
|
17
|
+
screenWidth?: number;
|
|
18
|
+
randomSuffix?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generates a friendly, URL-safe, kebab-cased default device tag.
|
|
22
|
+
* (e.g., `chrome-win-a1b2`, `mobile-safari-ios-3c4d`, `tablet-android-e5f6`).
|
|
23
|
+
*
|
|
24
|
+
* Pure function: Uses global browser objects (`navigator`, `window`) only as fallbacks
|
|
25
|
+
* when explicit options are omitted, enabling deterministic unit testing.
|
|
26
|
+
*
|
|
27
|
+
* @param opts Optional mock options for deterministic unit testing.
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateDefaultDeviceTag(opts?: DeviceTagOptions): string;
|
|
30
|
+
//# sourceMappingURL=device-helper.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-helper.d.mts","sourceRoot":"","sources":["../../src/util/device-helper.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,gBAAgB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CA4ExE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module util/device-helper
|
|
3
|
+
*
|
|
4
|
+
* Pure utility functions for generating clean, friendly, auto-generated device names/tags.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generates a friendly, URL-safe, kebab-cased default device tag.
|
|
8
|
+
* (e.g., `chrome-win-a1b2`, `mobile-safari-ios-3c4d`, `tablet-android-e5f6`).
|
|
9
|
+
*
|
|
10
|
+
* Pure function: Uses global browser objects (`navigator`, `window`) only as fallbacks
|
|
11
|
+
* when explicit options are omitted, enabling deterministic unit testing.
|
|
12
|
+
*
|
|
13
|
+
* @param opts Optional mock options for deterministic unit testing.
|
|
14
|
+
*/
|
|
15
|
+
export function generateDefaultDeviceTag(opts) {
|
|
16
|
+
const ua = (opts?.userAgent ?? (typeof navigator !== 'undefined' ? navigator.userAgent : '') ?? '').toLowerCase();
|
|
17
|
+
const uaData = opts?.userAgentData ?? (typeof navigator !== 'undefined' ? navigator.userAgentData : undefined);
|
|
18
|
+
const touchPoints = opts?.maxTouchPoints ?? (typeof navigator !== 'undefined' ? navigator.maxTouchPoints : 0) ?? 0;
|
|
19
|
+
const width = opts?.screenWidth ?? (typeof window !== 'undefined' ? window.innerWidth : 1024) ?? 1024;
|
|
20
|
+
// 1. Detect Form Factor (Mobile, Tablet, Desktop)
|
|
21
|
+
let formFactor = '';
|
|
22
|
+
const isMobileUaData = uaData?.mobile;
|
|
23
|
+
const isMobileUa = /mobile|iphone|ipod|android.*mobile|windows phone/i.test(ua);
|
|
24
|
+
const isTabletUa = /ipad|tablet|(android(?!.*mobile))/i.test(ua) || (touchPoints > 1 && /macintosh/i.test(ua) && width <= 1366);
|
|
25
|
+
if (isTabletUa) {
|
|
26
|
+
formFactor = 'tablet';
|
|
27
|
+
}
|
|
28
|
+
else if (isMobileUaData || isMobileUa) {
|
|
29
|
+
formFactor = 'mobile';
|
|
30
|
+
}
|
|
31
|
+
// 2. Detect OS / Platform
|
|
32
|
+
let platform = '';
|
|
33
|
+
const uaPlatform = (uaData?.platform || '').toLowerCase();
|
|
34
|
+
if (uaPlatform.includes('win') || ua.includes('windows')) {
|
|
35
|
+
platform = 'win';
|
|
36
|
+
}
|
|
37
|
+
else if (uaPlatform.includes('ios') || ua.includes('iphone') || ua.includes('ipad') || ua.includes('ipod')) {
|
|
38
|
+
platform = 'ios';
|
|
39
|
+
}
|
|
40
|
+
else if (uaPlatform.includes('mac') || ua.includes('macintosh') || ua.includes('mac os')) {
|
|
41
|
+
platform = 'mac';
|
|
42
|
+
}
|
|
43
|
+
else if (uaPlatform.includes('android') || ua.includes('android')) {
|
|
44
|
+
platform = 'android';
|
|
45
|
+
}
|
|
46
|
+
else if (uaPlatform.includes('linux') || ua.includes('linux')) {
|
|
47
|
+
platform = 'linux';
|
|
48
|
+
}
|
|
49
|
+
// 3. Detect Browser
|
|
50
|
+
let browser = '';
|
|
51
|
+
if (ua.includes('edg/') || ua.includes('edge/')) {
|
|
52
|
+
browser = 'edge';
|
|
53
|
+
}
|
|
54
|
+
else if (ua.includes('chrome/') || ua.includes('crios/')) {
|
|
55
|
+
browser = 'chrome';
|
|
56
|
+
}
|
|
57
|
+
else if (ua.includes('firefox/') || ua.includes('fxios/')) {
|
|
58
|
+
browser = 'firefox';
|
|
59
|
+
}
|
|
60
|
+
else if (ua.includes('safari/') && !ua.includes('chrome/') && !ua.includes('crios/')) {
|
|
61
|
+
browser = 'safari';
|
|
62
|
+
}
|
|
63
|
+
// 4. Generate or use provided 4-character random suffix
|
|
64
|
+
let suffix = opts?.randomSuffix;
|
|
65
|
+
if (!suffix) {
|
|
66
|
+
const chars = '0123456789abcdef';
|
|
67
|
+
suffix = '';
|
|
68
|
+
for (let i = 0; i < 4; i++) {
|
|
69
|
+
suffix += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
suffix = suffix.toLowerCase().replace(/[^a-z0-9]/g, '').slice(0, 8);
|
|
73
|
+
// 5. Assemble Tokens
|
|
74
|
+
const tokens = [];
|
|
75
|
+
if (formFactor) {
|
|
76
|
+
tokens.push(formFactor);
|
|
77
|
+
}
|
|
78
|
+
if (browser) {
|
|
79
|
+
tokens.push(browser);
|
|
80
|
+
}
|
|
81
|
+
if (platform) {
|
|
82
|
+
tokens.push(platform);
|
|
83
|
+
}
|
|
84
|
+
if (tokens.length === 0) {
|
|
85
|
+
tokens.push('device');
|
|
86
|
+
}
|
|
87
|
+
tokens.push(suffix);
|
|
88
|
+
return tokens.join('-');
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=device-helper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-helper.mjs","sourceRoot":"","sources":["../../src/util/device-helper.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-helper.respec.d.mts","sourceRoot":"","sources":["../../src/util/device-helper.respec.mts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { respecfully, iReckon, ifWe // DO NOT REMOVE ifWeMight or ifWe even if no longer used. We constantly change these when focusing tests
|
|
2
|
+
} from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
3
|
+
const maam = `[${import.meta.url}]`, sir = maam;
|
|
4
|
+
import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
5
|
+
import { generateDefaultDeviceTag } from './device-helper.mjs';
|
|
6
|
+
await respecfully(sir, 'device-helper', async () => {
|
|
7
|
+
await ifWe(sir, 'generate clean tag for Desktop Windows Chrome', async () => {
|
|
8
|
+
const lc = `[generate clean tag for Desktop Windows Chrome]`;
|
|
9
|
+
try {
|
|
10
|
+
const tag = generateDefaultDeviceTag({
|
|
11
|
+
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
12
|
+
userAgentData: { platform: 'Windows', mobile: false },
|
|
13
|
+
randomSuffix: 'a1b2'
|
|
14
|
+
});
|
|
15
|
+
iReckon(sir, tag).asTo('tag value').isGonnaBe('chrome-win-a1b2');
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
await ifWe(sir, 'generate clean tag for Mobile iOS Safari (iPhone)', async () => {
|
|
23
|
+
const lc = `[generate clean tag for Mobile iOS Safari (iPhone)]`;
|
|
24
|
+
try {
|
|
25
|
+
const tag = generateDefaultDeviceTag({
|
|
26
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
|
|
27
|
+
userAgentData: { platform: 'iOS', mobile: true },
|
|
28
|
+
randomSuffix: '3c4d'
|
|
29
|
+
});
|
|
30
|
+
iReckon(sir, tag).asTo('tag value').isGonnaBe('mobile-safari-ios-3c4d');
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
await ifWe(sir, 'generate clean tag for Android Chrome Phone', async () => {
|
|
38
|
+
const lc = `[generate clean tag for Android Chrome Phone]`;
|
|
39
|
+
try {
|
|
40
|
+
const tag = generateDefaultDeviceTag({
|
|
41
|
+
userAgent: 'Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
|
|
42
|
+
userAgentData: { platform: 'Android', mobile: true },
|
|
43
|
+
randomSuffix: '9e8f'
|
|
44
|
+
});
|
|
45
|
+
iReckon(sir, tag).asTo('tag value').isGonnaBe('mobile-chrome-android-9e8f');
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
await ifWe(sir, 'generate clean tag for iPad / Tablet', async () => {
|
|
53
|
+
const lc = `[generate clean tag for iPad / Tablet]`;
|
|
54
|
+
try {
|
|
55
|
+
const tag = generateDefaultDeviceTag({
|
|
56
|
+
userAgent: 'Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
|
|
57
|
+
maxTouchPoints: 5,
|
|
58
|
+
screenWidth: 1024,
|
|
59
|
+
randomSuffix: '7a8b'
|
|
60
|
+
});
|
|
61
|
+
iReckon(sir, tag).asTo('tag value').isGonnaBe('tablet-safari-ios-7a8b');
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
await ifWe(sir, 'generate fallback tag with random 4-char suffix when no hints are present', async () => {
|
|
69
|
+
const lc = `[generate fallback tag with random 4-char suffix]`;
|
|
70
|
+
try {
|
|
71
|
+
const tag = generateDefaultDeviceTag({
|
|
72
|
+
userAgent: '',
|
|
73
|
+
randomSuffix: '1234'
|
|
74
|
+
});
|
|
75
|
+
iReckon(sir, tag).asTo('tag value').isGonnaBe('device-1234');
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=device-helper.respec.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-helper.respec.mjs","sourceRoot":"","sources":["../../src/util/device-helper.respec.mts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibgib/web-gib",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.60",
|
|
4
4
|
"description": "Framework for creating agentic ibGib web apps. Contains plumbing for ibgib components, agentic framework (currently only Gemini implemented), web-based IndexedDB storage substrate, and more.",
|
|
5
5
|
"funding": {
|
|
6
6
|
"type": "individual",
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"license": "ISC",
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@google/genai": "^1.33.0",
|
|
32
|
-
"@ibgib/core-gib": "^0.1.
|
|
32
|
+
"@ibgib/core-gib": "^0.1.74",
|
|
33
33
|
"@ibgib/encrypt-gib": "^0.3.1",
|
|
34
34
|
"@ibgib/helper-gib": "^0.0.37",
|
|
35
|
-
"@ibgib/ts-gib": "^0.5.
|
|
35
|
+
"@ibgib/ts-gib": "^0.5.34"
|
|
36
36
|
},
|
|
37
37
|
"engines": {
|
|
38
38
|
"node": ">=19.0.0"
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { getUUID, hash, HashAlgorithm, extractErrorMsg } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
|
|
9
|
+
import { storageGet, storagePut } from "../storage/storage-helpers.web.mjs";
|
|
10
|
+
import { getGlobalDbName, getGlobalStoreName } from "../helpers.web.mjs";
|
|
9
11
|
|
|
10
12
|
const LOCAL_STORAGE_PREFIX = 'ibgib_custodian_delegate_secret_';
|
|
11
13
|
|
|
@@ -27,20 +29,43 @@ export async function deriveLocalCustodianDelegateSecret({
|
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
const key = `${LOCAL_STORAGE_PREFIX}${primaryTjpAddr}`;
|
|
30
|
-
|
|
32
|
+
|
|
33
|
+
const dbName = getGlobalDbName();
|
|
34
|
+
const storeName = getGlobalStoreName();
|
|
35
|
+
|
|
36
|
+
// debugger; // what are the dbName and storeName?
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
const existingSecret = await storageGet({ dbName, storeName, key });
|
|
31
40
|
if (existingSecret) {
|
|
32
41
|
return existingSecret;
|
|
33
42
|
}
|
|
34
43
|
|
|
35
44
|
// Generate high-entropy 512-bit SHA hash secret from fresh UUIDs
|
|
36
|
-
const rawEntropy =
|
|
45
|
+
const rawEntropy = await getUUID(32);
|
|
37
46
|
const newSecret = await hash({
|
|
38
47
|
s: rawEntropy,
|
|
39
48
|
algorithm: HashAlgorithm.sha_512
|
|
40
49
|
});
|
|
50
|
+
await storagePut({ dbName, storeName, key, value: newSecret });
|
|
41
51
|
|
|
42
|
-
localStorage.setItem(key, newSecret);
|
|
43
52
|
return newSecret;
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
// const existingSecret = localStorage.getItem(key);
|
|
56
|
+
// if (existingSecret) {
|
|
57
|
+
// return existingSecret;
|
|
58
|
+
// }
|
|
59
|
+
|
|
60
|
+
// // Generate high-entropy 512-bit SHA hash secret from fresh UUIDs
|
|
61
|
+
// const rawEntropy = `${await getUUID()}-${await getUUID()}-${await getUUID()}-${Date.now()}`;
|
|
62
|
+
// const newSecret = await hash({
|
|
63
|
+
// s: rawEntropy,
|
|
64
|
+
// algorithm: HashAlgorithm.sha_512
|
|
65
|
+
// });
|
|
66
|
+
|
|
67
|
+
// localStorage.setItem(key, newSecret);
|
|
68
|
+
// return newSecret;
|
|
44
69
|
} catch (error) {
|
|
45
70
|
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
46
71
|
throw error;
|
|
@@ -65,8 +65,8 @@ export const IDENTITY_POOL_ID_APP_EPOCH = 'identity-app-epoch';
|
|
|
65
65
|
|
|
66
66
|
// ===========================================================================
|
|
67
67
|
// KDF SALTS
|
|
68
|
-
// Used to derive tier-specific MasterSecrets from a root
|
|
69
|
-
// Different salt per tier ensures independent secrets even with same
|
|
68
|
+
// Used to derive tier-specific MasterSecrets from a root password.
|
|
69
|
+
// Different salt per tier ensures independent secrets even with same password.
|
|
70
70
|
// ===========================================================================
|
|
71
71
|
|
|
72
72
|
export const IDENTITY_KDF_SALT_META = 'ibgib-identity-meta-v1';
|
|
@@ -221,17 +221,17 @@ export interface IIdentityService {
|
|
|
221
221
|
// ===========================================================================
|
|
222
222
|
|
|
223
223
|
/**
|
|
224
|
-
* Inputs for deriving a tier-specific MasterSecret from a root
|
|
224
|
+
* Inputs for deriving a tier-specific MasterSecret from a root password.
|
|
225
225
|
*
|
|
226
226
|
* Each tier uses a different salt to ensure independent MasterSecrets
|
|
227
|
-
* even when the same
|
|
227
|
+
* even when the same password is used for all tiers.
|
|
228
228
|
*
|
|
229
229
|
* @see docs/identity/KEYSTONES.md for per-tier salt conventions
|
|
230
230
|
* @see identity-helpers.mts for derivation functions
|
|
231
231
|
*/
|
|
232
232
|
export interface MasterSecretDerivationContext {
|
|
233
|
-
/** The root
|
|
234
|
-
|
|
233
|
+
/** The root password (sovereign path) or server secret (custodial path). */
|
|
234
|
+
password: string;
|
|
235
235
|
|
|
236
236
|
/**
|
|
237
237
|
* Tier-specific salt (e.g., `IDENTITY_KDF_SALT_META`, `IDENTITY_KDF_SALT_LOCAL`).
|
|
@@ -5,22 +5,75 @@
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
.component-container {
|
|
8
|
-
padding: 1.
|
|
8
|
+
padding: 1.75rem;
|
|
9
9
|
background: var(--ibgib-bg-surface, #1e1e2e);
|
|
10
10
|
color: var(--ibgib-text-primary, #cdd6f4);
|
|
11
11
|
border-radius: 12px;
|
|
12
12
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
.hidden {
|
|
16
|
+
display: none !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.sso-options {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
gap: 0.75rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sso-btn {
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
gap: 0.75rem;
|
|
30
|
+
padding: 0.8rem 1.25rem;
|
|
31
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
32
|
+
border-radius: 8px;
|
|
33
|
+
background: #181825;
|
|
34
|
+
color: #cdd6f4;
|
|
35
|
+
font-size: 0.95rem;
|
|
36
|
+
font-weight: 600;
|
|
37
|
+
cursor: pointer;
|
|
38
|
+
transition: transform 0.15s ease, background 0.15s ease, border-color 0.15s ease;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.sso-btn:hover {
|
|
42
|
+
transform: translateY(-1px);
|
|
43
|
+
background: #313244;
|
|
44
|
+
border-color: #89b4fa;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.divider {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
text-align: center;
|
|
51
|
+
margin: 0.75rem 0;
|
|
52
|
+
color: #a6adc8;
|
|
53
|
+
font-size: 0.75rem;
|
|
54
|
+
font-weight: 700;
|
|
55
|
+
letter-spacing: 1px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.divider::before, .divider::after {
|
|
59
|
+
content: '';
|
|
60
|
+
flex: 1;
|
|
61
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.divider span {
|
|
65
|
+
padding: 0 0.75rem;
|
|
66
|
+
}
|
|
67
|
+
|
|
15
68
|
.input-group {
|
|
16
|
-
margin-bottom:
|
|
69
|
+
margin-bottom: 1rem;
|
|
17
70
|
display: flex;
|
|
18
71
|
flex-direction: column;
|
|
19
72
|
gap: 0.4rem;
|
|
20
73
|
}
|
|
21
74
|
|
|
22
75
|
.input-group label {
|
|
23
|
-
font-size: 0.
|
|
76
|
+
font-size: 0.92rem;
|
|
24
77
|
font-weight: 500;
|
|
25
78
|
color: var(--ibgib-text-secondary, #a6adc8);
|
|
26
79
|
}
|
|
@@ -50,7 +103,7 @@
|
|
|
50
103
|
}
|
|
51
104
|
|
|
52
105
|
.action-row {
|
|
53
|
-
margin-top:
|
|
106
|
+
margin-top: 1rem;
|
|
54
107
|
}
|
|
55
108
|
|
|
56
109
|
.action-btn {
|
|
@@ -58,7 +111,7 @@
|
|
|
58
111
|
padding: 0.85rem 1.5rem;
|
|
59
112
|
border: none;
|
|
60
113
|
border-radius: 8px;
|
|
61
|
-
background: linear-gradient(135deg, #
|
|
114
|
+
background: linear-gradient(135deg, #89b4fa, #74c7ec);
|
|
62
115
|
color: #11111b;
|
|
63
116
|
font-size: 1rem;
|
|
64
117
|
font-weight: 600;
|
|
@@ -75,6 +128,12 @@
|
|
|
75
128
|
transform: translateY(0);
|
|
76
129
|
}
|
|
77
130
|
|
|
131
|
+
.action-btn:disabled {
|
|
132
|
+
opacity: 0.6;
|
|
133
|
+
cursor: not-allowed;
|
|
134
|
+
transform: none;
|
|
135
|
+
}
|
|
136
|
+
|
|
78
137
|
.status-area {
|
|
79
138
|
margin-top: 1.2rem;
|
|
80
139
|
padding: 1rem;
|
|
@@ -100,34 +159,51 @@
|
|
|
100
159
|
color: #a6e3a1;
|
|
101
160
|
}
|
|
102
161
|
|
|
103
|
-
.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.collapsed {
|
|
108
|
-
display: none !important;
|
|
162
|
+
.status-msg {
|
|
163
|
+
margin: 0;
|
|
164
|
+
line-height: 1.4;
|
|
165
|
+
word-break: break-word;
|
|
109
166
|
}
|
|
110
167
|
|
|
111
168
|
.result-area {
|
|
112
169
|
margin-top: 1.5rem;
|
|
113
|
-
padding: 1.
|
|
114
|
-
|
|
115
|
-
background: rgba(166, 227, 161, 0.1);
|
|
170
|
+
padding: 1.25rem;
|
|
171
|
+
background: rgba(166, 227, 161, 0.08);
|
|
116
172
|
border: 1px solid #a6e3a1;
|
|
173
|
+
border-radius: 8px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.result-area.collapsed {
|
|
177
|
+
display: none;
|
|
117
178
|
}
|
|
118
179
|
|
|
119
180
|
.result-area h3 {
|
|
120
181
|
margin-top: 0;
|
|
182
|
+
margin-bottom: 0.5rem;
|
|
121
183
|
color: #a6e3a1;
|
|
184
|
+
font-size: 1.15rem;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.address-label {
|
|
188
|
+
margin-bottom: 0.25rem;
|
|
189
|
+
font-size: 0.85rem;
|
|
190
|
+
color: var(--ibgib-text-secondary, #a6adc8);
|
|
122
191
|
}
|
|
123
192
|
|
|
124
193
|
.keystone-addr {
|
|
125
194
|
display: block;
|
|
126
|
-
|
|
127
|
-
padding: 0.6rem;
|
|
195
|
+
padding: 0.5rem 0.75rem;
|
|
128
196
|
background: #11111b;
|
|
129
197
|
border-radius: 6px;
|
|
130
198
|
font-family: monospace;
|
|
131
199
|
font-size: 0.85rem;
|
|
132
|
-
color: #
|
|
200
|
+
color: #f9e2af;
|
|
201
|
+
word-break: break-all;
|
|
202
|
+
margin-bottom: 0.75rem;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.warning {
|
|
206
|
+
margin: 0;
|
|
207
|
+
font-size: 0.85rem;
|
|
208
|
+
color: #a6adc8;
|
|
133
209
|
}
|