@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.
Files changed (54) hide show
  1. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  2. package/dist/AUTO-GENERATED-version.mjs +1 -1
  3. package/dist/identity/custodian-delegate-helper.d.mts.map +1 -1
  4. package/dist/identity/custodian-delegate-helper.mjs +20 -3
  5. package/dist/identity/custodian-delegate-helper.mjs.map +1 -1
  6. package/dist/identity/identity-constants.mjs +2 -2
  7. package/dist/identity/identity-constants.mjs.map +1 -1
  8. package/dist/identity/identity-types.d.mts +4 -4
  9. package/dist/identity/identity-types.d.mts.map +1 -1
  10. package/dist/ui/component/identity/add-device/add-device.css +93 -17
  11. package/dist/ui/component/identity/add-device/add-device.d.mts +24 -7
  12. package/dist/ui/component/identity/add-device/add-device.d.mts.map +1 -1
  13. package/dist/ui/component/identity/add-device/add-device.html +97 -23
  14. package/dist/ui/component/identity/add-device/add-device.mjs +492 -184
  15. package/dist/ui/component/identity/add-device/add-device.mjs.map +1 -1
  16. package/dist/ui/component/identity/keystone-creator/keystone-creator.d.mts.map +1 -1
  17. package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs +126 -74
  18. package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs.map +1 -1
  19. package/dist/ui/component/identity/keystone-details/keystone-details.css +1 -1
  20. package/dist/ui/component/identity/keystone-details/keystone-details.d.mts +8 -8
  21. package/dist/ui/component/identity/keystone-details/keystone-details.d.mts.map +1 -1
  22. package/dist/ui/component/identity/keystone-details/keystone-details.html +29 -20
  23. package/dist/ui/component/identity/keystone-details/keystone-details.mjs +51 -51
  24. package/dist/ui/component/identity/keystone-details/keystone-details.mjs.map +1 -1
  25. package/dist/ui/component/identity/remove-device/remove-device.d.mts +1 -1
  26. package/dist/ui/component/identity/remove-device/remove-device.d.mts.map +1 -1
  27. package/dist/ui/component/identity/remove-device/remove-device.html +3 -3
  28. package/dist/ui/component/identity/remove-device/remove-device.mjs +7 -7
  29. package/dist/ui/component/identity/remove-device/remove-device.mjs.map +1 -1
  30. package/dist/util/device-helper.d.mts +30 -0
  31. package/dist/util/device-helper.d.mts.map +1 -0
  32. package/dist/util/device-helper.mjs +90 -0
  33. package/dist/util/device-helper.mjs.map +1 -0
  34. package/dist/util/device-helper.respec.d.mts +2 -0
  35. package/dist/util/device-helper.respec.d.mts.map +1 -0
  36. package/dist/util/device-helper.respec.mjs +83 -0
  37. package/dist/util/device-helper.respec.mjs.map +1 -0
  38. package/package.json +3 -3
  39. package/src/AUTO-GENERATED-version.mts +1 -1
  40. package/src/identity/custodian-delegate-helper.mts +28 -3
  41. package/src/identity/identity-constants.mts +2 -2
  42. package/src/identity/identity-types.mts +4 -4
  43. package/src/ui/component/identity/add-device/add-device.css +93 -17
  44. package/src/ui/component/identity/add-device/add-device.html +97 -23
  45. package/src/ui/component/identity/add-device/add-device.mts +579 -192
  46. package/src/ui/component/identity/keystone-creator/keystone-creator.mts +135 -76
  47. package/src/ui/component/identity/keystone-details/keystone-details.css +1 -1
  48. package/src/ui/component/identity/keystone-details/keystone-details.html +29 -20
  49. package/src/ui/component/identity/keystone-details/keystone-details.mts +57 -57
  50. package/src/ui/component/identity/remove-device/remove-device.html +3 -3
  51. package/src/ui/component/identity/remove-device/remove-device.mts +8 -8
  52. package/src/util/device-helper.mts +104 -0
  53. package/src/util/device-helper.respec.mts +90 -0
  54. 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.inputPassphrase = this.shadowRoot.getElementById('input-passphrase');
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.inputPassphrase.addEventListener('input', () => {
67
- this.elements.inputPassphrase.classList.remove('invalid');
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.inputPassphrase.value.trim();
138
- this.elements.inputPassphrase.value = masterSecret;
137
+ const masterSecret = this.elements.inputPassword.value.trim();
138
+ this.elements.inputPassword.value = masterSecret;
139
139
  if (!masterSecret) {
140
- this.elements.inputPassphrase.classList.add('invalid');
141
- this.setStatus("Please enter your master passphrase.", "error");
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":"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"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=device-helper.respec.d.mts.map
@@ -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.58",
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.72",
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.33"
35
+ "@ibgib/ts-gib": "^0.5.34"
36
36
  },
37
37
  "engines": {
38
38
  "node": ">=19.0.0"
@@ -11,4 +11,4 @@
11
11
  /**
12
12
  * this is the version of this package, auto-updated in the build process
13
13
  */
14
- export const AUTO_GENERATED_VERSION = '0.0.58';
14
+ export const AUTO_GENERATED_VERSION = '0.0.60';
@@ -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
- const existingSecret = localStorage.getItem(key);
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 = `${await getUUID()}-${await getUUID()}-${await getUUID()}-${Date.now()}`;
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 passphrase.
69
- // Different salt per tier ensures independent secrets even with same passphrase.
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 passphrase.
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 passphrase is used for all tiers.
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 passphrase (sovereign path) or server secret (custodial path). */
234
- passphrase: string;
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.5rem;
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: 1.2rem;
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.95rem;
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: 1.5rem;
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, #50fa7b, #40c767);
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
- .hidden {
104
- display: none !important;
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.2rem;
114
- border-radius: 8px;
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
- word-break: break-all;
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: #89b4fa;
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
  }